From 8663ee697e7ef4181eb6e0e3a04a59f69cc183b6 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Mon, 1 Jun 2020 14:40:11 +0200 Subject: [PATCH] chages in AVX512 code generator. Yields small improvement compared to AVX2, BLER performance is still degraded. --- cmake_targets/CMakeLists.txt | 4 +- .../CODING/nrLDPC_decoder/nrLDPC_decoder.c | 10 +- .../CODING/nrLDPC_decoder/nrLDPC_init_mem.h | 2 +- .../nrLDPC_tools/generator_avx2/Makefile | 4 +- .../generator_avx2/cnProc_gen_BG1_avx2.c | 9 +- .../generator_avx2/cnProc_gen_avx2 | Bin 205784 -> 201184 bytes .../nrLDPC_tools/generator_avx512/Makefile | 2 +- .../generator_avx512/cnProc_gen_BG1_avx512.c | 292 +- .../generator_avx512/cnProc_gen_BG2_avx512.c | 5 +- .../generator_avx512/cnProc_gen_avx512 | Bin 205888 -> 43488 bytes .../nrLDPC_tools/generator_avx512/main.c | 5 +- .../nrLDPC_cnProc_BG1_Z104_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z10_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z112_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z11_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z120_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z128_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z12_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z13_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z144_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z14_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z15_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z160_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z16_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z176_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z18_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z192_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z208_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z20_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z224_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z22_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z240_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z24_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z256_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z26_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z288_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z28_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z2_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z30_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z320_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z32_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z352_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z36_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z384_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z3_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z40_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z44_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z48_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z4_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z52_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z56_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z5_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z60_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z64_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z6_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z72_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z7_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z80_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z88_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z8_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z96_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG1_Z9_13_AVX512.c | 3067 ++++++++--------- .../nrLDPC_cnProc_BG2_Z104_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z10_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z112_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z11_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z120_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z128_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z12_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z13_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z144_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z14_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z15_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z160_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z16_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z176_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z18_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z192_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z208_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z20_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z224_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z22_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z240_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z24_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z256_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z26_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z288_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z28_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z2_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z30_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z320_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z32_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z352_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z36_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z384_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z3_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z40_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z44_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z48_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z4_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z52_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z56_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z5_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z60_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z64_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z6_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z72_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z7_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z80_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z88_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z8_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z96_13_AVX512.c | 1 + .../nrLDPC_cnProc_BG2_Z9_13_AVX512.c | 1 + 113 files changed, 76401 insertions(+), 80400 deletions(-) mode change 100644 => 100755 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_avx2 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 1d463e5c746fd4c49d0a36ca10bc7646c83de306..0f56660ba8eefa85a426103f64a464495a7c0566 GIT binary patch literal 201184 zcmeFa37B0)wXnTUcRCYEx--v7hs+@}NeE*CB+x*B5auyqNJ21#KoSH841^#NMZBmW zPKX1@RRI+cR1Ba2XT%8=6&1Mwx%Z-Sy?kE1eD7Q9>^`SYPp8r6|NrOtsqV9@c2%va zRcozUyJ}VK+HYIB?68_bAEhO<+A?w?V_pSRDp`8%Ol-U&5}x$}Op zUbZA%OTKw^%YVQ5yacx<3O-@Y!6`oX+k-m}IPt93H54J z&RH;T*81~itY5cb%VjezTex7xf_XDHT{LrUYPaQ^_wZv*Of}_nY~;@N4dSN^n11q> z*~@z@>VM6ot+h9-95HR-jvwDMUD*6buxdAkoCDg(J-nUx3GKx1-A?>|?ZnS*Cw>|6 zjr=OzKqA`0bB}i7_i86TgAeCQ_66CdjhC$3uz5|k=AwPY~GZeea=OfY|hr4 zyZ)k0tFtw4yky;GykfSMD+OJ-Y4h2aY+iZc+3PlBD_5?)@S+XHn3dV#%Z@nY(3Nv% z&Yd}5>}$&Y@;iCtAN|TKxGf{r^)mJJxXoU<=|#RRpKqq;pLrEG z@dEE9+4E1N`*XaPRL}2B_osO;iJreZ-LLRo(ma1_xHZM!CB^ew)BS$l zOM>S&ru(_x+w|vGrTb~#+vMk$b3f^w`4< z$$RYT{TFAu-$=%n*VK<)l4W0dBLq6JX~ssprfskEYufSqH`bi_=$9xj5$5GHzh=^_ z&(x3IYTTE+%kw|{N-g=Dc0AJb@C%EY3Qsis;FT=^KWN6L?N4rg`OKyry8`~VMfj}; zeqh}=#Ipa1K<>T*M9$n*cMVa6KR+sco3(1~AbM9Y)^)hEt;{>^~Y zkIkOngl`#5SH7sO-|@@jhfO- zkughhiY#cx`?1|4Y{-B8t%U8!W^5M#u=@hicWqZzn|5u#81IH%+b_Y(c5Rnu+-;7# zEqG0Nljk)Ta*BmaY_9O(2TMsenAE#0X+bm8<0k!QVD(D#x3tUP$@g*5CI; z{ryQY>hF4F+s?5Mzf!kj>C<284m?Rao+#`rJn`@|JyP^jk1c(f`0V+$z+ZRb)1vrL zwzQ1QhetinT$eq(yKcuL*DZay{=Tc1+T{BCb`~B<08`2VhLn*@wr0rC5*Z-8bLf{G{{hHbGJqdguN!ymbT-f&3muu>;d3Tv;mwMGN%{YjRYaZLKihn61 zu!6ud1p+4!c%p{DNdz*JPRWx_%ahK?lg=WLzyCb@B_5C0-+%Q| zS&(q(-ddt(mQ}Q*nbWBQ9$%JJA!iFo+6E5W-uefe8ebD1Va(+-+bA zfh2#^@;uY?JTvn=v-3Q238Vt&<#`t5c^2k*_RI4eKp<6mP@ZRTp68G}&yqaPVFZ@s z;#*S`-$zU0Yg9Yp>maIq@!is%`0o3cX7TM=_C&b<>TgIkM5V1KLbm{FOIoLvB~?gk zKaz53eN$0di*-JH-O?nj5C67?KBJ%(Yj3l&Z2zy4Y*Yy9on=WS`AbiVcau~U)Y?n8 zwj-n$1iV68PL6hj^lvYh5b4|8V-8XF#--YlZtPZn&6RBm>2fo^LKz6)Gvt_{Z2s1) z2A(C5r0h8YHyE>UD-`k$}@AqeL2*uf_rS^XK8AUNy z-;ET|f%^XQpHeYxb%g%{qlY7^~>A-6D*=%HdOY@+NP=W zOU6{I?3C8r_L%CdD5I@TxveazqEntvQr;=AE_KQx7A-nuj!5D0mbkPrwtDhEQhO3E z6&>@x%aSTO=F=nL;Q_u35AdV$06zu~@MG}+UycX(ad?2QzythvykWbxpMVGWiFkmY zga`P^cz~aR2l%OYfS-m3`003npMeMXnRp;^79QX$@c>_i2e@M`cpz~D z9^mi61N>j`0KX9r@b}^Y{ysdw-;W3QO?ZIcj0gA!@OBo}P+e;^WYj-b4UPN*IE5M- z)LIQWJU|WY>{t!`^o3MLTWaWUWl0rk=r<&_p@xcBRH&gqL^V{7OB-tFsIm$x)X>JV zqzW~3B1uIx)U!i1G(E~t4HXgXNDV#oe2Fj>{No`k--Pc`&la~Y5A zK8Wx)A1#_y8|%WXx?9u3j_ohvX;#gSX6lYvwKn`Gy5n#As+p2m)j%?<8o;dDi{!AA z{&6>k!>@3;Zo6qEvuY|?1L`n~%+0C;#LL)YBX+m&ODEHU@mgD`{?nepl{z!Ag!w;5*aeoopf#48k)jnZXrQ7>BLkVbBnggLJ)se&*^w3(C$GqW`k5~jKK7PNWz*}V5W{9sA>T`z&3BdIg9>W9tv zRWdS0q01b=7zK|9rY6xZGDg9pbDbBFt0QtvM6SgH;QWYO7m*i4zZbEHQ{UK#_R0!(YvZM+@T}Dz-P}?-2 zCLx_1@Cs=;Iof$fJn-w1?Dd8IF}ABY4%zz^Nku)_t_iiljQ5fe0elHDUZr{TPfimI zyiA}`^Zs85Y&Gx-fwc0Z=`%@?rq7gF(`U+@y;{s%Lm*}DMj&PGPGFTK_au-q_a?B_ zk~Mv%%>4+Y%nbxm<^cqD3N?s8%B<-#W!ChWGLImTGLIsVGLIq9XvvKPQszAgq|6ft zq|B2Dq|8$Yq|DO@Y|U2?Iy9lS5`VX4v~Q{@H=(u=|Ns7Fv-o#tLTzxG)M5p!g+$&R z#kAESeq5GR(IFlrDc9m#!M~`*i-?qI@fIdjC8f-S+5(R$WtCO*jHAnvDtg9Tl8QZ} zT@z~R9lfFqdq>+Q)D|lIgHM-wM}-RCNm8+Qv};10Ztu8>j7X7F?*kMaKfET z^Uk$jGRA54bVcqK0_Pj}5P>9eA0d#SZY7YQZX=MOK0zQseTqPWx`RN1x|2Yv^fLq! z)aM8!sJjUysLvBfP+ugFpzb4(puR*PRr(--1oagH3F;vN32G;S1oa4k1od?S32GOC zRO#ac64bW{B&hEYNKoG+kf5F*kf5F>cXEl_rwaLX^de~A7DJSvE!aNDT-;U zCmvOnRM8V>la%+wt4ckwwcWHho?=-%EoUf~?e)bE{j4PZ6@BsHvZRW>_$iW#eUYBA z8HJb+Zb}(bUwmtnVP9<9YTBYN)|b^-(HG~X8q;tJJMAi3l-F1qPBqyV_aI|fF`4pe z#l-Hl!t7zi#O`$hcMRjTVq*6?2@kuMR!m0or{Dpg6%&Bd@Bq+?3BVb60BFSo;4C}< zv|>_GLMW`50GvZ401o;9(25CwR!ji2VgjHQlZv!r0-zNW0Iiq+XvG9TD<%M1F#*tu z34m5iFx!X+fL2TZF2MspD<%M&@c__@3BaXz0BFUeqRa3A(25DboA3b8iV475@Bq+? z3BVP20BFUeqOEuUXvGBJDm(zRVgjHQ69BE40BFSoKr3dxoYA2ju~pBkemSGXGxCQ& z0gHC+h{ffMyX}@OmNQyBnBE;_wAC%YSe8`LEk8g~-Yu^#b<4Kxh=GXnoN`>+nCH}% zRant6r<5g?`dcz8^d+g-G230vNFDRpA6JsAqj}DykvkElw48CC{q2J!6(5on%NeDP zxy6i^ka5@c47osb3V4W44IZLXi-+iR!$WlH@Q~5&c!*pNyq&wY_ryc;df@@r8xOcW z@PO-s2V7q~;QHYKSC0o=10Hbw@u+qH9&iKkfE$Dd++aN5hTs7=6c4yzc)$(E18xK! z)sDmiZWJDHqw#;9&nTKfSZB`+*CZ^ zrr`m%7anla@mB5HJ_8T9nRvj>!UJwL9&mH;fSZd4+}?P=&BFt3J|5LBzyod{Jm41M z0ky9??d%WA5l!5xlj%NA$Oz1es6-!@}H=B>TRrzoG1vc1E`7`R@y$ zwtD`9Wl0r1|Dz=3bHyuK)>+zaQ`=N{!EFvR*k#|5@)=N8Peq5{r!1+W!;d1V*x~7Z zm$m;S{__voBuhJU#_f?i(WBx?d?!i84$o4BPZC<5GLAy|#pLomcK9pFxNG~Zf5+U+ z#sWM9<~FNf-8>HXkMIEhF&^MQ!2|rKcz{2J z2l&tM0RK52;J?5FiKp=Z|0N#azrq9j*LZ+Gg9rF;@BsfU9^k*j1N>P$z<-Yi63^iQ z{%?4I@5TfCc|5>hzytgbc!0l%2l&6^0sbF&fd3~RNW6px_#g2A{}UeIf5rp+Wjw(D z3lH$W-~s;Mc!0lx2l)TNTUAsyJ&Nk4Y#W79?Wh~{iAn94rpmWbv>11s{ynM>bu+4^ zb@kzA==#NN6diZ{p;1O#+UJ0>qzdgbj-)om9Yri!Ow4mc9CxfL!=;UJ$93OL?Mb*) zsG+;dk}A~D`$#IPp?23V)3{@Ol;MP+h-gRSj{p5m37HBtG(OdsCIl7hmnAjyIn~f# zE#qD9d+D#QzWSwShri-ZZtqz&CfX-88ru|}d_LL0e6<71&QHEwqEl&ab6V*7pR%M10eXg{ zT!6~#^F>VB5TJZQDJ|QZP##rQUxoZ^EK918pA$(c%1{3e?eo*4j53OKBtH**t3;Oy z`S~45#mCry`fHrc<&QD?NAWTCZRO{|<}z6SCR|+q-uB|gHIFU5p$4PQ(toM-`rd9{ z-(TnT=I&l^>EZQ5J-vRUm)Bc+d%bNBub=4S^;3Pl-qFwNo%LQn)8O@U1H9fn$m{2a zc>UrqulJ4c`lV4`9~|TLD~(M7+om0F%GTrOfXM5c>&+Fq0y?#rB%F^#F_WC{d zg)V(!xz{I8@%p1xUVn1F*QYjm{ke9RrB845`l}nfK69(r-`?%@*_~dWd&2APXS}}f zlGhhA%vwwTLtE+6mlk{d(<-koZ!J8w^luP1`@@3kmj12j=KA}WEWH6addRpPkL~`% zuUT+!D`8&Z)!*0v|F^kUd_Ap=fAi6JKkeX?58m}; zZF{uPwC^9byx@y|r=NN783&(v@L311eDsDjGxPj^eiY^5yMe7=1x)32b}2Xt{0H4u zw9VE%`F)z-A1Q1S`sE;gr}9g$8dg-`OzcMT{v`5m?N!KXyVZ5?(X&_YfrYvOJ?m;} z3f+LsYV&{vsME4Bqk8Pot6R@LJ$v-&-Di*9J$m=<+oR_med@aVY80-|9^LBdD6Fow zJC18zcS`PFTU%^qUANk{Tun`l81(GjeNZnd&3g9m3UO*`h79dpSJ$sc-|jtoHT3G! zuc4+}x9;70Qh49G9^LC|YHPctKXA7GX}peFsOeT)Al4R?x%8rIuR>jI56$jmD@$t* z7HS8#olwj%37_}v3pJER#weoLQ{!y}5KKT3c5OY}ec(vM+^K%lMte?^=GJ zAk|3Y|jA=`Qpg>K{b*{&AeIVxLOCEDsVe=@&)317(XUc$Qqb}LnG?M-+czl$QS z?7C>{;_MLcKWgi-*>Ty)TTkD5c6RR8^U88`7^L?4twXYrTPJRvlkH7Sg{=G5i3yh+ z4xF+ke#en|I={92uHyF|ejg|PetzHK_bk7<*FYcpi!Y`lT;Py+klMP1u)O#%X=QG! z{n3@R3H;m}1MfO;`(_7hJurhxTMx~aZapk(+Ij@Eg4gZ1ky}S?9h;5YIwhO7b+2s3 zR-WS2*b5E~&W2UOAfz3-%KVl0Z|lT$Sa=nQmGyP?z7zC1O`fxNHh1rA;l9}s>({Sd zd-nRq6^#?mLzZXG!>(;N{H0$h3FPl4S!zIg>EI)MRxf_;Wa?!af z4>^49%F`yEw{qg9l?R`6%G{afW^c?6J$u83i#9i&d&%mvH?MBY#;@CO?)oj~t!_ME z)8_Mdy?^HU2lXzCTzBDxMDpH$il_0HUbODK#tv(l0>HwRo2NAf5{GPAGrd*Jiq)H@ zHom!cmd+1Yw_)w{#&s>4H*1#ouimt&aqT4+ZQ0oP#&w&|Z``}_kYhI4jdhI`Zsp1g z=gwcSuJQ5DL*_SO_wqpMTS^?H*2I3BETzR1dtlYGE z^PH8dH?CVaWy-ndpMA;HIaAw)i!wWao4ZefEU$0PMVB;6oyK(s&fb6B0Ta*Lf8AaO z&P{~K%JUhv9h5$0O0i+nrZ$sv>gf~D+iTsKZR16w%UiQw9F!YPUHMN+mbq#Zi8hp)^lLpN&+-)5$@tUg%NPJL|=RA~&F zmhrQha;Zt6V}a#ZytQ}MrkKtv7t$f#a|!4y*_?>ef;+N_^nJgbT))4%i3nJvjI?N<#(3eW~E(->O|;qJmSg@&5NH5+Sgt$Cs*tDRlDsy3@C&+ID7v9`|Y z3XD3&C&#)Yobx;{W$m}Cl&7)XwwLEw-VS|Q=GodN4J-59-3Fao=Xs`3$&0q~G*s}b z?L3QH@U*==8_W3Kex6&KWuv1!Pt=6`betzkGS*q1*~sB*bFa^TuwcJ#zkc0*{kr}7 zb^CQ^6P}9nSj}*$jJ2hteo_1>Y)r2d-UHv|J7Z$KG0$H|OiiXSs!vKCl({NCEE~c# z^4F!)lY6GrzUk!V$Ui0aZ;ABdTj4x=5Nts(r* z%q6Plv+r{KaEe)0Fs7vonlvxu(N1G5CJ(jDUwP-Lx+R(#iWuoyovTeH6rgvw+7zd4)#SZDXd?HVXr$6s~udFkErK+$Ijwj!qOTV<^W_1AG#R=QJfH(+ZCt2eNHxQcmie!VEEPYQPgnWy!mgg*TB08R<*#h<4z?~$mH=W5TFVpY5y! zHG_JhvaXt}e`la6y_VVsPljsEus1HuHZNWmKd8<}%)CWP41`|AVt7jCADxO#V7|tJw5%D0Mf1`SI}o zblPwbb+5{fsgnOqz_#SSTWPB0|LNJgv#rp6MfUz?{+|K=-`*wuf1I(}JE=40|J&({ zw`Cvby!qKDQ~&=}c2BmOEk0|rI}`suM*r_B|EHAke?R!qtHlPiT{^ppUd9SCH_AJ|L>sx z-N2tN=YQOFjKk^KqQdM#V_`*hSmDL&-&6nZQwaV$BJa!%&km#I_P_J9Gm8E1knBxe zqW@jl#mHL?GHCyMU$z?hT~=lPdor6=Xv}^KOiur2v)P4B**B`B|8O?JeV97m2mViI zI|$#DJp%skBYb;jjVJw)tZyOkf20Ne3kyH5N`F{IX`~;a7|)ijX;M_o)pm|T5z|O5 zm02pIqm)wlc{#=6s`m1^lJJhcy!V&Sry?fC>X8;8hr z@VBh4wbbs6A;;O0oYR}?$Ta5Twn;ei zIl_$6^I1y*>C(lrEYrE8a{#e(HsidqF4YjlIUaUKXMN@~H6To}oq>@ldB~AaSS6wk zv5b(Vi@$Kr8m-k*&EIwBXuBLTW*0Qw_nh;E*Yn*poEp z@U}-PJDL%9Z9T>Z#jQ_{nBTnB&G}QM#f#h%I{0c!EK%Qj#ow@_X)R2q_9pC{&)7cX zaP)6(+Zi(`aoK~o8q&qoe2&hYBPlh?iWURg+J|)M&>aX{*i|Q$`!H^ozIFJ0Db2d~ zpzPk%+Jlg3#+a*H8sTYgutm<^rK~M;CT_3ji*Gx6@Yg%VMsMno$}RxmJV9BJpBZ=J z;Ji)P*W#2)=@(^6N2Me5N$8u9O(iz8pRtiAa+#9D6T}(sHP06s##|8++K_+d%kvU= z4K8|bXfvf=T#O4Hq}1E@q?bQs*OaK=yyiAV$ul+Dsr(70Y#I|O)b3lXRhu^a+DqODtq>F`(N16#MoBbvuv$aF?)=Xue?ho zvIi>J-3U8Jwq7w7TXB?rQo{a{hwLS` zI@d=^zWvG?!e(Vpu}#)$spjvxtJMG6pzK#_#|D0(B}?T-FYB4oj4e+W`;dc@EQD;x z52ZcyzwHPY`adk~dCp=|6`po8tv&s~qCYek3=JCisS6vpS2s!LzT_(q(~u~r&8QD> zgQ!6}r}O{N|K{pJO6dQA!0o|ZuKx#6s(Nf7^=aYj%e~gK(Eojb>Z%(+S>3=|y%=(u z>wh(AuKx#MjmY)?P{Q4qWe=o9>i?nO8~VQiY%HZG<*9?~NgteArZ4;uQtSEaPRsl7 z>xcD2OXCn?hH>9@`VWV0BcVeLWw>e~ZT3j@7bsg?_n`b9DaKp_nI~AcGiF~4De3=_ z`*1gaItEh4D6aO@;nY%}_-Wr&{|};`VdU~v)vh{wr0tf5_D1`l zy3nxNMd>j;o4y6VJQ8P->u z`J7b(Lf5Hf91Dm;XvqS1y@>NEt=HVERD*o>J-r zX9IcdcLF`hOC5H&X8$WMK@~8LZ;= zLF0w~A3>;rR7=VA|5VZkW81G|bzv62k*qV1!nQw^S_W}Hh}?VAuDytFq_s1X6n2dR zq5t;+ejc`C=|7P2_l8P^Y@cjCxb8vSq5sXL{+|n8`?Ah3l6Hjt9}7nNl5-9??T38q zgN)4sb~xCN0K4&|^dLq3KZ#gg+aq=?E#u3m{0&O07q3nKI}ft=IeJu!_=F7o?}$pR z)Q|Lh9;H51->T`=sE!6|`KiNl{qJ1MQE4|yGOezdOKs*z#OJRoCCYp~IW1fLZ&_V+ zq5suCj%PyuTh9RWhPtmmVV}V2*@0lv7kLT&Ka`gALOvW#b|>AG(Eo#gY^ne4tLiE7 zbd=GZ`-W7KGn&DqgpPQv`rp+ipZ`NByEh^A|5)z!L|*rVyXyZjV5qc@B7P9HPa@Ai z`eqL#Y9#6E|4HPuw~hdM5Uo}J4@2s@k!GJ&6O5!pZI$Z(ail0iu3q#=<#v_+^C`W6 zyzfcfds0TO{}<32_5URB&5+*()G(E}0Z8&xe(L`jKn$jLl=S~}QsyJ`>i;>whyI@f zmQr{Ett;36W4MzFG5+5tL39;=U$Q+Apz^h*`Sd^D;7mN72c|Qc3!T7S#(IhFAZQw{ zQvXi?+X>)2p_ra)^{KRWGPNB<3rqUn+B52y42^sdxoa-;|AFb5c|0<3GT&xD0LsnE zmf@@akLC5@?pzOoPmcdX|1TsZ^#9RF^%C-`|L3Ah4uy;L*^%&}T>sApWA(p$JvPbG zOli<*Va<2bZWs8xnqu`w@mg@gg zz%caxBI3>@{fO)=S~e*=m)}VC4UHo9OwtBrr|~-j$vqBjdLAoB!?JTy|Lz+7hqK}` zk`fwO!#?P5HkmQ!a~f0WfV>ib&#F#d+( z=lXviOzpMl|E8k; z-&WRa^?y@4`u{ZYh5o+=48om@*HjEU{$CHa6QK6`VqC8OFNV&Ov+Zr_|1G3k@f!61 z`EYnGtA%T_v$KC?74oj6|IcGR^Ak|*&G6({))dwM?}tz4gY)Itso7RmYD52@0ta&a ze-YB7{$ELnx3M0)5t+%y|MSsL7X!BdO?o^0o&bH0r@jT~Q1$;R{%+^jRaYAScc%ZZ z2mfo6{=Wjwe*o!u9GO!8f1LJRm0eBSc7p!};Qdx4u{&$9cd)L%E4whe9;~m=wjp1m zhz}kl}%B25~Y}WrxXuhtx{@~UpY0Hsl$&&s*7YSIC-2yJ5|KCoY z?eKRfKlSvr*+*zkx&Gfy@B0Wncnh*|2qTbpmg)bu&^OM_K152c|K0Bp`v0w<9QuC^ zveZ?V>;Hd2zwC+J?qvVW3a-CG_c;FlUef>H&OVjhO`qL^emW=n0lx>c&!U&q|39TY zK6URvntzo23<-LYUb`Q?s9gVF1Fhf7zKG-KEtin;X8P+G_DH;+exd%q1nu)NYV4|O zq6d8!pn(M;Z%E+Zpr1XJJ(TtjIsX4@iuLkEFuoz}BWJu+$o2o9Ny+v92MPa;)|Tu4 zPYQ}F6h6sOLW2vA|33@wZlmlh)t78HCdKT3GFJ~{JSuSE9%arWT$o0^|ih}z8QF`VN z(uiVyHnDIqJ6m%7|06gY`oB-%D;y%#P-rOJ&NVf(3l}x`(DXz-3EjSu{#XNt+tNSo zX1F>U{qs@iz6L!%3E3RL zb4C4gaXb3wz3h9t963J|nZ6o*qW<|>(myvQ{c{)30!KCLc&^`)U59*sJn5gy==ml6 zvku%t|E#0;-|-ss&pp}y;Yri4p#9-=c={wyu`lyvsx5^6c{Y0iZ8JBUT-bmF%qtAd z<`vXGQwkr+zQA9MKYz!FN&RzBA=f|kh0s5rM^Em|-a_xMEgVn?{qq9Pi?<{FKTG4! z(S=))y(g%1O;&m2TIYha7_BxGIo+C_M4w%m{W8hV$B>oV>0`H}MX%#IdLvZ(Gkg7B zM1Jl;uD?vmH=wPlpM|m?<~e+4wi#V?Z<3$SpaG^bg8Dx4rW7Ou?(6nuVVg|YBsVWD?naP|}OH5Tq5 zr6qQq-w6;vu`(2Q5stJ{eCgh}Jl;C;5?a@1F0BChU+gn5e@*&%6<$Bj6RCMho^C0v zofbcHx{8s9wL|1<@wKGI9)_sV60Aq(x~Z_{F~)qAu3L(T6!V$O)u`@-ToVfmhgP`Q zYml;}_`t|L3gQ)QYrQ^ZIj$l`3!){i;OTNaBW!(n8zMboOw|Q;5iVWx{Tc2^=}8IN ze8bA4t#{3bt)1n#56AZvv>69gwdZP63a+@$Z#`O! zV--DinMF(cq!eokYLwUEnw@{H3;P%Ao0j2z2iL#CqODE9w0HwZi?n$y&$YdN;GxyG zZ+X!v9DENc2=058@^UtK8k7xg$j{h!5|k}TkQ}g_mM%)l`5)AY5`wk4|&zvxdJLzgw0n&-ER?m4QZ7N!UlGh6D3JQVWpfgZOMPEhq->>`l-3y8zQ$W z<=<6QbNMGF+*7azzmR`%a9yF&xkp}`ly43yBl@mR7^}?c>y$EAQUf2;O)(~St;;q= z$?-Zk)!zV2F8|KzeQQQayV9X`HCDEje^)16!F5fdUy65C%JE*Mb6vM2|613C3i-EI zMzh?!xrafMvIDqHFs<KJO>CSZ; z@etN^Giz;2{$0(s6uCc)pKq^@;IBLJuHH8QD~GLnSjsh+Qk8%AybR~ppVR@V4)?%R zx{!*H|51#~l>gC`5c2OjcC1eLo>0iYGMKM9hx~_B_8~`Wr~JF_wHGZM!^l<(aZh4~ zq_$|2cOQ%Is<_tU+qkY!X>lJ0orWj3D*vtyDNR~O zmH+9C({uT^4s*_={Jm4k7;tRO-zl_8`QINpY74I8H;-~=L!%mInR|lcOq#8wV|SbgJQ$(0amy$*T;7{5Md(+DMClyPVt?6}t_DP{Le;EwsVm$?&E>H7J{t z$?MpDB;~p;s{E@Jlz%0+57cli&pY3`t0m_|@{b~?^6!djrE>+_9TPp7^AF>fLHz~% zbtirxR-p#C*2tf>^m!?l@;{dHXEN(h{@ouC^6$ENrK_i`=)rTc#o(g+A6%6GnaoOZ z`JYJ{bGe&E{*wI9g~M5qDs9XEENC$VsFP`%Yfwi)FIVP=P)o*qtH5mSaO|J^GlyNl z?4moqvblozeQ5Ddr|?Un94<_3%S^9{M9q4UA~Hj;Bac!vC+fW`Cxcz-;x#?)acQvc5) zukwE)^zFyYv^Vv)mVY&m^6xBuIM@wK`bznC7uyhG`y(aFzq{7@a8*J_!eQlq5aqj% zMm^=TS@~+|gc?LIEg&b#|F|TVCHWsgP2;dy^rYq~3zC^fB0Ux*>Tzk+KWg zkpGjh9Ebd04)ht+*cYpq`u{k3kn0%dCY&y1#`h*dA^&HmxL(AR*a@%{NIQrUHkW0_?w}&^8aom?KmtK{fJloFKnZRO8LJL zd;OQ1<^Qel{Z=4v$D*eEe+^lA6LPbJJh}YeM~&|#Wejun*7E-}6uh55EfwED_8(vl zzmYlgdTao1!lHf)^Zg63>wPr)HnBCt)MdW_^LJ3^!L;rD*ypaK1z*Q<`BWS7uSV+u zj}Ji7_eD|`!s7|x-;2EaCi$O3-wXM7$I`yYlJdU@n$|)|-?dc!8~NLdHdH$0e+lwG z2Q8ueABR-bBcY-H4?;5bCGHgJZEBYP!@yuJmaxIpwSx4Mll<>by=}|?+1RZXvqEt! zExjJQ@r~IvMftxBO3c8vvJEMmf}Lsu=xw6ZcM-Y@>!SMqo#6L&THG5MzPu8BaJvQE z9!v7SGs*uafK~pVq|^^5`G1^M4`H7Mi=Sa_T|}+Buu06#9xlrNgTUVppWf1{{C~rC z^#LrujCTr)vG0WZ--NIHYsW3gfA2yr|9`}adjmY`T~PjSOLpI9+mOyI+o$jl*sA|S z{{IIn*t6M~!Um+HXW>q2T~_#S?4Qd2X@&oT{2x`=j1{S-@G`AvEGYjEA^+b=^8X06 zwRAqUa{0L&$-FGd&pIIXgCZv(RUto3)PEsTo6FDJlKgCLmY-Ege$HxHICqyP`MHXf zq%RY?0PEMkVCVgKlAkrK7v%DDGn}{<3EYIe@l$YmE>^F>wCeNJcz;oT&TdD33ViHg zaWGLz_^CJD*{`Em@$g_|y>2nL*y)k2EA_L$~Y?PzQw(bi(ky3;~Lh2Qdki0T9KkfS*082K<2JVQTbgyTemDz zjE^+4MN9(dqHZt$S zdSxy{j8*etrc2N>QZcup)}Mc z5YDzZo)3C%r(E=A~ihRQ|PHgam50GDq0PY>_j{c-trBs#cb~6k3(0-oP|E4upYm-@b@E@&7)pxv2WB|q^g-Oo3CBORJRRMIt1HR> zFfbTSoz4Y2cl{ZEh5V056c>6lb>;GJDejDHpiJd|2^Hr|fao*uR@EoE9Gl`y5Ndin1IoqN&dkbf-? zT5)~zMO%edna~X(|GvxR8)nX>tCLUZ?|Uxp$Q(||%D+4wM#;Xh;z>|Lll+gMK11%r z>qlzXusWmBaK_Hczw<=xA0hvvn2&`1&*k48gTA%VNbQ3e*ZQ_qHBQUe_yk$cJaj6U zO@Rg@p^WlB4l1~>(%m%5zcoyzMU7xp9sW~+3Hf*T_8`WzA^+MXMl<$l;HN#YrTp&= zO|@!u?)o!2SN~&~EO?cax_!pp% zPFtArug1|p7@TpuMA+Px_Mo*Ags zQ%aP}zjis_c^QoF8++O|JO|0sr@A8lW2nPj{`0|3`JWBGo<%i~`C`cbR4{Od^WI3< zOh&f-NUctOO7cGg3&Mg2bkPKW$20gru?{4Z{oCglmW%#3pRKN{@z zV?I3__ytAz-v{|!!U%dYa+8K1Lz?A(Ws?6>DWMxPhx4Gy24?mvll*U@?j~9@fEF&Nmg?kx z6qxu_RsNL|pH}X9_W4yHq#K)Je8Q?EdE& z$o~{VV~Cx_FPDGMcN^V7sih?4e<|ErO34}4pZ(DYvyhrzaQFbiN5Sm_@k{c*4118f zruHrs(m|*{77FG6G$=Zsng1f{IUm{&gTn*ifbxGVGpkADQ~uAUt!v@WUU0t}r~I39 z1hgoZ|MQqFPKGvbPV&E=I!|Nno*}Es|GCt;xSHa@?k>tuudhWur!u?#Op^cWv6$2| zL)`}n`cQ@ZpH5qkVP{Y^?mgJ|)c>C?%Kx{x+enGuW}oPB>`-gqcNM!*J_<+ACtt|_ z_u+N*^8X-qmC0a!6Be)=uzdXh`o4uSpGN+l!#1{(+CRn2SNXrb%ksY`rTA2wj?7Pk z9*s!*_RU7huRg(X8Nb4|odlT}1PL=p8|JN7g|C7klU08t5 zXK(Pe>@9M?vhx2mIP!i@dQ$#>fK6g8ys1|HKaB}myUG7l2Ig_2&*{*GPe zOW7WUo1nV#|3da3q%Fa^@=f+ibyfcF2CKhgy*s3EM&TLs|Ml#1tY=rzzZK=*9n5z_ z`Mcrt9);@V{|qSE2scaev#KaR$6$dQOIjngo{*mlXvtBuMEO}=CH;Gm^JuVDer|+1 z%FkQi$>*@555UfO5jCGmA3O&x%*C#>5B9vGQtSzgD3OZl`~JFVW}LB7JVBg)fxR=l9fA zjmzotN9c2W;X&+gHQ51$0R`#vWOj7nBKEzX%D%rn3vVmT%}y^!pK}WKufBz9%GY8M zmYE0%lgH%nK0(7?pv@re^4wuJFwVJ?)+a3hhQfty!C6??2f{`b=MY2=OL8n2wkvaK z;|Pn9GaP5b{!DQ-)!f?iWBlk!y>Ia6ClELaaYp7yPA6vZeu`rNTNb$He%^jdw=CnW zJ;M2XFxu}7GUj<=e$50l{Pl#yU}L%!f2JUoz7CV6xjZJ^yJ%No-u3thmqoG&+c<5wciy( zM`fNGYx`sWg(C)?C)568(2hqoxBob_ z+Ic*8ZU4dWVl5@@3k8~*`EUC-HMjpX>OX+?AHX|Ax>EZ+;baJy_2cQ`Nhgk}g8!xV z&!YX)Y0u0S?VktcbNM?49XA#J`#z>)JDu&{pZ1?b`~ zt^bXUMk*wPMFYgi9 z{u_$&{|n^*DxT{9!y4Tog_VWLg-`KpT0!2O3Eo`=>#6k+_7AL0_#Xo$-a?CW{)zt@ z?t4Nx@&5{KyPlQ5O$lE7Clthg&%#0MRsJR`RC^Tm;thmh1v7k?@?WIQ)$p%=aw@|ALchrqU>bOzpU!R6Nh(SuOv4n)#H-pVI9B6Yc7Q^cGv6>{F}{c$>eX1--DMj5kDYt21j!3WDeNEU2=$bf z^WU+N-!_Sp>$E~@_3WJgj%kAbo`dAr#MOxY(9n~YLdSN5M9(zZ(OT~A;}O8RU&@h? z{l9Y?kng9M%lG#809xyI@P8;;xpR1F@94z$LFYob**p*B|0E=Ha#j5IyocbwmaIl# zMsl6UuPgkIbMWM(3tYe&gl%Ck#5fa)s(XiOUJ43{|GR@kWw$`6n;69=6q{7Z;GA9 zzOLZ^)lkLr2|DNhrPvyez;*4>EY2Q`HDCGSAI6G|IlQx@i zXY~J1!2i#73{2`{SW1Hb--G|ZO#J^o?+FM0zuPJNK4_UCXHk-G!aGA%zWm0(&?5<6ve_f&bsLSq1U` zO*`^anr*ZuucOCs<>8B|IF}LHCl^WI$Pv>ba7r>+fU%!5@stZ%hy(w+sE2!f278nKCTV4ZhxFX z?0ll*_Pe*CUrXeB!r#47uRV|%k6vxTFuVwoyTi`x;&s&W4d+K9L=hMO&kE3ndANQp^Q_}cF{zv;O zHK^@(SMc;S*B{?T`yI#Zg%-8_;}{24x>EbKM^=uo<8)m|U$%c>JMAA!`^TVp>smdb z$MHPq#&g%Vj%vViTt)Q@xOe~d2%fyQ-}`cR0$O_rPqEpw-?h*s<%xus6x+Xwr{!ww zO_lsVkZ1T{bc*d~zig}aH-Md||H*&nM`494RpN;}j^rn2jr1`cOX!hWW}vSjQ!Zr{%=;K+y1{bxBt0T?LVU+{}-~xCI9zhmv>9IG2wqa7Ox4^e=%dO zmTnX4E}tyoe>eEw*)o}((Bl7ZoUgEf6_o#Kg@2U)L(2aI<^Qo&`Fj`g@}J2z7Fw5I zQC;y?O&fptvqL@YFTc-25nsw3@sT%A%VA0-=FpLnmtE;cDdsJ?QW=J{-h^+CcmkGc zQx}@WCrwTzZC+X*!-<1y6#ioOU$o0SK7ZZeXpA{>OQkrsblR}AM(Kp}nU;?(jMeI8 zyNrwRhP2D)?fLFop~WfrHj1I*v=wdtKEofy)iiY(0 z_G0@ksHgQecx_p+%4LhCtfxb2XY?INao6S|_EOZbjQGY5?BJ&*+AecQYg^!s;uwv& zvS)jxevFT#cC;X_BsROy1@g^uLL->V7W(rVvLZI-kqgH87n(*o_K zLt3M~WJtB?mz*UkMV6uDMGuU1-I_ttutWm5`3X16$!)+V-f9^q*tAj`g4W_wB=>|LjHaZC&+5x&HHg+LHeB z+-uM8j-CDG`mYZ)N_ktE>!F;pt?6g)%=Mr2u&34or@rv)f?WSaZv?s(^2X|V@OL*rbXFy~?P_U-Aw87w-u8 z*09bU)uI2q7vE@4-=aOpH~!^XN&m$xO8nGaz71d-oa;!rehEv0ZMZn=yeE(&;GE}_ zOSO{z^UQ}4wA$UtBT4m(A)ca8Pplfpud@#0KJ?!Z;(e~VJKmJo>);LzPmL|iA!XAvOEZU3l|Oxh@0REjLcOCDyJq7U!&$KX zT^mK{8=vj*^oz2h&$`ZL8KG_3!Y^M%aIRR=f1xvCkBhrb-xxR8PswuS!<|3<$TJWLwSUE1A%3seZ+M8K@@ffE+mpoyB9VTfLwu!x zF0Lt9y!g(6(&Mgtcelj&&mP(>!Kw#bKT`YoCdFv3x&9kTP0{kOackd~d$yvb{&U?+ zX^T@Va{cEC`O1;d?cq0uIl7WFhP+}ro*E|-_6+h#v~w(YxyIm{S^;Z=r=U!st})~d z{pY!-zFVQ?Aq`1>PP*6fqVxR%spMBNLjSoB-SxP+_!;X9=P#dbN_|JnF{R-irUE0e%*FJk>R@C+nQ z{pUWqUX+mQzbVu*0%%L{t1Ny|W*}1N=|LH#_`j09O6y$;oQEX-M>e zw5(kJ?Z>+9XsmWM;O`#7MPN8R(Ky$C`%;oUdjkA+{O6rxmzMfZ=tAm|Qz=FLH=$kp z#<2ftE^YOTJN7)k@i39Fd+1C0Z*Ov`|Bk_;75eW;pbn(u0uW=^b$1jwCiBLE-)mO? z&8GzQ-|@svWQB1Gn5h4bCGIFF=l6R4QT?}!vSJ+2nf^PTe6C05`tM}!OZx9btfe|n z+Rw7Z;Aamk>Ayq3wLRylB}<{%8(6K&_20Ur|5j6i-<{}5%3jdn3|3eVDeAvfSVPS)75|O!91BCZrwrPHj3XMaQ0m#ze}S%*%P1aHSr}KWvpMy=ib>EZ-)MJ2detd(SrI< zYkYj4tCpPZqNoRMB=J6ZV*DTlTlbHFV zPW^WvCC!H)q5q~Kc1nYO>V3t_nF9(`tN)o z4hECK#2kji`F)e4i~4U3GIx#G}8AGRwmA*1&84GVsG$q;By2p z+gUf6OzvLfeK$S(3aEcM*!ncSyj}bp|6L7rO5?w`&`NuUrw%yyI*H>xX@7Tqw{=0&encqOW zYuL+i6K|NEK-!D&KlI;&(B(6fzluDe|Gt~_-&5rJY771M_N4!A=Z&Ke(Avi-Dc64= zhn{~x|2+jSKEqoo8Sk+DqFws=G@XXr)IsrCaA!|2*f;4vzb7yVN$NpNN&oGidbQs| zaCNFDlC7Q`LS9D}o<%nUjTicFTv7jxgW~S_nGZL|ld~^+*>BD45AD@|#)syMYdIzT zYD-_Jr0@QFzcHl#vtLbzY9~_mVsKRd9Sr8`zoVd?XVWbPd-dOdV8X?9AxK{+J8c=RKc3(!_eoxD_RN8PtoqD*w5vgS?a&Xp=urB7dp^?lL|-kRRHzhZ;+4Be?Nx1 zNAeE9%)(IKW$RPO^7zV}D2goyz|HW75jzd~h05 zcz`#?3Wc|FveRr@yAA4=^xsU*K))P%bgcj0ME|{jd`r>77omaAfiC+Z#bbE~!Tx(5 z(zPY^-?NY|&jCFj$=t**`tJtx_evyc5i6>bX=N{-C;hV-%V}w-)n)n2bp;%<=+d3qW@mUZn_VkyRJ+9cNOn#-U`1j zq(?1+PyN|-cO@8pGWFm0f!De0o*G2kZ=;v^?XgRs-+E;Ey3~K)L7d|k*T4G$)qek- zRak<=)x)J8oWft~zjeHU@r~>yu!`}^c69h%R{04zRd-(menZN&;`1@O^ z{Q&&^Xbb+npZ@zR_`5Cf_xDKQ@7Y^;Pud0WbmH&V5`X`a_QQL>8+LFFrO*F{ zRz5@@|F6W~S9#~;z|!exRQ1M)rFry*Ata3 zt+U0krmNL1-oOc}R$D@zFZKb5PxbWEejh7du8CQK_AqHsozrgTDy&>^6+Gx)efx#g zQl@Px-m{egTF$C-u3c+Ik2Sim_Pd5ty_18&`R0H!;8;z&LUqpfOY<}(_x}?A z_e}Pt0;9{B%=4;sW0-@<|7l>c=r!9%uzh; zx>~1YWg06&qZ#vg)=vX7hXY;nJKVN|y`@&9Q0|7ncyM>6NF+_l<% zYvwSH8p*gg_?z)ei&|km20(b4r6@ze`D(ZXEDP&khjRI=l`Qc{(qC1l>EQ9i~Rpp_H2>= zzkqum!sey^*X~xGTaf+#oBxi~OEZ_4zXav-*vMgAKCj7P^eZ7sae3~@Q7RSkU z<1x$gFP~jFQ!3S#hb=gA88S}}>7CGdoauRKIdu3@s_C6OXFU1L%euUe8cO>Sqn^kY z_(ZrI`+#)@By`{v*hZPokV<8n`=9H?#dgG><-5LQTZBgxxV>Zu92taV}+C zS6s{*tvi;Gyw<)E?m?!ETU`i!sEIb(JQmUGyc$+}A| zZ>O=&1)O7>FY<_Oj!E9KfN=I{&X~h{6>H=28e$KevDG6QrwjH)R`iE_Cj_)4c>gV@yzJZjm%}SJe?4*{mWsGxYsp*_q3xIXner*9#No<0L zA-h^g0w-|`emm>+&bG-1*LSORp5P^v>tODg6C-O^@&gY!Vyw7{xjc#;!0s?~)*Djl zu3_soF3NBwTI#>j&r+(N-Aa+(2@`j(i=CL+8^j=bt#jVkwb+N;QbF8v%^^j#j@Y)K zzqol;iYtF{6?@}+=hD^~uGZOhB}L0coMYxLV9(#OKDjC{Q ztMpl;+|}7ut*Y(_jkaoah*0djs=j~t{WMo*EYrQ5&V_URC&umw2wh`7_jiex9E$y7 z>c8lj(kS$wb_nHDJCLW!$r-8OZY^cd{MEYHkL)h=kT~bY4U`&E7`x{^wZt86?)CJ& zQuo1GXB|*VYV6jQ=GwS?r?e(rwO7TNv)X*rqV{}urTz2upS3DK?jv=#wfo9K|G6(N ztWWOOww=B=>bKL}S?6~U)d_~A-9UWz=vC`H4@4RF^t;$U>uzlKe!7cRnhs8QD0fmP z^q=#OL8K{h0|}M%pZMh`)QOAVVRUz{SbOq$d^4~s`p-R+gMd~4X$kdvW}ZbH`p;14 zKfmawwPOIeVt=pi*s6PMhdsGm|5-*au!+6!exuMcuRWK?*y`t3{VBm#4yWe$7M{IQ zsq&k0{@mxTG`e#~3z8J~TZS=aa?g)_r9U}@=?ex!v2TUui<9HEU;3r+;aq*=z;Lxr z{pS}ALjU=#Om{E2|0>siL%=28h0sRWz`h-AmhSd%09$3l-PWQ1+`G5iorUhlR^I$xqigO$Xw7)) z)pD<{^L$6&ZJ7WT6Tv3*-=4&bBXJ$yHS!STu#N$_1|c)bibVXZxSU` z>%?d>HB3XM+)3yunM0t&VCoqSuI@Bf|BWEl)6)GeWnZwIM7z{~_Oa2?Tr|r_TEw&pGs)(0}gdYb3AwZyfs*JpHRL`DgGqh5H4hxt}!Ge+!7~%U+<7)HMx^ zyQ2SmuRw{IjAhQRSE~Q^PdE?fei{@TKOkp zZwwq&|LqM=8nCy{q}+YD&VWC@QBbYh8*VP5l#>3NN!@e7c_8?z|7KBC=s$O$`Q4hS zV7(W0dy0mVI)(OmR)sM=2zw6iT%gr|?qWA?FLEwI{@gXaunX%G)3An*V?`m?e@ke& z`p>hD4uEFv6Ymbkhq1$EF4tWD`JLVv{|!(3&OBGuyn92f{lVZcTA}`12$p-X2ghA@ zq5lq}hJU{PTL>28SeqEY9`q%&<|y!;2`$xieo-^me@8_sw?qGVPM3R5r$gaf|II?$jv+?nGKwIhi=la{Oh{1WO()UW*1Jawu6 z+}&B78%+<(_1_j&H|l^5{kItT3H^5r7=->i8=OzzU4*{ysignbu~$s}CpQnE6;1U0 z(`bwO@1mstHnV=E{=0zGrR3RA9dhK#_1_s#egqOYlop=D`dLZ;T|}+|)HsW}X3-M{ zQO7iJ+yh#v|Lg^mh@TGMRzvqS=)V(-`fml8g#LR2IdlDY8FZ-Dh5ow^33gBZ>F{|B zt!!ius`}4;*KdRlq5s~Lts-p{d*qH{J!%^AbSi1X*<*Yq65NP{s{c-57ur^Kl})9W z9|w0<7xmvINT=h!>uJG1U;kZ;{<|0q2C(1ry+!?Z1++Ycx;_kL&P3Zd{`)X|m`yJ_ ziS?}W(SIM|egiweL;tNH_dD2)+co|7CMfV(O4!Q!)&{Ux%>KxA@b3!n*@$Gjk1_P0 z`{mzG&-4qU>y!T50iA9J7xmwV_#MxF!_a^4q0A}ldOVQt8eC6bxsBc2SAyR<`h8dQ z-=#_aJ(%?0hvDCSN&kJ4(sTW{mes+Q`tL62^8w_sC%bd+;e_v-_`4dJbo_U7QU862 z9HIa2fZlJRrw`yXpNG&(AMdjM`y4IXz&D1~e-|U)8z|!&@XFu4tag44{pT*^_3UAO z3wq>D)bz3REsxKVb~}HcC8sd%b)AERy_1qIY1V%qryUPd(ih16S+2KN+dbHecq2X5 z9oC`$Z1q#E^xtJk|G9Iq0r?q(#4kYdew6gzH`#r97y9qsqW-%%>Aw#_;djwLu0b{* zroAQocS{%b-`!AT60$d$w*N;_|9t_Rzl4_fJiYXG`r&-&@oA{`GggC7U>|GfzZ;-* z4f6P#X8re5_RszX{r6$cY0vfFRkTU{_bytY{`)FI^xq%Y$E*JPM6>?$zZ%|8MI**AenR#{uzY_bQ}5<~2g)zPYM%uAyjYGrzvhm!Aoc>|yw3eWM`}EObYI&}T z#;S+(kbgp(YRRs-c*;%QQt>vdtxa2YS5^eg?Ye<0THMwwB%r!GhvS5z#aef;HPte1(oGiX;=Vm%>Nvz2#qxS|)U z7O^U-^~6;N?TzjCFKvIe*OMtcp(6HayXqO|5@}r*+mL@-Cr727?{3Gv+-T1!FQ&V0 z;mV-z|HOF}t^~x|nY<18mpXA$hO4EvHe{;${o-0QwM99a_RI@U$Z#c1`PZi6s;5#_ zl7Cn5+|%B+^W=V|KGvK)&sO>Ot5&XoxEkq+vaZER5!XtT7r$=dN|9?0*4Tdk&Ev*1xYbimqT>kwQMgu9Hkky`Z#VgL;a>dRyz+C>VLwN1E zp3c*sB9wnuziOG4hWxvl(wY2=m3A`MEj?YQcbcbqhOsg3_Vpsip=1u^Z4+US}SW<}ICVq7tYUA4`wVMTYSFRXR3!`-}k-$ zdq4MDP*YXU_dMr0@j0hXS6Aa7f7yu7m~)+$orQcNh=jWpQ zjVpfE!l&ig{`rez?GYcJSm!sy)#uO6aL#&Z0c#x*H?R4LT|-+Nq=)a<>4G>zSm{&k zzawfv)g|A3!p|{SLVObse-A8-H1NBs{KS#%pWiAz@J+S7r%=bH}r+Z_i%qbu&HS%ZC~{qwCL-Ese&gS#Ytx4_%}`AKOH z=0LaRp(M<# ze_vQX7+0gPhfxQujR@FB^OKf_Hhznr z`7K18Bd{K%+W%3|Xo=Mgw*P~%O4t%Hx$S>2>UI|PgJFL(EM*`C{JwtrZI;vikHm2( z)|JK~oqP)rS9CjJRfV5*)L@;h3)XJSkT=!-XG;5@g`7+P;d`|j+AO5HO4>ia-Ejm~ zINbJMk!t@FP>ai)_J0gkY9?ZpZV0s4E-Iz{M;eMAZ9ujES!iifr2U@&9ezr%Ldv*Y z+W%bG9)P;xZ=&!mBV#~IVWBrlYCdYG;r2fnwU>kRtc2#ND3|f5v7uO>Qtf{&+Up8w z|FfL-Un}kZM64AJK`ItujVyw7q1g?lpT9TV9x1;FDO`iKoH=RRe+^cMM&P~OZ2#4W zwHPbKZ2y(g{?A074t%RbZZnbU^Q8S(qy9>MT>F$|3%XN&uTFG zMbJ4C<&uLIc$T#P3(@}Xglsd`e%bzSM>*f2wSRu&rWMw^PQ$v=^;lKh4E=^SZ~MO* z?RgDWwie-&oOM`txC^nIi#4f-(Ejg`_J6kco-(Yqe;ER}tC zeTb`Alpct-8^2m7QqSy4GGI7~I~W0(rsRcl|o^KE=nt6yB9;q&OK{MGxm`Al)+8`m|s z-oWQ4)%q3h3VDx6N#h$^IcEs8#=2un>d5t-#y74Ua4kU9Kc6S(^O3B7K0n;}rs|*1 zb~D|a+j3Qes~o(KJJ5}3W&QJ4pjrQ14^j87jm5x~CG|Y9`eh(K@5%b-Grb35U)4W< z?~^MJe5Tc{f6lBM-&Fm#a_XN?&vK1|?^Qmq`e%9ZS8m#gCRc9MFM;xT*#oP8zIj{K zKYvM-&&cv#q8+3MQh%8Usp_B4&$9mcEq>O2$Nk(j)s+kDpWnLYTL}0J9iPkO({21V zeZ#Y=I(>Df>Yw+^?NI`(f37cduOBSUbr-3B-nsHA!ffa@MG3P0IVWs<%f?+ipXBR{ zxj3J{&c~JN|2;9kZF~!(q%tulI|$|76>;=Hy8qky9{}CKQvaP0Q>onLw85R#f!BX8 zX>G-rb*lR3aR}1X_|`+}zn82J@VC6(`tO1IFKb*Kb4EUQIR>RZ(y9MZn2&YEJZ&`Y z6%KSOMfvx`9Y!Hy8ZN6I5u8ms0QKppr6SzllzZxbG-SMoJdme6SpR(L=_uSAs`{US zI^YvAa}T)whe`cUL$3Mu$@WGB?QaB1gYTAWY@3Kyy3ncrgVARe<0*_~X!$cS^B&un zGPns(dpO$41e5^le-6?ekmG^XKi`MN=Wwf0_T`@XUx@l&bpZDHv{xlQ=bwX5>G|YU z7u*r?y>8<%??3SRUyqr5Kg{Q=@NCZoIE$hTFZr+P|IfI8QvH7+o+J5h>i=}7{&(PM zsA}|o*8c+3|AV-dz5lvY{XYYp4Y=1i?ttt6A-rX6A@0Z6|M}j4#kebaA5R56 zj^A#)uW|E8^SMs_@4yovw@Ll4#qnkIf4&>7vF&q|*6FDKPw>3P6DawOc=H(j|3cgy z{!#ypm7aUgQ5Vj{sk)zVW$KD@b*G|pQuj`U^JTw2^*EBdJLi}xHWD{B&fge6?-@8I zyBj6^$9XY7$7L+ah6+LJigNy}?m75Lp1W}-%}-!CuUB(>_kPI@!6RekbK~4O6Ry+e zoLt>csqfvYPt@u-XWblcIS*s{_>Dww`WdI1WAQUkx2)>)IoslQkT`?o8=TZk!q4Zt@vHpv^CN!eCl7NMes`$OKA-pH@6hu-Q%ozL=<@3G+lFlsf_nUwmHPQ_ z0}VI-oLja+e)#Pn*8)FRqh;owpA+$$Ro?h*Xtc#lq5!OmlmEh$HX@Q)qBsBiHjEoP zf1`o-GF_eg^WEv$h^LP84f6a25pVw8x7{;#{<^Ws{{ZB_9rXDvmpc7?NCrv%`L_C2 z2;W6(fhzy%7bjX^Rhi!q;k?F;f%zYZ6}1rN0Bu2r!}ELNck|En=q?zS`40ENDQ%{( zIrfJ0KL+_7j4?&k|13$ZH~-U|{EtH|lq1x5l*JTJ{3`#$Fuo5!+NNWkqUV1CVqE6r ze=K+fRua8EunnI4%)z)a9<9&K{|YVtGqF}y3!85KS73$NEgiQ13Y5#SD5Im0|7BQ* zUXFFsIM1O0^NJ~OOSMizKjT=z zafxeE>ZuG`=gN*6OZCwHE2fvLN-Dif4WDmNWATBkQE}u|qcU^P5sXKsiX&6wD@=UK zMy+vh^k8^3zN%-{8rN6lPkS5(X_;#SeCCOHXeB@#x_2&!#5wO{=@pGReoN`I2td1et*0L#wb4h!h1!2 zlbkDLT&d&V#x~Ab_>>lHa-?Goa-E6ah_{ip#x~A(`0YQ2M;i2dsaVL}U7@{@WrJK7GUb=Xb$4 zgW^*?jcaj_1{g-4y^t; zll9*hCD{q3*avy(h1}bSv$2i8z0(eJD%O7q>c0cVaaI3a4ygY5G)iBo|E@Ty z`VV8q$0ss6p*qA_)pQeFKoK>g3eJWnl4X%;#4KO6a(kM=Ouh@t+c??+Rib5Z|%%EQ2#l!4FJ z=b{f7_;mfhtN%Mt|92p#r=iWT{^#L$SqiXDw;1v4e`|+#Vs^#n_C#_~nNa z@EJV&|Bn4DgX;Ca9C|M}_5T>YXB2N#e;_pYy}6Z0#a5KWO6<={{clBEJQMo+ufGfN z{i8dO+Xqthe+~NoE~)<;51{^UM31`x{r`8Yhq3-Y!n)j6)PE8=`wey2*!KUM`oG6C zVrM&b@ghpaZ5sFiqS(^?l+xAEyB_-+(0vQXTXDPw;k)2?6LcTMIgi)j$nLra=SN~+ z?AU_HznOq?r_ic%*Y3Ui+#`7wL9c|}tvJ4bn^H*_v z9s7+qzX``%aC{s49PB3`U08ID(J?%L{S%xY?JyqCaITpb=7ZroA`a%2*UVE}C;Utt zu>dS_t;0FOF)sX=i3$rFu`0+ICy(4IJ6*}d_9+PeK4gxa*kL&5K3DBx7x9VisnCOc z#%IKEY_yCK?*EoeX62|r9$Al=apN!Un{3D|i#M+(uGE=jT4BbJ#tpQmeXZmY~w69mf0E{+23Eqej?5hCN>M_|K%pNjjS<$*pNBo&a^Xv z+57(#H?|vTcpUqiP<;f)GVD)bM;qsoRP5#hJKukDnHZ$TwgZ7CNRuaU>|UgKC-!rZ z?@idzN~H`@c2aIA8d^ zmQh3Kbb)#n8U9ho*w&aX?rekZd0kyt0V^XjP+$Lc*u4Yxx8ryhj_Yx(hW-YepM~>d zaQ+MSV_{<-_8)P68;*D2cqfh{ag5+tjw8$F9PB-ydjXE6jy`4ma83@!_+2jJbOLh5 z|BS;KmOJ!mk71Yw+L!cDKY<NU)kL%VrvK=rC!V6~{F87A#T#4ZkXAIL@&YfZ> zVTZnUO_{?bKKI(S$22kiH2U83F+I$W*g$-4TyB0+`kwSKeUe7nhdtSIA!~|#f1A_? z>czr8_9b!itP_mk0UMPOz-9&5b1h4HFT581+X4Jwz^ z{Y3^Lj&Xq|nHfzof|(h?tgOte>}-s}p`4uD+)yYlFE=m0Y15_!1^M~S3JaPQHphR% z#DCOcx~&8HGkwQzNXPHkJL8)3RJNVRAwL59Se(;e#&Le28}ihwMXNULI`3a0_67Ji zh`SjS{)OYeaZMlE4(a#_=Rf0|bMP>B_&4#3@EI~U#(X5!6+6ekO<>(|o`v%~?DV&2 zZ!!*HE+^OYPsj@%g)#6*hw`U)BMkGq3;TtTJ%=NG$Z6Q0$MwrNvX8!r{T*E2f#V4{ zVm`@vmXW}b{`N^6*~hWVobv-5@5TNhWQYro(i^dlaQq+JkY{erA$4>mlm~)2oRk(e zZ|zLWyLJ;D@1F~hZjJ-D;&?fZf5MUZX5O}9XTEO0k$#HhI|oOUsrXTxV|j(Iv{U7I z29ERrl%oz}3voQ~Eg%zXhNrJ_(#}4_F}7~8&&@Do*kVo5CjN<&JvjdkJLdUDE67@7 z=U8_>c8p&#FXp)29GvN^f*kV(j^Q$2g%6W^vq~`dZJ9g%4YI#uXM4B{JLZ8bCz-2V zjw8#8ddxG+Y615DQ=5}bj*3k(-~&RrE!(Dx`z8ptAPtw`co}xKU*t*BI|1i6=XR`9D5U#T?Y0ua88|}*bl)z6Y+7}I}-b`*wJTY?0yl)&ERT7;bT*OmBjg*>SGu` zG!pG_&MD&>4xMc$DZm~~s#``Ol#Rlvw7naWhi2Fh8vv58eN7g;sfTRU=f)}2t zx%f*sq8*5@LqFuE&t%gSnhK`=Vw{S_amunnzNFl`;@l}WDZ2>diy>qEKpx{Y%M?dh z)8KV)>{0C4XrH^>($*=2+}A(Uhe-YnLcFwUyfoeC-GMMj{+brLp1|AIEQJG)*15#pIvJ@Plu-LI}z*gKjD4$4nMPj zyNJ|Inbasl!)Hs+F**L2Fl1)r1_K$vRt2rIi-(PfjAl9-+(bdlQWIApE5i!pWoL%0 z%#6G&+s@C-&CU!IHp^|9m(w)VG&?h^Syn-_yrwPMv~JV7MM2AEp~7ZuTK4TXps1v@ zY~Y~5LxvuF$ncS)${mZ$5dPbCUdXhY*qJ%`xtUq{f#%H%ngw&3=d^0sqAf!y3MmRWlZP&OL=D;g|% zuH@n$hXy-4!wdw`QJQ3in&3}%6W(8BX6NKK$!ZeH&dte0Q_RV0*0K#Jj-3zc-n&oV ze*KGzOG@k8k=T(vD`;k#8Cgv-n`CEX1#@z8LYX<4xx8b^%|b3(wQk$4D_sT?f-=a= z%*;ZdT+B{=F`}$&G%wutgmUmGARV_9T4oS;Lpdlavzb?86GjLx1xV+Yrn&zAsj2R=_4(nao^&pBFW(@WYNZ%a# z+EID=XIZ0jGwfL{U|M)J#Ix_)yU*z4<-c}x`38u~Uf;V9%TgZw(@k>5{TJ+UkI9%dEpBJWAl1$Y%(FQ=&Xzhc|+D`PR)xf$r~~%uV_?W&+@!*d0uOT zFVEwfWl)ybpG7>b3u1JCY=4x%A0_Zd3H(t4f0V%gRtaQAL_L|Ij&58W(zvZaZY#FgzkhnGE49e_5qm^R|;)P#y53p4wVFoZ~Mym;bPLAMf0aE360)csfyS z2|FSu8P4^Cmb%V%u5o)TTaI&V?HoCzdpF#HsBMKxpF5WBam4O?f^!&dt<=F-6Nt!} zD~~$YZn|B2&aIYw6hMW&`&51+PWXM!wOgKhoa>$r7bE`ze|kFQU*FUXPQBjm9G`KH zZ#u`%oa2wqF~eyuEuCX`=QzmIj>eB3eQ>zv_-Tjr3YYaC(tlvMq^Njc(V&vjaL-va z)!_-1tCYN7>Cj$ys0}yBk}6fS{hWp=le7A%#kC4Q3hh9J-_SmyLUFQ|W>etN_L*TjV~YjrkY?tk1rH!8({P<8V%P7(Ao9xf6#?+3iqQ83W9} z;^KJ-bxP1!?8O5|dD_DEionm0h_!R$k5bfBayk-dRsFxY$ps!tg? z7c&o627g9MT4!uyCbPy-^;(`9S!0>P>zLhORuRu{90xI;3J;zESw@hR7-FR|*}1!L zLMf|Lq@TJ{{3=TDD_mr*kpMsPbT&@&zDH`zVEu+}ZVf`-^a!8@2xV`+ZEaKBtOaS@ z-h9*A{6eJB%w`~a^Y+v7FJLSMt>tphsRawF4YRN(uB^>-^N&F0&9-}B(b~KyKZZ=0 z?U*iW^Na#~-Kr~7WNn^OaI9f=Q|HwM#~EgKbso)Mi?C)-bu}SBPD`a@#8UFq{Cq~Y zp+YVbr{;%wx$|VX+;nRGW4!$SQn}o{uGv6d_BXdHyslXcEz4YDz984z@tXfnkQ8P@ z3KCy(V8JpQa*eOX2fu|N#ByT-R4Dn2SJw82B*emEVnk@G07m9S7cpTX45$D`X0?l$ zND($s0gTMkh-i!H6=A0Q#aBZA>>?&zgjw`I$l1pg&~)8f+Wi>azp;YkW5LL8xnEuV#pN}CFBG*WLI3~Ux#AOtgR9< zQzKI#%Urci$PpSj3f&;{gv*6gd5PG)4RT2#ex_~_<2dPY3Aw@zxfPfBYZ%8Ve-pAv zBP_wpbw3E%?j;g?HX5j#|4xkK^iGgu+0VNne_`xbK$f|FsF2+nSw?c^p+er&$g?cx zvzH3_yO)UFGawhcxkmmcFp+uQTVo#Px1m<|j!mYl>W>zBTe8aOM@ggv`*0XkRs2$O?^I#nQXx zXd#<4@+NCw+lfN9dx^BwjgY%(y_a@x*d`&9ZpgK`l#utkAu~~C%*9PFNXTd;!el|y z4ViR928{f@EZtjvkdQGqk%Q*@(6(<68o!=ONvJt`F!*<^ZCyuWUM^G zfJWvMxXgcuweg~fDIaoO9wBf@70>?KPKYr&LZC?D?`V_3F5__B{4hiu?D`%~(LkIV z4C68AprVP?1hNf_8BMl*+WeYWdi9;6J-L~OUa!HWFK|qOdv%`h-S?KrX zhh{7IDdgi6HN)&-mB{s`Q<{B2{bklvxlXQDGfw7O{FXE0WWMEEn{hJ5DwO=ijFS^h z8S0sO5vFFGoM?(~W=;g9W}KJ0h?x?UnsIWPBwEa$pbQnj$mB#*Y%!}MOie~Va}jeb zD5wG$nI3Ax7&xt1Y0g}vVmnVQ1BAR&VjB8(Cf2wXZ-*iVHNXhcn6_X%mM5jBNvgP|hJ z?&2k4w?E{P!PFFXw1g~jLw3ZaGle}`$PA6BDeQ?tR(OfTz7cYX9r;&N*liN>JU8T8 zTsl+OhlOm?h?>H_A>=ZRJj*gU`&%Jfy+rH=(4NI^Y6{y1k}UgLH{`!*cOv81SSn<@ zM${B`s*p#$L}H)s#-5tOstM$7H{>h?aHg=EC5}BBQB&Akh2&3+AQfyg)RD8Ro)%K1 z5jBPVK*$V@s3|NxK$gA2OQfyh^E*`%NUNH{c7X(Q1UKYfC`!m7ZphRWcB+I7Pl_;E zMrKc3s`l@OOif`=l#mfOW2Kq4O!-fOif`YO33i! z2$N}KcEzPLg{=}Y!zI##nb$RtyVlec_5ukRb3-n|rR4QmH)LuG`+$Vp?uNYB4f&!Q zGBt($P(nWChTO@JoWlO-hD=RibF!J&q#N=x1aPLX-GmrZBG5zLgs3U(NFiY_k=SQL zE_q8$VHZoth#PVYE}bdtdLc25s447KLK0rm=oEHLHK(v)i&NN_$}mdhPD4`Q+Bei& zJbexA*iy@smZ=stoz+aWglVZoQ9R#p0WyupYq%(CIg6rdg%Uxyya^$fH?b}%%bP)2 zrwpj&)rrszs3lY+#=z4X2v|Ifr)tr(9H&SIS2&xL9*Xp4&4HwTVzG{eNqGj=v2u7~ zZ;qXo`RE}Lgj7!}^O&*NF!QKvZC--hvq|9rRwJthCnZMkW*mCD*FhtjYbo}z!zr;7 zvm>B*IFbqya+VtsFaO|LioIl^gxuqXEN4hQthUw-i8#5IVz1!cUzQy_EW#*_oF%x- z=30tfd#jKFjc_2cSK%vt&}pj?4n+0|9|-BWts8O&F0uy2<5}6U&#C12;xEBzeIp+uBF%y(Pd}ZGh8A)m|kK8 zTq>&*Q5CVPJ>$2=-8flJEEztK@A+0qs zx+6%x7RXVS-BBas4*}^vKuA}O1PVX~Occ^vBkz=e6jcc+(#W>iAjRv14AMv&e4H65 zxm?I08u{X2kkY$^lxyT8%t-=eF9?~Sku#Xnfu9PQrjcW4XV5+&vo-S5NRYu?yvnkV z(8wh-K!%hGiE8Bh;UGiR6n23|?&}Y7@Iuj9qLJOy8FspmT8;cdokOk^vPL66j{+Hf zpO8~E(!300#LGf9Xry0Pkdgloa-K#$%>#+pSca4yHH8PmJWc))yc4(w?bC3zI z2}x*V0m;N~ggm2>ckv)cU{a<`7GKoJEuBFocNX%hM*h+bWXdohZ);>aN;xp~Fd^@2 z=&xgfK1a@Y=n8cER3Vcmq}Y2PiIer94&5g>AMjoIKUGTWFqmiOcAPfJd>}X^kedwYel$~R|c7CQ0UECBc zA^%DZq2-f#W|=b~KV-4pRHGvZIkc^r0&Y;T6#iG%|)hbX7kg zMy1!zZ;%C6j~5crNX8V96DozoG}4})^2AewBs5YMQF$j2ln zKd0}X^srD4q8(^t9m%Q1LSh>Et_{d(lZ7NS z@)+G}Sgedy_@DLWeBSQ$9uPs)x)0y9C@-=pkkWF@>>V8ctwPL0>j_|_n2 zey;3jWDtGZStiOT%Z_Q}b^6e=+X+c%gty3na|Q}A7I^KvJQU>I=|UnJd7F05TdeG8 zB>Nzc^Vcgo8YzL73T(Ve*;(kd^EG|w1rI1Y8W}?$df_X|jz;e30CLe+%8r+a56yt@ zQQlMj;s;%GS|a?#^htP9Vv%Eg57e_4(}!*uC?uhg*~K82OcxSc?A58J5507;kjSxK z5}5{a*?J+yab9vfedy&^2}x*V^&ucvJfQ3>@#>U77WmUELLy7O+`U(H~y-hO(oPkD0c=e5>rN_Ui1V&h=S^ zEQ81iUea>_$PHbD7$hYLw)q`VB|ra3}lYrHx~b_KclcxC4#FDXRt4BT?Q zvU9SRbf6Et^?GGTBc-!IZhK7GImN59hUE5ll%2I+@*;ch9sg2x)_KV}V?gfAg@;2s z&`5tY`@r@dLSmEX>)k-^e^Q9C-b+rS4}IW0Wk)0JXM#NVld`kHt8+em=tBj_ z723g>UUCe5=#D-@jI+FCDpURNSRo0Gd`%y^vqDJhY_Cpt*1{tvDLdzQ$=Mi_1CMS| zcFy&Z>M+P-w<|juIfy{J@PB9r z8hL>}^r-y5gsY0R}8A%`dw}nCy8W}+!`uEd?gfH{PHm?liy(@*pG*a6Y zy2Ku925}fqZCV_J(o(3a`#Zvp_!TAS9}hFW7cI z9xNoGkzeM3d@@r=_)p&0#^r;2dYq7$MovQ?419K`kfcVQ90&6GH9{hP_QrN=bC53{ z5)#*l30dGDuL&`(^y<7a0p!bXghVy+HGSw;neb!i@fx|DKJ@F(Lc&|Uv6amP`DU1q zm_~T79{A^BLXsL;jq(qCyIe@*DsODnkOlUfDx39rdv!*ztiOLmNK_-A z4+Z(xTS5{V*#lYN-`@!dU*nDKVEWJ>a@w&BVj7uGANpfAAxVw2r=6ch3W>zMv8@^m z@}GG^;u`swKJ@36LX2%59r2+TQcfS5A%Af%KNub=@Y{6~KI(>FgUjqo=|g{iL`Xs- zd_O^8?^{B`*E%*tXA^zszVC#@yd<=Qp2aXj?O6ax4PDa_$TWKhid^T3FLd1@K$cl9 zD6XMs0g!DTEy(zbSF0WUXuw<}D5{~KX9G1cw+KpT=!FnahIxme@b%sZ#|#6?G@la` z(~!;D3!0w@N^0nRW;x5;Cn$1*H^LqCrrBm&R2Cedh7LuzK#n<3ka43|t2upR$ebZ4 zs-YX{fO5^_1SK?dCbja+vjl~2@}wJ^D64&R|6yEjlv^B6(l zTfGt9K-b#JJV{VYL;DT^YHeO3D5;@>xj=2qI|W5<^G0|Ky=zSzuU6u!e7VUvkKoy?hnVj2o`2MU`@ z1SK_eC!K6(^K3zpJG~K3p_e_#yjD~iLAaSfFS9~WMm zn45vk7dYTyc=UGU2d`2iolM!3SU7#bSr&siCH2juA$3{flAG(f)X0K;ZUG5bCIB= zhF%&4G|*fx$hgl*oY=Y_EjBR7yjoCLLp#_>2AdBFifHJ>0-z!0>w=;hDlP>YYJMvy zrlF>X0Uc~|F$VrlLl2Ds8fJDAl+e(Tbi0R`5kW}}jpz?F+&of{albcTKhW)tFi#K^ z*3c_xmVuGxWkA6sOyrU~Ui;)zI9g zKoiYt1jRHopZS_(?hq8$P}|->lg&2-B{cL1-R=}~kD#Q6S`G)AYUUs{@cs{a^VO4X zcbeHu=Cgv58fs6sdzksLAmbr#zWAMqz~SazL17J5&jgxdw&}*wh-m1wY@oSj znV_hKuA|$XXHFLs)6m6jfsQbb6%^M{8Qt!Y=9z*L8d^37=qNKTD5;@V2Ll~#J}k)C z;mudL9ndl6n}Wg`Iu?yRP+@*2D59Z@>2{-L2<4S!M>RBsZnx6xAtS6e+0xL+xj^g9tCX!LytXc++udM3sBCG7i-3VM&DWGI4TZ-8on`)0+0xJ+ zy4|zQEaU-g{zjL2(UL z4+Xl+yjoCFLp$kqFE<|&6yD{v)u$uS73S-LqFy9!_gl*8cC+L!d~4xkC|qea>C4=1 zauwb|xX?FjXIss%pzRuZp56E=bC{sr8ai?|(ADPQg7#?Wgl<6Bn8ypsf7VI2*lHC9 ziklk+6=~=SgbQplZxl2`L!WcZxYm3^&g$`DZ~ZG&Hsq(5>cuf;MUBMS98G%-w>vYv`tCK)0J;3EHipsbhieFf%Z8WZ8Q( z6z&0Zr`cIh{`1~^^~eI+ZXP12NJEDW0lLeaBWQ+(PM|lr+pHC|LPLM;3UrTofuKzq zx|ze|z2;4Vwrgk~8^C?$lY(|@=<6v!_nYqv+M}VXS<4TYKMTr#!JDs|?m!Qk%~6zi z6k0%&!F%X=vCepvTQjbZI=@s-c_MdY>>4 z60|}?_b?exn!^Qc(old6;3;#ipzRv^jIH-+bETl&8hW)H=o#}uL3=cGP8XnE=FNig zU-IUwauCq7=2L=-G<54|py$jF1kKRU4f#ONo4*KJp`jP^fL<_LU|tD-sG(oj9bPnx z1Z~&Q`u;#KnUe+W_9Ah+3n;HK@Va*Siyv^jW-=6Zn`=eE_^Xqp8Mq8xUjX!qdAXpt zhCW1s1FxEQ3yQq#)vBf2ea(DHP*Ot|(Cxl%ejzBf+p9Gt4D^O+moT^CSG;IDE&^|w z9R(#c^ygkcZ<#{{MPK!5m30Ps+ng=Pc+HDuvz@(TE*BKn&}U77-Zjq?6nWjN)$UNB zznRwyN@}P#-R|GbgrL|PUahy0*T8$`-vou<^rB1I!{0Z56qL|VC%WAa%z{#uM)WPO z*2`?TNwcpY<83cGoR#vS$$38J3mSU68PG@Od_j?Syjqvi?S5>o6O`1@Ot!O6%qs-N z-t}sY%mVtpr+I^*godtUU;Wm6Tu}5wuU5B#Kzq!;3o<_PqJ6yG`Of@FP+UVh>2|+2n?V^j z{vUg_hBM3mGW!WiYUn+>-G7@C1jRn_YWU)^t1W0pty$k8E@bh^GiXIFT7f}%mn(?Yyv-u+Z_#U zquc$>3=4|=!>e^MWP#t!VS>V6deM7yyL-*U1tl~zg|)oTJYG=rE3Z~w2Oz`RD9HHQ zi{|zOGOZg0#Wl2*Zr8G&5ES{wqa|+lJ<4kg_v;1t^&2z61;YPD9sC z1S+uF3yN##pW}g=S%U>7HFP*@vCx_&DEyt**4^!anp^Zzu%)4mysK(qouh1N$T|e5 zrFEUMrJ=|2fm&IQDqG)sZC#TK)Y^JS+0xLTSWs=Oe=A!W>P<(})@nMGDNJf;##Eqo zR&PP!e|c@K4Fk2e#tMpRsE`e}gB2AN*U+A3Kpm}9lr0UJGk`i-mnmES_S$-!w!+q3 z%9e(nMYup`>qTWtLjwze4zl>EIP#^Tk`kaUmW2vHoBzRUi)+h)u2u&@Q4O_f1=P(N zA}Fq*+u6grTZaltYUn6x^{|#HTR(bjy~Cc;(>hn#($JK{fqGegQMNSn6(@|nt;dut z4Sk#i)W>>P+4{+AtCa4kul0knrJ<^EK>e(I3<4O)HME1>p}*BfP*Ot{JJA4ZoS^W3 zytZB(1XN^I3W{oo%g%vfYpt@Sp)+~_l~|W6TN+x!zFcbEt!(}5wUr<$vtAMu)zG~I zfCgG$2#RayqY%&_%SJat+tAPiHqpUWM?v9VytYmo2{gnSDk$nj;&x|KPPePRk$|87 zzNjS>4z`XJg}AFQ0+*q01_BMU&J+~+)iERJ{8FGpthk`0hL$qj!>xw}#eVZ@%{&Zf zg!QJN@b6w^&juQ4eJ3cPp$k~S5i2yD1rgor)#@@GXq44Mkg?B;j-xjzx5@>@HPoK< zG1@v>P{hDsk1a>?^&4Bv7;BB7q=tsl)>vzcpqS~^YBB+6oOOqwu;oQdI{=Nho)eVN z5TA(%Ot3x?6t%rt*BuNr(b^{nIrOBk4N535$!d!gS@Z-Ay_pX**%~M)(!{HEKi%#W zYlfhthPJbyrdr1die-4UM$zp~v(6F}&h(;%bi327ZGsXS+7bquVeJ$Y4SKbD)9uc* z-V$VFc~K@^;VkQWL2(TYq1!#w%0<)0)Gyns^)_wIwt5OmYUqOq&|%hSL9raK))d-0 z+&V^3IOIhW>2~K>CkaYu=oPx%xz;6uqPbqJ{&b-8tUCo6d0xbiKLSTs&kKrcXeG6d zv_2ISY3kM5!=7@KWgrje{2HpJ+dbN9Cn%Qh)w1b8kFf>`3Kw|MuXMW=)=WVO4Naz2 z)LJ4a+RUqU3f*p{b+#a*(2HJWubgjPD=4m^w(LYz)+2%<&AnQm(Ct=RZwpFlsAV^x z8jAxiZb4djwf;=EyTD@MVJvLvMVr`{7h1gpB{cLl(IRV%plBo-A34Q->_U17Dt@QR+$&a1Vj80dJbL{MBq3)z@zt*L^H_Fk&1$4V7S=nf$@OK(&Pq%xr)lHDm$*Z-Y1JEfJe|!aFhK7=KyKAi@1tm1J zgKl@7b%LO9*c)LH-R`N@WkUChH?LNdZufj^kD#cA zzUTt9(aIUiEGIN{W2aSh!~xBF-7 zOhHB;uhvcM%U4=)K~W9uA=+v^EGVI&PdMAX%6d~!xUVrjn)UsmWJM;+r7#9McEqQ zwKapT@Mfz8+#Wi=h6>n8Zn264#WggE^>M2;Sx{0#%h-Qzvla*n7kO=Mp{?7k)0Hg^ zl|mM{!`dn+uA!Oqt#?`v2uf<`C!+1vtAfJCUR$rwf!<|(BPgn&$(@1jwt{H&@ctS) zhFbSnT?8dH^a<F(y2fXSQjZ<8hV6o z_d)9xWvkR{>-e5P4_QwuTN-+~9ncOdscdOz0p0Gy*00KzhB8F`|dzb zSPv>&8rnv;`=s@nvZbMp^sP@>|5UaHd2L-n^t6?QAu-F2YUq{LK+jlR1;sVgCmU#& zHBwMgL#NQ~K5HEzC_LC}>sC0Qz;o7WWlKXnSsKq5T& zU$LeNifX7gd&;ZUB0+HtZKB(K%~~%gsi9qTyRTbUD_aM9ZM{MV`=<4fvgM+$!f>zy z=wRQnUKbS85I-3Syls6eD6XOQY@+X2+30~7{x!6P4)$HEo1mnI#?rz5&58&z_%SNB z97)Evbg+N7juaHu&^kK3_pB2HMKly)19;!sEGVj>%056JShop^Y3M7?Ym?S4L2(V; zLR%kN9|=lmXc8P@;3MmIK}ii=NiX`b)p{CB!#Kp7uO(b?|HLX46xPsm3?_k3t!aWH z8k*l3=re1vps0pc)4_gjZ4eaG(66~bUs%@&ifibHzCi!5b_hyn=p3}@z?aq=f|43y z;RU|3_6RbDd-JuBuJUUu2jvB)r=jcVV85}t3yNsyGiv?Q8YL*Ip>=ey-&#irifO0= zOJk39qM*2jIFk*0XI(5Pp`p!mu-{v^3rcF}Lbl$2S6-Qt%Uar>&FIqYA1t?vXyH8h_N zcAphOzr~bSLyOoQ47-P*xQ33QgEj4PK?x0g#4@z(qXi{3^wlgN+g>Bchpy6w%NcyTf}$Eq(7|Tfp9qR+=mR>~puJB}+>2yh+ZL&md98X> z3}1|x%MO`s7ZKPAS0RAQ&`912=h%}48Kaym33{O)P{>{&D59ZN9BFdx(*?yeG=p6$ z&)zC1p`q;NKuzrjl&x~FtzQlT%C}!twlwrRy?=rIjk2Yo{9>SHcJNTimxi_?_CTTC zMUXMtYwKKk|K|1xK@knLW}9wd&l42W(CZwnTiUCXEe(B5)XKg{+2V>4hZ8Bof$XcT z?OT*B4PD$BsEz%!vZbM;OM%+jNkIt>y-8=?&i+-9G1hDAUiO6cc1vUr{YOJRSj!#k zVnHzttsM%~(VikGp`nvGBzLkG3NprdZ8gmT3fpHWTN?VLBT#4iDrHMU{7^D*ko};t zrJ?)j{kzz&DO=;cwvNL^psW2)WlKYcvx#=IvoO@7^K0m*AW(O^tDuC2?#%=0VUHAK zOz_(Jfg?>%`v^f14gIGGsF%H3+0xMCg+RUSP0E&r2D85U*taTM6TP+;vK#lcpHa3n zbVD1Ue)fmTmWI}{MfJCTQ?@iTgq~}F-3mS%!~Z0&txwpZitG|W5e?nT;w`qP3W{my zDLU&Cdy$}ohE8T#?nBgegKm}U(#;5QnT9|Fy^O%Q(tMC>TXrUwJ%(VM`>`*3q+g!U$6pWdUg&;1) z!gQa)eY7yot`UW}t1y%bv=Gx3uzK_%>-0$bGEqpn3dd4`dAQ4`(4T(jD0`PEL}ocj zx{?aC@R6&K`hsH*<{@hTM--y2!i!X(g~B78Os5o@(L$x&i@=V%3co`kG?i12DtnBe zgo_wgXcD!m?FvE0p-#G}CFwfZHIw=V(0Hb65njVcGhtVu8kdr;TYU=uVA(FV9~Xrc zuEM3b47J7_FL0dwcR_I%F|N=8rfZ4)lb}5=qL!qq*^y56Q;*2s#~!=F?nz*WXFD1B zjS4KU(LRN9dP3oNd!8sva25LDGIYsMpq2J2K~WbmuF&1RfL7TT2|C9`)RJ`FLOI)F z>KW2o2SH&CUf0KT#a)F~z+(C>h z^cl6*+C2ot=6JRK%Hj4@yIfGxMWQtz40M`(w4m@jkCx(89Kt+y{! zW?Y5&xRl)7>{FPN1%(avW1_IzRoFs>n-TH5u0rZ5gdMbSw!KFbj3b;RJw*kUSI*H+ zl2QsQY2h5ZGl3mB(oy)qwQz{8kZFV#_lClG_AF6|y9(WLDHfLc6!`MS!1?xiQ3xO9 zSeQcv=HY5x0hRGZ0TeExIQI`yI9 zyDX*6c1r>~>MDHcS}67@T*Okk*d8wm;iH{Aw8N!Xn6E2j7@>1nN|)GcL?P-bOrZkv zu*IkFK1=CR`({xvj&UrkqXP5rl&g?hf$uO83V*iW6@`eaa0eA=;Rm0>t<1xfc1{H| zy~$Ph0O3M6GqqRQ-329F#JEDgFkM&MqXgwwIO(F6r0Xck*~V46a0eA^28Fm?D+&=; zVH_?cT^INi+O&tlHv2kJSm7$1h|ADn%;R6|M+L=PB%XH{b924@j-Z5##9u$h+}vpY zTTs$PqScbF{3g3;lw}Z(I=K<8o=o>Gc5guu7m3zDrtnsKte}{SQeHkvIm;k*7rA8; z6z;H35QVs_FbS7Z2Ah2fzjcJdo%W5Qu*X$61(%@-%*|c)6N18(PLdf{h!2bh?zZ0( zw8BNAbtZk?z4m_u#a$#?3+U?avkNO(276pYEx9M|NjY=V#t7ZZjI#2qBW#1(4+Q6f)XwgtrAvE!oEdN(nX>*mV?0K z_S1sGRiltNxH4)6Ep#7e5TDui3yQgjgHmWWwLZ6B5tMWhJ#pwu zqA%>P1?4YrY>9(w$I|$RomtH+7r99C)tp+tTxYfyq(4?;VCKhVdm!VfsW)2!)vrIG{w+UpqO(46j zZdfxps)>ahsZ*o5b%9ik=6MBDqYG^`Y2$m=t@&$SF8-S62nKd@!0MH?0~RlJR5T-9&M;$^GX43Hm6*MmE{1LiMYwbJO{e?b5K z>Mu_CfA;k0Qw}wZs%0~3mseFRtXWo3KE9-)@`N=d{n5bBZCBYwp$37N3(;C-27!Qi&izWK8p1ABab&9!E>|bbC)QNgh zbg$V;MfM0H8(1&0NJEh=2*w%N{JO}xUJcQOmJ?Y5k&RD9wo_6zuA#`BlpRwSS#LyU zXItmkrb^qRh;9s{laf@?O==*zJSVznU35KEbUy~1=vZzNos`@Dqf1k6-LDQ_^RQ*1 zV^yOG{=cZJ75@)+wGHhf>~qEebhY??yILEkt2Iw`H9HGG?2aC0XYJtOf3&-escSh; z7;M(FrN1#rPoU+DuGg+7Hqa2=mUC2HbbT1xy=F_cYB#$7qR&YO_C&{S;`TW=y8pJ< zd7_il{bIH8rmlW;6aLH0o@2N5M)%+LI#22xpYR{$6Wr|9FTF7bo<1i+$1AuI{%@p^ z1PG%Wr;_v>4^ae-drIm}9`G?@Nqbi1DC9hbrnnN{* zXU`~$A)2G?hG7w&V42=rZ{2N4smlNqTrd6gH2md&wPc<+N<>w$Z1vLeWfPZ`FB@OG zeD#WzGBuc0JkY3EzNETh`GN&2YgQQyw{lfw?W$4L)wOQODNAY*xVT~#-W2CVG`4zS z&B_@y2;xLjYAmf>GiA!GfyE^iH7gbmF)AibuUJ`mLQO@@vTC_Fv3Bt)b+vNQ^4e8l z{_Nk%#V6NP?AK}utPYfLoTIqrMxgr5j!S z+&IDKuU=3wzj9@badJ)V@|7h62RS)gT3LHsP3=mfYQ^e`1+_KDSB#%6%LDS zarK(fGBF!pT(sZd1C7-voFOQf<;!YTrb;w@9ctB5uYSRhmGra0{nRwdoF!1PqOw|* zTWw8cwbbK+CCe-KTV2ZHlI6=5hUE_{8FSU?(z+(98Z#=EEU!9FF9C05Hb{zvIL+9j zp^BiQYISWz)$%2)moC#|(3>$Elxiz=^-(4Yb=T+4-_Dr@zyZqlWCQ_ae$-g-^Du6pZIGRUYa;FKAbG@DIn3EEAC zbTK!zs=W#=9t1jI(ekA=1F9-(E2}D(45+OO0><+U;o@^m@rMHQ=;tzKDE zU1BU)R=KoBs5C70N4dIW74gp?-8o`I_Y#8KW~HTQa9@Gxg`b? zTCiHY%H##w6O5V%Z!Spxam{nURibA>J`c-Di2!X zTJ@GjI$6pS(hp0uOPg@Y%d72#94N6gkZP1?#R;n_k!f-v1no-p`ieiBJERd+p99~@HmFP>uONjg5o3VUlxeV&6jHJJ*vS^rFue?r*W!{Qm5zFOb>w=T)P>jUq)x8a zNu6A`i!v)IOJlcAuG_7X>vrqpy4^atuPr!s8%mGf77$PI5EhRwn&P3-7W_?I$$iOp z!uyi%$bHFodD0WZwyes)XS76O*Mq~R68n;_#0^B^Pol&<#P3RErpc;G&s60O zPOIluywBw!PR0D)PgQ3yah2bk+3H+m`3fQa={Oo{bUOo{bU zOo{bYmlFHisF>7qgwSQu1N;de+(0u@O})YJzWAN+Y2<0z7gJv(a(~e%xxZ|b++R3K z?k^oB_ZN?n`_rj>ZoLe%Bc$=sDX}m4;+5(}!rY2q@;8q(?kW}9Uj!1`Ujicb7l4TU z`4_P-`zqbK7`aR{1#_iXC`sp<<%UQ(;r;VLjp*wsht<-7>1)D~>s3(~UN6Qvxvw14 zI*GdQdU{Yx4f&3Aa}q?O#J*H2u`iKo_NX@)M54sLNR+sNNc4=RBJt-(C8b{DMff2N zI74R^go(d*xMj(t^C^gEFxy4F_z_&qi1oat#Cl#+Vm+@AEC1$;M2UToC~*Uk=mnOF z+tRche% zB~OX<^r1Y{jowI#n$!6rX<)kBzzk4{ec4oEUp`ez^ulKIYiP>k0$l@XFK%G0#IjJj zsgx4?3Py?bnnQAwSkF^R>}ypjv@fel>`yp8c0daC$eAG}_eG=pryiVDn&xIAC2k-R zUs||$nAWK_R2`1o7m+g`L;J;Qv|5|;-fz){u9Hft-uhBvUrnj}`f6%u`kAv5`yx@| z1|snlu?p?0ZYA~=u@d`onRecRY^I%e)X9B`al-pj(9F_RIK*lcZQx#7 zt?#A1&6ZW92JgVJ_~{+oVMqBhJ$ET_n%g;4#sz<_MC{9zYBs(|l-L)E5;qWuuV_?gU(qPBuV|E5 zFB)V=O^5x1hbl>oH@+g1Pcx*|`yz9cd~(NE>KS9bq@M#Sv9ENbGt`^GArh4Xy@*p{ zJ(85zml73;Uc{-;zOqy)(X)xr%6Ir8QDQw3hE_8;e}>d@bUnFrvoyt3C)cxDC)e{z zd5KIC^%AR-`{PmJ8;VEIZ(TgThUwVV3!*Ok&<0l=TxZ(QiiP53jp*y?M+G!6X;&Rw z&lN&D6J@_#I=-H%y5K&!(-r)+o4z@qcwFFXZfgFkS0gMdv0jTQv9AzRXkV_BSWi9D zqNb<1$&^?(nG)+JQ)1m@O6+Sj%47p6(aQvpsJVf^bRD@K9;H%Jl%_A#$@MJN$@M(d z$@NUt$$iO}l{*`?Gk^91{!K&VD#Cjp5#J;?y<_`5Ir_M}K{{$I%auoDD zA%1sisVe}KH1ruyLm%=q^eK;$`!eRl@5@>Gn^UGV%{^aA>?>szS}$c3gB!cQ93=KM zw-l*Qo$B?AlxbfM9G|SW2exPBH1wp_$$e=}>)Y$X`};)$PRWVKmu2VP2l+}jn{rlK zbS+w!y8?8AbV};xt6oV#$-V#EkB-lf((&a|iG78x#QPbo-G!qDhieJ2pW#|~!yjO% z@@n`43dQT+XqNN&4E4FS|E^h0T=jN@W~an@GfIi|R+JL^x}S(&B1t2E%T(SqK$!WcEAyD%sU;fiJ-@5R63Dn7b zsh8UGC0?Yyw5O?Q6rz(7Jxi$?@)=Y$ZR?*;LEy%_2pcozKn}h&o^pOq`s6npYo;;t*6b6LrZx(V>WOiszN(QJ^g?mN z`U+dM)Ow8xg_0(1uGCk6X;O@^YJkx*;zpq-4pL|3#h;D_ZbQ>O%7Hv8v7W$`SWiky z>?>3iiLX?ZSWkH>61`j@Rx5t+rRwg7Q7(xOuU<9TonaP5anPD=)5L8+T zh=>@GhXD~=6d#I9;17Ze+M*)j@*<*w2(QKM0g6FT6czrr?)jbSIp^G)y#MFlpHF7G zzjf}ZTes?-UZzuJ1}Uf+qo8Jpg36xxT^>{x1y;EOS!K^yWzSf5@?y|`30`kE?OJ>A zCBJfk28p*A&9{kiRlak0pJg^1ZZ;flHXSZE-tWTbYwf1X{7skno1V&Vc6|97Tn#PU zjzg#!cEnSE>YzWZ+IV`a=RNvXuKY%)eO(;g<$l9=zGut7H`<=igqH(Z9F38e(|$Gh zs6`$JO*i`q@iKig-s~sDoBag0Q#AI9#dn`RSl{*dM*r#`Hr;FrUK*y{YzpGdrohdn zz|A2?FE``}7F!tEK_$!No@4J+N|u{cvRNf1F&jE5@|^2;F|o{Dvdmp_BDWbs$}P9D zOd?0nGkvz{4~FD7Jj_d5G?A%_kqM(Ndtb8bk7qhK}V?5fBWJrBE0?ue4@ z7)Exok52q?kJuzh{ArI^_Pfk&28*K2U=f?a3iB}W>0kNW?*Efy?CZc3xcct2~f)8JET8SXvt*(LF`*sGt! z(;~ij5qY_UXU5bL(^dKeX;yOGa!(X{C{{oGw$V_iq4V*vmlH)Ad`v1Qcr#D5NBFW` zWaGk;sj;mHOQK^NmP}8!nUP#FGr2_W@nSP+g4_8*Zs!ZRoiF5O_r=}?HdiZmo*!Ha zH^qrK5pA{!-&~M;u2?BPC69f88U35BZ^M7)Fv*&gZ0E0r>;aehKR&T{L1Czh52qqK z!hU8|M$6q$a^yS4<*Ta5e@`x#MgDtoxol@&7BKq}lWJ#el4c)e(Q+kAPwoF+4U4J z2dV6fiKa@J8ah95==2=+leyS;jf&OaU77xXF|gT)*cXk;BxXWVwB53hTW(n~KwPWfD0ECEKl~38{|Q zV$iTa4unrseuDrfqZ_&nzFm03AUA1j~Mu!Lrw$L$K^d8Jx(Gc&_nNo?c$0KRKc0axDDXsFdug znHdynW;UPLY$&nWBw{%L{x}IwgXVyUJUMc#Tpz1ko!98MeVZ;frs*a-@}%<1A#Ua| z+lf48Y~$O{uLk4cvXg$lh9t6!tfnJW%*==rn_(fAEA(4QRn#OQHc5yRNo2Rn+-6`Y ziP;=tGfwz8)`ZiG;z;?Vml?DCnc)1n&s2>J|6AT{Y*4eULCvNHHCr0gY-mu^@u2#> zee?W0>aD%s`=NpCG^^}1tL!wZ>@;hbh@i61tg_Fn zvd^q$phI4>B|**c6zQ4Yj!4f~WzSe;&sa?#=w*~0AGqlqec~(!&L=09BUiHNAVr%V z63Z_7BzXO8))_sUOf%lB74c@ZaJgQ;E0dpx@&Y+Hz6ENj>}k{G@HAcawCS>^O*e-Z z)@!x^Zu&_d9GPwsn_d!|PSR%;CYsoEo!Io8*mRuO^qUS4Kgs_Ww-Npl1T%-{CUS&7 z-|^C@k8p!gAL+J6eK&Vc)OUCF5xLX15pEARab(Q*ba~YGa+Ro$avP(*w_CGYEdM@k zOVsyu`R=j!{oLjgV!pqtN4>=@#RXd2klP41+HH;c7}wI;Co4-DcKl=A|{c67#JukebycOP1esaj) z9G{{e#m!$C#IM)x$4%ag{BDoj-)r73_jiXmdpz9YJ+@t63-S9qcVh1EId??(>DcPQt1-LinjpW}I6 zw<+g&y;wQV>we`tuWN8Uud`EWy_usM&+8n{^MdDf1+M3H4X)?)Huxyy=XqU+>v^5M zIS-K&5zq5_F`SQEp4U~lp4Z#p+<%_e-+}9S-GFCUFVAbYFb~4c^Ey+`^E!u9tLD6} zD(87!SN`Iz=Jis_Z00qb$ETdvZ=v|T9NqZ&dbIL#UMnx>weoUa!_B-_Ue0Uf<-CTQ zd9A#h*UHOzt-PGq@cl3j{CvGlc{#6@m-8CV^OT>jcPKCC^)ecNjxXo6@^W4)FXy%L za$dvDygrN8n_+v)c?~}hUe0T{nb&YLui<81!_B-toBCtsHJp#za$dt*(NBK9-UjFX zm-8BK<~2M+o^oElmHNY8&THl6yoOV&A@f>!Ij@z!?B{jy`pPY*41Am)xEuNI%8!EY zqdbR?QN9d5PI(XfFy)uRk5GOC{3zwO!`qa94?bP_%eu$``|zD_;$-D1R4xmGW!hJ<4x`4=BG6zESz3@OLZU0pF~A4}ZDKVjQkiei(d< z@@eqvlrMzesC*^-X62jUw<`ZI{ENzOh2N>X4*#n1N8okke}><$eD^(R9Db<$)$oUu zPlG?A{51Fz%DdseRsJsc)5`w?zC-!v;eS*9ZTP>GKL#KEHdzOrhwrI;Z~w$y91r^` zKOBCb^5fv+m7fXEl)oMRI^~zb->Cd!@EktT(d~A4Re5n4^P>NC<&VSNIW!KO=XuVr zd@uh*Q{<^C&){|CGvMxAnST*HSKh_>m2cww%0JBc&y)FY<^0OO$@!K4obxOH6X)-c z`A60)`TOsow1kaVX!mG;X!t2V<<@_sU{tcX8`Bj`>`KLI)@~?9KE}8!!&aeDw&aZs9 z|0pobFXiLmu3P4x49}G>fLE1QIKT3ZoPU+fzlHNFzm@YVuXBFok8u9gGXDh4a5%`e!)5@_RXdkBom9p0AVs z4BYifALge-I3AQA1h4kV_*Qt{FMTfDT_F7&&aZqu=O2*qS91RK(m%=h2c_T5`IY~e z^KX#xzvKKDO8*z1V^;Ch2{gU-{*n|6&>canAov z>34GecS-*N=U4tD=YO}1e~I&7B7Mwg8V6UE{swqmc@D3>N5-E8&)+M(kMmzD{e7HY z`6oF4W*L7s=f6z)e{ufHrT?DuEB`m=f1ivWJBG#~ze4&kaQA-cbK!O6=fbO3%J>bO z{{zxL$oa35ehcSUelO?$pp5?+=f9e~;^_7ayrz8E0od;!lJN(@E6R_7*OkwKXIo^R z)J~If%xg zq5LR#UXyv+;Wg#U;qH?%egIy9&vSIU0$x{s6Fj?_@^Ji}@T&3$;SJ>tc>XDw=S6r; z`F`VQ9Ned6{E_gA^5fuj_%D)45|0&}igIAP4 z2d^vN^I#f>>{glQHSntP>F|c~)8P4MWu7j0P5H%e_c-4|s1LU={_N_buQCV2Kmndigss`Agm8_K^0&%Y$| zJPNNVe-7@p$@skvp>e1v&){|CGvL|nGSBJos`AzFhVo0``5iLPN8vT)UxK^;BjdjZ zuPFa-cwPC6@a#^RXa7TK9IEil(d|fhP5E)~y7DFPhVs>LcNeXf^S=w8DZdt;E58k1 zQGOr1s{9dnP5HC%y7Jv#P2PxysrG~ z@P_iA!rk4n|4+j+<--m`eNa9QUQzxgcvbm4cuo1a@VfFrctiOI;O-vT|C`~N@~^;i z%cfxDRuZ7o@e;(d|AK~bBA3Xb7 z9)SH3ct!cM@S5_G6Hp(NkB4Vpm-#2bE6V4?Ysxz~zw!;7|6ZB@1Ds#^&75EPS2(}& z?VSG`GXEbqzw(zkzw)uK#rP;c8lHVq=5L2rl)n{TQ{K<{mA{Yk*Jb{j;1%U}!E4HY z2yZC=4Ltjn%>NR+qI~q>s2j>B!W+s@f@k;1{LA1K<-PEl^2^~3~-3;aMww+eil@^`?uE591PL-{T6mItUm zod4_aHsue)7c2iGykGgq*U>m^QGN(~oASx*|*m0!vDC2;q+^tJGs^7p{= zCuIEf@P_i+;nn|^@!yAM4e7sz*Ok8nul!oZA8-tfgL_i?(eRq`Iq>{9GX8DwhVnsp z^|vzqgYfKk(mw;QEB_|E@_QNo2;BWa`VM$a`JSyf{{KhDPk=X+9}BNOCF9S8XHQG- zf!CE^2CqCL<8OkyKT5wFUQ@mup8rY4KLu~V{mZ{_dj+07OY!Vu-$dh3QGPVMrhGQM zq5Ld(_Gg)Y9p_hmDd$&yJ?B@xjq~r2`M<~cl|RAxmH(CVE8nLLb>KOf|8RIk`LXbt z@+I(w@->|QFEaln@QU*5;5Fr6fH#zX2cA7I^FIc!DE|w*rhKnSG!6~r89aMI=AQwt zC|?AxDes0il)sbn|5fJy2TUQ>P=Ja@BQajS)&&UL{X$}fgjhspSB;Ms8LpM}?z*Wr~BGX58EH&Xhu@S5`7 zrqMX$yUF-N;SJ?e;MLt_{HgG459yuoy7G%J@^@Za?Yg!E4Gl!1MiO{8jLV@=w95Ei(RV@NBg7 zpTg_PpMh7#$oLU6XdK)D(hq^xluv=@2g>+2!yC$1!mDFt{KfF>Rnk8KuPeU|UO7m{ ze;e+`Nq-DpQ~o?WKUl`^J(I?vq5N=obv(r{$9$i~@ybt!=ZDDnZg@@k#c+41jQ=pa zqWnMMb>;WMvscSJKZRG7KMijvA2tj1;V_wJ9K5FdO>p-b89xtRQGPDGu6z)lWirnP z;8o=}!yC%K0?#MNJlo+l<$r*?*UI>p;T7d$kEQXcD}N(AJ6z_O1FtGy4sR&G0G=Nq z^IQS1DgOlA9Vz3#46i8v5xlPaxA5$BGS5HZRpn!j!+cTx26+B@nJ0(Wl%EZE6J>lq zyrTRHcwKo7p1nclxd&cVz8&6B{y*^iD4E9{Pup8lJ`V1Vmho-yit_pJy7CGR78D?C3&=BdMLaDM;zbIzmukMOLO@^Jj{6KEVN%E!TL%3I+Lf!CC; z&foF3Ec|rt*YHgFi|}0ezU{QV73D|3 ztICgq*OZ?DuPa{*Zz!+A-SM*jABAVizX;Eje-~a+{wsJ@`Sb9a@=f!AK58zFLsj`};Wg#Q!t2V< zfH#z%4|loj|9jz?@*Ci}@;l%aoMok8ytGcW{2?4|4uFGXImDU-?U%U-_6*P#=^Z1$QUQ{O#~u z`Eqzw`2govekJEGo`C#~$Ny%|ul%c=U-?6vU-{FVf1b=gd_HY&u6#Vas(doMuKZNE zJ4NPS!TFVM;{3|5;rz-!$NA^W{P%Hw<-g?o%KyUom5*A0<9~t7|5|vi{8)HZ`I+## z@*d8As?2{G=U09c=U09==U2X+^S@cAn;8kqafv3}U zW#>?Q25*DsaNh5W;fvuT5#Ix^!0&`##re;r{Kvp=<#_m2@CV@TJc{Sz|F`fQ&f_!E zZ(#BMZVQ~pCxh2jd=78vp!^(v4m^jqp+E10_rv#rZ-rOkIs6`Y9o_F+TNOqp9=rFieC(W5IzFyJs-Xu&f~us?z(8Z_<83hcm>{uJomtBaGpmG zaeg=-Z-0b0;A4;)E};s$HN!HInOe970$<7KfD3w`fw$@WfkS; zJfDWQ!MXq6famZ7(f?uockDd9kB0cs?t#^mAK~r~!4Hg{r#+VEc^~imdB64f-bcQr z7&m)f_kFz=@%p^+S#W#)`6(gKLFRn#3%rl<=OM2aAL#kp@bJ^Qw+6?9A-}%rJ&T+l zz9$j?ZtpEVzNf!)NEYWVOT?cU+@5d${zUxs3BSjCv0i;1`|l>=f9X9FJ){Ruc^^G| zfA;{!heQ5WxPQLj^Z)bn*KW&bJX;XojRvpy{oCRWcDJf=_(tfDz3#wRpQnh|<2C{L zHy@XW%$Eoy;nQ})-; zuN&dV>_L9kSn~aYN3P4Ta$s=%;D%MJT35P`j#KBH(XnvBnM*r5Tvzu%_v*Fl2fGJ4 z2G@10?CI<6UhgBi`Z`wk^sVUZ>F65l8(81bxnZMQ*|)C0r+cuwt9AO6Y186C9jn&% zuI=a?80fsHqq}!-;3BtbpmSY!N7sgR>n`$5hCJ%3>-k~l0^)ILJvN``x%lsvX zihlTPxWF~%Tm4f?Gil^ z8ATt9C1pOnq?xVgefyBTHMEsowzGC}M26%PeN;I`FYPj{uRN}XWNq%Z#L}I&MQ=^p zg*^k}phyR#@|PJ>s|d5kU*a_!Bql$W(ymJ^-TA7U<87K#-o0&5 zu9s_KBiA4EvGL1IPQrz*)pghCvWq4&U7*)+xPqI}$c4LnH|Q$hCOCG<y4XU3D@qRu8u^z!FLXXxszCO&zU%EXA# z#avAqx&)Wu=vAYAZ<1F;OAPUp#IZ3ccA4a2YiGrer74MBQq;28Ov1&|&31+C<{D?A zI2jGa$!I7}Mk5!0Ew&~UClegICTtNMUtuUtCP&z8qg0$M$8%6|GSPH>Tg&lP#x7ax zHzv#plY@$rVcNNt<4LGEnP@6bhUow_OvTAC6(_?~oD3(fd`icpiB4ROk7kaEj$RG1 zI7$+OMa9Xaq2gqiij!d!C+ms9jb8lScM`?PQgN~zUmq1G6CDbR z(NHOjQgN~z&q2k>L{o9H9A9PZ!s&iThPq;MP;oL$^UZQR2^A+3P4mYv6(_?~oD5TO zGE7Ik;hkQ8*+lR3qM#-k#mRbNu&6kha4JrQsW=%%ak8EmTofl0kK$xKF=AAlOgI%M z!zfP1QJkz(aWanLWE`)YtW$9^j^bn-#mP8|lkrfT%w=Fhu`n8nlhII|jE3T5l!}w( z`1+_gndnehjD|{Kl!}w(cn&H~CYp+q<@hS8IGN~BSBz3|GEDQ$ay$tYClgKc$1oKq z!&ICMQ*km(#mO*DHN*7E$uJcs!!&aYqc~Yl3>Fn96Hdj+Fcl}mC{ETBgNx#1;!&Ke zCq|5llL@EdWEjQCIEs_?#1Nx6nRpZ@>r|YKqc|ByaWanLWIPlnb1~{rER2TYWHb~f zqoFt%rQ&2czCJ2WCOQ-rqoGn5rQ&2co`Z^$iKgOYIlf9NP9{3k6{A#~4AXqG98W^U z$wbrqF-*nDFcl}mRGbV`aWYI(%`g=w!&ICM)66l9;$%HBSX7)$I29+uRGbW>I9X2& zE{cBOTaWWc;lhII|j8bv39A6(5ClehCi_uUij8bv39M3_;$wX6evK(I}6(WWb+ zPKIf|S&k>6;$)&}{urj>WSEMRVJc3BsW=&?sb-jplVK`OhH2&)Msc#97%VDICY*|s zVJc3BQJkzN1{cN2#G^P_PmCB9ClgM^$uNqOaTF)(i6KUDGVv%*)~PrdM{zQa;$$4f z$#^JEv!cbxXedrbLvb=1ijz?)PL@M)vK(JwC@dy8R0^Y1oGiz4P;oNRRGciwS4qXm zM2EU!l!}vKns1ilNvJrPXqrEUsW=&?;$)bLlVK`OhH0u9rs8Cnij!fQIfhZ3tS1JG zijxVa;$)bLlVKDm>xscdaWe5JPSz76M#ag5Q*knk;$$4f$$DalQJhRXij#FJPR3E3 zjH5UiM{zP9iqoXFXmzq2s)glHpDc$0Wtl2e#6yXScw()gz}WCmGAvV>ig+Ro6)GD~ zl`7(i^-`^}@uALGrfOxKW?;kjH8|zM?Eu+ zdS)CG(m3jwanv*8m|e!Xp4kPdkwZN*4N%XFqn;V(dS(}-#+vJyX~Ff(E=Ua@>X~VP zdS;yKnOVT~%q~ccIM*}Ng6o-GfO=*Ya6K~%xSp8>T+if!$^Hu$_PbYJLuHZQyz&}m zzR^(QjE325G!#CgVM-be)zB!FCCicTkoq1|b+FO#?TdW@v`7-)LYmPwcYJGTR+(t3 zj+Wy?9s6>r?_lhUc%G?}n%p#xEywp5O(YXdQ`K^OeC&&)#Suz{!o;IKTBm0n>xsRMvSQ<@))_~A zvYt2)P@PPCC{FS_R>g5$lq{p+=r9_luF-I)8x6(DXgFYuhT>$Dij(EYcSwu97T>(s zS4)fN_y$sOva5`5BE3j6(RA2aj(3m_9vdBBW$cT1#ZC-gtu{%hI9ZP8ro+`l)2y-_ z-<5PsnrJFchN(DNj_(~RP9~a)ljV2^sW_Qv6esJc<0`S2QJid^#4w^b*?1~W)~Prd zM{%;AI=&Kn8^y`yq2gp5#mRc&KtORa@nLev?^tnhG8&E!qoFt%4TrkXP@Ig01IB15 zPDZIXSq{a?a(wfsIN9j<22ydd(eX{B;$))fu(cfTARRn5I=)IOP9~a)ljZm->8+!Q zro+{8e5mMMl!>Ne(sF!rs5qHudedW=ij!d~PL>nLTD&JHP9_W9{8>-zWfUhHPsPc4 zVhHdS(#BJ9GLGV8J#~B~_BM)>%|pe>IEs_?#DRd~Wa7h-D!*gJ#mQ(mAdQCNWHjt; zqoFt%4F`(R8?4jt> zC{8w>ij(!k5TH2Ocq&fDQJk!&j<3YtMsc!vs5lu%ak8E`5Kx>hP`bx6epwMfH4}1lTj*8mP2u}9N#=DPBuEefmEDqbbJ%3IGJcVY%Rw-NC%IN zj<1r6lZmF{WI4V{Do!Sv4p+CN2>a} zA6F;K;gGZ(>XYTL$1R5nWjP!+mP3uQOhqcau;tz%L8!i3-p~Kkbq3IU!#O|fT)y7A^$l%vY)7Hl0 zFI}deRJ&|E6|aaV`WgKOfbS3LmrcZf_cJ}he}|5=NbNJ6Xd%)fH5&XUM7we-V>T7) zSY$!+$V(jpC}ojURLkrF6tl>J)Zu}0=35LovrKWesP+x3__R9or@qwk$@rsKYWd7i zc&6+k|5Uf4cX8kP_Hd>uweG3AXgh5uZKv&`?ev|roxY2x>*Zysw)}B%biMenJlQt%D^fwq?MYOSay%jxWXQ6euQ$;)^eIt&d~O<#cw1hU zTrb`Nr^hN$1FZL>%rZ19#=xJ~F4`=%Y)G?I zC&RF+l+9+Q|2!nVnP1jlyap&vE;;lyNI1tJn4QQbZVmuJwH#YdU+odb(Z5g46wi zuC=`#8`gLG0ciHU7y$ox#rpNgU98%z?DtzW(0xJ2Df2hERek;4syFLn9a!~_fwhBX ztCpTN2m7RVVByJ&=XBr%jm3FU{Rv*X2Ri+EWjkgsJA1Oz0h4urYh8cQy1~vB{`cSj z{a(ZO{D5>1^t;yHzQOL++3gFC8SGq*N2_}`w655&wx{cuwOy{Yc(kT-{TkQWby2U+ zN52OLXvu}$1MAoJ^@;}_e%U~GPiN5p_xgJVU27P-*1_(L{(f<~TfeL??BCYzH8{cT znl9g#A5jZB(=D~&`{%FpVLp53y0t6)s{4FG|D!dmg);gbH5&_6&qIj z#+|+XJhS|8ZSSf+zTdfG#X$Fk{HSMbZ#Uof<3(o({{Q=Vh;Lq;5}D6qJ#%>OA2~M@ zz~^fZ=zrk!$^6h2=QrQO|Ks*chv)v0b4vkPc+~vC=Y3|GAX1;N86y zce(wzBFNwT>6u+|4tZ{0ACdb<&ed^Z`PJc3^M@Y4^ZcS$hV*~p$UFp3#D=~KO}YQP z9{&Ayzx?GP?Q^ux(LO_a-G8v#4;`%s2b%h!(fK=vVm@!%{x3`Flls9)CVRdL8Yr zomebw-ty+%aPL`)K`t@7wwMInOhyz2o!6_fz{de)-TFx8vV0 z_=Q8)&*$%7gZ6rVQ`Tn2m;Bu#7jJ(R>+eDPiOtY(FH?_S@sEp~ZOXYlUsr+`^ZNOB zQD6B!#}vP>$NIMnMSow%9+YVRh6^Zi;YBimZhv^9{f4J0@=2bUNTb_NO0+-gPZW7A z@2Euk6VP6d-!p%u_PuAv`%g=0JX9A$gUTY(dsa~U3I5k`e=u-&xULuViT6E4($8_X eQ~P_1C%7RuUN6&Ve<#-dXM2#&R}Iud_kRH$DxHM@ literal 205784 zcmeFa2fSWIwYa_aNltn%q$ekk-V>4#Y62v9=%IHKAPEFRh$J9bFcJd907g+jYzQLg z1wpThas>lwK(7TmmaFI$4YrHQ_3yP@zUP_s?(>$@-k@Lk{XXWLchBsZSu<++OkvIB$iUQi7XOf-C%|qqwZ_i}u+zeSh6g>ZuLsNX=w+D9uaN=378&Jx4VyV9N=<-6TeT84T&1SD#d;Y@t zv)8Sfxo++H%deby<)Vc%7tWux@zPoIQoAkRystX$lvGne$0qJ<-w=Mvfaz0@y!GcJ zPx;6*+4PToVbIf``@qndtM?bS_z|qz%_irdHgb<>Cw@UY@nhSGm;P;)e{?(Xhqn`d z4)IO=YTaNW+A6BiOBn%7>ob`xF+Zp8}A65_H=D=s;2?Rvm3 zyyVjLrI;1jtByJHu)|l(n>D{BG;fx4ZAgDzN`7%q0xl<3{uXjLWbN9%O2oQS+~p(J z_7vg@GvogJrt^}oj2C^(h~b+fzB^&dD_m1Wd`p)maY{veS)*myoQinmvv7+l;w$ye zl8X4se%D+PFHVJ9UJ*~jTHNUs@x5ANvutHWyu2@5^OoQAXx`p<@ax8B&0BYFYTW&A zq%?2&LXXc!j+Yk9Bk84y^SSmPw}g=Q7n%6{voGN$PV-(;J^ysN-`jgh^!(0rKhk?i z^ZY~UevtQ)~%1?$_+#KDoKSJ#yPO&TZcIv*s;7e_{E_M?Sgpp~IJC%}+kQBzaG6KXgg9`?UbR zxTgO&I^(C`1ffo8o_Qr+^OisNYu@(U6{9|FQIcoiIiEA(rDw@}Z7Tnq&r6jxvx@u2 zOh2Xh&A&?pJpR93D4==U3(b%3Ufi7TYW~LmZW`KBTJNH?{^PQ9J|FdOK6rod&n_Q$ z3V^%UgV;H{8YdBz|1s6{xh5VM&07{{mpA_U7T{V6`@H}!J$=seuLH(#^P7M3ENt2K z=WU;y^1m;=v}W7Z8F;Ijw|AX5#pY~V_UE}fo1fgef!NJQN|UWu65JBO%>=I_xaCoS zvnzW>pyBG#+qW9CZP(|vk({dEJ(-BzKl}SjFGX7O?akY7{G#RdfB2nN+I-WposZpa z!P}k;hy_LL*CTfK5F@s2U9Pv~QN8T){-65>sk`4r!Mm^J(!4#=w>|!d>i#iWmwoP8 zv;3(#by!R4f1CPD2be{Xj}17g0=X+K?a8gDgT$PrEhMZ47R$Kwt?m=L+YwJo0v}@~m zcsq7&Js&UIwe^CyTNQV!@tP}WHNT~t+b!qI)wPsUpEmXW>ePiTusx0@_2x*G3jIHo zUAwdYwUg-C)K!Y<|EZ_@Kb+*O|AS9#**WgO+4EmTYixg~*-O|zwuDMsWag)TO$oAPd-nM5#%)h*Pq6(zb?q|A(*ILC z^Ct?(iz*@S4ag*12#?Q_5S}}2)Mu(wXSJk0W9qv*s8uesU+diJa#1d&T6-KrxrbM$ zmf5h})QRn--e79?_HcS|t0XN`VJEp;==XuYbWXpgZ(5$WNy1eD+ztt^s7{^L($qx4 z(>tiRAYr=||N4Jg#Gx79)ll*8)u}a9{7HMMiHeU$YHN8aQLz%GDng!KU2MOW*7iFV z=3GqbmL!<@mPeKChW^)0s@6~Co;^m0ML?{1a_bKAzK{`kJAr3&0`DO3bOV7~31lYS zUL@U7B)z9ddLMxVerJ(%SCRC=BI!c}o|VD&*XAud^HMLKPtU84ZNDcEp}C#)T(o^H-}Hs^8O-8^#xW%YlU|D87tXS)u}b&+eGS?z-`N;Vt^#A;OSnf$nH>vNFx2aKc&=a^b0lFp>nu3AdCK8Bh$B% zS|!t6`d>F%8kL{OWtm>1Os@h0d3}gX>lECN6L`kJCkQN6xIabUAp@T#kc9h@BF|@w zJdYK5b{2V_Adm|DLXl@zk>{x*&zFllUm=hx{aTUd=_1cJi#*>h@_d)T(u%&(Q0g0F ztNMnq?e~qIb@YwLJMJ5QeX){-J*uB{4`2I5DT=(6b$r#6?$LlQ*jUpQzFwVL(-l5O zYDHIgYgJb$A@cb4B#))8@c7Rf=&1IB5?1Z?&`H%5*Ytu#)v0BfPLINoq*nC;WN%f6 zyKlMw#A0YE>`j+W)$Fu%pdhutSJ*fk48WKzD+|zqfcB zm_Q(j@gxE}jG02<69%RcNZnxufs}a`fs}a;fs}b3fs}bZfs}b6fmFpJ0x9zW1XAXM z2&Bx15J;Jq5J;I1Bao_CN+4xEfi3C#SlL@5E zrxHk+PbZKvpGjax#Z#tBsedi3>R-mT-@lwjcJ}P~e#iam-MGZT&gkmAke+hsQkX7kKyW z+WJd8rc=A|0C*k`fM4MO@M}B(euD?VZ}9;59UcJxg-1m%-~sS^JOKWH2f!ck0C*7( zfd9q=;7@n}{2x3j`ZFE?|APm>U+@6eeeM2iw8hIJOKLRQPBWA00!a# zFbEHT!FT`+!2@6@9sqmc0Wb`22l7%HZFVj7`2DJSys_=~c(QideQO7m}s|+ zIr&p|;E4&7iZ0*1|8*mj`m*wIB_|-hFT@{zoy;R(i%_12hftm`?wCjL5K0FP2<2)# zq<;+_!h9j#&RttC!h2@d*0p$u_QiOBzZwtlb$EbZf(N)JIlwQ)1AGG>;IF|0{4zYi zH{uQ7wRIC7;Fse8egz)juf+rWN<6@?!UOzuc!0ki5AZkO0scljkhmHT@HgRIxog?x z9lMsj`MzDtuGzV3*_LN^ExR_`wQTF~UCXYUvuoM)&AXP}K%Q;nc?)^AljlbA+(e$6 z$@5n7>>$tER_@i-B<2f_8#)Qmptzy&-=-9 zCwV?Vp1a6%H+eoto_i?kL*%)aJol03!{qr0dH#hw_mk%V@_dv$4^q}c`tvM5Uf!dcT}g=sEjv|TBS02 zbfz+nit?&yTbIgs_Lo(7){GMVKx)=Tc3O?1Rr$wCBm)mvg&&d1YLc zJsq&!Pms!(2Bi8hrolt!4iZJiG;ud1?uO#^si0N42i$HsudA-5ocgq>XIG~#Y>~ho zr;vI`q}tw+qAS_cOEID3WO;=>{RM76%|NB~xadVvp4_^dE2)J&-RvdoA6r7DEi&`A zpQi-b(qd&0R(rZ+DJ?C&!{Z42Ps)Bwc8**zB4yi_{ z;-MgsCRL}_kg!Jw6&ECIx8isItRpHuP@P&s#kaPXnyC1iNNtyjl_*savPX5X6?*+N zXfcx1ElH@E{VAVidwL;&W!vKzA$I@Np525n9kgrfcs#~kd*gj#*VcXT=-?9~(p45B zCq?9BJOHLd)FDvZk3t}cy5!-%`b%~qQ>J_k>9{Wt1$yD`N8q^|j zKY6yL$Cj3@vD*3Ujn-&@Z0jJSRgWIF@P>r zRAV@|yiZ1L)lFbflJsGRTHxqvJZpsaoP>#`l!O=K<*1m)6fG+Y?;3@7IuKX^mqW~C zx;~LWGLxT7;070iP9?Ci3xU%KB&*w*MV_;ZJm(g9Ru*~ACy)wURpePyze(dYrjMsk6=zhVyni#}ogN7+hju z*>Ij%h~Zp{7KZcI;&yF77fh+?4!2gP)^vv}Nv-G(Z>{PMWy5(zcPJaqOIU^Byfs?C z{ZWIG%PdC|-=MAG07MtN z1t#TQutSK6Kp^2e;n_-!;!hCRY2XV4np`#7MPRdmrwF9g(k~N8-Qg<)Qs%D_NSU7| zkTQRhK+61W0x9!%39Pi_X9%RsKOm4Y|A;`!{9^(s^Rom}=ARMRDb&viq|Cn{kTUNk zkTU;@K+60Z0x9$F2sDZF3j|W;KM+WnUnGz+|A|1#{AU6w^Ir&Tc44a2lWGj-6|wC< ze0tQ;zrt|dZvQ&}2bKM+Y&e&#K70zhG;6m!fR^|GsxX|(=juV^peU~pfSMjRp*ppu z$8{sMqQ||ns>hX3YxMvs5KM-1C9B17-Ws{fzu!^6yS_TL+>6p!b1kV={jO{{FB)5h zNd0cVD6iD-%7*i#x;pH4Uwx(u&zh&tPe`pAI+YFQ1t#TwcfbAa0U(gi<$q%+q2qdUY1QOI01QOJh1X881BaoopKp;U~O&~#SCXk@6A&{W1 zC6J)5BakY+fk1+K3xNc6BY_0v_NN53gFu3MJAnlC4g#stTL~nn+X*D7I|wAG_Yg=> z?<0_)-0_v5?jkUwqK_A*a<{XWdw$te-qtg;o&n|$J04(O{oTqwUN)5%eLOa1q>e-% ze~9I{j{EqmD6bHgCFD2fh5Q->K?7 zHBZ+MRHv5vZ0hA(NUiGS^sTdBsw%Gxk$U+FQC_K+mu=;p_wrwUyQ@u=udJODm`2f$r;0NjlSzz6XFxCak_ z58(meHbE-74-bG3;{osyJOKU$4}kme0C)fofREw<@E{%)J%k6q$M697I3581iU+_a z@BsKE9sr-h1K?pim&Zy^@ETipMQr=ebuF5mjhkb6tlj7OTfPZuEwi_>t-I*+k3U;1 zK+W9jLtWE*X?e_kUHwo$I0|d0!yjLrTGQd@l3LN>-&NJ&%eL<74qwL3X=NpXZBHxT z^NrNn0>PRt|IzByatBUbeg~;lUB0|LR+LwUNL~KiD6iDzOKqrYTKVGBRd|+{$9`@H z?v^l-L#1hDd3mhBr2Jt2Zy~--d8`UQNZX6zPO?beK#{+I}JmB`hquL30z)i#h zZW11FlktF?f(P7GJm99`0XH2FxEXjWcWs@C2iz6xp=_M!vk(#JmBWz z0k;5;Y8T=Gw;vvGi|~Nk9}l<#@PIoI54eNyfIAouxI^%$b}=4sOYnd@6c4z=@PIoU z54fdxz%9cA?g%{KUWIpGS;cfKS(*2)8dezlkExh1c08<@{53FaQ8B}7t<7IlEZevH zKL6DOT?lr~AmXppsWm#~KS-_6DYsPVloBHBX{*pFkN>PobN(y00L{!gRd>f#S6-t{ zR#vB$bwko7hml&PP3XfbI~+g^i1JF>q=t+gP7^-#l`0a}3?M#DYSjROHN08X1BlTO zE>_M4o{l!T4hSB2u#L5okKrMWAIF=(0}l_O`~)7x)KB6eo1elvnFk&oBKm2(b-T8H z1`lC=1P}0k!vp-Ycz{2O2l!)nfPW4T@SS*oKaL0Z6L^4s9uFkGfCsqmQ2@RR5AY}P z0DlS(@Gs#3{$)JC{~ZtTuiydxRXmXR8Xn+Z#{>LnJixz!2lzMf0RI*q;NQjr{5yDn ze-{t%@8N;OGkAc19}n;!-~s+aJivd12l#*B0sdn=z<+`V__KI`{}c}-eufA5f8qiD zb3DMG!vp*mc!2*B5AfZ1fIp81_^e*3m)KI@c?hc1H2m^;N9^6?|}z+PrQ|7UDmy%%SyY6O2Z{%+t+29tN+2_ z(pg^urxsl{x@BuX<#4IAHDI~(qYj5l{i3jTR9jPZYK>}ZAhklZRS%a+c(q{zLA#}m z3l5hm5o~+7bjeexwFQDT3hqtSsWl4jJW{I^TzP9iQC=A$4VPv|c_jr`YC~Par7u2N zg=dX|`yQ!P3a-30punW8;AW}d?y(PAElCI4+o!GT3mOV;hc|g@8*4XyNlIKjPV)-8(KVrYIt5PhR+7ruS>iz=Q zbv$+77zGyesd?&dtxl~G%?nAb5Y6iKp%QNGiYE5MGg|LgXue)KxUi%0L#N@nlM z@}As%;};m`)oxn3p2*Usl`UV`T(d=G&6CS^G+@A6_VzAb-_h0Ut&Lu9@8VZZUOzG1>!(I~{q$(B zkBs&D*(R@#xmkSK&M97>nBnycbG+`F@AaugUcapIY}r?qc>S7t%9lO8-0L?__xkOX zUcY;h*Jn0({ed>NWk1^N^~XEBK6|IvpFQOD=R3Xr;%TqDpY{5y7rg!^!-To)cUs(+ zy|BdVA69yOadZCUvK!$+_Unb)m)+QWd;f=*F57`%K4#puCwD*lLsmK4N_Z_?*s|=# ze9IeeoOksX(l(Xm?WefAXh?bkm)%7_enLi--yUAGBwz=I&#~0j+y#gdT0CbzjxWa81Uw;zunX{_lL#%$H#2@)iK-tw3HHF z8uFv&EuYVu_y6_fzw(9dv(7p6>_g8v^xQ*Ne11o{#y@@@z2-aMrB}XvkNzKZ&cZkE z&F{nfeotwW&|Qb{JA+?(RlKGK=c)|NH-9(sZ|<3AUAi`Q>)xYhFV8Q~<&A@SG&VHk zs!AOtWnF6SjW5y->&A}m-n(bl9({Ur@6)SK?_S+|_3GQbNAEt3-FzVx*Qa;a#zrb@ z?9vU#wXqvDck9xnM25z$UD|RD4Gm)0qgS^fJwYSu(cLS=cewRjE#dY!KCD~!%fAr?#vlFt@HlM{C{TFOrRgt5^Ahq}3yjM1A^Tf?_vwf*4 z&$?}%m~biJz$t6ycLJ$r@w<@UHT>Sj?{4BB=JyqTKj+u@GU#J}^1u;<2^R`^YwxVB&_<2tOoj>O8cUQW0Z^gB(S zyKgpc-)zzT*^%qkt-kQQbxkKWO(^hpsp*2tR-dV*O>wCqqGHcggIHPH8Rr6-g7XQ^7H#S{(*`=3nXnO71O&2xo z+jQ7*8|~)0rW&_m#U=9=EL_`k)g_nAnb8E&GnzJDxPHc^>sN1_amjgC9&^lz2PV)O zuqHDQcW~2+ODtf;#?_nVu2{Wc?V>4DF1YBt%cjnq+BRI2*#X?V{SstleQPegtV!xL ztvz_ofol(%xaz>Q(+{4P2$5ChGi*C3eae(l!=_DbA?MVyCa#*k_MEoyqS2MDS$pC7 zXiXwSDm5BZTOSmwfIIK}jR7Vat=b`Mb$;&1fBB**iSQ*-Ru|F^9oxfK=2f7ZwS{jB z)2gcv*0fV!TLe`agQgYyY@u9g66jc9B^Gb&m9;6R^DD))3ZgCkPfzS`v!Df0P(_{X zRk<*7wpq%eR;5s2dj-v%6S+yRaOrunHyZwx@!u=szgNb8uZ;g*8UIyi$Bu)Y4)8k3 z@DGmv=Keo2{;R6xmGNI1H@-6ddu9BGYN!~!HT}Ob{@d@LH8$M8gMx~2W1Az;xh2Tz zL1js8&dFA0JF=bG3t3aXJl~u@ls}sfXjsy)q2bPkryH^^bGoc#)vca9bLuF^+B&N% zFzOhe0_%=&F7mvPwcoCCo~Cx&UYTckJM^i}v$;(g*5-Mr4LY~Z^K4$ri?;F%sNq-J zd6rc1w7onVD)`=ho;zD)qoX`eH-!9joF_{%)>)o8$l=R#ugssa>=pYt^XFIW=dak$ zGgcB_nLpL7NIRJxb($QjEpe83C~zJe)ZQgCrDqEF#&@OBm{>0@@;4IGkZBC-lTwFd zuJ;em_Tn1(8`J6kJyL4l^yPubKQ?ovb6Q%08J^8a`NwhXoAM9A&$97tio5Lp7CC$siBCGuJt+3hqo>k zwUX${EHg86@ik^5^+sT+qcSEcj|BCs;qQNE$IO! z-CA1IHe|$hCs!|E`*0QWUi^AeQlAv=2(n1)M+trS>kga}+LOQDB=%0!C~~#u%ds-A z4aIr=5o!;r9B<2WenQz}yf;Sv*EgW*K~AY=tNpe|56Y36(z0{chj#X+1Y6OU8l^(F zM33mRot2)sPMB3^b*8q4q)4K7i{0U@(o3bwd zrC0F3Kh&$2|05Fr2T;N&po0G+DRVDkI(NbUQBbYgHDvo#N3?S%|EB;wsl@-u*)Zrh zwQl~;V&OmdKLLt05uOR=;}T8S3ec&WnH@-d)7UmKA1tP4^Vks3llsSk*Z5AML-N%c z(!CFmeG~tCao=+f_^+(X|GqpwEz4(PLtXMO|C_RrY%3U(@{iz)Kf|H@#5(yug`Q*o z9{~I)Xtxh|ccZ*1P;pEh?e~exkc~RsOi_0A^MAj@{}cIc(m~n5*-6>q@Z*$hHnMnN zxwv*i=VvEEw*#|dslOpRxq|-(WcBlZ4gB8#^o8*MvJ(Gam7UXWt>uIfP-_g-9}53R z133oyZAkp6m;Yms)`4u7X~_15YX$#@Q${`dZyw{FCbsVs{6Ca0BP~h%pOuw1o|KVo zBearDIfqksGnk(Q|IeZghfw#*?6^Al-wbRu|J~|SFaOWV-kNQO_9teyw($RK_<#K# z@&9hdYBy46!T;;&i+5#i5%0|1lluRUvyWxF*@ARo_L0Q@577Vjl>bvI_?FuXFcw;{RowDt1%$`NaRL zvX5qO*(3fx1OM-%|Lx#USMWdXI>zCwY;is(Z^}>1j>vzL{WkUgK6&up5qW2BM0Nx% zxBp#~on7jGhh?wZBly#{$}KnCr9@61+1zbotPf8Wfes86BI}z6{!dilzbOAfUHZc+$|L;l}m-v)v zApg2EQs@T0g{%}cn5)PsRDI6*M%P3E$89l(kfL1}2}yscC7m0{=j_CGIx|tG*^rtl z37!RqOtHisq&bJTJ#xpYJaev41a+A?S2_KLpvwxc_Ly;5xSrtYci z90=zL%8LBVxDyBGZNk1Br&LP6C{sEr9idN5i(c$~q5X`FJdw+k0-hi)a+mXkhA~%! zgf`?~$bIBZzQ9HML;FMYWRaoAXSbJT_tun5@5GQ+}lHHZCb7bok zW3d%S=_e)ZFGa{+Vyg>%q~zPLtRZYx_7vM>t(I#3J$JSGUmKMDO6@p+Uuem4xzWpd zq%>nI)5Tudh+n!%Z8Kzx3;l09!iD}1OM6IBDWNV;yP4LWeqb>W8VrR71Nf;62XL=$ zlFog}mlHD}QBa#vAK->ihjvcq|DpfQ)t!{k|AT?+&0V4Y2T`heY%uj{;p@x2*0a$6 zeSz9jH;A&jg0*@vK7ayE4ljOpDb2!@xK6{{XPDlpd6)4(?C- z(9|-0;rAl7KY!h5c^`iLuzqN1+>4mu-0wO4M?kkx(4m1cT(yuky;J=;Ws7TX%I}_H z%r%&Kf^|D%_O+F={vSoo!K965<}o7Sx)**Q?gmlEV9FTH)t)+nTKXq`+IQ9eL#Sss zxqPd4Pn|u|c1uHhqkT{h&N#(^rAmSjlTw~Qz`bZ_)_Yq3=A zm7#yF!Sbxza`x1TwKA-)HuE{F1ca_r%QzMghtQHacRh*oDXrcL?Q3pR)a`0m^^(u; z2GaG#SluR`G4^oO66<2-30)yC_S6joT7Bv0L(Ju-G*OBgkk20cEVn;D`&Xg=?e~NE z3yZBiwl9)y{~SnLq=NcJDT)3$fV}o`+o7(|-e~{*NA>>*O30D(LjMn^+>yxQNHFL_ ze4+nGg1fq85IsRHrA%w19tvLeXDQng42L4!;@3b(+0V$OcG!zJ_5X;3x%z(qd9?Zu zPIWiXn}m2dZUjJ;YXt)-v#kFIQFGaOaI5Q-8Mygu(Akd*7y3WeKa04br9dMXb^+&+ zU_6F82Jx41uT%d^n>}@v`hPN%oem8`|2N_9gH3TCYUswb(EsD%*A#N?4JFn8ORCzfcn-K`d{w$Ab!vF{|szSq5r2)qW!nf z|C70^)c=#fyNP<|A`4@=&SVw04;nA@|42duNVSwg|4$`-D7O7ZRu^XT8^t>FXl(ma zsbvWFL&&`^?V3(}6Rn+Q@bj@9OaH-?zb{nEv;DFK;M$wIL;ssg{XY-9 z_Gg`86zvH8KMsucC+A#nIsp0D4;h;e>xxf=jc%_;uA9TzauKOQa{p*d6fE4eXFKdqdFSs!cQGm=zr&0j!L^yl4*^l zTxv5%B0hgzDN*M8lhd-*|CY67qlq6v?UTqen7-K^i5f+^`hOBR?X4q$9ztu?|HF~GuB6##)dZs` zQCp?@e>^G5kgFHnQ@MLe{{@tuBky}t_uiCI=>LVZM*Tktd^6;CAvH`TZV-|@m7n^5 zCJ;mE9cBGLgOmlxy!wAG@S*?bf~6FmKnRya2a9XyAb(B6(^%#8h|M9%u+>PrY@X7Ii=>J8eg#JGksa{H6_5VC{ z$>DIZe|8jnsMP-pz*zk+Uyo0+Gz(jOU+x`W907NG5dV+p|FhwFrT#yQyU_m!K=q^G zwEF*axLoM}mDv)c>u7lAilzGhbTAD4znHjlNIx<=mzGV+F5owceM6&(J%_X**_r&# zMsiO;o33KzXn1yh>fd`t{}HUXjG}}l*0APL+l5eJDlgfq|2HQ6|Eenee>`+t55+Er za;JgAQn=HdRkv=$sQ;H|SJ0MP{l9{g!_oi8BR%J{I(8wix32^0Q24frzkfvkt5ei# z&LGBtT?5y${vQTb{or>Gepwlkj&c@6&mK0Z& zecHu%LM^Axu>L4(Qf|HJtkhF|Faec*Hx5;K*b`oD?VrzTxz3nr2`^#5$+c|84Y zB>i+OIr_q<(Li*e1%tpVc9g{Ue>yShe`jq|=s9EQ!2`(e7|FHw(Er0p*;5ze|3d#C zf()tuXH(m&DD^1h<0$Z%heV7;nwEn7QsRfu%a0?^U{()jBSD9gz5tAlBd7ZRFz~lW z?+4yXpuh~$2BQ&1pw$ki#4)5apl!yJqIMg~XhJ>gcyQ0$0{UE@y_%M*{}&^_uA?nS z#zX&~OV7%X)P>+t=>PMO=A)40naKaK$a3iaMM(21ZV~lYF87uLFZ{7vMFQ!jAvff$apS zy{;5j=>OM1=gHaDHueAIq+IB|4)Ylh5o-3=~4f$pv1da58i;x6yyH|=%?2Jw-8NwFZ`YW zeNLjjh3HWA|4RPu<+rDh0B)b``Z_c(LU!#c){r?2ges=cm>@!LKf0nkrJpKO}`s>~FvEA$) zQ2#%feIWZK@_AKB|9_62^(LsfB|Rmcgjegq^|!3De;xV%Z1yOr--7q*{}0n9_5Xvc z0^bkDZ%gC<`?BxR2mUSlIAwnlEWb)E>i=)iPd<_K|BY$<|HkYcdrE%tx7PoQ(F-2n z;+UkY|Mw+s2EA}Dy5c}m8tKobx@Tw%vNjDIhS7V~O*7EyQ<0JWX?~^tHP`^%~Q4Ez(Qt*rm&!<7-l zos;zcabSBea(@gE`=WOaqrV)Pw2J!w05~^@eo^TE6VbD0B6};6{y(Zk|2L!g_S6jo zw?0W*jzUY8_5TG(z?$q1a0&f?J$bgm-(mdJ(>G-Aqdk@Se=EK3ee~eVk&VL`f!tW3 z|KC90xFCBEDTV%bzeDK%H-d8L|24?cp1MN+za9OuH*&j^{WB+W{V}@7@&DJ7{{Q#v zL)k<0+1~Wix!E`PJ(4|uUQ+*mkM{V~y$@;rcJ_TF=$rJ~1L#GS`u{p;{SNj;oIr26 zjFi{YU&pdX;#T^F`u{St&j+Y+PhB%T=&Jw?&V}5Oz`sa8dnS7xGnwTo~CtaG_WD*pJhmMwf@<}hUK30iF!a=JM?l|H*7`;R0) zA3#>_rH|c<7TwNs^cJZ0$Lt=Y{77iNffnA&IACo`eE`b7m*?wituD55Os(5}~g(i4^lApUl)S4dX9O0TA#q;aOXpNAc!}DKc_Ri06 zFkNf;c@7-E#BA&x+41@Qx$<*BuKYX?UT?~ep(o!06&u(Swl@DVw3wQY&(F-u^0O$v zAsdwY{L1oi@MBTlD<7JDmwZk6eWcW&*XgYQ0Te4kaTno8E611bjVt1`9v zQ2fO{1M@eepI71ai#(B9q!j6v(%Nb9GpDNKjH1_}$HCjU486P_h%wxLw zYF*b95h>;~m#b0T2)QN}77nd&vDYAFN%4V^dlbYg+SYn~%yL{sj21*oT*1>7ct+Uz zf@<1Y!&R0S*p(7mykdWbJ5qX3f;Qi<@@VUH)hu>niD9v_=W3emu{Lpc&0FiTD_gCd z<+u;W_Z74m2UWG_YEufXxXy1qT8v{AJ$9KzOZ%i0YYJ*q*5R6+f36Gr7wemr;eH3# zzrv!eO~ABx14xUsc`eViy?)@K)wgeD(J35!x2*;Djgj(lHh3D84Q|NK*mn|?ElW_y zQ*8xNQo;YAPLvSzwFV_5IB#w#Cgp=pLc}f)dDYsv0xDOmp;!%dzeVshq*X2mYaPM! zC`lR$E9HzSC}6I_#d?_Q2dR$r%-xsn?Am~M(Og=<~5DN2slp{f1>z!dWDtlqa~q_is?T32IbTlsf& z(iL3SB>JUzSEU^9)jHR8%kr;vO{kE6YgMk5e{K1$kPZSH^F$q5Y(}IMZC!22zxlP$ zxdtMXI~5v%Q2w=dx%MY5hNZO8Tn)Q^67uibUqA9F|E>2INMTEg6@S|%#v!%tYI7Z> zkbmh^$bWFz9xKlZ&Da`$OHy;V*T6pL%7AjGFRZKYYK_oV)qJh5Rdn z#hP=-e@JB?ak5??_uoo{8j{-<=R;grz+golz>84CFyK>2DT zEduUxa$i*JHV{Gya}73cgTs^I%|L2UHYbzUvHd8@bzM~XS1Tz0N^T#h;aZ+|zIE4y zoD<1Enw-kNE2_256>N7*^kB|EoL>g@7xLGQ_`z6(2Eer@{oP z{(z8w*Uf8Pf69s;JU3ecF3SI*CHbGltfY|tS(Gu4yV>L~%l|w$oRz53w*1eA7JC78 z8f|k8>S*ZY%KTo`k}==PnXSDF`{#koVNYas(G6eOJdybQXz>Y2{*NTCZTX+itoJNR zDaJq3S+81NlK)eobB=XvES9Z9pz%tu2>D-1ovZ0Pa@WsMl40@|JmeK{!f9v{g|2dqW;$MujcW|?ks);*bPtm zO8Ive+g`*DL`sx@cdhl|s)UY$!^-~<%6A`)ddg?B@>T7G8bUA4krU;Ae3Hwu{Ewuj z@mMW-Q1cY>g#1q+SIGa~q`Q+O5=c9U5>QT~@Oe>xud^ex20k&%%9DNxRx7W;BP z1-^&;?@QjXNYnHr{|6;bPfhYawYqTbPC(8V!M7gFHkVWWB1&1$UpMTy%6~JZoX+2c z;JFSg*21O5Q0G);!}EYX4x3I_B(Dcjc5xf>e;StKkpHWIKARf*Vii;WpFj_C9pi$8 z(-qA4UPmb8|GX5}lbEvnpIqt(DXHahJ-lC^Iw_r)v z{(Ua~CaA6azZFS40n0@{;+6kP+Nhyc{%^rv|LGR_e-(zaW%&%K!zd;!blGi}Jf8m&7#J_t$QA4ypRk0*eCPx9`c#nbBp{R z0S5E1gbk&x6G=ZU$^U`W+qV3lhuvxkD-_4m(wngx-;!NdlK(5A#LR3nHm%i^el3!a zv8u5zdDlaa*C+YE5&W*F#l4W>t7_2)w>!Y?$t3?fll*@WSmpnll=|Kz|4*^%A?%O9 z;`>-z7gOslY!dUb$4m162=EWXr#G}J|CiXV-i76t@lL)3`%cLJZTQN+cHFZ3_sR?T z|2FPf%O6^Ql$H&s9j~l}Ucq0&xHoITfi2`Dv#9 zOOV<^e%_SiXH$#(tW5HAZgt_@U6thL8dj42jnKtdzuu0W_wFP=Yp`e)@^d?!xB&^= zh`sScaC#nAuc5T+5Uv+Qe;urJjxQ4Z$ z92Ug8R-~vZt9;`e$lMJns<y~AT@sVb>h)DpQTnY=0b_88leud2{MGzmDdUYlf zxD>IGr~Rw*E3wh~W7*l!n>_!r2zb^Fhzf>TrDTZh3c|JI4r1TFf&n$DgiC z8XMR$ce^|Ok9K!nzI*4Lu{b{n3!8HiElOc?lP1n;w9bfu?}BLWDO%Tg4TUT!iMHDL znBjs3-bYN#gv?c>bym7^5q5z7Sj&k2Qy%tL`m(TUM?u;&CUK(~zHv=K7>0t;rOQuPe*s*>dNvz91KQKr*py1-9W})A^#&2#f2V2U4{HxiaR3* zP^R*~7wNt!RLogAt0642QeCP^Hr|fa zo*uR@EoE9Gl`y5Ne);bMoqN*ekbf-?T5)~zMO%edna~X(|GvxR8)nX>>yuCE?|Uxp z$Q(h*%D+4wPRYKp;z>}$lKhXPK11%r>qlzXusWmB2*%FJzw<=xA0hvvnU942FXZ1H zgTA%VMD0Tv*ZQ_qJx>7BzuYefUoW zCgk7U+d~-BhWu-n7{l0S06*=C)$+eDG}Wrrxf{snT=}0&8RKY4rTk9;Pi-dqFqd#H zIjKtio%wX`Lc6&m-&LAe0g&d6;GaVwowhLLUyY-!%v^gW|DIK)KG057$iMslhf=bq ziYf7)%cK1J){T4q3w@MOX!oN0kD=vSJ*7mY{A-u3p1la{*MK_1DH?G0e)dg{`W(EmokE$jGSidhzR*VhIw6m z_!siOj5+SH;C6nJ|M|@7`cY~j|HmPnJ|A;vcnsFK3*m5m@_#IIgu`0oe?^l2Gbo`e zGlx}BWj!JlVEnTDAA>!}T~qs(3+W&<5DSI!ey!Miqs}v#yJyI%@_zw! zE~%$@uzQd))aw@_pHrD#-=F0FW-KQCnW6571ihz5{?DSV$FVc09``ovd+PrOO7j0@ z?lw^3zq3#D1a_zm;CBtXQr-_oFCt&a|JUJl{qp|^c9qFsej66B9az4;0e#;l08b{?DL=~p zv9wjo?Y{7EQIdamNR{RPj3oankkSLGe-QosD5!O8J>(}}A^)e->yKuS&oynx|20Ye z*CMUM;q7h6|M_*|ul(O!lK*>cJ z{C^k=&QEFSN3g5q*km3ddna;KPyY}a~u}9aile2 z>k0X}n3fz(OO&70b<)2lIgbTf<>wZtqx`%9o_rK5`XKC_ms0Z?^uhDt!aVFs`(e+! zYY*k;Iq-ju{=1wrhNtIy=U<1nAFk4$%FhR|{r@W*IR=~KeC&ty>CYd5*`3&`q|ZB3 z|5}MIxR?I*wM3sgOZ2&y7XGS&KF?8CJ+7e7@1f60`6Jlh8nT1(LAmt#W_E0TDf`~f zVBg=~`J3{2*;%>tIX}05_08)kUyDUpW+Eg^5mUhX1PyzEHiNh;a);f(IOk4UpR@oN z3KzBoXJKI<2pd(LLl8ME$+2MAuFR#4BP>SFaGVYMGsV?Zb8F9!@uMsCzQJFdK;S6E z8JQzFotVY@DUJbbS>RguMf)w?vW&O(2p99gXumVanCFF+jcnv|Y+Km4#Lk+FlW&K4#;olhPKu{JyU(HAepd_~m3eBc?T`Hzju>=~v!?+y4roW+;}}m&;(1cE z-<=I}h$-4{udQzXOf=DcJTs#GW3wi5%;YzlpLoQsfS|j(9{Pc;){%1iogMoIo~x-j zbnQaOb4GO0e&?ILz#`f|irC31)z$X-+_|!9`}d)ANBZut7@u;?1UKJ_^W5~q2~A@3 z(>*~~w*LV1>Tq(LM*ELLJ08{2{u9t@t9b6({zKu#g_N{E6liYYzwO`H(*854{~+3b z5bqG_%I)`rlfA&KA5RZYI&n-D{4ckEHtnB5duCO&e?FMcteC&*tHb0&V}-dH#HWv1M~MX|G!T*z}^ID!<^T7Xo;BNb0P5WQVI70Wqn)ZK+_Fuyc z=3PAHb&dIctX2&J-$D5(R&D;5_XuqNj*|TU5c$7`r}|%6qdP2Lkx$M)#Ixx{^6pIV z?kZSEt%tFH;KGFeaZut7w7B4(_^;u<2b2^4&(gM=S^3+T;KhGJF8+Jxhp<=qORP}! z&ZqMR!tmS-U#0xtQ2rB?|4YU_qv7)F*(+U?|9N^}W%<8PF53qHF2c02Wz}_Y1whNmD=0Y4A0qdcW-^|w?1>b z2Q2h>tZukhw{shHJXM2h(m$TB(zCu51|f@mi^0F(q?)Nb${u8*L^3V+WbfPoM7Y zNZS+s_eV#%H_bUx@V{?q4A4;v+|lOvVi@`;_^*C<%pw0fw;@R}WzeycYeg}>h#l(n zSlHcV8vKu)d#(h@3r8vJALt16lveQHv60_4iIeNJLTdHwod1q#g8!a__2O$H1hzColMaD&wrxjD7|(3OyVCpA9`v=@j16q1>%Gn%u5cI+v0EWB5}Ob>s8Qi6l3ZA7*o#e44jc}!T;5ivldIo z8Swu|Fu#OSFYXk6Ig;jlYXonKoyoqg;QzHy#q$X|=l>Ph8jr+waR>YUF2EXcKXkv9 zG3+|{|K_yss$&!i{@=|G8~3EmVcZ%0|AX-VfsTPmeG*Ga@c(P@|34D{zs`HY!T+yz z3cnv(X0J3ZotgMQzlHyfpgZUPsf;%dE%ARb{6Cx7&B3Yv`o|KA7yUrW8OVMkJ#|DVA=cnK>PKj^gn<;+!fU=jLo1^++BjN!J# z|8H~(KPeCXAC*tcEBQYH`J>S7MRx5;|FQXQT0Sf9olE~;V@>VMJ)H1&-Vyk}2=~+wpmFZs zv4pS!m7yaPyIRV7mdfdlMJ&~El)nO-B8T>%*n_0KMr%>Evqio~7w5&b{RA#7VYZ^S zd~H>QeXOnaM{2z3~%l6l{zS) z)4~~#qix$C_vJiO()dOGNBe6vsO|TykQr&NzfT+OcN{YvEo%G6GY+hE<@RfjtQ}#; z>AH@-Z2#bP+CPr=k45t~wt7O3=XubT=dN!ZHGt*#n(7yF@BZzPJb7)u_m%EswDw*+ z#pcj{*Fu+8CK6s+YX3@}maDNh)$;#fp5a5$DYl>evaQ-b0PH;dPyRbU3M*W>5>MoD zBtJQ8;%{)PbkBjB#~8!6Mr{94WzZBF&uU&*a5$S14xs&E1uJK=z1nlmPwhXoRr~Kx z?Z2Va{v=|8L;G*Ql6MK?!#ir~kM@6`{n*j|FV&>m{=c=f{}-*=e|9ea7qP}A z{|{i7ceUG)@IMKQ*97W+4P&lqw~=+1drJ5}1pXhXPG%>x`2Ujg71pzY^53oSkMh4o z`5&bG-?u7%-@GXQ*=$4Jy8N2zO1Em-_$!_r>S=$)eG!WIa_)$ayhU08Q!cT9j+CP8 zT0crLZ`qa0Fr@V+d~?JTuw0wE&~&fm*tjq2NuMeHnWM-Z&zZkFw>J?IpkrtpR-+cab<}qhjlJvtyRoDwHSscBORgu8S5&|~b5l{t|mRvZk zZ?W^xvMeWlQExmSeP%}aWejbLV|Sl41(mdUX?+YQ4z5x7i`{?GF7x>Ob%&!d<|r(c z;#}>tVQG!h3FkAd7+n~v)ysAn7vl|SSIpas-M2!EY2+3|pAKqLOZBc8HCUq1AqC~9 zUtrc6Kl8ee(h}m0W6Led)H-L|tVb&O=h~ljNW0k8DTJd2=@6VQEPq-GSQy_FYg<>u>PdvSO9X7E4)Aht$sKJCNe8%|+~`sAC!N zjUCv*PfN62=8)F5z#YXg8gpgO_DcO2A4%sA7Nv%?MtjMSYSS+}OH_(1L&=LC80*S~@8tW71!v&VQ;nnSa$TQLjM^XoDGgfIZ8)RF0N#0agHHWNDI=lir}{pY#Yp5Gli`z!TdA8M5HwzAMe1!r5+&)!++Kj~pl?GK## z!m|qs{TIDeI>Z~wa>^aJzP}#&&r`VLop+_h9xM%wb9KU;L%H)*aNk9Vb!}I|gCp(n zSIcy@{&W9!=s&;Y8~QKa5%8^Hoja;S|9LOI(Vo5~dysGZ%eAupi&>QTsk?j|z&1G7 zk#hYKmIT{yan^YcAVK8*iMWH{jY8=1LI-L8^e|r({ zbJgAPro>(ccW8KOY+3(#O14tv=@D77S+_^OLjT2%6?K;y#9k3Uukj>TqN7KKo(bKf zY`elz{Or-ubJa@9qazThX}_=^TV9lH?+%R~8my4QN-~Ov@X>e6`cDoio2FTsIh3m6 z=^K2vM4u4q9i`Yc8^;*Vg6;3xC_>-(Y>%g3lofr}bvDZgZPONh#VUex#j^ejoe_In z+;tkKH+ZhLXEC_eU+6!3P~aksT$P9uL3~p|4dio8eprwADtY!SG4k6N_7C^tw8!63 zq^SSg1#d44{pXt&?v;;oVAKeHH^hDMzFDL7pwNFxmMb6b{OL!Y!APk6E8Yt6d&Pdk zLmZV?OOV>0EIt^C^a~y0D+P3MO~KN|cMg;ucjddgCB}dD(5?wqJ>dG0+RryB#&9k4 z-zaK|mWPd7`@Y<>71jFBbuXnYPO&KTpC{xiM?$xU-&p48O3qmFis?SoIFYbtkWZqW ziz>%Y0_UdxNl_Y0(wU&RRh=RS1TaVw4-V&?expvJxF1{N7jT* zq#M=?_v<+KUqnoy|0a;jQq+HPA@tu=N}ULH<7x90q+|jRo&w{!*E6~6PFZ5i>4ojm z&vzV^aAnrM7|%rCi;MHb)h+4{zbs`Rbbo&6KSvgRoyUCY>(GI&4!Oc)Zw>wDK7XIW z@m{81yzm`9%U9pH6VCTF%~MEW3YIRuQKhw1UyGd21a*LNJA@J(fq3o|Cz#S!+fi5* zeVf2lPqmI`-zdfQ>3{Z@=$sR;e2?M>$!K+3yc-WZaegRYaB$F*wppZn!pKO4{8 zaB33gZmGw328~uQ?RCD*rE87fe)O%$Ko3A7{07b>?#3Zy`(WQH>%W<_b0(>tzaXvy zs9_vdpuOoUlfZB~v3?tPCK9Lqb01w#N+|T-6lxg>v?cge7QZMn7%BAhpo~&{KSS3V zzr!hO8u=FjtNxn-?bUSCkm!SHS*89vfOXq3SnV3X-#vtj!Ei>RaiRbArzCs!1o-Xv z&pXF1)%s89JoU(_l%oEd&@O&s*?%>Uw)({#d!FBTm`K>`C_(*q5^)n*VVnXc>c8WOI~vOQy`Fzm{~beFF%IZV z|D8lW*P{#lcN+I){dWr1Qk^I5XW0_)vj>*--(ld|p7Yd_Wzg)^tkxC!Z*9_lt0}?n zPV^vUI&?Uj71qN_`fnvx(nZANSTG&`tt8hnY^{4yx2OE5|4zZaJe$>Y^`Cn%Pa{_o z_CWRDM&MV%i_m}Tu|>Bhe?GN+doA>z@6EbfcL=zR<~IbKeOJlv(r8ci#3y@Ad`U+c z>zDGmcQ(eGq5s^0s{V7dp#IYuAK&NdLQZ#4^apMf@jiKC{2&Ee_m9EkQzz*6LOvW( z_%s^N&-1|4FzP?wms9`wH79Yj*ZE#srT+5?Z0l@+`p@qsRq8*j^%H;(-m3p5lisoZ zJCa`L*Hb))syn^D(0_BOX-dLQ{dX`WEr1`P|E3}3>Oc3h>_=aE6=ig#4Cev9zq22A zeg$eecVk&GKA4tP>%U`Z=fU)(iH&&4Q9OOy;cM%YWg2_-~jzHr4zR9sA{kI00JOaKSi>!@dE%Q`LIF-^p zLFytT^-{_^ffCQ`ME_kz`DOigJQPs>ZNQShF7>qwD7!1M2e59f{`1>3o|vuv+k_Qd z4b}{8yD);-Na!diat2&JCG9a)|D8{px{xxIUmv~>;8!JHOAmVurHJ3UcIkHot(!+L zyCUhob9u93Wzv6lu&#bJ)EGxEy_B89_kiyi>~KAt*v(Kk^xwsldoQp@aN^3byr=SE zr0;#KOq@dt4#V%s-ry6!=SX0-vTib&+&#(rR(kf;Q2#2h^=W)nyZAZ&yB6w{$A532 zmG%x#D}N1F$IhYuJkdp09{=6OohK@V{`-7swc*|HzHR;Y0P**+f^j8&q5nK>{$}pm zcGp9%M`_)EvWr*!cQq?BKZSPJv6tgE-Y`3vwBNx0(0`9Wm-{JyC3!;seKqO7XUO$v zmHxXv>A!n<dC#x>&U{h=w_nvLjR2~>A&$%+&w=F;O0K$ z?2BIZTQdhjd-b33q50xkNlCxj(ibY}yZ_#A45|O@S2Lj6DU`hg9Myk^g1P$dXlUoz zbW6Zq{kJ%c{}w_gPdiipElB$B^rZiM<_w_RLEzShnjE_v4^2Y<9Y9Hafoc!GBazk6 zf7emd9D2kko<@!qRwE@72^acrYmNR}PCI-*^3CYKw;~%ivYY7~dciU5%;?Jgn2Xux zy?{Q_%zEJrB>5!T==g6HI!66>6TRyFSrhne>OlYfgnVCT&yo7?-;@5k4VvGR^xs2C z|Gk!eqW*g?Z+|JrTa*6#DzttV((nxLQGJZ}zC!G&q?RW* zv+5{*wT{+pEl ziFe2Tj{ZA?{r$(KmCXgU4?XAp8D^(NSEh;UW8>;fx2--Gj`*?op>BQN+nIbY09x`ElL`I}kyU!8v+x}E}E zKQDCdQ&e|}WHfqEx%=A8Upowr9n$Xjx*1jPtDLPdPXenWzZ ztMG-rxMQets*nK{w&O0`X%~4p&QVU-`VH0Rv`5B@oK{rr$F2nhwdyOuwQTX#-ra?8 zV+z*?>nJL)F4mvIo~^y6UT2GAO;@X3ynz!`t+#|CU+e=ApZe*i{XSN_Tobbd?P1cO zKBwKzRam*;DtOSp{`L#2rA*sYyk{!~w4BxFT)Wna9&2=A?RO2QekTWo^UVQez_FTk zh5DTDo4U5G-Cdhs;8B13m3YT++QsFBEpc7(5q-?_G55v|w7 zYMf{DX!Z0|T~DE}zx`SYe7m?e&pr2nyW+Da{PzSPzuH*I|Blw{YTKn<*Odrukimbg z7PY$`YoW^bV}bJ>4AY_l?VWItux&jqka5ezGU6Ypc;N^KzW+@Z>2^`>xmd zuJAOdH-?dqYaIg!`JLf<-4MoEt`>D+E>Q5_)sTAKEav!q7~KT_CsE2M<}nlN1!ttH zJ;)Q^U16C7H{BCkfB!G@fA3^(${AhGVxCv88_OI_{!aso#V>>Z3z^IH#nvPLosr7_ z!_)k(UJT0lx-vs-Vvgcz*Y!FrE7MpJ8pD{+vwj9Jb2#W_@_#o>u|38xv{wU_WwYyf^Z_QlBQKJ|a2mjB7|Ju#!=l{`IHUHNb1Cjq1GpBfY{ND`!w=&v3j}dF|fBQeg|2yD6W70ZZ@P9j_?t8II-H_gHf5#s3 z|3YT*_Wy$aAK3%`f0?=Neei!HGo`DUV?PczALUxFo68tq{@;@N|GCWY4(2WL`uYF) z692!%OiKQLau50c~QZLV3V*V18D`F#uamBo* zfYGmoD907KBS*QE1hfYiAsvrdo`1#c!kJRJwjyl7k;{;I3P|sSF5*ltN-Lnlk5WzV z+&SYZW?t6iebi9ij~MktzQ8BKmDmTYGa#V@ufR6SbcR$e+uZ+LCoZ-l{w&}1CF5ex zU92}n+am0a5p$cjXpeI#BR??{0>uSIWeWOktf}inF+grCbggd+*+B z|E$mWdYv<7cVIb(jhU>w)QWZ*>s-J&w)rBD*cO-+Eei-|pXQ7?yjQU{uBajQz!_Vg zvsPQ>{K^)~8)vwIlkK+-TVbu{w)L^E&D}@Fh^;V@*N`(Db4L$%_7;s0hR%9JO5HVV-Nr>3&P2=oSNd5>{j*ys(ko%&?sc&fGkb#=M6Y$u z8@m?!kXtHF2sKhFL)+l#%wpFXDJ3^zaS{))3JFn{RAAUd0l^M%)FQ;?i zLjQ@eI|4%2n9u!P;w6V-znJ4JnM>^PXDb4mbCD`d+E~;H=lXK59{WzPr-? z`TEaVl^^$!y4%`)WugDv7Z=ti_iNiu-y8MYY3{7^JBaE8L(*J6Ehd`8>WExF`D0 zJ(EL#RsU%T^?PQXMI8FiQ0PCu=%=+~5V>N1ukYBZdu)e2xl;dGMo+Mbz3_gc&@-<+ zm&e%p=T`$M!B&o-=J*z#y;7<2n{xi#=dLumb4Lr36!%+(F=lelk9}nzIfUs82E(v# zh31QsBz1{9C zbU(K8=Jy(X%fc^CdZMA{Gy07MWi#|&SgA8$)heD@ZJTV1-*;1jmEC%sXZ4SxE-jy) zI_-L@`^2q(1owUiPW|V8>d=4kw^IN4uDU(5Qvdk|^axrR)GGAfIBGEGa7wG!b;GVR z9xOut`5msY#5BPPDOJ{g!^zc;n7wJqxGMc89zzpMq5q`z-f%+wH-yygSfA8?L&48I z;+`J)&vu@?=}tg*xQ?bZ`%tfzdv%@XJNj-zH8}e^X{FT1>VCbMg6xA5PPEk znt+%^z3yC+L!MPR2TNXmD6tRNO{6YQo%cJQbLlss|J={lL|*mZc=jiF`d44_&*X0k z_X|mLKWU-=782K&y+EU=YZ@5uiT?Aw0wrQHmN~y(ss1}K;XH!-X;5qsr4Io+rQdU0 zXH(bS@UGB*Gii@Iq3x&ctL{U-v2axVw=X;yfW37VYfMAgTYt*H=CkD|G5Lr@77EO>*>_(DH=-Z6x!!m6~=TY>^Z#ifL8yxi`}^Cn-%qi?UI+(wOQ1K{sy@dWdkyh2~ znki{AC7(%OIEIpXf$5e@C%H%-DnKMGx6n4bP4MlWy$9>IH2={~ZW63)1gcR(noE zGaLz)U0KZu{dXAkoJcLpNb~yv%g8NE=s!>2m``cyzth3>K;+>J+Iuv)mvLQOH-4w1 z6V!i8@w>4KqyD>y^@LZ!k+YKiV}}lOQva=`uCo3+os}Q;-x*-GnAMwQl(3q=DeUQ5 zPdTSj!U=F^F;~wjSq6=jf0$<2dkMKgW>OxmLUyEN&)O{`z3|1KtV8F|*%ha9;I{dYE$ABhAG zqlM?Qepc3hmy#=o8s}2iYX-(Oy`h!*&t5Qz_!;nRHFRHt{yU|l|4syx(0{Kc zXQBVDgbww((0|*JVE5#o1)s;#$|m-ps{h<~{aWY{`tNnwO43HNNA76WqoyHGXOK36 zJ;rZFf}4;~_2232Lfg!)vZ?g)6X4G3lK#64>2&;eGcEY%>%SY&f3E?9LG1T@M@j!( z4J}WnuJ=NjbI>-9|K1B9=Fp2yWj*U6^xylqU(XKk(0?bA`z`Fo-8237IwG<#VlKy)SIYR&42fg1wPani-K98Z7?%rel_fcB5o^K4R|6YT9 zucwSJ!YhBDWVQ2i=s$NMuVWAM8_*-Kqoxm}Z+SdG+P(ZeKu%%Y>pB++yOEMEYtesq z(~id}>0inH0M~o#?H=q!yoDa?4(rf=w)&Y?`tQo5|J=Da0Qnh$#4kkhzMb^nm)L#! zAo}l! z^uqY0^%s$r8e>LO7X9}<_Rszl{r6tZX)pBOHMB|ncN48p|2;~c zU(`*%e?@j3|M`AGS^xb3X}SeTxsm?xUzGJ`_L8gr9%O|(^xv=9$E*JPV2l3q zf4>0h@1XxagDifN7Wbe9AL5M%_1_(7{P&9fi}Bwp`Y%J4|G%yOTt_JW90$ao-78Oh z%xi=yeRI|4Ttm^)W`2F0F%b^G2&cr9x4@CeT44qiIx?!E=_2a-m++0&=&&67=C77>FAFZpg#vQA_uI5EMt)uue zZ2h*PZKvJKbl0n5ZB5Kwzp@Nt0&hz<)>gR+7gUQiOG{|a6|~oPMM4{_TB?NimL7Zp0b;4l1)gVgRn^NNr2F0=^#iG0TscUlzfg}+R#+KRKpoIB?IHueYYf%Tz$^^3Ak-o;e*sh-v59V*^YbM2GA-l+0a zx$~7bw5Gf&8EFG1@GvoyB6xMC}&T2*MakmH6LG` z`(u6iWeR?wLOrL=yPoR1M4Vk`X_fu6cI;8M9pBwnVfIE%3+;uR_bqs5knjJf?^WlVCI#Cs0ZSo87g+J6Dc znS;D|_n5z6%rC@bVEnDVti$iw@Lq~)GuQt4TNt?@{6bbu3-5TT?{4vq9q$3U_D>y@ z=X@@|&Xb2MX#c$XW#g(;*+1{5)Mo!I73ax#-;!U~$&~9A*J#1PN??%%8>x*vI zt@=gTKktk3H?DZEg-^@V{`rezO_3j;Smzt!>i%;+_SrA>psgA5W|(*EYFZkhJp8^+ zOXL~EOrNs4Ti>BWK!w zYlK=uPj6hGH$Yyr|3c(ch`FPNn0KN5w}-y&s6kuw3pF-|#+nw_{=1yr( z42Ns~rAhlAfnF?k?EiSo)QrR|T`x${E~bh7hil3nHlXZ(0xWH`*#9!f@Gik3Y2!g+ z|5Kp5EBc1NiNddp3<2#14IR)@)6qLM+y5x^UKYx;1d^wrU52B_dSiY{+5bw|>msrL z36A|Q7W-e0xuRYu#T?9$g)uKQvBvWA_okboshvHzLqziyZr^hr z$Q+Ay$$|x*E%v_-_J0@RHel|T_J1eZd5dQMeB-78=DSv5Ug;*xDsF&$O^et5uYoZX; z^OzIP!+X%%lJ?JE@-4=ZNB{pYT5BuFbqBQnEh+YY8QT6t98cGvF7*Eoiv3@RoH%tF42x_pV&xfAy__`d#byyJ2U zzDa)<-b;TB8is&&!&~at<6ZlA4`}}{B<=qN{B|Sl|3#GVTiE{wSnEpI?Ow6}SCjT1 zLm&Jm_WvQY{Pd6g|6gtYoPFRwb-h`+<=(+8Os8gym;?X0vpn3Zec_d*((ld>aTbfQ z2P5s~ujYx=GyJL!yy|66wJl6nS$@tLx#j0|XzdH<2l%9;x{_BjaGbwU*Y>r`bB2ZW zSLNWW7_VO3nV{O`)pObE3XJ0~UUBnkl2>O3--6Vyp84fm3v*M?{MD{s%@a~1_3=qp zmWXq0HDA+ubLA`!OU>&TmV$cK+!wEWYhTpt7iVbrJi2Os^}TIAQ(XJPc@54t@cBtK zf5odpUL!K5_Jvl?5dyWb@0gR?a(<`wg);}73sC*f=gIkeB>SJw57)k^{^zsZEH}rt zoE70L2e0D}c41lB|NIqb_CM!C)U|7EIdEo4Jx{ED8Hmq&vj6!^@4@I-{mpnP8T;QF6m-d6q3UlQdr zvb>gPg4l!UzjUNj{mXXX(cZ0)M_ZKpKkfgnknJh`-yAu0ldGIYxUxF<{%VIx~p-iMe$p`TBCO~ZZu$+%0;C$C!KiiqEJ z8;)`R!T0}}7|D0Wczy<+?OBVx2-@(H|ET}3#PyRp{%7MklK-UtPj~wNVLS~r6URUM ze-`@xL0ntZzMPAr|Au7$KMR@FxYn6>(Ea}qzOptO*JC{X`Q3oIxGMS(PX#@J-)_9G zcJ(Opc~1X7j3+?ukp5qZ?aMg+`E9h?mM_p+r=$P(;CYQF(ei8XKAVnt|tJcVP_w zaa_#%xXeZAP${TgQI4P0H3#qHxeG_qyaUT|y&BuQ*Gp~+Zka2e8|TWAaHTxQ}v8;RcXGfy?f;yqBett#a?+TuG%9KrGnPU@aqWeIqgK>aS%2oD-XP=sM3=JUtUqVrIpfA_o9gP%`*XZER(<_>=aTmhI4a@& zIdA@|{=9$0cYbm(cHz52mHPR-FMo%g-D0d=WjIdTBem# ze||eX6ZuqfenFnUAmXjR`?Y)K&R;iH_3w)MH-S9ga;cQhMNEm*pI@tQfb=aj3sm)2 zzc^73v&wu!gyR}F2iCs_X4HZh12hKd56|z-->pCAqg&#<%x}2&OiHtab+Oi5{~@Sv zPn=U!|4)$8dh0*NssAwa!XTs?j$zRpKFV62>QMR!dr|9(`fgH=7`VR#!#Z032 z2yBEWKeKRN84l}n>%T~=|9H%mErw3F{);ff?6wZ=zZC6q0@`RQ>R*m|=!KX!t>miy z$0NrXSZV+BJ-Hj0*`1Da;%3xr9`a)S*Wrv;DZd5vp9cLmqZIsN^luPT8<}@`P}t=c>1$y{WqZgXKMAo3Ukli{#W(i<<$RC%qPC+ z(f|K;{oR)0R_(hnh&ZUlmEC3s3&}Q&gRocY<+$qllA79q4tHT zIWpmFnp<){F~u(-@E5geTlmBdzkHyMAND`B@_r%nsJ;F9{&+o{qxkd-uNCcYQ;E=R|5In<|6>1lK#e;VH0s(n#v8c<@(*MWQCXQCB?EhKl|M3_ns{WshF=x%s zg}52_z|$C2`+o{Xdm`3y*Phadp z%XrNLKSUH=P)%!H1G$^9z5&^{u)Q7IYmu%cwwodIAojVv0b3rfd$E5k*0~;Ch}IVq zP_7gjv}o0)z0RtHb|C3h(7OrS7qH!h^;+z|g!MY?zl`;I?7xEbM(n?e?dw=?!Tx4! zZ^QO&tdp@WL%A^N8l_`+0P7y?ALlS`&v3%53+uu3&5#G{$}sEH*hxPgTTB2;UZ-Lo z>6jOO%tWPyj_3@;F;8x}GVXL0C%R8T`VSH3=!qVMeXdi~DteKh$eso{=x2UL6x&+c z80r2WS!7g>4&;{oh!Hpb;=0L3oMrLi)kH|`SvD>Y$np#7)o<9Sag(NpG;1C@v}NnI z?VQ3r4&h5tpQo^1hW%%-eHQB#Sf9rlL|h)$w^41hxv>#(^{@_xJo{oO;?RcDo{S%b zl@kc;hkLQYR>d}%=47O$?V{glvrH2miIp;xWk0ZAsmJMOq&mpOl!ifjp#Hd)XRX;r zwq=`GGlJPUb#n7KMAw$+1JHFLbUunTj{PUGJs&IUa1pjF+r^0AhO*s_74;>P_}1|Yv^}~Y7p?0R77RWsCUEJty zl;H`iZ$k7@Y`bH98Y^s^Q&Q1e4{ra!#bseo8r$~y{3w$rar9o4c{|qgQ1A6vVWrZB zXgg^)v<=%ziyz_1fV(hjEHGs=<$^H!BKRA~;}LA1Qgx9!ZNNV3R^67vb?;(XK3`f| zdb*vOzi~gx_AtuIeqD=wx6hqEWx0(2R=1CrB29&p9(GXO!s8WPXiLR7X>y?DW$1kk zEBeidJN3D`nyuTPtS`9}PR$z1MY|tMTAEdx{)do$4OY}qY#nwi$A%O3*fM$u2c55q zMy7uZakMp-iz{u=-LLEm%V(vf`>M*{3B6mOe=D}zussvonUG(N{j;%uJof*tZXY7-MF@KlKIXaGb=Krk2nU*W$ zsgG$`2I`mcP(F?o=~LtvLI&wwo=krt@>`6RWpV1m@<@H4i{+90S-xRNgQ2nLAByd0 zXGPq>F0euR5o9cft~eDO!Z>YMm^k7>>$KH>nT%xGY8KQn`W)h)$95-Ho|8KwjPtvU zP1<5R7~w*!W3X~)j#c6ij^-lV5L?;-(;&TY=HYU0dXABp9(hJFyyciFdJO z+&udP=Ww5m&hTNed^~b3OO9T6E&R8A_+LZD3!#4z*kWv#U^^FU2kg_H=VP1cghyhZ zE5cgbLGbF*iw-BhD@@f`aXws9pawHmOf+^)}08yj4hARH?h8h@D^;BVT%boW8A=VxQtif!{pj*8W{Yxj2+)Y-1}H*58JR}9LRQ(vD)R>vaKk` zITD^beHbhV=~WQ>Hi8eptsNKc4rF#d-o(9J6xn-i7T3aJ8WEv8cZ)#`&8(#&G_SYwsr5 zw!+#BYYXJTvO<@4E918c#2pW&7L*p}JvZdt(x0PkG3BT7L853=tl0?HtK5oCH=Lo; zM=LW#_88o_Z365r(a*5Q>npa!YOHJ*w$B5|`$4P|us;!7_C0Js%7Q+@2hY@4{6%bG z2jc5+9CFb|veh)2N~ZqeJQa;$mu-c5NxQYezSC~fc45TNMI8GF@ll4^rr64y2E!e& zMzCU`ey(y!TiFH*R{6`ZzSJFUhe=s!S1AX}&<=5IQUCI>~M8sQi;S{NNixNWnOapzDZbX~pDu2}2N? zC*`3LncYVw~e>TH=WTwx#sgFKl;k`bNd&{5IRxEAS+e;AfZW3*ZK52n}9prC|Xvb)C=}jj++R7c!Y&$nSJ2Tx^ke^*YC#z1dPG)*Wenwt?PMvy<8a8TJFRy-nupqxt{Z5^`78ZBw z-lL>vuikz7^&c>BkfT85i%ZI!plSQ<^sL(#4YzX332{Jgxpf&yr(S5UWJef)3G5dRxBq8h1ArsYrbWoL&l4coqJEy|SyyM{Bp z_{UR+otb9(0yvQT=|MmKWcqpik)D~A?a%NBGqbbOVX9d<`SlxdVAfEKU zsJL5IZBiao&kC67W?F_n-JhA35y;BQ3Z`eJXY-0CI|H?7(6DinR&*&W2-+Y$Jv{@7 zvN3v1$q{X3!`yIL6wJb-f^_WCXz2l5EoGsp%qDiT;Zr!*4K1w9{)ED}aGgCgC$!c#D5u>T|A?Hzv(rZ8^g1*Bh@9}^oL&QS3J2!285RA4{z+-Z!w>LmVa8{pBDJ11^#J)e_G(57Wk(H{%L`KTHv1+_@@Q_X@P%Q z;GY)wA8&z3dRX!dJ6l%)FZsE++n@>>Tm50#!?dj|_YMxrRwj$EmwVbY33J+>OF(V# zrh{4!Hl#Z3pvNj3M` zj*-fQR#goMtMp@F8!G*q&BBsOCb()$-wd{*(qAx8rI!h>YSJH$oP81>Fkel>Bwu^S zjH)Y`^#S_YYSjzrZ8Pl>7@%$Wd6yB>i*w7D8g{^cF~qI+nXIr>k_9e8GOHDISVbo? z#!4TKBf&~zOt&)`<4gZHvkIjD%#E3Lm4y83kQL^8XEVpAneOfL@z=Tm(!Mi~;O-UN zUCmtxbIQ#hNDFLG!5<_O-$h807Wf)*=>*n7MEeW>z;0k3cHd6>aXIqO=#LVo{WJ{G zM#dDBEbTYmBn@PA=Kk;8&*dw6M%ur*-!P*OZW*pD> zzq#Kl<3gt2$Ng~TD&}LD42;NpkmWNaFfQ|2M5S30n38!C#eL>oC|)G+z?@=Z2+G;;)H3QTt08JTrhn!4sA$nDI` zJMlNIq4@$f=Vr1k(^{C@v00y)V6yh+O9*Vt{DOfF5{P9+DAQ2_n=}6==_G-znLZY$ zi+M9-9?ZO(fv!@vc;-kZD>7e!=+j14DZEeGWr0SBY?!u*mCVRu>Z`eHWR$V&*RZ;Q zjB(t*p0&kWc7f9nmlj|L2HBx3cJ_1FVJy2+Vn23c@hfwIFAzvyAqjrs?nLaS&%&Ra z2cX>yRJC+-Q!e7`90SBu_J&O>>tKdEz!KOSHm=Nln_`(vWN%2U%$>ksUPyvlSLMx` zX_y6t5{j?P-Hl3_jlYFnd&7e(b7QEB*@VTjH|$uMhu7F!v1Im!tt<0RFwE8}uz6+P zJi~0G0(Y#;-GuaJI~BZlWo{W2b{j1!cCXAWWS*;MOE7wBZkWOCXGk!1YVJo2{&ckj z*PoVu6oXyN2bJ)t`FFy~%=zYPDtwv|+=Jq`6(Pk8ToieAw$ArkvjvF&TED zo6)n($BA7drd7Sd8kgXc2KvmOE{aeUxFOl5y(<`G}WVWgEH2Fpu-E zm6U;@VRn#_elmi&e7Gom%|k*OYGeq^H+|h}LfUzW1SMrZHzl+$V9VV#UQ!yv!z`we-pNfl%S{RG z+gPJ*r%1|NH{~Rz0dnAy$wnMzM3bfT>o{#mHl({3q ztg4aT5J5>f!A%MOF@UWSpDiidxhV%R%zcz=7i7@eL~1noIh1gzI&6IrmHuZm z`Ojz)rt$xo(Ih>%8K`RM=B9x-SUsc3T@{|u2ouL9sm*YBbsZR8bLKrbd&O zZ507$>ddly!%tRT{FgKQWc4Mi4L@08l}i3%_{mYHocCFJiA)YZ z&mf}nXH5hpho4uwh?NqQ9DZ`tDN?MTpfr`hNav_ibg`-unH-tYISXQ~1qDI7J~BSFMf$&01?lVC%7m%o?V3)xbHDxI$0x~Lnt+xa8oA7v$smh zLO11VrsT-_F*jv$Jo}oY9O0(if}k^={Z7afji~W#I!+83_8g6<@oWnrE4)PXmLOg# zm>kcJl9cP+lx+}n#${^YlvRyqJ4#ApoYN9~M^#dW-IU4k>`{_3>ZUAoQ=Z_aOpa$)Ny?a; z@))M%L3D|m657>x_Et$5cT=u*Q$FUVOpa$?la$7Ir<_~dlwZ0jljGUHC1tLg@@=N% zahmTAz>?$HwlV+r z+?0zDlvcUTO_?0eJ}xP9CpdMz(oOlgn=(0`{Yp}{b5lOel>6|9tJtJIo^7Z`k8bks zk;)m*77K}JM2%-h3yFG(sF;R$QIQ5?A;ytTg@mj(VB9a=CM4`7 zwT@?xp2_iS2#xHFXU{kSd10wKt-2FkZ>b4P%T!aI&OE1@+_cnmDV`SPbSWNY=5(p$ zOqZ&;OC;gMCn7oVi6=H^W8;$<*C$6p2-$N^(+bF(rjK*1c42n_A17DsqQ2batg78@ z5O)1r`R7Xhxe0&LHc!BrHe)h&tCro|gcpHu?l8m=p5ZpxJiW^uN~xA+ku8#ThSlW*x8LN;rJ zXD8pXAA~&UC8E~{U81*V%dZbJ5Igl8w;sYeLOof<|> zP=Cru?$h1eQGcGDe5Ws$lpWlZ6A;YeY>V&A4MGYv!n2d_tlNc@XoP1c-#O0+>E|V) z_g%zGt?YLXIp%i%@z{V2+vNwji(EVYos$vbTy9-T%~J-XD8pa_X#nM3nLxv z48bg(oqX55EF|P5Vu5=Q@0OKkC*RGy1p!-iQ@+k1tvUz!NJ{)z17}-&n_D6#!;ZTt z_qi#1xhe6p9Gq?O-FAeeOt>lAG58GfobIMXOY!XFyK}juG>#7=gc@*4SyHZXQ$jmu zTYPt2Cn>{j%9U=)``wh#&e;~5jW*-H)SSj zA$7-x5INi8dw@e))ZI<_2U2Enw#D~QZy|eKB1bUmI>yZd+Bnw zzNbEyIb_BCH+v0nMH+e9jp%I>)e9tu&6892O(G~HcVt|pw*%sf zY>r?SXIp%`ju#Tv2+vNwmsSXgdWkg3#fX>OE%}R_?x;r--z@3lZu(OZ%(@$A1AqG` zg*>Z~UkX7wyf0*zM()IE!Qb&$A+KuWJe=zMopMp`4Et@3!k(-M_3Rei(tC9M+Q{ykXNXV}m`J5#vzC*}g8ab{HNH<=VX4uxW zFgw8TOY7VPFXHc>5E9VHZ>(vLKZN9Hq+@fClDaa?tE-Xu13-Fq5z<&A8RI~DjSv#j z2)@o|_C-rr%Z}y);rj5TrkcBpLQ$8u_>z z$YFbg4AICREkOowYBa+>TqAeqfP^{InPHF9$jnh71B-=B(#Xl&;b0aQk{bDZFvw7jO*8Crjl56?WZ1nzmTJVuqh$C?LQdAm_XQv$z7!JG zNVmEmBP|&xo~@Bv8i5?%RLB~QEN=laszk^|8ac5w$mnrGHfp3PTG@ZZ2|}*X$TZr{ znAJjV)Cgx|{bR2Ya+^l}#&aG1aSsaFs*!J5>hZ4%xnCpawF8;(t&r^+nKudK$h0iB z^^+Rumkly8BxHw1);0z?s*jMDH1arGXVOF=uWRHB==M)87xJz~M)m@ka;}hsMy@LX zIr@4bpKD~!At1+W7xJx_h!1@W@!~yg`HK_eleCWGzLoUG^e~--;eP_btR3{B$EO8Z z|M2uMfkU#2uvZ!q5}h6eg?^SvCs3y6J+%#N{>eBHUv5A zFQsR`SC38Kc6NOnd9VYGT-OfdoI)W{jhsmzdhX#u;u;y!8|1v1LW~7oJvUL$`KKv8 z8hMMYbHPTXMj?GE+!+k(azfAA0F&LW~o= z0HTPffxe#Nimu%-a^h$g)mDaA2 zLG+axeLyGsrb_lpc+=9s_di8A{IzuguZZ z6WgTpoa7}}(uZDmztVHEm-HA1a{X?lM+% zY9_=u)k}V%%+0-o#5J;sKJ=CeLZYX6W$MsEHqTdjR(VM~`p{d?R(hgdlE?wMEvEEn zDwMTMo4t6SLPx5(Ctf=o^@Vw6@BQV>y(}gy<}oG$YYz89*q=*KpyAV z4jyd1SLO${PW*kPXM>kC$O3udSEc77FFA=m^vT@%Vh0*|r3B=u4nm?Adu2A#hdw<- zNca*D5g%HLc=4Wo`HLx?@1fWK+)_zzTNwL0-E{rIadZGLag|rbKN{riE01c$&IloKjhs&( z`tEcgp-tZ0f?Yx0TPY-}k$VP$ynmUHghtwQ2l-&Dknq*s+y>Bxez;ReOe4S1hkmq2 zh;fZq=2rU9#6BSrjcjTU@^M3W9-J37;-kHNQY<8Ntv9#hXgi;d782FS!pR_eW(i4X zq#zgMv#5}8%$wV29wnb&DI}(mUc*4XxL1gAomXZ>U63zd5)#qKOQ@s&t1pGbH8N}j z$k$e5)--gzH@AoAL%(S%B&v~_^r7FD2uWz zwGiV*uS^l*{Clqv64A&j^r1gKC?u|tdnSSW^s121P2Sw5_6GUaw?d*Cc@%N}pVOMK z4H6njKNRGbkdW}r-rTy?`w22`^GY@3kzkpV1w}N}nQqiJ7YmAO=u7%UpSf00 z=yq?0<#eQebF-kRhBgL)(#)p>B{cLFCi6JEEaUbgKpC zp@QNX%BcfX*X%DSw9T7goQ}1gIYm%ZL%Z7p)i;+2N@%Fb1fT}yIzi#Py%{d;2h`BK zRZvVrXVbYhGM^S?+~bw%m#{cBUR9y%K?@m_C+7t+BV zVipRDYUne1v1aBdK?x0=JOZe>IZIIZK5vGvv<3>9rwfW{h!f-f7Um{F#{FKYC&mFC zYCa$+qM>tX*e%Uh1;sUVG)vgZ{7z8l0dIyQ=m1-rfsojthQ4YC)W&QnD50SjCIPiI z4-*uA(3{~>`r3Bp(Sl+cdV{*!n@a^54|%1U)7y41FBBBf&~Uojj^=HG;u^Y@{8K@knjC<5wcP8Sr_P!oFH?&hh2Vj3DW5U7W_QBYh%XToCrCFVVX5*q5t zgQTbVk|1Ndw}eCTfO?r<2?}XwUolW`(}%W4y)?9XB2XWb-2%U$p)Ny!`kH+NMK!d$ z4^ThzC_ym|Wpx4SZ!QuP*U$-cyN8(<2uf(^8d$718303z4cmI4``fu zqM(q5PNUl$Z>|v(*3iv$fhL%@2#RRvuZBQJnokOfYUpmd-HGN0f?^u_if;EP^LIgU z4e=p5|0J^jDKHq+&^vUylg%!IjJUU6F}mF;=14&y4J~2`k2Yrt3Tvp8uJ9Ohm7s`* zO!n8Y=9Pk?8v2xOcdB`xpqPf%^aeW4+$|`sq3@{cc=H=U2@Ul;6sXipYa{*jgtuO$ zbh{C=g`kjzp6CTM&Fm*Atf5A9yVK3df+8A990D}MTr4Q+MdEhXB3>MBz;(NYbi1?6 z8$=-H3M@x3SVFfu+k8w=LPICf?andZ5fpmTsgg()(e2JPe-;$c&=el4Czy5G%8{U< zE1Ln$Gdl=MXlNJ@lKJLPL7}I-x{jsWU0_B8MKn~m8&J72$kGObcgun7fAVYYw#3JVa3F8LzHi z2LM%=y#z%xluZY^%sf(1Ohbp$?JhUVl`aiMDYe4nEn1AZp7rW_xj)cJ=8a01hQ`zF zo@_p@bZO}Kfk3C2?l~dd{nBbt|A#&0HLOIN@oiAKmV0W=BCW4Si3y zyUH9UD50T!i1SCyX@WvKyt+ox?VfI~6co|W^|Yun%*zGEG;}ZB?wRJ@f)W}!mTq^o z`J&SGyjRyHbh~GnUn*T1x^x)O*{0n=Y+gf;((RsOHWQT4P(dT0bIsm@LOZ>>z8(Q| zo;guaL_=m9p!3azN|%Q22moDRp09Li=tsKUHRer9*9%@qSwNSX8wEu)^bXzbW#&DCVj3!<+r8X;Nl-#Vztin*G`|uQ zddZ_p+^(;a<90K|?ZUU7dpHEHG8+Tn2^d%4d&mbLrk!mvdk9*jq04y~Uu}*Pv|dBI z>2|L%=Ly=Xp~0xdVUuSL?l>4$%B`M*(JZD^Qz9pzo zL(4-zH<&*O8mFOo%HT2{Vpe<$-L0dKS9S`HX%o0JnHS{wNq%;)0^CFo+GGGLs!uw-(y}cXq<+c9R+l+`KX{p8rnqzxX*lB(0UC`8x3^7`7c3R zH8hXC{D7H*_QFHY8Y*U$A2j*Z{`(<2n9ObE}~B8hQs7?SIUCLC{tW^`_@~-27b7ZVmN10w`{p zg;FmKZRO$cgxOS3?rYw9RTKa{Y4#LUsG%sV%>R_h*(>-B4V^>-c-mYbXpx5Qq4hpv zo-1g*hK3IUde*!_&{ho{)e`7A^D#lYHS{KjhC9r61nt#Oh)3n~=Fft1U-#B)NiNV% zvrZ8UU#Oug*p)As9R!Wj&~t5pc9}y3Ez;09SegGtGa_ic7m3?F1@Yo=^W`soL%Z%M z2<$dDh(O#GC_^x~I1lI*^A16gH=J?{+Jd_HUp1c-WW4D`UmOYan)!*Kn1+s_+kM^q zTTu8duT-ND&>LpMVm3rVL#>g{|EAeZQ1orD)NGzS-!jJt3cce+W(%OV&AEc&8hV}? zzGJQy6nWPxbx$3jcg<@B8Si<~`UybqnGXw!Y3N#Z@cZT)g2L~6rEWr9{U4Zn1tl~z zok#eGW>z;=Ir@QD>RYF@q!4iXg8(1b}qKbyx13V-938c(=ufk830otkq4JhMf0;c5h4*@;(h=wX+Z-n-p`i&Z;XZSopy-cYsYdMO z{pQ(%LO*%Ydrg51ix0uV4mH%e9gt~l7ZmxIS86WZu4TO?$oScV#O?lscyYMu^#Z>U z99AC!X;uKo3To>LypMFj(P$ihy46xpLPLXa;P?a9VS+-xIBG=dLOPlZ>u5m{4Q-tW zlxZy$6w}c3BZ0E43k4-Kl)?T8TDJ)b{p!_qULH`k^^Bm1hFb7|%&`)JVj6n215h37 zPeBO{9m7K_*Q$>z4P1=>=GE13Bv77JBq*Yx8N-3{touiIL-VtN8d~2gUH|s#n#G1{ zWM%Ybl_MIumaWm)Y9%P9p=apSnpgt_B{VcL1k}_zMo{PvudYN}phK(*rAtGP^2E^0 zTCa3zXxUhx=GN^>mxk6+SIBx+>H5>Ft3Lw%7S_jtA{w&jO%ApG5){+Wep+u!s{uLy zr+*Ed!-Kz-RV*mbTW_dHr50#Wcj%5&ZqF-GailSL)e`K!;i12uf&Z1>NodE3H3k8})gmEcRm9Y9T1(_o9ts zfCgIq1jRMfi{50AHCa$3%`5d4-R@v(u^=Pei%z7Y8Dgy!6w}Za>KbZo78DM6rB0^X z9cDcxD50S~hX4(?J`@zq@Je0Q6ljF?Z$Y6Gy!EZ1xQ1S*O;51W2e8VKT(8ufbh}4dhYB+CyyzzCnrQVG z6w}beFwjxf6hYy9uT&$t-AUFGK?x1jF9w=ytrHY2@Jd}nw>!nURZys|7yZeD=xFO{ zL2(UjpxZsh;!RT2tDaXXOt*Wi^@kv%z896zw@$U{p$<6sHS`YAaaN(Aa09Q@3Odl^ ztx0Loh~TU$cy&U?M|~c35siI_(-7X)&qhfjlEJA63wt) z6=XE=qNC|{XIkG0ifQOmy4^C1M-T3SH}y)*rrFH0S_(>N=s5b;+16o#qK9~;ZX%jv z9W5x-%!|g+N6odC3W{s!IieG+3k5}*d!;(lMCVzz2{J-n6ht5T=UdMRig}T^-2~#r z;rirn05b`+m~!h^5eT<%^4f`QkXI!Bg;pNA1%0ofa=P6`RwqHmp4M@KT1U6L#5z?_hz*RzFU9D^(e6@fqoAmUuH|UA!n#LLLPKNeO_o_N z2@1FJW@xZKmRny5ifL#ho!Sb^hwBsEt#0j=dXH}RB&)fgh=w-M?VfD)5fs%dO}c4Ls!!6 zMy>Y+8ST7Mm$0Euw|)~8(a?)@yJuMWL)aQ|4gG60(3w_eL812E44d=vus>4F!e)U1}9zgR#GcO6glKv$_Zh7kV?ih3Il?q@b9FPNdu2Xw4L46nUlo zYz1_MwMtM#L#ya^ue7cd6xUD%kL9bZ`virGy%|1Aw8`2nD5{}t9PM6heIqELp^xZx zud&i_NW=Sg^JX}dCVH*aLQqUYt>|`RRzE>TcaM~~-N}d-hpXOuz*pVQrQ5yUS|9=u zS70E5!F6=IH(2KiifO10591rH8w4dZ^cvmnP1a+ALOq-kNQOVr?cQv?BPgPw8|ij$ zv3^#%G&F{8ce7Pzg!H|Jo}nwe)#@N9RN~e3;h{jcSwjUyG}M6oak~`}6w^>&9zS~+)4ELQ>gm8)8fr%0dY83J>C({CL|d&dlr9YoqubqPah#8X zzn526!xlhyTZagWXy`S%-FvKFf?^ul#{Rn3I#N(VL$}lI-e;97UA?`!9)K(M-*26# zbZLm6C-*;K-KcbFsF-f|LF;j)OGAgX1A54MSLy2G)wQV!(8Ja*N|%P-W6M8c<>DlO z)4zsZqubqXbrh7)&>3N%N3CIkLVdluhSTjnW=#_m(a;dO-N&t!N|%Oq(e1{q%atw- z&868qVco5C_4Dd_ybaKk7SCWAc0@zvbh}SkUn*T1x|qK8Y0Dl(sf30yCILNTH4_x- z@6~lpL!f7^-hv_;`aJ{aIcuVzn1=S!?e4G^DqR{1!7urrx6W6(IHbhlmt*-C9$!1H zo0KjMvFH6SSbW?X{iUJv=yrEm?nlNF4PC`S!`qe*hZ(A@p|9v*-?5qtifSl8 zvw7F*BPgb!hv{J7vyKuJ*U(Hl*!QhPf)X0~i4OJy>jFW>AaCKbc{qG%-7F}ip)PFs zkE|yIg*6o6s4-!^FDRm+<~+nxK$|zNUly!n#6GSVKFqfxfiv6%^6XlbwLR zvR)Px)zIHK^zoY0*MediYJq0(e`ER4C>Zi;s5@Qdw^m3{LPLw`V865a3NnUx>va#M zzPBa`3Tfyk#QA@)P81Z@(AOcLz1A8*5e;1t2Kv#uMNm{j$J4?7WIZV;rlDi$VE<)( zASkY(Piav@Kn#!zp)-lT*5)#@TBq@lCuV1Khl3JPoJHXbRz zTQdbkG}M9)_TSbjK~W9ePY3&lb)}$~hH^83{28X*`A@=`d2#RWmlYRaIyO*H2hV~)OU)MfTka4(I*JnIP>e=Oj!WtUc6R5s@ zo}j3PrV%x;Ic!H8YUnl|s}1ePm99}v2$_t z09_htPY2r6?kLC@?bY=&kAy?)VS>UM`jI2lX7)5eQ4RgTQ*v{ArP8IL_X9v7`*Nl0 z2(PYf&460icPm{Q+Q5c7)P7Ov(on}yKrQVrl`ah>=v!OaHoO%4-59T~mNe1UHlH)g zu)`X9nk8&w_ZAe@(CIlqZS9GI;u<=EXPS2QLZxf0SJyK%w)XbAAYvodm@- zw2c;3Xb%@;jQ8qlkAT0(o-Qb?q26@X#rCO6mxg|z+wEp=RJt@&)E=n2&DVUVZWqwX(*3|U1EQwbZO`gj0yccZQo>O7}rn-HdHUWxgg_6udZP&fO^|~1cfzJ z!iMT&A0;TNp?*Bm^tBf$T^jnGUD?mRK${6_gW zigQ?sz?*F9!|jP8u+F7Ko*pC{<*k_4A!WB50L28Jl2>e71W9|Dz zATr5ms`DA7hF4qx_lpz3snl?!{e=j`U4cg!qz3C~r_xD*oDmS1Xg37FVKCXz@U5$% zn=9bHj~!e|4O8rqA`o{44q=cQW~K;mBE^5SeXq6{^n&cZm+gYwT z_Dv#?a0O0ckmZV}2prG0ool}-0)@voHNOqP;99ogJo`sM5f?G9U^kX)z8yT4)!*tO zN=doeB3{asd_=wj&2W+3Uj!1aKpulE*OU~2quN2>M7vxB0>?V#8iZhw51#m!*yjlf zxrliMSJB}uwQm$O!bOylay^b6DOd6t(ohKmR@iTdK*SZel|hzkZ;HU-)NqoWHWexC z*i@%n?;>6B)}BD8*ewJZ$2o|31@EEMO1qz+@bO-$!93lbW=~cbx=5t{Y7Vr@UMwh4 z>XDM#tVO)kCi!UAY>wT|v~N&qB96dv23ecOQUqFMKw!1~x(KXy1vWGI2n2p`1(b)w zQwZl!!#TG9I95OI3cN!BY6u}-ij))xQ^UD-i3k|eog!s2NDbq4fpqxe4iGrso-G0q zSD-J0)Nn?Mz=c^5xWL{h0tr`OK7-V7k1l}DxGxU^YwhPnz?k6_>1qb4VNZ&{&L$98 zXa6Arxvs!V3{peAQmNcv)xKi!bKwW3(I|*JwT8#+bOq5Sxtd%w~rAN zc2UyHS0G*vs^nE<;BW|Ru`dvTh$~RaVB9c_o3Wz{Jl_lgciG#S!rtl%tVb|dkG0um zza=Q)BIXrbTnu!#{ga@=IZly9>JR$5d+qFL%rN32k$R7Vv-|9Jg0{MdQgTh)AMsMS zMn>>-cFn`~k&-mwChd%1@O~ES5xZPaXzoCRi+mtIIQ&TLJ!+pPDC{DU@^=Dy%)U`j z)I~p=$Z$WqCT>42DCQ!OdbkJB6ZX4;5-y^Yl=uh4ONq0M;4GH-8QVXd^)^lzsEYLw zQUp5=0(#aC2@1K0AIuMqqSOw%ub@H~iBug*J#SAEG|ojLbp*}g1^Yxn5f_QnJYEj$ zveyWTx`H#3wGcL;&b~2K@k`6 zq!b)VsW0r$1;t%NPaG^I`qDOMvdVj1Bo1yp(N}g;LAeVYT~e??kOnbA|4Le z{IR^Wmbf}Fa?UWZ+v;NM!lgu~iCGzDp4mF5Aj{5al9OlVr}Il|R(-?H>66trYh;08 z*sYALti!+!{KSXa4M15P>>@XAm@2)E!A+pRv~#kuC~G2^k)6z_7gFO}zLKwhWC4R& zt{PO^G)ERtBD)3h=?a+B#T?K`m7;AU7A)NGvO$fQqz>lz0;+UYL&M1Jp47o$9)cd4 z?@*{DEvQU9piw_`Yh7;yQ~c8&Zr2ZJRAYNonuKc|FbRAC%N2!vD0{$fFuT1tvOw#_ zbiJPfS+K+WbeN2537M`XWL0(%3lwyMPLF0+Qq`k5-Uz9|^EOP{_=|mO{+W}Fza|a@ z1FPA!V#(sJbIWJUub5e8NMQcl>0M{fn9+4buaeS|?w#k)Ew5P7d3Je4*B*L0M<_Mj z^tnry7+tz_?b1d4#SZ^Z96NUOk%lp&eB9!NGfHQdm6r}0UR*kD*^1&W@B)UhWa&)& z7*CfuEEe`>md(PxWf)6OT2!_KyQl+`EL15_N_V$>@#rDr2G1;;v2bSD;!?;lwGV=G z7nGGQD4WKhpBgf(v(v-eF&YQfe-`-JuzXh9di=H5rv>h|Iu`^g5HQoON&7tTeBgPj zu-+C4uTOiv>ejAfbuktg3A$ z9U%XlYT71JnSWcA|Bht-YHp0GdPt>RJ!$Z;n5d3umg!sA)#xh6#Zd>a+v@CU zYGwW%nf<+HeK{)J{QnC_wRYTj^5=1vJgVLN|GUSvCx0pbA66r+{8jUx_}^@wbM3}j z{{P+M+EaeVFa7TL4Y!4=_Q1IRdJP;6zxtHtb2a=A)`5Ls2dz%Jg7N=zMv4=UuWKstuOHNv%hBxk5r^W%wf@yQh)riC$d8h%28k}H2QtfyHqZ1WhI=_O0 z7=*p!5BO}3KQ0&;=8j=!m}h)u-EB#)UL^kIO!>PCf6cVR)8-$IOAyoSI%na6vaU-` z>gtScx;i?RE?hW&Nmq=a$`(&sx^S^LUIU6t%PSTPDj!)ssC@Y1g%yjI$PjBnQ4gbZ z;ryAU3unz*QnpmmEm=Bk@zQ}aXD)VAj-J05iHk}n6m@em8ai`!*^+T(NaAGE%~&vP z#pux!dK49xmMxmw%P1W=wsgs~Wo4yh}U2K%jnm=v!5;wc5wQ-V9ub5RjecF;T z>GZs~p&RSe{V(IV^Cs*Hc$;M&(&z-qquncgA7Zn~b zc@LukjnfMav#`8uNwP(&??bIys`M`ys#5)^nz^O4mg;G=Ia{D~(X^S}j9K#+PCH-^ zDJAn4md_5!ANDJT`D4YPMygISO6M<}F;B0wxBqG+MM50Q^+>2%m(HkITsmXn{E7wT zdJekf(uS0IRCYmk5vUB~Fj%xu8AN3ytau5GKx}8&$k9WqSE4!@Eml#!WbW+pvYDY7 zbEYlU)4D~M9!*-3)1y_axw1zqOHyJ~HgHl6Tbh>Atr(_KDo2%DT4ka_i%Ljg{fo<{ z&8%`XiglM(lvgY%n^|nkDxbEXtTHK&6WwlABceC70|w>o)my}P!0>Rd-cprWIbO;! zN?ztwx~hSbrW70ST4hUkh|>Ow)TY?+F3FY?*j+(%U3u9GWuqutYHOlvoDx+nH_Spg zBdtxVORW45NyfGZN1~IqXC|!W7P}NY=X3VQtq@0U# zMa6Cry~VFCF6mN|T`HaEl-Voor0gNN)KF?PKh86fpcq562?qDAOmrdBRp z{JXNDS##%?l`nJ)Oh4qB{DF&+Jh!0zhL1TaG`OfJ)T2xHE`_1u!lIJGlEU7h&I>pZ zfX&j1^0NM7EpulucJYik{V@~Kxukoj^XyRPS*YWTd7T$6UbwVu2F`q)VMXvtZkehy zjjB;~T@6C_ha-kg3*F}=s^VOgSCLag(nVJ_?xL#3&8#Yq>Z0C~cV$G+D&gL`^G;qx zd3uvGCWCO?$qBkw@6y3zhQsC0T|DE+Idf+%mFQ!NdX^k0zIzSnd(;qLQbT;t8sdA^ z5Rck<%2`}`49>79KF*F+;^E*@E8W-@x6`d<>MAE86+oN)kbm{tG1|_bw7Yy zj{~rh12DY}P}id3LRF3`b#>zPKB-Kv_eo{E-Y1pux?Z$darbKUR>tdkE8}&&mGQdX z%J>vpaP-zx9^Dp@Pf;&6Pf9jLy~P$%OjE$pnjFAu-l5nLtzvOKR3WRx7Wa}4&>IwX z<;3d^f%tC9p7nV4qnMlCo|VbbN_8bTEfqN(nBuzRl%V@x|;< z2j~*0eTj5*s({mTsQ?30936TqQh`M4t(c6~TQM1}w_-9{x4L9>s*Q?Dy+%mgU5V!jFhR@m_8+cCw(>X)z}wHUnudZO{3yd+eXEwHjaurs7AIPrQ{RHoOPu`)iT9jkQ`mFe~JpqFa$9o3CV zkd2B?DW!@|DWn=b>IQ>MRCG!vD!PVD^ok}kNv)46N)_Wp`d&3SLuV9(fxq{3%a*Cm zry!%Aw2LbFBe@z8>vc^=>vc^=>vcu6@^2}bsOXeTRCEoQ=na<4JLL#dnWVI%icV>i zZZ))`6Q7d4+A%c>Q|*|#GCrkFPWqHeIq@mAa^h2}<;16yvzmhvrIFZ_W|!EM5=v}J z`6M=_bP}6VHi^|s26K~G-6Gsry<~2zUNSdUFPR&gQU>MXQ?0wEqe`84Q;Mge_41)T zt2=w6C~8cXl1UB2-5N%KDmtZ_DmtZ}sw8@2)BI{0GPyvPK-tv*Ftx!j+f?09N=2tM zjEdHK4#iQ?dYzKdDOROYr&Lu%rxqNy1yDjgb5=;jr(~o2r=FZ$TFu2oGP;ILQp&&u&}EWE)vYfXozhdPz9~J`yZVu{icZNyMc0r? zN)xNpDc!B2Q<_*sr_{3AaR;hd?YN^dKBX{D`jpZ*@hQb|;`Q>t%&O~fM60uC4cF3Y zey`fgY?(!>@d_Mss@{`3^eBI(*De`d&1IQqK$vnlmt@sX57cmtuRLu^37pxBnp*%9 zp;hXla?)EKb*b)RE*Y(xWHMSe$z-%%N?J!v!^Yy8`n8(lo7u}azJ?m5mQhmcWn^J` zRqtz^cs-lS^fl#^T3MBUs>!Q(z2PhK*G(SrMMc$~5>#|bDOGezAysrr8C7&j5mj_b z301USK=ej8xAUqq@tQ^k>XKRSLRMDJ3#qk|=#*M1vq{NBMWzOdM8o{MjNKHpqiI>Byn&zsE z*Q;6?uh*6F#WG0LTdXoZH6N9}rhN4JR_2ppn2uh(Au7}Nu5re}b*44VSSa4T7J0q= z=ztmq?dky6YlYO#KshyD4t%{*mB~}$okJnDcdIuCG>;2X%uS7d^=^b_6|MJTGCHLZ zRO*yksc60QD2p1N>ME1by2@m|t4v0xSdCIyLrL^DK_+T!klMOVyq+GdQe0Tg zu}~SWSE({yuTy2bUa89Xl;X?GU1~8^v|dWqO5J@-X?G`HFJ)zVy_A*ldMPX8Q`+9i zKc)0ed}=wJS=tm(t*e7#Cq5;;I$2dYE1@~nMT*`I$!NV9lF@oAB%}34NJgjBH92;u zIyiMkiuxU7)X5Rh>xBH>p`|VWP+ZeJo|rL)nA;lq}5#WC8JYX zS*6xn8O`A4p4twQdo`C7$-7Qfj*Fz~lo~ibS+@t;vvL}GQ7hw9%37^&uS}nMT-4x{ zoP1KM>|FbxUe%4JoS7C~irVF>00%*JLh9nHN=re=z5Y9ZOo}2UlTu3+ozmzk`T%EZ z_a@8#DeX?+>?*4Kfmasx#U_A2K)h@kgS4HHkc7>fJ;4A0B4PyI>!dpibh_K_4u+uc z6hsunh>RjCJ`ps4OJG1iWqd{l1eb}38f0W1;4&-&K@b!L{&nm8&V7B(sY>SmnfLjS z?*86W=T_Cdb>7m=y~(HR5U`b}>##lj3k;gC^e-s*SC{hr^o-)~GwAo$_FXf*aFyqg zKkbO+X;iX2i%K@jkCMn~^wH5jj%c~rDdNpuvCd52;Wkg=w-Jap-G}S%+)E%Mf>n22~4BDTW{(ROxFY*g{4B=VRPD~>)QOsy*Qd^D_qTvERC^vf`n zs2FSfvq}0`+4P=R9umJ-dU0lx$KD_nos7K1DOpZr$+9aYo32o9JCR|RW>)A`n2E;c z8EQa&r@TQX@*C*6SDs)cn;}uO8B*+NuGncfWlWO9(;Tsx7h+RViR}c0UCL1wD}Y{{ zs(C3k(Ca2M{^;r3ikCCca?|^8^i1c2n!ZPlw4X%uL=LGuLS~0_gv=g^%`S;eZhE?u zFR%PA`B_wz09spiZmAk6=QL)>B%Dj9DACX5sYxVOQd&BNI{@H0z*&B|PonbYH zCS;J4!m(zu=}c88lb@7G-&oBAMtbaH=?O*-gj2}QdBrC$wjYVNp|L;Z@M9#F9V}UP zrDQXyl*G&`vFv%7M9!;c`h-x8r{y+2`T;dwhYl|cMUEoYj3%fVOi(kHpk^pRWzYPf z2`U#atDI<7*)vwzGuExVX!Cyqug6V?Kuv0qD!e{ZUQ84kB;E?N-pc&uip(m5|QUY%gu2@yiDJUH^&L_ z<~YIa5{NQ?krm3@Y-3Q?g7_aw3VH-jLf)Z(uo`GPj%)&x!ZE z#3nbf$xUo><6~uce2TfE0xAdOJyC|~u*m~a3@EV>Yz{=?S8&9#-(_wy zSrlz1i`Yz7Sci#E>B{GJ|35Xx{>-@CzOD9&Px;FBiBI{;?Nhd~|Eb&9E=TPTdFm-P z`nMQ9KKi#9EtgBD3RHf6yHb6Zn}uSi7-RrJf;Eu?m;&2{lV|a zRR8^s!}~7N&!957k4^mUkJwBYu{i^X<%E^F%^5(^rhml#eV($W5>E*%mlS|>II1wkJ&6w~P2DUWg)9ly> zjnUt&`i}CiBTTYZCENO|A$0=zl&Sw0C-yEVOjYsWROCR|&#cO5c^FEL{4H?#sw(oo z5trK{{~K|+ZEL^OH^&i+YHMxe(JX2SEyTpDzTz1uykwU{ZnaCi8Z6tHlM4Hj{qR#5 zP9A$0BJZt=`A&Rb4!3D2-Y%=yr4@?&_60;yF+Kw#bmLn@BD2!O1L?xTt6m4=7o7}1YYX%;Dx=o!7 zC<`~j*mDwG!*&nglA+gybablNdA}QL;R+tXi5kH6Y2Gwu~mi;J$ zWv@MlVA+i_IFTdqT;rEKy}U?&azfkXT=>25i?e7EF4LMxp=M_I#AcwxW=O<3aU%`_^@I)LVOh^g{#LX;#^3R@rG* z*=g2z_w2NWPN-KVJ_kK#+wkyKTlU$X5J6?1S!JJDWuIBiM2Ea)Btgyj6zQ2CN2F)0 zvS+NaXRM|V^fJoM58U*QK5>>4=aUo5nJd|JkfKcwiDegk61@I4`;1=or4?`Xig>eI zxZJNll*!LSd4rrB-vYH%_O#`4dRi`f+H%>`mYdTH`!yqgn|{&KFM)|uTOdXkal;;?+!(he>U+Aj3p1yaHbbAB+6w!#61Z41AOFZ^EB~Z;w3p!?!5^Bm5=hBmA}3i*fx^ z`J3Q7&dx(-f26}>3VdJXr@+T4KNp_E`3(LTysG@G@S5@;!0XB%fj5-D3~wsm(_cfr z7_Xa?hw-eTVYvzL8a#ua46noYg0F%%;K#zR<_|o<&Sya>bgFOG8~Hh<+_IR{FLh&Zq~K(a$PGg*R}F;UBk_~ zR$i`a<>k7Dn{}l&WH%XO{1T-VCWbq%MzJ6Epj(@5CMb*=p6ZLI73eUw43>wY-T53lRX z;CfwOqny|EdgZ*X?^4d|dJ|l)>n+N8UALV{{pWaI*W=-OU3Vzwb$yg_Uf0Je=XE^~ zuGjS$%6VO{P|oYR20zfzgP*VK%6VNkl=Hf7D(7|W&Z7C@{JgF+<-D$QxL(%{c!qxR zx^BXGUGTbgXVZT5y3XNk$ivUq3*mZQSK((Oo}aH9aJ{a#!1=u8b)8kHKYCp+gmeFS zU9W)abzOsJ=nt>!x^iCE4duM9U6uMn|F+h3uAJ9(P5EnnT^Fyf8gM?(_u7v9UghKA zKU1E=A5?xie6#W%_@l}%hW|nNweY8u-wNNN{66?g%6||4r}7u!BRgp(c^-E0-xTw+ zqw<5{yDOgt-%I&I_*mu3;hFLe!QZ0%YWUlg-vXbgd?S3S@`vHaE8ha2rF@4SXdX^b zejt3I^2zYil`nvwseCDXiSo7Z70N#i?^V7YKBT+>U#omGyr%p)_@&CX_qRAL&W9_M zzX^Vo^2zXPl%EK{PI)){2IU`u->m#!;2V^G1O6T5KZ1W>`6KX+%3py0MENfMiMyDG zUnoBW{*dxx;J;IT8oa6eT=<`qUkran`4`}B39a98jvlwdbLIEJYs!BQZzz9(^DoU^ z@!F zzw*)kX3fPsxMec`Sa_~{0=%Yt9=xHv!uglW{O56g<)7sI%5UKO%D>0?SIGPia(?Ac za(?B`KhYQS&``b)+^v-P+u^zL+3=e3vpB!<)tvtvng0sTul%c=U-@@Azw!q;|G6^% zQ=DJ<$lYijYRbpL8_FlbU60H^AD%0(a(?A&IKT3BoPU+fzn=3eZ*YF)n>oMoEu6ns z=HGF5)Cc7myrz6AyaB)6(c>hJ@1y+eU7WvP`dYYqzw~vSU-{QK|A36Yhw~3ge~9xB zNq?I2Dmc>PGEC89yGLUnG4x+|{I?0dFYpz;Ia_M(+{wt*a2j^G*C(i##8UHHhzf$_%V`v`Sr=%YNZz!J)udS2uXTkGN zOJ5ClS4saQyrKL?c`R8Pw_rvSTFN3>lWc+pTs`A_64dp+DXP=jO9*5VI{~g{`-nJLbPkyb;^Hz9W z`SEb~1sT5xUR8cByrKLf@a&5+&*$MaBA>lhVt9s*^M&K1Mr&i$Kg%oufX%K$vk8B zp?Rn)9}jn5m+>>;RppD}4dnyyY(3?fWEU=OTDr`Dfwon=<~J@T&43!yC#UfoI>6 zd7g*Yl<&A7%|lc9o8kGlWuBwpb>%0*-3A%o1+OZ<0Nzl36+F9D=D7)8Q{I3#mH!r= z-zM`s3$H8RZY<4%`&Su%0KBSv61<^&0X(~1=2;4_DPIe3D*rS*zeDD^30_zJL%92n zjDHwjRsKA@p?s(PX&$mWWu6RPQ$7XWRDLo%zf0y>4zDY}2=4Bd@t=cNm46%FP<|gg z`>xFMU+|jpm*Gw2Z#aPFA^#rb$s9cngIARw1FtDR1zuOa9Ntj=A$U{y)o}NH*`HhB znevVBT=`~rRr#~&yg=fm&0ne4sfmfBE1+OU|g4dN_4sR&G9^O=bH{AU| z_WzggO!<@WTzT=Qc*Xnfs`7o{HRbK_y7D>jhVrxFP37moT|@T&N_eLHYw%q8J@BgX zhu}5k&%o=-M`tt-4dn;Go60A_-4A8|7r-;+UGQA_2jNxaSHo+{zX7kq4|Vj|2yZIi z49_;^u6S_#vl)*2#@uVmM;}C9-`(%lxl#e&u@~jQLT1IJ~KR20Xi0=6^4|s=S}`EB_eh zSAHGmzfb1BgYzr@8Ru921m{=&3g`cc%)iGWIDeFngV&Y66W&yQIy}2y=I`bF$}i>o z%D=?Rnee*u#qg%`_jCTA$^0MZ z{K~(=`IX?e3SBv;aik{ z5#IKY?Ef9`4&}dqFI4_#c)xNtp2oXQ`F`*Q{2E7(4tVv~)F1Y_aQ7SOXT$5tSHtt) z%J?hbP31ShYnx^K_u<*Y(jS61ls^rx{!Ye^Je=miJtBQ9ysmsAJpWG_e*(Ozd);LLcfzYL$oNfg_oDPC;dQuw`4=9q!<)+Yeh1A% z_E*Zo@rT2!%BREY%HIQTDqqFe<$vY;%6IKR z9Z-Ge>A+R{1kXy`3laj{36c(cbWgQoL~7jIluBBbAIKIaQ;_h{=aa3D{<-cbHEc(qN& z-vf7hNPh@kSN=3SA0y*O9!2xeRK6d)wx^8mfM9h=7S%1?&7gJpa- zysG>HctiQ8;n^WF&)4BK<@dmw%6|pV50!bIg4dOgn1=drn2g^SURC}MctiOdc=i^V z=PY0k6XOb>MF}kMd{WP30qxqj|_CQ-02~FTAR} z9bQ*H3*J<|nDZYc^Y?Rp^jUR8b?ysrEl&aeE#oc~yv{~FG({M(#g`MsQ9`R_UZaWem3IluDVa+-&_^26Xw z<;TIZ<7NJL!>h_yaen0=<^0OO#QEPT^WVYwmH(XcD=$9YEdE}lsr*&WpUeDv`ya#K zw{!<)*N!QCv`{|~`4p(s`9n)n)0jQb>%n18_GAro63I&cXMR_ z{{qjH?>w94AyJ-aDL@u=Au3*9}jORp86Ezw+xj{{or+yPRM7gPdRaQ=DJ< z$ayqgccRQc7M?4g2(KwW0p3u)g!7*y^RMOn%CF-5%5UcU$~SWUlV$$jaen20;rz;X zo{#fi`N43vQ06}xo-02MUQ^z~`IUc^^PeK~U&r~C-^uxvZ{qyQpXB_f%KRfwpz-F) z_lMV%Pl7j;p9puS$^6SWzw(PXzw&E1zw%o-|00?H0r)uhuBc;A!KW(U`CT;LdCJGb ztMG-$a{_z=d@uMicoV*21Z}vK^PEooT#WeZ;SG2Lz7bw~55@amtA)p-91p(&{u<{$ zgW?Z?k6l3Hs>2t-kA}PVQvBZV)8QFBho1+p!rS0i!D}l1Hh4qD{{r5G`{foM&%!$v zQ-8+5cRrE&Uxjo0c=!etKL_4~k3*j2@EzYr`FDn20?*(ae zGbz6x4n0ny{=4E0f`4%QLGb)+8Gk&y4(Ip^yjhX)ALKk$a-N?r!q>rhKJS7z;Q0vZ z=4QBCLV5T+e-U1V*C^cWbux{s3D4jiaJQ85@OiQj-Uc6y_#Su$za4%B=Z7BwU(fMf zl>Z9&Pv8wWpZ|Y=yKai-`5Em8SiHYm2ni?J@TQ8t z1@6wF{T_h*-V4v*yTc!ccc}PR;R{v#ey7oRt15mHyr$w8!mosn!hX+z*Wo<>m%tlv ze%`qbo}EkM>Oh{m;8i%UqX*&Z;C%i(1Fyr!AkX%TXk2%}x!xWGZ^F4w9t-d2q5g25 z)8SP(pFjQZ2Au1|C*WIDo*Uq8t0+JB|KH#ld@uBWg#Q}5PVd7ZevDh+OL-9P{v3So z=ylp-d0z1G&h2Tg_dfdF#k|?;y6@(_h}YMR&w|_Q&mS4`?CbRP-sgKC;<={~FKxJrEWob`eZ}*^& z=<2I1@9A68*;DBn>KhoWbgo|GmiDdc@97@u?rNVhdD^6SP-WT5-j$Wkfq~BRE8V?A z1LwPC1D&h7D_yHstvcT~8TM1fM-GY5rM(LW`j%FfclTCi%$->2Ja5fJ-`$?oLzVJ2 zVl#W^4)m?=AM^nel3ON*ExoH(&FG!qJG_Oz<>ryRZRY>iHhpck%|&$TzJSGDnoW|4@m|V#kl*Dt>J<&|=#BC1gc7Y~3aqlg<f|zQa(QOpY*Yqg0$M$8%6|GSPHPUCZ%Z#_p2r2NTwW$w9@*FdbaW z@g!87Of(fI!*l`~rs8Cnij!d~PKFaVTcvZ-L?`Y5NGr!gM{mGboF$3LqT*!IP;oL$ z#mO*=ll8>pM(;Q8JBi|C^5Ax^#;G_Nrs8B6#mP8|ll8r|YKqc|ByaWanLWIPlnbN}m5ER2TYWHb~fqoFt%rQ&2czCS8XCOQ-rqoGn5 zrQ&2co`Z^$iKgOYIlfCOP9{3k6{A#~4AXkE98W^U$wbroF-*nDFcl}mRGbV`aWYIx z%`g=w!&ICM)5I9X3jE{cBOTaWWc;lhII|j8bv39N!-m zClehCi_uUij8bv39M3_;$wX6evK-$f6(WWb+PKIf{S&k>6;$)&}{TQa=WSEMR zVJc3BsW=&?rDm9llVK`OhH2#(Msc#9m@FzzCY*|sVJc3BQJkzNCKtuY#G^P_Ps|t< zClgM^$uNqOaTF)(i77^LGVv%*)~PrdM{zQa;$$4f$#^JE)1t-6XedrbLvb=1ijz?) zPL@M)vK-%GC@dy8R0^Y1oGiz4P;oNRRGciwcS*&`M2EU!l!}vKT5p!)NvJrPXj(sp zsW=&?;$)bLlVK`OhH0r8rs8Cnij!elIfhZ3tS2UmijxVa;$)bLlVKDm>xs!laWe5J zPSz7MM#ag5Q*knk;$$4f$$DanQJhRXij#FJPR3E3jH5UiM{zP9iqnLSXmzq2s)glH zpDc$0Wtl2e#6yXScw(=iz}WCmGAvV>ig+Ro6)GD~l`7(i{Zg&6@uALGrfOxKR$#;v zd8lC7cv@7}sbpEFnq{4emUXIH)@c!1r@CdG3YT?SR@PCvA{$aON5#uFpz39v%9nN2 zugHefT%&^77ARqn4XNp)B4!&<6|;^qW;dXYMK+{n9F@$rKq-rCpju`(pqSYWsAhHp z%9-6j^~{txDlLYovKXd%W|-=kVbnA0iJj6L!U-mx3Xx%|D~3_etS8c-o|$;mGwX@{ zqMn&}szZiR&x~VLT2JIbJu~rGW5!X>jH8|zM?Eu+dS)C8(m3jwanv*8SY5`sp4knl znL|A@4N%XFqn;V(dS*AI=9=r7X~Ff(Zb(fZ>X~VPdS;yKnc2Yg%x*}{IM*}Ng6o;x zfO=*&a6K~{xSp8}T+if&iT=+#?B8B_4V6Xy<(1d4@{NWXXEdyCqoME_4NKB!sD?(V zELo2H4XN)jRRmbx#OduRb`^7I$DlTb?lEzeFtNIi07FqsmV?2 z*mC@c(LyrOv{Ws}2T#S)L{lv@OeNHEd`_tFnP{p$mg60yp3b%O@ z(}=2L<70nFTAZO&C`>%+qjh@Lv7R{EC@VIeYMpV^C+mq50oBRGhvFpv#;Q24i;`tD zoE=8P(lr`Rb)%s;84V|l(NLU>QgN~z`5V&WsKtjD`_s}QIzB)uPIi~^A<~O96HTYB z<#-3_ooJ#my#oNPQ5C+mqRz^gPHPsPbNij(!!`IR`@C{8vH6({2;PSz7A z0*aG~4`-_U8!IkOM#BkdG!!SJ;bYdPLQI(ck#e3w+5Of(fI%kf=OaWc_#x>}A;6%{8FP3NTL_;6@tnrJFc zhN(Cirs8BdajwOCg5qSdpg37i9Ay+I8&Ac_dSVJtoNPQ5C*vqi)>G$K;%K8d**sL7 zjH5VNPn-xSP9{E_sq$~ExHuUNC#2C(oQ#H}Z8Q`oqv3=x8j6!qDo&O|ak3mA9u+4W z9UmYSCmS6fA{8eSO{cBpcn9g^vC;8eQgJfTRGciwcS*&`MAPYNIX+cXoJ=&Gla}Md zp_OT(sW=&?;$)bLljX#@7Vim)lgWbOWIb_|QJic%6({S7DL`?u@l>3Qqc~YlonMKg zjpAhUP;oMj;$%H>BA_^#_;9AmKV#tHWHg+RMniEj8jiNnP@Ig06UJyLPDZIXSq{a? za(sAHoNRP_fK;4pbbN?ZoJ=&GwwB`^q?5-+$9GA^$wX6evK-$f6(o`oR8es< z(R5B)jt_@crirHFWSEMRVJc3R6X#mICn!!P3yPEV#8F0Zvhh@$tS6=b#mUA~aWanL zWIc6$C5|?Vlg&fL$vBFW^~8yQ;$-5(nW}#8$JNPlI3+EI`eZpAam%4XSq`U-UUZd84vrzQwRB%M@3Onz4ErUsi{H z)tA~n5x*2mZJ!zn&ym~6KgliWUD!7`BV4IU?R(NT+D_g|+sWH#d(>9i9<`0OQ?}A} zO0q4@SG+B6OU)&}7);OA)NSl{YP8R^-*j8r@3d%J-j?b!<&L-IZK<~9lS+EPTRC$n zyAO!9E;nvt-|>#4W7D=V+y0MfwzBVZYg#jj*5$@%&%?E(XvLac58Jl&wvp9XwoR`b9z_TuuIa3O*4uoIeuPssbM!Q^P)_YHye&YO@K5E#Ou%bN8J?Y(*+4GQX-mFtyW$uELXG~vE zIeE^U(`GNKESf%J!R%rWJu8qdq7!EpS5;lqxumDt^{*ZpRMFjCokN{&nZNYvV7J;-T=#V8xs|0W&aEu#T-npw zT3mfK^dt1XQe5V+wK4ReQe>s;rn+VQ11o!nmg$J)tNMB=BFtRZU|(fLXK$D9Wo7=! zenZ#F-pcC1Za;CYF&7i(e_k>;h}^}l-O_$P8w1_%ugsmd)-CJn@7BFJ;k?SJxXkR# zp3cERe~sC}Sf`eKU|{8tnFT+Ce0+TaJtWBw6Coy+ml^4`_$ zOIEM!={jO%muoM6TG2VU!nJpu-|O?y*P#L0a$fhq;L5&U@k7OL8|d!oEE?du{+=P% z9%j1Tf7`yi&;K~oy~h7rTwT`(^@UTWy?X_&r@NxdC*hx{DP35XTJZPhEcIc2H=V0i zF77T!O$G3E=L7nGa9L;m(G}Ne-@*UK?H7&A z{ZGy<0%YN*)<1kbYL*H9o8j$;M&@DD5ZWIaero-r+t2cwUV8oYKHmQ|Bl8e^4S@T< zT~O!v`qTK)`P)pmUHpIC{;rX^|H-+#02v0ny|?09Ztt&f9v=QO(5|=^KDXaIDi6N7 zK>zp%eJTId^LMu2^7^p;FCLwT*u@wq?}z)(`{A$W`smk&wO@nwYtWvrudn+bcH;k8 z>;Ef4Ip2D;U!T~&9{(k1Kf`}59u2f_p#2tNSM(#1#ZTma~*3cpDFSTy(dstw(l=m5EyO0`g zYyN-j+rD8~`+YC$^gsD??SI++F&|s(iT9tOefGa>|0mzJIMm#J9NLdV`%N^A^8DuU z@Of~J+W+4!qW=HwB5KI-J}f-=Xa4$}*Wvvy@4HZ=_AAhizi>PL`Zv{{?@O=(?YW=2 zJ^%cg|E9>rV>dkR^8H8`a3D6SAH%UzLky8qE2JGuso^31%P3zw_`KuiwPJX& R{jb #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 776516a4d72e8d73d51b9ed5a957c8915d912bea..c7dfcb1bc572432a8274f68b1ae7b4a54915d1f4 100755 GIT binary patch literal 43488 zcmeHw3w%`7wfCNx%w&d;WO#_6C{qOuNJ0`G#s@eA0)s}4h>D0#Cdq_E^Sa3d@jV(s zP0<#5)naRFv}(DnReXWT2rsmbAe{yQ{t425@(PTnvRuhp{cGRQ7X?of+{KL+{H4hDQeCP z!ckrQmv9!ek`tOPRrRP;RO2X1xIBf+Q#eigRK+ya?W4BQXOXhE$QeYA@_0Ao;+*-}Tpl(Lbtvq;K5& z!N2!jf6f-?g@n}~BoFyG8k)mXXpc$5AD@OlH4XpdH2mT;{BrOE_}GsTV5F*NRvP{Z zY4`%yp_;mVhG=VPt#69eirVIuXp?AZkF|+NRdZ`h)K)h%w?#$m<*oHG5TzCl6Exfw zi?qhVjgk5$5e_eFY;IDVu$W)Ipma{SxS+UTI@R83`KNPqjp!fZid1m4A5rfk=|wUt z4umT?MZTG-ctl25R&tJbgx5#F!Z$(@!aNI~{6-&z7C!lvK1wWn>v$2g@U8I@vhc0- ztg!HPY*QJFEqpZCI4UjtAqH27P{;e;&}w(*l7I+x_Qc%%9T0{(wtKf(l#m>l-U^k0 z2{D{=#|4q1d>tw6+cSV;!ljg_F5B0~`6|j&SMBTJ{1VE$D8GU83n@=sv#*=;r&FG~ zWZxRjmr|a(Vqcu|CsUrfU|$R8iz!b{-&e``NtCB1@2fz*=z|4aFI*Dp+8gS4dw<2E z1v`4;GlL?uV~d~3j{MA^=)W9_AJ^uNn=8cQm!pHu3+1Or%;3r5i)cIoU!f#c;8ik z6^UrhXe7~R04-BXChLLoBcodx<9ZlzrN6`84v2=doXgWU`p!4SObneNc z^VZ39-d;%O-f48+SwiP$PNnm%Af2BJ(YddJ&Mz*e^GlUIyo)9;fr0 zYv{bEo6dVT(E05iI=|CL=l(r(es@2e-xm&?KMc@$e~`|9tEBVCamS9bFX$q@H)D0# z7ol~zo933S$=%emnRs10`e%(2BBfv$@6#Q(>p<6I zC0`B<)OK~A3KBv;1n1zQqTO>O?VAVM@f0bE6+W48UORSmCvo5`3m|5@{ae2n80fzl zCn*c93#~5ybx-c5TiNo>W%136$z<0Kss0u;L&UvFav2}$D(eq*T+=VwbD#b$`2A;+ z(GpT!4N2FQC+NPn*@4s3KPLGvEuzB>(ZeMAzD0DrA?hR1vLDe6oBN<)^y6h@ z1pZYx%eYSML%=xD2gZA6$t&iNtXGJ2in@rB^*XWgjLR7))0gw3&voT?^#2~|{)Y|5 zmM4xhYFh$8|M93pZzm0R<9j>*4J6dt*$N_hJ1Ojui^*I&$asAzrx`{Tlaaj^`=)3O ziFQ~-GYr&D65TIF2XZ%xl|8vDA3{IEK4o(^_T_G3x6XZVYe&y%TMoFp%3gom13W}s zeU2VS-7EyuGoOL96LyBz0P?x4Drom!su3>8@*;;E6(F{bo zmw!G)%Pk_auR|odD7gj?mhDz8j6=ilyuTjc7TW5nyQJ^t3P*CUJS8z4%C=tFYZ2Lc zWk<@Abg!f?>0FCBTgR-hh-@8mu|;I-n9}4*P{$ahC-lwBpP5%b$LRa#se?a;N{ec=s1}L+95)=WD==VM`FQCoO{FXY{{Ol8;I#7p>YxctlXnseQ z=>})>x?R$|rH(xIqzTDOES0gjT?d!QZs*EfwT$leszlT6j>9GDUjjwAQ~-6FLB4ei z5)G6XkHp=SI1Y*3l*mJZ{cn=inXGjRv`(ScDMo?~PSZLwv`&fEIa%wRiUb!rOX~!+ zPN~+Jt99lfakq9~r*hwIruz~rjr-C(JiYt2r*q#=KQi3cYq=wATKQ}0Hn>WvJHi$T zO69HZSVT5&eHJ3^tyd~%4LyoFSPZ=zwmNIOPy38W7IchmX%28d* zTjm+WuyP)eW{du?@fr**qD*K>iU#UT0x4BK@kqP2O2cp z@7#+7&Eq@YMuNTU9Rd@lABiQDcozxw*7uQMPsbE+eyjZ{Gy zw1{j$IRPRalq=1kRJBM5N?j4h&cwQ;m|K1CeQpoe#TJ;4T12+Myd5GHn4a8Kt?2`^ zMcSaiR23a8FrAhXX|-0~wr-?&JDyAAxm9NFst8?n6_{fU#oI~o%l9ZSgHV9$%m#t$ zl!Cx@=77L;=7PX=%0S?w^FZKo^Fb8Ip9uo^Ss;L) z4FY%t2;k>{0KO0e@N+>>iA5lQp9cc?`5=H_00Q`85Wp`40elGv;1_`az7z!Ti$PF{ zOF#e*g8*I$0yy;p;51GFUJU|x4G7>-5Ws6e0H@g~Dp3alcs&TZ5 z0Nw-wcrys#Eg*pZ8we`V3Icc=2;eagz}rCpUk(EJG0KOUo z@S8vYzZnGZ?}7mSJrGo44G7?CK>+_g2;lz?0{AT;fZqxN_-!D7{{Uo7Z|6D?z;6es zRKrka@-RfKG{X>__v;KpyZcdlISh?W9)@UofMKX-@L}i{X(QDz^ecvbuP=VPi-CKi(M_FxG?vZn-AhkJT=$3BM0QYr^6ze09f~uuIZD4`|0z zq{M5&l;AaCN?=Xc2eDk_eE`P$ufS<_C&|n;VYW=GzoW^dUK4&En!F}lF1h`Lx2_4F z1%CfYWOO`9)F4Z15VCa_ll*pz$XpX{CDFAO(Rl`H4T-8DN?A)3vbi4`MlJvTClrkp z*B*@Msu$#1>aYcJ#g&?>R$PxD7FJxji=@`E#KMZJ>a3Epb!S~qcDYGA`lCqq2MvaG z#kB%}{>LDaE3Oy{Xdw(k0o~~^KD5c4WyN)QgD#Q2$AaH$xE<5?p5779$`lFd+eX6cZ8P$!x7l6k3QUIwy)JRZ|Vy;k}ReB8p4x6`CRz~DMaAY2U_IuHU2EzZ#O zN7-p8kJm~)UADDS+)caLv|wM>t3L_8F;^N%6>OJ?4TjWa-*lqa??~xv;85u zXC{^?@0tnD^Wq+^HkW8~p3f{IoAbO5k-BSQVU!#c)nOZ^BD>Nf(uSp`w!3D6FO^wJ zH1C@1OP6wqdSR4ifx1Lh{}Vk9=uGCVD4-snVv7BnkeNF*$1 zvJNe1vd%266GVcSc1n?8gLAdcJgpPbI;U%$awOQ`Sz4z;>nzkdi?q)9NZjaDj;R+$ zA2xl}To_IA)#2<=eU@!9>!4ke&R5@f)9_VZ2~-0&7DlPtYG3F#*G3cE^InNd<(|(# zq}=npYm{#)+sO-{W+^%f5`1!&r5Kw}R$D}-tMQN?f=Kx!md>w0L$rsOitLl)qz&>( zYwObt@(;aX8p=j@%PCA1x!Nlbnd_i54|ITGx6Um(HCUn0TE0&QbuClaijfdngikfzAzTM}n1yBhf=BTEApvTEApvTEArFBamR_u}HA;(MSZSssSWe`4}Wvc{~!Vd>j(2 zoQDJ}PeLM2yF@fH>vhoIn%-`%gC==9J)V=e-eUFk>(Y7qUtTl3omckEky)=j%55w^ z3}78py1#bJME{qTQu;qcdU)B9nV9Apvn%XT*MGk~f(gp>Bs^?&X^ZHj!L$<;Bw-A|2p7gz4muLpUO%w?CKoJf@ zUzO=u9sZWg+n)3V`BCD~cVpf@rLV=4$-91t1n-F6fdqTkPmo|#Hxi7x8wp0;g9M}Q zLxNH3kzmx%k>En_M}kogAi<~&NHFSQBpCH55{%l21fw2Df(v~D2}V7M1fw=1!KfZ2 z7_}7%Mr}ueQN2iTp*xXa)H6shY8MiWdJYLj^&!Ei7m;ApOGt2`uOPvw-AFL%RU{bo zIueX}6A4D`L4r|xk(jK5E<>#@JZ}aavA))H==yX)cjay)==`+0UpKuspO4O1n z=+?tmj9GS}w3I67&Vxt?on=m>3bX{Bxn0d+NB%cR*lqs3>A<$Id&?p+qlv?ACqydj zu3h1x9=Ur3FSTLMAa03VcmIX!tXn_#`T3`f#78uvy5?OZ|c9}tF?ldIb`I2`UtarX^ z(*@xtFQM9&odz=qx9rgi{P`Ow0yhrwrQ|_rB~<{v1d$HFRpwof*Xa|!l$hnwx01vn zQ{4DYwG?TKz=%a;i@AZ9xG5mO6@ma)1Oi+!2yjzDfSU#a+;k8W zI|Br`6G4D00RiqL5a3P*0qztK;7$brZYBtDvp`VnX&}G_L4cbL0$eEwaC1O_n+pP5 z83=ImK!BSMvR*~JN8NTenGsK{G`HQsBfdUe#JgTVWn{#UmbYE@?2RjbO}=McL`#_1 z?&@P$su2GxL^{OdW{4~6=65?+$nh>cRFIF?B9g|Fgs*pDOJTO)UTG28g1a6f72F85 z)EoIcs|`vU6x`M>Fu&gAAs~&}#f#6IEw|lXKZ8gGH?{_7&qoLMSYs5pj)MC+DE4-C zV|@$Dymx`XIqn9*j?Yg);3M~dV5RC_5V*>HAlUKw83;UPJqY%V{sRQQ^>Yxwe*psc z{UCt<5(MxEKmdOb1n>#2;h%{0RAfwz@GpC z{69eee-Z?6TB<`OHiH2EGzj25Ab@WH0emY6;M+g|-wp!!uR#Fs1p#~q2r97?1n}R0 z0R9XJ;Lm~pz6%8K-+}=C90=ggg8<$K0{9CcsKkpPfd38z@RvXUe;EYuS3m&&JqX~t zK>+^)2;i@R0R9>XD)Bl9;BSBc{w4_E{{;g09uUC)2m<(C5WwF80sL(c!2bk-O1uLC z_@6-l?*{>V9|+*@f&l&=2;lF70R908;2(kj{udBbVm}Dre+2>jZyy>ZDmTN;{cYzYE1%_6rjy6KcP( zGDYwwj5Jl!N~)3O+YsrI#xj}UZNa3;gt;x4SY(RH#9yA}igS^+@n)o@Hn#ER??9>X z2GQS=elpP~&C__Js%o1|bX&)pDobT-DkQZA8QWjL02EVm|_ zH^?Q*;qZ+9sfLXm{hM~u9x}h5Hv59vT?4bvU(ogG?DH0My*ztS`OOph0|C5(c5^<_ zbIT|Gspz%PmVdhFjlTW~K!!R$h#j3fZYAssQQq}#dDo|NVPjzA>!FTqj?hW(wZBU* z`dxJK?4`3Wo_)#e@U}Iz1zP{3ZE#R}H!%5CK(=?VlY=G||IH%~kB%RM&wt?aR~S1E zK0FH_dJC6dHMA8#Yghjc-B+Z3+~*Lk47VrK>l-q{;U4aFJDrXUV1-L3$N3yz^#8E!X>xm_L{IJ-Tt>~XnNGu;`kREN{) zq#AgKct-kAsPJae8J**FjyimZ+ntk{?eY5jzM(mOXGVs{ly zPr~b{4rhkT0WP(`a`20;K8M?tNz1KJv&f93!*y6{fzmh*6z|(RoUjH(X~TjTjygNs zl3~aV>*!IJ+Xd`bJ5Gao8Lm}1K6sBkej`5jgGVn;ev0(*4iRsLQ5w5``BjY{yee_* z4#esE;qmyKgmfc5k0ISFv2hd`AA)o}KFyM6IiD5}ic-}7jQH8&9C1PXqIg79$7?Ja zgC9D@Y#jW+xWP@ zM*mQ}(2MDCF4Tdq0k^dsX}T6ahRkxrDIRG@WjsDJ@WHhkMU+7zy>Z-}-{X=*K> zTQMhG-Bi)qTpcc*UmRXCp(Z?`Ej;`D#nX$53#!HCVos!~sW}#?ZjDA_(SSI%zNxyQ zy(StswJlbIcl!(KW(~10>l+)v#7qComn}CSfn!hwg`W~xz5+$mYVBi&;9dVlaOwl$ zMxx=i`ejYwXiI(3j65xgOb+N|)x@g;6rVV%0y8xRg)2xERF$1*tVl77CQdvh;7f&z ztQZWJp8yO*ECseVG&CzHYF9P!lp&%u8f$ND3Pg~+hN`%{xxOZFkgm={Ka_-HlLGQu zl(yGSPU0+#woMFNHAL_)DAYGCn;fW5xWH4U&}EFawFQ>7Hn+C~F0YT(1*Qf{&uWt$ z6|fz;E3a&9ESwxb*G&$zEo++G+!Sq_+!$F=UcL}5z+r<0NC7;f)7w-Bm*nMD*F{<< z7Evdpz)72f;EGRVq_w=-=GFl9O`v{e;VJc}PN+Gh{)Cyu+zm6OGQC zc+rHK6Y4KcT`x4++8WdCxF-T+HmP1zNA#El7pZC^KPbsNM1AS1?In5K@yb^djil+v zwDqN{XI3|6hx>rQ@82ku_q%wNBmzkV}+{bv69&HVMC zGuA|fuRnh+`q#`~YoeH@Mg!H&O*Qqg`sSucL%0bO>sT}|GP!E4?y{U@1=yw?g(L3R;Mn8vJA=*^ zXScJ@DO`oFN|!h!ox($~L!}+8ELo$$>!WKuSe>=bev!UircNMj+pRhkY5FHoC!Vqo z?K&G$^mDS#9*6x}q|))*u2*WEV8S&`r_*A&?&)>94c{0{r_U+@3uKWnIMt|2;mJ_%+qbw)yCU+>OaFr*NQ__)n zW=^mnr(||c;q08e(wsnP&S>bD=6JbZ-Uqw_c6g(NY<+Wl(*xi1z&AbcO%MG4(*v17 zZp$8zq`F~x*HhD>N>JyPdbC|h$I6*OrepX_zqek=DcS<1gSXB>kKi1B2U^MLK1hd_ zfAZx3?*y-N28nI_=6jDz<~__6;&G?U^Ck#**t+E-OHsWbbePI(f=R19Dl3`ld)j`* z*7tRqOVB|t;?uDrBgjLeH)Ii?CXiXp#iAjF`)RQKP$*7UMD6(tmhotG?NfM_LPf~w3m{R`{Z;%yu(v+ym zIjLU+Kau)7j+Xj7iAtgW5_lQR_wqG!V6j!S;ghOjPH*O7h@1}Z8$_I$eVWD{KuZlcS{P0Wx@bg3qeqgLNUk9s&`9wcw3B&<=x-CmFPR?5l_ zaQ33dGYWqOPUco5ce_8$gHL#`!O8tu71+XyXIF&#i|2GVI|@ zh3_WHWO8P)?{l)|b5sIa>6=E@vK+O@)cNSIK)ACVRVb&$x09?5<4nx=1W86XsB>5N z@T20weYj&DGI8H>H!`Cgi;%g&w~nlhaWp`o!?&Ic9ObwgnHznZ33Hs|DyXgT-A>h+ z;9}W`plB%1m|S1M|4Ak4#VJy7l;8CCQ178&JY_ zG2}jK-H$TIL1VQ0E^4H=i4^Xpr0||g$e&Vkz1}~N>d&gc_6v`93V0qbUBoQ9wp8t* ztB@crT~6kHUvo!*yAGLb(sjO#5<%G|Jq@- zHNr9MbmW|C7yIjBz;SE^=j!|p(j0#g=PHJsDI8PiS~%C154%)23T3)x*k!^|B-54t z3kfk*=0g5Eae*CkujZ2WT?7uaaV)gwMrBY?iIeuSb&mZP)KNh2=w1<`u+3ZHS60M^38dWQs= zou`CaAhPHhQOEGrbIR*RUBmezT(>&_@p#V%D|Cc06QpB*B*7Mv`) zEYxgfx}<{0zFv!{3z(T96-4$OT136UOt(}J*_%j2Wl_g4Gn3CAk^Q0;Q6DkW$7ip| z{(wYO&Cy!q75;yqv%Ht)gX43FS+Y;Ey~wg=sn&E0|6%A;Z^H$wNk3ywM|Lr3QcW7P zCTv!rAaBd{tQpdpOOf@Tf&lln{)i>#BuH*0>#@gJvLr!LNHttep5b#mNlnI{u9%eF>7+;g8WS~V(5F7vmsSZ|9}PZRKT7!N_e{LE$`< z!=LA~W?XA}k>!9b)tcz3V!C3#ynr>kwPvx_Y|xr0{U~bdgV(d>9<8}lYu=_cQThrh z{h?p5=6>DQ2q{ZP1$UYE2)$icl|Y8eq*zt@$dl{wJxY ze>Db^c3cB3;RvR|sQ`TL6_oZ5vhm~`*6h)mM}Ozo&gf*0>-#L~e8tJr)J& zDdmVpCDaqqphb9CNgzl7k;i8fB`2cPkvwpzi70g?=go=eDzMZsUWgTw1|3|na1?>ToREFQm3?RUXyKmPbV`lpRI6fEs2qYcZ zU0QRS)--0eyIFI;)_jCCX=eL@)--0ePM&dj7bu%=KtauH$FhWeVUmt)mdKgy43^Lj zO_~xpv#nqW{obS@;c}zka|4Z;?Uk%qs5Q?+R?Td0VM#@TM9ysKOR&$?VwJG$ii?){U9%1FYGnHM@{iGuxdk*`FYhGuyo^@t>}) z2xH{T_6wF2CP?JWb`);=K37G8M9yprS<+&au&WkX19=AF`xE zOE`k5tq*D&#>{p*YsR(aoyc;p{6T9PGusbYbA#6Wjn;Hw-p6exmdKgya+UoN|O_jv8&ln|KIVWeG zlC@w27Q_l1r;X8B!Uad)RyxK3iDw$tKc$)z`vsXwxpYiBt0>t&<_7jWu5 zhA|z^hnzgX&*`3q3!Qk!*3n4c-^3pQOkE!S% zrscOrYw98~`DcTt@IH`HBWv}hRMq1T*jhRCPF+EP5b6y&db5t+qLc5o8STLH!v%HJ zj@T6~(KaM8&`|T5kwisN8J#p54fd&3?ez_@{Q9O@)B*DSv6^Ugb4|2042xt36FTY| zy}mr!yVkp$y2G=Ex?_#U`>=D;2=5u(H!;sU-aGN{Evs2hpK|%UwNP`qd`}SZcGB5dG?Fvje7;+<_yT$FGFdY1oHUB%(~=?6(n0cB z*EQGs6F})2yS9p-c)OhqBfZ7mPrOY}c{`o+MtZxwTr@j{vrO9O@?BS$$n2k>%>^S| z5tDTs*?QD5ij7^m1;(b^j0G(GQ3nKZFtSFDyvMgvI?wuru+7AU@cOCwH3}=c9;w+>AGip zHDA+VMUg*y#y1TX5*c5LDgH&z(k4B^&#y&AibyMh6rbo0m|t z@4~+8b8R~i3#Su!sx-~vaI3$->Mz;n`@|Zazf?KNT}RbXzTID(1C|9 z0&@=j^hF@QG1lG`or!yFw6(q(*+^@3-AvrU^Jh#880;B%s-043-Jn78w>zODs8byYixE+O>3#CRLn}sKq(AZWYR#GD^t~8%SD5Rt0HaD zv<4-JUYRbQK7-$YO08Pn(8_Zps$Y!=EQ_{PMA6f# zk+PmiHjGBXOhPZ{W{Ot4U)DyK8rL1Jep$3t@XHcL?^0LO?Wvq31Yke##-J^{z z8)mC#bLAGu%g#z|k>$}rE~Km%nuni{knd#~<%JuXt1nC2PU>^&%3=|2#1vK3Hbokx zvm`sH>3d22BHb5-E6=oEtV8Kh>4mc9M(0?(Tz9W52QEn6D?85OA_-Sfb_VHD2dI#$ zuURpNe>G!%Q6bxyx1hXCULd2`a7%Mr`gV~2$m?n-*^3=KLZlB`+GdFYvximm*ksd1 zczG;R)et?1`zr4=TPwZQ%unM6ntAE&W_||CQ(a~=h)wMh9-^lft4>DU?OmcOl4Ocdi4ZhMxJ%*$FN!`Wn<$W<}(CndHjaXwGqanl|ye622V29xA2 zd>dJmlJ63+l>7{_E+yY>JkM(_#3ekU#}%})IPJp2OnDip_+Fu(v$cX;!Y3+I>JKrV z>rK?p68ib(ME+2*#+|C%Y!URN;^!F8MJL+H6+P;C=|sL?>^eV{ongX%K`Q=m<2ma@ zJ0pzes}uPnMc|T3D~r=E`~Xy{=Yd^flsFJhrH_@*%2fQ(qAn$WjA%&7*H42dR>>vw zQ{#62*hGfPxx`Uv`1E2_^5GKWl9;prmLdK+U>6Jp!-2P;?EOa1xjRL+Xt7;)syXqy zZG5a>F@KMZKbP&B{X_Mj<6L|kBKbOA2|n2unL(t?V-=DPk?armf}g5g_ov}+XFIw0 z9l#(`@_jaNkA+%34k*5Usts%We9*gfq_3Z8)BHlk*H5%*e!1f7=h-yB zPVrk*x!PlHQ2aGE{vC?H!N%XH`1(0DY~bnFE#{o55k zqclirg2n|p=m7%iw?Ju-vLe7|A%3d(!O|de0(=&NpVx(cWoeK(0Y2l&Hl-gg4Khcb zg`h`W$$pQG|C-|KXRoyWyWppa_wBICc0y8fJo0qtxYoP;x_@+B>pguPk23zK(0XORwWm$MqVeulYKz^$xw}>$ukY z^O~>YTJOf|IMs2zLD|=Q9oKp%Uh{Qa_bGjQT<^E>bzJK`cdf7ETJN}PzK(0X->&&O zuJvxa=IglDd+YYN4xAycOMtJA5IU}dim&5B$91LR+vB=h@$GS~cfjp&-J|sFajkc^ z?QyO5wzc2txYj$__PEyj*1G;WuJtapJ+AehwC)ET*FxmC~)x1*GCO%D}0#4r(DtS!p|=*Of}&09#CYJ3RnEKxegJRR+2@(J zrqTZy_v49+HgGNnrcv(Yp6@HDX24B6~ z!jbkBqPn@Ur6C%N))dT`IvuM#sg$rd+EgEov|`;m9L0~dULk5*u~-+bX>V-20uW0s z49!@As@kAWx8a>~Et3}823gUtEMZwzIho+ z>TfGgF54yel?7?mG}Rg-q^hoIq^h<_QezqXP?uoSTS!;L;H%k6Dmx{~xUs^RvRjP3 z1+__%1UD7Z*f$i=dkH%_i8~Os4T6LX3Dz{0!fgxk38RN)wJ#i=w{Z5EW#O{3=3>~B zW1vnaj6~R_nS0?`v(H>G2U->hHx(@GDTd2J%35gdLJ^){es<~X^6=U7=AB!%D7vRhJ5N&M{1^AuuXu<5#1^KbaGL>7_)LuZ(LDl5f*N6hj)kWIsL_y6JO|T~^Hpy7B zJlfiZUuR6ngduBYPN#JE27A z^rh8MgY`&beKm@1hC!SPxD;s-oh}M+V{XLF7OK&z_GJJ^ny^!-v-M52%{m>as%nic z*SQA#@}y4FcHsZOLF<4tXV>%D5@!%Ofpv5y{QFKaCC{X5J&r{NkAfQbMb02{Sf5b% z0O!n;p8shM{@g$UKIROvh`xu?p}+sj9DOH9Jmw<%DSn$m*MFTe$O`m|HXUOnF@B!| zPrW7_XCaq`kH$al3?fIr+rdP=8-}M-k)^h4y#5|{K6qHtG4MUEAaYnIAtsJxk{D-u z|6KwJ{nmyqU+)*>sfN-|YSDq|FCSV@)62l6-|o=)U`CMjf(jqtTyp&tThKZ!scL+s z!dEK1Zl^Ba-u{&eU#bl1-yd0_@cR{?@c34h)PLUvkNSlAmkzz3QKt&j>n&26eEqv1 zu;TT;#~Ov-pn;0&@AsPCV#5bLLDmea3YDIyfQo3G=Kc@~Yx(;3Wme9V8a}P4sOlDj z+l>_Ab^q({Nj(Zblos$UN6?a{Oh#yAGH1N+3?1?L#4#mNn)IJ`I>$ViM4$F zJ-)6|LhRRDHOH{`IZ|Xxw_mS6G*n8JgW(6DMm7tjx^dQc`q>Waq085l-o4dntKRLE zGPlOcMB1)w UD-J^<75?QrrAEjGuw}*n0Y;y{f&c&j literal 205888 zcmeFacf4LjwSc|flbrPAr1#znDTD+91d>1khu(WhXn|k|UBQBZaDW)VC>^an%$nJ= z-@D?#ed-E@EO&L;o|$)>yDd#oam})&qq?MfFH5sUSx>H$vk6%@?(0*WDW)y0@ZTsF zo%=mfYL;1ASAL7?B4Sb9(iF)3(Gi{HevYBO^_ASxVlez)ogX=KKg-6abYsP}|7DTh z|FTn3eD0rB#N*bYpTl`8-1H*c^demDKNrPixu3Vsw)s1&U)L*)u*gko1Jp%xffiNtv+q-xfh<1t$xP^Yc9eo!mV6sSwdWJ(aLj9S+frC zGtW79T`^{5w(o)a?X~yH`EwRDhvv_bu660JOVQ8oNx&6|mA|D zXK7h{dB1Bcix;Qd9a9 z9GdPg;C}UH?vvZ`cl&Mp?#YcCf7!Uj9;-dYuxtK1IzWcUDbVQw*4Id z{$+K;I6C8_?}boDHO{^SuW`d0{TesE{Pt0gT9o7&aMF_|y!jHDuT15i^o&$lJtx0^ z!t|pWFaLci;Hm%ZLII5%UvGSB`;x}O*2eGt??pqJOY5DN)-WzR>6xg1{T{o5e|GVJ zqX68#4#ZB{T0fPj!k<%3Pmbq-(YRqrc5(f0Zvd{jus;g$=5r^#@=jn3!^HKcH*V@W zWxB|3T=B+^TUKvdvAHhe`oS(z%#5exi@p zPxkftseWER)8O^q{$4*j(CY((y?$<}*DnnB`tV4vkB;{G*jTS$9`E&u$zHci_xkh> zUcWNW>(&KcpIzkj>x;d969R8r@$E*h&mHRZ`D49)f0frCp5^t0^Su7#60a|=_xkhA zUSGPy>n|Vh`l~HofBl@-?Js$K^>weWWd*LkAMf?`rC$HE%Ija&7q+dqRyO~3_f0FV zZM?PNk>x8kH$1ZC3F9_y+rIDcENd+xF=hJ{GHqCKZDGTEuAP6`lfkG>N4;@+<4%JU zPv~qv|L2=;e(jmWt;=6~iB7cfjg1dY|KB&?T)nYr2fQl&HEwGw`-rBh7+OJw}!y`9YY2$S( zwmdQ1f;Vmph^xt*Vh@bi?W>L0*mS75H$1MFUEJ{G!K7~g?LR2}hg=#rMf%349`oV+ zgev06lg!d6bSZUMbLs`A&a6zG-<-PH)IM#cK5OdlE9>2<88$na)aNQw$2F%eGWBzn zsVdLF`B+nLtV~tEMe1p$zMa&zs2L4?;wGT;fyrB&PQh#3+H@*jwzcWBxH~=W&cK^o#=!;6<-Be=XI0ixN}axv)cq?{cW#DV zW$F%*Dis5+oqe$Uc~;1TdA~}E${uGlptF+WlwFd-}v;V1l#cN zl`AAm!^2w&Pv?+Z${|+-Wa>NAz8B__RO>fMprk`nhfNzxJ(hM!VKza?!!mC^6H>kcin zO2WEIgsMn5xH7ehgn#?*wi%a`u+54$25`>1Dk^@cGPR0|@2O0!qTe+7>;)j&CdRxwrLBA0X4t3hw6!tTpfj0(TmCn7|7L z9wm^3`>{OFm-9SNX&tNRC_@YtG0URSN>QbD^ftdtSci4eI$~=ca$~=!i$~>Py z%DjL;%DgjyRK+3!Df4awQs%`3QszAgq|8eRq|AE}NL4H+kTUN>AZ2bOkTUO2AZ0#~ zK+1eDfmDT4`jq)_0x9#61XAXs38c)&5=fbkC(u~dzq%Cr*UlCF%h*&jQc^4W9nyZXJS<6j)zhb6lvnI`Mbg&v^!dc^ zD$1>T`aDc(#fYlD;i{2s^}DX8((kSWVr$b&JF}kD1ed;mzCH^eeo@ zTbo|SV;=Quyd$?Z{RWTe)OI`oUcm$4RXhNGiwD4KcmVtk4}jm}0q_SrDta9cfIs2^ z@FzR~{)`8}U+@6hJ*Qf(JlXJOJwP0O*DXKzBSU>VXG9Pdos6;Q`Pa4}d;+0QAKJpdTIp z4R}=49}j>5cmNE<17Hvy0E6)W7=j1DP&@#J;WZ*J&JGz))fapGE)_lA*tUB-Sv&0U zKWV?m@B3S7Z|?DfTj}v#8fVbs>F(nxDWTKmSo80%ro!6j?tP-FJhiI3{~p+~?tWWE zcQ4}AN_Wq(D?D3?VCw_U<0=uX>hf=^Os(qj2a#IQ<-0XpmDF~dU4B%QSM2h|Hq_MR zAAF^Pkgg2G{CB(^_!&|wx_tMBt41hAB}`l^42T_t_y7=?N02y#@)SIT@>D#8@-#ez z(m?}4c?KTRzZwr=J`-=%)~2)Y)^2TDgNJCJjR*MK@Bm+n2lzR7fUm;?{9HW1&%*=! zd_2G}zyth3Jdn5u5Acie0Dn6k;P1c#{1QCCFU14=op^x13lH#j;{pC2Jdn5y5AgTm zE#A6fedE>@mmj%x#TBczuGp}4>xwJ0tt*=PY+Z5H@U1JZp1gI%HRRbyp7)Vw6M3#B z&voRvo;>d-&t~#`VBXdhA0*EW?Kbe4IRYlIJe+e1bf8Q`RTRa}RkwMV?QS=QHH_5Axhgp8Lr2S@PUZSr3rsLGpZ# zJfA1e7s&Gvc^)RuBb&Fbc$7R}TvbvT-CI=|#vUd!ZuaLwqK{ha-~o;CjW6|YL&|P5~*#fj3QpGs*J!+l~Imh>ndYvB??t4V^L*l zmC6`NYK6+^(UHp7{&Fj{tx08E7LYk1t40Z%Nv%*BJzJ;@A0}mX;gieD+qV5bfA!{@ zn;SQ+a19{VWmp6F36aff0Q2f&4d8{pr!{~V@mj6{%)@$|orT>E%O=4t5nM{J8^H~a z3!K&f45T#x1Fiv(9LC{`sdW21E}NQ6i!}htWevbe8`Bzq1?Ou38_1ku4~*FDry8-b zDFcW#0KK#ZKG^&xLN5(wQh~)CtO*WR~SZmr~2t08E`)nOe36U}}%HQlB;T z)yjIy)&SO!`pwGJam`pQGWD~Ssby;brf#lGE#tMR7m(T(HKU#%-kUg;mVC;5dSpzV(t~u`;#;or=Lyg zK9#8@g|*7m>5*!Ci^{pU22hL%#jKc?tpU8w?V}8?S}Nwhkg~05J6BTkH2||0v47%L zDs5)VyMB=pWJ|MUL|E4VBuj3Mx7|-{DTiDZkU2q0je5gI9Z{KDriI@|>cVzvl?!dx z`i+;G8&b6fV7Wi5Of6HbraoDjT4K^mrhYt9TTbL$Z2>0OpnMJ5jis=XW=cT7uhe1R()6O7RKzWEVk_)%k!?o z9{WO?eO2_>a*6xe&k~_ze95AYtzW8?+4>ntz0|dG^3_rR-xFo!B&-s^_gAJ?3E=sp zZfkmtT2(`@+{y*oRHDU5$_%X_=Rm3)zg)Lg>X@IsnA)1-S0$%^s7$Sr)9;eHA@JMq zxL6=EC%jovUX|>AEXu2F0t2a}58KrO3o9|H65f3iCYDkZUJS0IV(yip6OCVVakI(a*nCCe;&$BAeb1H#U;OTju)p?$? z@;qnfdDaq0m9ES4oR{ahAkTAAp2sZ#%Uw+>c7rNoe_3qXox_cLq*g9zS3Si^6OiI0AyATaPAmLl!(>x9NPZL;W;41_+8`w%tk zZxcwFpCgbmKTjZK{yu?}`G*ANS`7I| z{<7G%`~FJw9r&a2{#7#e%T^ygxh}~yYnkktNPs$q*nC1 zlCeK;PF25~5akv7UCG#=R9CxCpGSUBLBy)3&(}z;7&?`V{W&J3e%JLJ`rR!+AfJc+ zlcA7;dN=`hCN>>OAT3WFO(1QJIF`W8CLK@U3kFUkkc9bU0tsprfdq9bfdq9rfdu8o zx&(C=fdq9nfmG>Q0tspzfdq9Pfdq8{fdq9Cfdut-0txC80;$q>5=c<*CXk>mBaooh z6G%{35J*s05=c;25lEF@Lm)xDk3fRDmOz5Ko4#-z)Fq{hMud zc^{9>B&j3O#~)w`vHd*Kdn^zkBUE&6zAw@d2f%5gir z{L<$udQVj^-&C1e)yvNzwW62Pw@z$#jJbQ1SM24*7S!}~{qA=w@T}_P|3zv=FK4A; zcw1x4@%Hiuf!Nx#9uxO19$*@5D$PG@Bp|G4}hES0Js?sfLrjW z=vF)cZo>oMc02$+ga^Qf@c{S;9snQ31K?wLRCEU(03XK#;7&XM?!p7$6Lqf9j=t z(QNj5AL^>0qJ7?eUHMR-7KOFZ;diY}t?KZjNG_7ij1)ilPy~TFm z*GaAD@}(uc9Fx+6{U9Np0D@I+^dUl7z(XkO@DR!_cnD=zJPalEcu0RYJcPMB-YQnP z@sR1Bc)<0-1Fkn7aPCtFt}h;N{qTTmzyq#79&iKjsCFP8aD(uG8;l3s5Io?9;sG}d z54hoYz>UBIZX_Pnj=}?OG#+qc@PHeO2i!P3;Kt(tHvtd0iFm+G!lT;Bc)(4;18yoF zaMSRBn~n$E3_Rf6mk-=5Jm7Y~quSYcz|Fw}ZY~~h^YDP%5f8Zec);z12iyWY;1=Rh z?ap|>?Sco~B0S)B#RG0PJm7Z618y-MaC_hZwC&g4?H|X^ijN>w>Etd4`F@`5AZMH0sdt?z#qp0 z{0Th3pTq-v3m)K4;Q{_M9^lX5fy7tv0RJi;;9Kzk--ZYHvv`1i4G-|I;{pB+Jixz+ z2l%(}K;qkYfPV)M@aOOV|1KWj&*K69Jv_j_j|cb<@BsfI9^gO11Bn;#0RJ%_;6K3w z{HJ(;zlaC;&+q{MIUeBui3j*gc!2)`45AZrXz`Ni9-W89W^>~1H z!vnl~ME1Y~yeHngk}j*-&QKgKm9{gy)m5_&hD$59mUqI^c82odQgJ)Oq0W!m9WK4` z)%H|duc#{TwNNieDYyejtx#~K z?F@O7s)kD=qP*g8sn~{^W=QvcrGk)E3hpUVD->L5J4231Nx@yEf_uN^UDwnfk$Y?l z5nnvYC&$KZjT?XX=f=AmH~y({;~SfLZS2u_-O{d&*B#!qB$hpjkJ#NR9D^sgP^Dt7&M6+^z zsEAvOse2K_0`|i+cbE3<%-tV)E&k3p@9uo4Xu3iI>jq)v~jz^U!N*#_qOeC=eEU0oAZhM+B2nBwbT3F z%Z^!g^s@bdO`v-OYIZ{y$g+xUY6XYeL9@5n#(uP)oavxQok zes|IM9eJ0C!DnG#APQfJ9*j4XEv8A z{qr;Q7|ScYVoys-&T|a@UFUpn{X~AB=J!WRn@TU)lizXt&f-_?oE0$$T>rz!zrJT7 z>(aHpTlXG4dkre)Ez}R}QD0YAuv6+RrAyVl@p-yo-PqCHd-v?xqfd|SeR}oj-K%@A zUVXdw=-sEjTk(*CKE1ov*Hc-2mu@(&_1&nsTbC|HGSqkN(weKQs}sW>y}AwV2^v|C z?p`4t*W`u{>s4RhuY2EaJ$m-<*(b~T^{?yNwOh9yRMNMe(*(NJ*LCUAHT}`7fblw$ zrWNYCb}5inMX7>~?pdhs(%p3fvU#m`g)T!{Pbg-biqH8tg*r+jW0X+_F_1PC>La2# zy{wWhUFy34+rC>u@(Or)AitCOUBmBQ;vVDoH^S2j+4^%SWCOqZIx4LFs#;53&qCLF z=jPM+?MnC@eh(4e8oAd~<$Cv4t>JfW#Fbr_tY4b#1^x%DKO{RWJ7)a}>rcr}TYq|4 zj&_68-mrdXHfsHp^*d(l{-U;S>!&1KayW3x8u=YY>IwYLwdS()#;n}>De;n7oDgR*nESu0u{zHi$ zp4qvUW^{#YOv=AQHihth*=(-6C45$=)R|f2w{tAbzL)Z=(RRoj2}b_Ur2K!&eoKtn z)G}8SzBW?@ypny3>qk<|fdykKUC^XiF#;YG)sIkR{^~o=2rALkP{c^r+MMSLSr?r$ zxh^RbaUGXXPwuY8I=dxq*Fn*G{%XTNuc2EWDEd6&s$yEdRpz==e?3=arCVxA4>0N0 z+@jVYBepxadI8&qtC;uV*OQX^q;PwXd0Ib8=)+%k;FQpw{CVO~??jC}S6jXuEAiS; zoc9!=wxCM!w!FYkD0__e#^n95l(Vf+kJRo$YPDy>^`IQ7DJ?s8eQ0NIO0X4u!9pr@ zOZ137+ffN>21Xez>Z;2IbOf5xyHNW;YVXgrKQIHpqbs_h3!#P@N*GLT`9GqW|AWvz z!GAYtcjOxA?ec#VP{X0XV6L6xfAkhLq5PBbQd1r>Z0peFk}v;z0TcWeGW2jq1@wY$ z%DViQUcvtcs8=ihMa0&iThGOFh&j#~xi6#tXI&`zM-KlRT!@dPzF)N$TfTkz)j|Hy@9YTlX zt2Ly1A0YcC{`ca(XD9fttjqttJU=bVXJcJW@-P3#XCoOFjY;`OaAM?eXg{S!{!gdp z*#G+jKMLAS0`G2=HytXDsiFNoaWf!?rzd#{pmzT6lK6i(=WZ^}_Q;ON_J$uvWpk0m z-Al!_89FsP9J=kE9YpZhu&m{hToc`Zg{!cIC|8DT3XT=n* zEj;Rw+(U}|KRoe&Ve0?2^Z$K`|7XCh21dK`e{*&rC0)i}$L_hr{|k8k=DO^e#Q#gP z&t~uI6#rj<|DU4&ZRSsx^FQv|$Kix*Nnu`LeBtnHpTcX|?^6HoQwaV$BJaqJ$o8S- z_P?{T6N~+Cuk4+jqW}Hb`N&%xGHCz1DLVuDT~cHJdp?_47@z$Tn4JE<%H|a=%)VM9 z{YPMA_y~301pY5(8wuZ%Jq`Xh5x%FR#*_YZ*0&J&KV5UV1)j37F1YEz2^UJ38NR9P4bxd1XCeG1566c1CB-<})=QOtGDT zktun|k&q?E$Xfb{ueDivP|2FCTMVq_tvE;9<&ZJ+30}4~h7XSPXmxxSGGUI$B|aq@ z$iME46uNMXlWlnP!Z+x~37H_6A$zSc- z_AFbgRm>ivBts(2}KcqnGta zX~vePi@mZDzjTw@X2=%j`rmeh3;iFK_K>1tLQS4_Gp#-Sz+wP27y=FY^HUf0=U&|; zo%@onKurHcL2X8TfE!F5+Bu#7hyFKLcTz(C4+5??ce(x_NU7?vLDZ*(uP^sn&qDwA z1*)@dAZ2w0YxQEtX|Dg(q`Cedh&3YD|HBA(WtKgN7ODS-fp6&l{$OJ%Jt$8d+(7z} z)G~eHhmzXBUpHFbhhIOeA6goR5;L6p&eMMcbQ=X7>L|li3u)6k)nA}&aqUg{-BXOY z1~E^tZY?G*yOs3+C~^)WZ8S5F5ee6!_DNL>IiCSNc^<#s{aR5&v0_N z|E06e9%;L!p}o;QsFpOWc2RmvkEf7YJNl&ZVyaRd<1tGzr0iQplpMM@db_n)s`kpz zzt&)R)@?bRbz-dy>#NOt&ME<+>(nxi1;in=WP!V$#QBs~Z-w?Xw<+p&HLQBc=XV|H z`eLkZ6VDiXIBJP?G4q73kQbeG1AtavI{FZExhYMQqB`WW2S3Yg;Aj8J^}qdo5PxB@ zwa4~F((RuEXp2-(-zX)~Kl_u{K5jeI71|r^zyGfOA3+HPLXE*VHqP)jM(+Ng(sm;G7F_5{NrNVoXa5mNRua;Y7L5~uzjkuX>P_a~25|3Rtl zI(m~3Z^exOsC=zp0A-f+|3GRkIbU&hoiYPApA94P-2g5GlJQ9q@ zP{%<2GVXQie`(WMSFZo3LD^Z*AoTxu{7KjpCs9K;uDSl70KcY_Ya*0X|4*Ri;pDAP zT%68TX&MVg!@+S9=~E~{%jO8+l+;PYPlo!|7y4iB_8`9V`hN#(PNDy&Q=H+&*Z$(ElR|^(WO*a{WJp^dZ>x>seix%Wo9x%%idG&!CpU z+z%%APPA(l@#AUjoFs*v<3Q;DS->yAb}an|QT|R)sgUiGEdKtGv@1Dx1gG7Qk6nH1N-MH_cN^(Xsgp|+`Z&m-h+T`}7qbx)*>T>tM(Yt;W!!8b#Gccz9J#0^A}XYf=1&jw-$ zy`!Z6cOYdUGOzyM5%|#mJA$PYo=oe?_5WDzq(Y4UcS#VP#otX#djM3v*0hlRm!S>h z=>jmF-CXEo?lRU(bbCV6aMk*MGT2TA=gGzNT&vHZwbQ6=Pg+>g|JI&S$24f3q$T|3ABq5l_=68irjqlitFom?*8%X(6-)L1v0xbbe+h9Xk-lGcGA)~$oyKnz`-VmndlG4bv*Y=lh~yrI zHa(q{qv6@9segBl{v%j%8AS=>S;Lx7ZD&G-8Eg_%|6iE&|GpLa{}AZ74vJk2<&FV| z<#4Avt8U$hQU4#x7r$ES|COZdjs8Cb={c3vu`}78w-%^n@a=T|{vG|VPEoHpgBS;P zbzDpOe;8QxgWo;)Y3Xv7*`F4N{x?igaC$rvGlQS{e>}C%NV?7zOd)UR|GCKX1p3`b`srA5 z^o38Of#^aD27*`YD2eg^EMnCE&f2EabH>tx`;*@>l56jw|A&*(Sr_B~T>tNh45|O; zQro_ix+A9{T@e zdRB&{?hGEe{yzn2-XBSxjr<>kEQkJIgfyRyTrWhzmm%vr(o*&ReuNg2C-nbe>B+U6 z()&XZ_5T4#lQXrqrvDp@`hP=Nv(^8NZRr2w$rt+nDliCl8eU^D?D&5z*iMGpYm0HY z{y!f&Ps^HG)&Ccha@kwZ|7XGBGg&QMot={X2dj|xC;fjq>zSW`YVU$4hp?uo{=XSM zodwR9X2)ggS*Z>Ee=Hox_5Zm@kNSTlCEm$;@Oj8gKK@^bemWnxozbNC!0*Y>=LqWC z86B$rU&Y@&{5tDO~T`R2k+JYpQcUf|NB`5z88!? zkjDR?%6>#2_)_*c%6j%FWeDbu{$aC^k-AuGc*QSn+XoX=)LNu9nk7CkdcNozf%93OI^J){a)Vm#NQS9 z8b?WsNDKX68fn$q5X)>tSB?dPC29PS>;L1}6|(@ne<-ydhkqEgmGu7txH5vclal^F z7;N`I?hgcFC-lx<^q2jTR#E@&2ImISFLM2VIC}PYWN&5C|NA%V|3)-lXWamB>yxzQ zD70ir|DT2gtj=x+m(c%Llcx#(4&$euz9#!9?J3v)P4vEx(t|HXHuho!a&4LZe>Z*O zwCuyA!7>;d|0 zZ~Ezu*?0LpmfeS5Qvd&m_W0EO6w>_t?8ivZ^Yq%?=tbrF|0-yGBl{u_qqkf@%Dd>V zW7#8dGyOvSe*xO(|sSJjHtX0vK;j`^XtD z6>|OmXHs(g{~^Nvq_ySx|87BXg~HvusxhSC`2Rk5cPC|Msdhe~NlL#$=g0rU3j?!Z zg%yR>*?@xje`Ue(f9U_$pwjb2{r@KWYeN6eDD-5<&C7V;~7C5R| z!*l)iY!mW*SJFS1(DO_BXAQWA{#irs|I}O1KM!XA!;_|8LHolA@br0}VqfCP)TI#m z=U3UQXq)-jw8A^(=FtF!7?*g6)ZrD(Nb$m#m*X!`8R>}N@SK8~#1 zLm#^bExL*4=nYWq&)MBb`F_y+JX&}UrFWnoL$6G~SLd)vRr4=Cm zi+u*>uS-9#!t3XGA~jFR(=DZ?)8c1NS26Oic8Gi}z6)vY0my5#gt#+4b{d$+bn{ia zt|=l?%x5lFqq-4tO)M-NTH#`^LCTWi10(k+h*z|&<@%WA#23MHoNZ66Dd%{aL(GH@ zsziFkn5qlxB3!!W`!n2;(t{GT`G%E8Tc@jLu^Y?U^OZeU(`=8miMwmwT9;kfYUwP; zeK@|apv^d_sy$bmQgFp}e(TX<9INQD%Pd;jC#6_ZP@}vK*X;arUD&@^-?R+(JGlN8 z7Hw?;ro|gTTBOZud9LmC0}rjfeankZ;o!S%&AD%kl$W!?)1Yi{Lw?4-lb~!#f-E7p zQ(j4wl=DBR6D0(Ftw9O#u9Qp42c3k7T^{nPrE>*Tt_Yj2hPvM(_!`nG7laM$EGJ5m zhQdlYV{!@*Y<968=K6u_r{;EVh}^E0e^*h><)4&rPeE^fA^+mwxN6F=1 zI_2^oT(-x`vs^Q_#NU$C9PTx+54tj--02JJ>bqJ)og@yCE975oAw}(w*xx;vuZ-X5!YG{JWZMDRO@}Ki^&*$zM0(UA^xQ ztQ@xP;VIV;N>%>d^D=_p08$60I@|+O?LsO-{zo$|Q~t+LLdd`C*s(g{dqN@q%3!|c z9P%Gh*@ql0o$~Lx*DP8%mXWO%;vU2dO>NO8?>-jaRdKDyw{cye(&9cGIt^zWHj)yw z507m_{wHGrD9QgU=0>j3D*vtyDNR~OmH!s2kM!{X=BXge=_;2UC6&WO_@{{#8{bB z@e}BqX8)*@6 zmy`RVVz+@1N|I~{@ouC z^6$ENwQHcP=)pT?OTk6?Usja=Im}9O`JY1>^SPT#{*wI9hr?NsDy_@^Txc;AsAFiG zYfuM3FIVP=QcK2stH5k+U+kZ|GlxB#*+n;eW%F?2ccI0HCHdcvxYp%=0khr{C?y~N z%woOj(4zbw4V?>E$HrpW+7lYD0*jFU<>blb|KKG5$B=6!wO6~-nHwzO&o|@_g3inM zokz~K;2H9NBo@=f@csy5jj6{{r2d~vUgiHN=-ZE(X)o$;DgSC7pX|=!M}Xb%q_32J zcd-p6b^ubM{JU$d4_7606dYFm2UEWLXw*|ao0YFhC)8kiX#qJ={wE~4EXn^!YMOx6 zq6alkCr`-#WO9Z4PbA%)Bq9IGVx^nL>WT8dl=;&k$fs{1?v0Fu{7;8+?zGs6`|0pK zT0mWr<;`(I=Ze;#w_wb%gOiADW(=KE)3*ZWxZ4Pxtvsn322 z=I^7~ojXg0En?e4!QjSEF@@$BU8lU6GVU@OU!#_ayJGN&a`F?}hxkV`*1p zN%>y_O}juz-?dc!$MZLfHdH(1e>w8MBU(cFKMbj8Kteu}PKN%Frt^|mhmr(m~Q$_m9HwDfxH#y4bF73KdDC@~w`$_AuxI(Djcpm!mq zUPtH(tc&XZYr*eoTHFg6zO)*BaJwDcwk7%BlH~srz$*XGQ|d>O{6EX8hp;b##gDPJ zE}_<~*d*p>PZj0=G2kD8Pw#F~{%^2d-G=3t@lIhW_MMRbTkw^C?YJfR?^Vd<|BqO4 zH^ZY|1?B(FWcU45E7F-|yA+-PTlIg)|39#T{VE$oj(p?5FeO&btV(I zN*p3{uwze(-N)I zmO78D#W}+a$_uTvLhDI=ip?>UhS~(e*%rt1LC=oraD4A>d3T*V#|TSW%rh*d9%_CdF!T@-3Ht?N(Zslz$~8mw#uDa^E?<7E3Xg&$YPjj4onc8g@?QU)x1U zpmr;Bgl)_gIirlXeL}7}szb|ISVgsq_+F5^u9ScG`FggH-1iNooZbT{-`3P7{|$_x zr04)(Mlenv%$=NY{L_V}qq}f*CHWr?1|z7`xnRd`0OPNa|B;E}LXV-YT>dS^oss=1 zQ~4iCx^D{QbC!;32+OQgmnzXK<+8RlZCX0-l_}*ws+dc?SBtYRO6}-d(ng7mw_~-Z zhwV#Cnbt@pOzEm!{`)}Zp0qjSU(175T;F`rR-siUbVJC$?{fKunRDsd)vTv+-64bCH|0Ai-kUR1Eks3Cvj%YN3v9t2;JW=~c$p2{OBccCu`FF>l zZ*7dH_92XGecP%Qr)6wXf^1+OIs?q6LxWLJM){ur72H?pZW`s^8m7^r@nBUO{xg6H z`FHpBV8*l||Jo(SF!t%sPkUme{O<%!wQ6{R63!*3 zR>;3IpN?HEll}W<7g{0SLfv4v#Qhw+KF=ccmMwoO7>JS zCEjy+lz-p4anFCQj}i)PUX=eav|OvFlqi>f?Q*{JG6df@_Oxwy4w9!&bw>WjQir?z z7lNJgKM#C8i)s+_#gP9QVBiktosh6OjBNXnTATcotu>>QO#1$d`hPN< z4*6dW9=j&_U)m;3$`iUUGs@-vAh6qw`Sd*CcP`5RF39h4M$prc(~KPvA^!(5ud5CJ zT>e)u$2|z#PEGQ^fLUEXO3mf}V5HOMV*wf-h&Ap^I9!|jAH*DCuV(pQndJXCO6bbW z;dH37j+y<+B>xvucO$JCNDB|8mfGZhG?@5QRsNL|pH}X9_W4yHq#KuFe8Q?EdH3$p3UgV~L&1FPDGMcN^1Asih?4e+ArHLCG1` zpWV?2bCH^!aCkA{1K{=^_$B#25POijrgkb7(oSdq77FG6cqqD%ng0^%ISbkkhr@&5 zfbxF`GpniOQ~pn(t!KiYS#ZA=r~I39B(x}(|I?W*PJ=e@O7g#!I*(`Wo*}Es|7p~@ zw3gz*?taQpub+v0&R}+ZZ<7D(v6wV4L)`@l`f!!}pFmp=W@k_>?gQBO)c^Mt<^Sv4 zokxk^V4vt=>`?2^?+SLMd<>4BMZS>#@4)NY<^M74D$~IH7A#4{otN@PXpWyo=mAxew6=% zXsedno#5f3B>(P^D#`zGN&Z(NrMpxAK>GXsQ0t&t$WOjp{*R^CAHW`;D_W8NE0X-L zL0X5y+gp(TQ)|Ru`M|92xx_hSJ%i@m|uu(!zl%F6$faO7rAdQ$$si%sH8cvGwV ze;NzUFKFp!u&WiY$vj5*c1rq7_Al%@k7m6Kw?K8}|JCgGq%Fs~@-_BKbyof#0IPpt zz1ypBV&Nt9|Ml#1Y+zT>Z;JBo4(11-`~z^hccFIqKM_ifhnpq&SyhyugR#JkBW*mk zo{*ojX~_Y!MENyG{rMu8-GQx2`rMTI z*D7?uJ@l_{C;Hq`q|ZIH@YOQe}tmn|*~EJ&Z{vx5rfvhV#k z_WeyPytgnvJE0(bPA%BK`W9*_UyDUpW+Eg^9+SiS1PyzEHiNj!bBEo)IOk4UpR@oN z3KzBoXJKI<2pd(LLl8ME$+2MAuFR#4BP>SFaGVYMGsV?Zb8F9!@uMsCzQLcLK;S6E z8JQzFotVY@DUJbbS>T%cdHXHhvW&O(2=~vu6S|4roW+;}}m&<$02~ z-<=Kfh{@Y;udQtVY&6j>JTs#GW3%z(n9Xl4KkC}O9jR9D*@=eg;76Pn8C zr+b1fZ~t!S)#2nghV~zfcHF8L^ zG4BxRO6~WAlc8YNkEe$xoj9fn{+HT6m-g>Kd*)QMe*u`!=kH*2+zj~d`PW`X8zNSFs*cKxf{{i0W>BrS|UtHl7UQ8^E@I zcc`;dbNlBJ6a3!?D(;xxS)Id}JNSPDbzaGnYd-jY6x?n9+i3qg7)R(nQPuv3Y5x_> zU~c0nud6TY!fMqp@Euqf#j4H!@*aWh-&~acpCbQP@KpZ?Yjk@RRu-leKFPD`aPn?R z@a`&DORamcf8fl7|G`k=-LyF8pZKrlz6X>O|1Zsk4`Fu{xebAedXoG6P3u*y>n=O@cc_UYr7c+FtxL;}yRFpTu4Z`7j=OtnYrplG z+dW{R$76NFy}BLSsN<;`T$BFse3hQHtuP3g?^_K11t--^rBMc%+HgUsc%H?xTK@Yq z^C^)(rP}}|+SLc?Ew(<{wG22OkruJ*v29pWg8$mrVoW2nyGw)r9ouNj`5!yTe17_L zcSl-h_}_qzbZ?q-q~L$w;uxU47PzC$@x?IoQSe{=?wCXVcWgtFV#=UnC)bK%d=Wd; zYq7Aq%QW~OJNH}(k{6Cr*gw!7>M1Sfzhfi6Z4xKfX@%74*)jhe(**xL2g$LCs}TdB zp(ihej%^Q#9%;0rwcOpuBY}0llp`Vgf5$c;-%l}@@9p;nTI+W3e;8W1V|Z!r=*0Iy z=R>)9JP+mnR3vj+P5k$~hv2`Ktnt8%;<|ueXZRoI;K@nHSN(wXM1trY?a|L?ue)^B zT%NHq7+=f2{Hu-so`294n92OQfwkwlj7sp6D4`?gDI{7$3ear`PtWdfZ>Plng_Npw zzI|88|2-L7%%+6JiT{%sv2^6dViDMnOnVjiekmNc3s9{AKKKT7&i@I_1v+v&Qjh#!nD{@3an`=jZxmzcT^LjD*bz7*-JJhtP|g}G z9mm1{{lNSjNMO9|M#^IOzJi)CBgr1!~dTp{(pz}goFRz z>JWYxw9L>nE}fnDzo41_j-Wf{|Iv&$mlgTH1pc4M>}HSD|9wmT@DA(0Jn{cX-j1~Y zUk3kgVf6bptgKhp#Q%@N|94RD`Rqt4@&Ak12hU;U;wK%}e<*X6%~*s!UB>?hnK9gw z`2XDw;indY|N9rF6w3KOy1>q~!eNDu3fP5NLD2u4v}^IAGWs8ZTy^A*#u69wznoSy z73qI2Qe7MUClnrsZhv9dp7bAE*iOsm6nYn=|8KFTcH|yO_&e_i{Qm;?)E^%~3ckng z!j9a~!aBYJw;lbljM-D*|F3LrLHvKwhWwOf8!gG}=rNqLh|*mN4@Wgof=~GB8HP_l zpaJ4(&m)2T6O4)}l&hi+qnR&WmgP37lKP zY(;hX+NyHUZYe{o5mX^4fmy%iWP^ z?V&uy=FxuFLYJ2(5?)?x|0p{&~grPlXG!;Zw`@ zAHk?G+J7idlZk{SGw~O{zqW(noRxYGv=yv7qaehcM<;w!2dIq$?Sv{|KD)F!a7z^{@Mcn zDF1tu{|U-S$LM^|ZhIJ`Y8FDR;z2-aIXbDV3N* zM@n9HwI8LJx8zD?7}9zZzB%FvSgK83Xu8)@Y}}Xhq|X%p%#r7g=S<`&VO0v{m>E;) zd{%`W!RKlI~1J2&f!O zOU|9vx7c}TS(X#Os5hREJ~N~I5{9Seo(i}8lE%jfO+?pvY7G;)ifPX{%rrFxf-8Z1%h zkb=_FFEDF~pLyL!X$kShvE}AvYMrxf)+3etbM4PMq+RUl6v9!1bO=u8mOrhbwo5CO z&pIil#V9B(HvWPF1k#;;xpQSsD!bQKUT9ks!Wc_(FKawSW9Oi2e&%xzoUMx;)L|(M zd!TQrifxPz#V+V#JK`;9Wl4&L^!fH;+b*c5^*4BJS+UAxi>0imLuzOA9Y}H4<|6h| z)Uk~C#t!V@rzP4hb4Y7j;Ev)Ljk&UCd!>GikEC|AAg&}fyU+#l&2mB`n9COW^BS@u zHs+BF#`zbTMmpp_V?z%_zEbarJ{q-@%8&AL&bGu)$u~B7K$IpIgp)s}QZKP_Li`xifi=Xu(#TOEIayDuK$b;&IU)L9Hk>D7gw@0JI9c|5g||1EJ}^*p@!|# zVjW-02zrRKawWdn>s-6Hu9){oU+pod}8Tbb*joU<+IXYb7QpY*V& zHUOu-@a%$I|3z<=4)KPvoN@=Q@2`jc^AzrQ=Ur*B2TMcaT%9oI5bit`+;>r8UE7uL z;7D8i)iPbF|J=VF`p+-EQViqNS>Mq{~ zuno?2q+Gv*CBar)oORv<$dPc)bIPS!N&k7~!$?}~?&MLV`o$1WQD`7mjpNr@hjSnL zZz%CTSKS?NO6+xThlZ!dmh_*eWGhvk9+4%RbzAhy^=p6z8c%X1I(lU2 znb1ATwks_8&mJ8;SFNNxIs%cJ_6z&5AAPr^|KyOeX_}>( zL#fK2zQK1(^a-KfQHou&ag5V_IUb5SAVwa{Z@dx$@!8pMK;SgoN6^;;j(B zSL`=D#8G**1gY)G;)9S#ztADRQa~5i6f9nR=RoOkSH8PjV*FF6VDaJ`Ra#5+waEEQPzNZtgDJrgi04jmf+=ma z9l2G}w+USJRO@*5jZ$ns4*h3;=uZjmnu{lyZ>)GSm-~wBkFHny)gkw238jl`3KlOD z;GE|U<@#?Jd{AcmvPK4Xgqcd%Z^ihPiqL=B-gLeJq`dp(jltiQa>jmFvIVShpR6)vgZw-9xwp40lL0&h_7}lw{AI z48I-!dFR-rQvV5ENIh}}rKtZVw~60a_Fv7Xt$uOGp653nrVw@yeM$fAL@xE;!C16H z|LqUd9+X@FVl2Dv4j{)g-dON^&Fa5}l%W1Qg19NHFir;(_1_`H9RTJ0UeCX){|=(ROXJBIs`{yPe5sm_!3vur8&*#k@ZZ!d6d%Xw_FW~vOQSv66QArg z@g*H)tY6CK-q{#$hW>L0s`}5-g8ENue0-m)3pw3I(E!{i;(hYO_(2M`>>q>3r%urC zg?u=o@M$!GpXY(8Vbp)VFQ@+VYfj>5uk*dOa{cEM*w)zs^`GBOD%XEn>n8&ryjA~A zBfWk7w;#RGucvqpRd;%QuK#wVrs)Yg_1_+pv=DxT{+o%EtN+~3vI~7_U&`o88O{TI ze`go&{0h`8?#8lWyaz3<)PD!j&OPW!hrn_5-|{y3doDRwV&zx=oj`v)8BElFC!mv- zLWljqdO2z8zx}CAZmcBtNywA>?<^pefyoeJ_CezOzR5vF{kIyK+y}lNgshEWE%Rtf zIGWNuLFz0d^<2t3j1rIUK>uAp`6c~#2ozBNorfiVZR%^MQFd2icVpdJ{pYu7JTY7S zcM(=_HCQ9G?ZOD+LPGmPk>lX+oa#y zY2AE!+1r!;JDE2tRwey+JL~F~L5*?r(sS84d^h+W#}3!MiCqtML;sykx%U9O4=1i1 z#Cs~AM*2R=%EU>uU@!ch>S(q4oAq5mF(F85OYD)NN>`&QC_ zFOci;3jKF=(tr2x#?fuG_E}2G_1|64^S9`~7vROcyrq)y4%<)Lq@PdInaE8&6rT%s zCW67PN&ophfx$>pcVbHVZ}-%z{T70&Q$3Ju_2f|UIz(`fmahchAp4 zxH*ZOebLK)Yi4(7ul_SWG+$iHDd|^R`a&gr_uu=CA@!gAY6qxx6lE_3NA=$_FjxN_ z0PQ@RZYkKS|CXfj-_Fp<)6Ud?3zPmkHt9c~IsGYjAh`9RCdV#^K$FmayHQeKpxVN3 zKV&uZ-&NE!j~+3Kr;($DGmw%ggmeAZRHgq8r5(N>c{%#;{m90(>}EQNUT`2gGrF=r z=4|$PFQkt&vR=3Yl6(Yhbo_TZI!66>9lh#f*?91~s2%9jPfn;(|EVEX zQOnbuS+zgEacQU2S)3>IpUwL3qixdfdq{g7=OAsRPu#UZ!^ z{WrDnH{Kol7y9ow_V*v0RyG%c)7Zind1I_lcn>E#&7-v&pl(V3&EX96OQA>m`tP0e z-?PcL0xf(l8u(P`vMW+Nj&~63zo#Qz7pMMvGScNapl2bO7xIh#yAJ)m5{X*Eit034 z*^}oG*8uY%GIK5E zKLm%O|88P8-EHWuO{xE`;=Ro~;P*N7s3q`e0K4uk2gAEl|Gf#kPGk4fVA_5sy~J;i zT>$;oBFmdn|9u~Ej$d5=?h91g{daC*ITF_Zm%4Kbf2sf0^9IIOv)92Y#xG6i@cYTv zHTyb!;7)q>v)PEkk5d1gTlfU$c%97~p!VNs+|A@%`B8=Fzq1R`e;-Z#w=2?c5ZZip z;n&%c!g%l-3Ke(WN z{(DhBH`18%3*$K%ZV+$OY^EoB4&4C-`MXEq0Ct~Y+bHDxomN=FPPzfv(S^%d_dlcX zW9WJmbd|r~hrg#n#d(E4CI0SE_yXm;o;4KqFPulc(>QZZ{+>~2i++%|=v)bk5q5;~ z`1bv}1QS=`b9-_7P^DBM11fCCUAWUO@>ZOqoUrv9s?BMSj1@VpsM?QR3kqu0R)TBU z;;X&83*q_{t_{{vRA8O2KZQM8drhs*7RQ>dR=aouC#YI$33p|8FDS_*u-xHr!|_kp|O(;5DI0+3&AEa!iF>vh%b(yr@D zgf__FzgCOtU60jJrTekK`3{EbbJ|q2md5+Wr9AD0eAmYJTs%M7lh(D>XqR~_&USe6 zl&5{y>U>vtCe$0l$j7yg{)GI_aIJ1I<1AN;x-b{W`R{5-t!@r;{636sg8x$~Wfb$6 zDYb$#Qq>;hiSMqkOof~7iLJf=m-s(1*_#TCF6S`MtJRHV4krI+g2j@z!2g|@%k{<9 zBmbR|%KyF7{H|6EO8L4nLmbZ>#nY~9by`+tvLZBwF`sAs^k?R<_$~5(0ljEG{eS;X z@c&dsbxRZf52F7c&j^1MbKdG*t8KStN5)a37#9csPlo^6&1&cW0a!PdLi5AuH#;zr z^s9w)7>m{FPG$xo|IcPl@z(gi9{x8m+CGI5Yw&;5zs3LC;Xh;28eQ;z6Qk~XuuEN& z-fq9Kll(uES-kx}=l^Fq!T+x_*ZmayzmS>IWz4akf}4+Xt<~+w7+?P1koy10%<%T$ zE%Ms=|4fnpUt=aE{~zik|9_tSs>uJJ!o3e;^HTq7cdO0qoc({B|Blp4GnbgZ1m*JB z$YESQugPKbt078pdG5$jDkTAR;v%HuG0XEWpItapD%F;UEjV%+GEWZaozQul>3L~6 zbof!K=^Z;~Jo(Jay1b7XO8XI`p2!#YM7SLLfOQ5Wbl?@(Mw!l#N@bh-|JI3%?TA0i zcYVpY*mD=_P0_XpyJN)M=FQvVT*|o4xR^CspEX*Wv!~co6c_|mN+kz>qwd&eX-v!@ zoqa}}Ww=|)(&8$fmSWyoozP=wdvW8vFn1VPf6Tv4iQV(k*f`s4J8XCK58L7#-#xsw&+p@W11Vvfl_>Yv zNiAi|80XGX(>b#i0PD2<+5)7K*aQzlcD0ZMPU05)cGl~iZIchK@7C%(!AmID!Q3+^ zM%J$62Oe_7SaB0`c@#T<-C^jgH>A{E!`5wFl;KRY)PJR)rPMyVl_I?oChlGrJ2A62 zh(YvP=e)6Nu@AYWg1G0JLyBr0v28(rar3McSN`HE_Qv_nrL8estF!G&ik6Ew$IM;8 zp1);%a#dc)eecyT(Gqc$zn-%z-Q3wIox2btCZS*4O(hMDGlw<;ORF6}_f<(1rO4e* z(MR2LU_0G8W$$#wKkyM_Eh@Ij9gRw?(r1lwS7%$bs=6aI+N#wdLb3Cz_Wt4b(_ERc zO!sm+7tZyc7`r1NbdCAk-z8phDE5n~|DtC~qtJiaA(T(;K%OcmXQYC=wUj~g*Xm+F zvb)ej;+z}zr__+b*gfy5CGK!@ucz;ox)07e>w!{IW4E?6*T&^LrFH45y(-R})#jrX zwdcDl?f+i?S*!BnK2mpEyRR(tpZns%`s99X+v$6weml*bb$$m?onT1X4Z?SiUaija zK$LM$zl;5|?#6cSr@LsS>5znnawl~{|2h8{Oqvomh)_xYiC=y~ow)cNMtA3mwI`p) zHv>DP|J*Y<7+Ce6mQcTE=2^s{{|trx^NW63I|h;~_V@aZt-8l{*ptikpJns}o7fBQ zHwr!T+H-k~t$ltqfD&xw2x^XR;n^#dD!(b`&wcJnqdRxBAW3n*Wf)^7_x#vb29QIT zzF;s6`&MYaI5}SXrC$mk!PPeo4A<(^e}2&*^q=3#boY|`uX6o26kOt62yKM@*|($3 z(%t_3!B*LDw{_@0dFeOM{N|GyQ=4Y@bnkbbM)7CMwDr{L+;^DkKhMqct7ls4e2;hp z_wMa>XQBJCl{dfF=vx+kanchFJ)hBUEGV0y|H4Y00jpN=%xc?YTl~J860Gdj>O8A| z9Cc~=^weqBQ{5+S{Uf;dJ8H@wI{*}_1|DpyJLM) z{|x~@_lSFXkLY8H@Dv`^^1_|KTpl~yOMrMVHi|X#-v>jAe13@^9wl`D0%36 zE`E=)D|BV4l_sgmOrcy$!PK>5e!%Sq#orIo}ITT6^p`J0|>P~a@-$-IT zE#2=@_65tSv`hUr2^vi&M|X0n|NIU>Z{p@4k7~NP^a*>EJRkU# z2Rp|Xq5ozeEB;2nvq{LKUvuk9eS^6R{pW5yIbG6!a$zVX#&<0}ZQi|;bHIBTrKtZV z0nr)#Hy(&N)a%YAIpkTD^RVPKK#56UH-)-9b>8oI?nu80{pWtZ@#IziO<;e5r+@V& z|7`xIbH6ib?kCOl-_FGKWiQYu>Y540ozZ{3SD-{p!!qaBE7gCyC!9xcKNE@#r1ZgH zr}TS{>s;!Z2=8+JH=Fjj6WV_2zUn^Y8w*F(e>=gG{@7dRQ0^{VXTu-gD5%x#1UHvZ zN=g6Cq3-$MJP3T%e{(4+^q)J>{BF$*u%1QTo}!_oPN#jIRbfnb!k)uBA87TTyV#AJ zMb0J2pSz|Pbz*&DCf4u?tSIFAZ#gYj|9RHYVrb?*@osQ@I6G|SbItXi-|3C<--xvD z%yU)EyA#yf9SruN73#l5U^$CDIPS6w{kIP_{NL-pMPM<3wTXf3L0?X54glXd&{AFJ z7d3PJcM#NaZ+2lBM4p2DPe{+$xgNaf9?FZxx^6v!}-GJ`Kj-dUJ4fWrylsTP!M|<$MGgRE4T`!^k z4yRSMx<*QxM#;z17Y?MPUSPZrC9Qxe2Z8I6tgm#3Yx@&>5-nH%`6bk&sbBr){`_O1 z$1ccM=)Xnyep_)dIrhdPzLfUm`fq=Bh#9-MR`igKGvL`iVA749SiPW4=)c{;W?}jr z#A?qmXomg3vMZ}Oq5t-xp2MkS1!;aiUMH5KV_Er8{~ZTrOIW>GK?!H@ zH=R9Q>nP`FN;nMeEaB=|B`cuu5!9vrb9ZNLZVWvv*MAqYx={~o=)a}NPw2mc!65YC zDd2o0?;`YtPbK}ghP`6yKe@S>Ry5N0kEbo_zjKrRyNLBG_21c~t{~64+K?kxuK!Mi z@*|PJVYKj6*3U}%?_6>fpvKA6HJ6?+m^x;HV{d4s{<9ZMC4L9^b_R4`js82TsQ(TJ zlhA)}BWJGvE`biUy3l`{kYM-Zp8%i7(#rAdK~?{`@A@6kA@tunvsI*xW{=zftVhj6 zo{l4J1bd7xM}o&Aq3XY5*@d>AU1c-q<%hwYGm84}0;JRN-}SWM|6c!HgZ?`o3_f9Bq zA0@13eQO<9EM8u)h^_?(AiyN@ySpZn#nrf2$v(X~ncZG=v@f{Xg^!~Bk5zhUUV z4^ZZGc0KOFcMYzmuiVLQ?#sb%4gJ0|`tR*Y|2>xU-$&rz!%6?$P3gJ*JCoJHO8s{~ z^tlar?7{Bb2RY&U7XGe8CLRCXTGW3ZCP(PMPeJc@)6)lXn$HvHrMo(<|2|90*71#D z_22o(_d3e>D!lUd5UZU}qW|25yp}!8??#WjlbSxBzU6TrY4`AVA323_uj`IT*tL{& zL9_n5i*`IkNuMY8eO&LUwR^A^@dkRVJFG+h+3FWs=)X&n{&VMIf8=K{62CK&_x+^* zzQ*p;`_X?774_e(N&kHq3SUS6xC+^PiuRWD-|d~$e-A*BsmR_m+Wz~Z{`)*QKZ=(4 z9KG}&`r$(8@oA{`V^)KYWFKqjzs*p(4te}Vv;O-L`)7ZF{`&~$wCDQo3fiRpyN*_< z{~jmLuWP2?=aF5|TY`$Gk?U+&5Qk&NUP*ZRXe4857~~^KeQ`d2>7h&NA9^u4v?cmXoi%8Wzg6=BV3s z2KY}&7z~0ha!_bMPs~gr?T0ag9#LYE@wp^_BT7vmX^wGK+YuvH=>uO%K z(>n4$!`5#rT6fyLOn1F1*4D(_^()ITCh)d&V{MhIa6z?Lv$TY^Tuys^S0uDyTDCR1 z#_39qt2MFykkdaboz@ccZ<{_^OfAn<(OC769`a9UQ!Uvw7f-p#TPog$wY6!>?#zmy zxm`DKMN7PFk1Yx7t?LKUGFqhN%JFa8_y0ln2`*eCsac(^brn&)BQ&3Y9BrxqSNd#wasN_tXVxr>*T1k^WE*Zmm6(4<;8T@EnFG&{hv6m!j*tnJCnB||57JT%5b&R)`m>g zzF%C6rnV?Y)1GkwXhuBY=1pa|vP)vqqhN<;o#P3cJf#Y#Jw>z1Cb z(<{wWJ;T@-cl&!rmGbXn(DS~t-Fwa*G2utm1`~TmRJ7$;@D`)bH}=Gh{yW#K*I862(^u+ zZ0}vMYs-xQAJ5mBM45fC^o9J7g$uz;&pvS-Lkf8kkKY3u4-USo>WZWC?_0&SyO96! zU^b0Xw08AoZ10&M1DGw0p={+}i5&?QT|I4I{ypiyZ+A=tVlp#oIXElHzo&vsW&Yip zS(5J-l*_*>rPF|MZLBZwZ8=*x9%}gYD&=1*Ll5RHp3~&nFf*vnZ}^U-9iFTb`hOzr z=|ybF{}dqFa$^(Jcp!867tb-&=ouBW;qCzDyPn80iy}PJ$kmTA%(!|`r*xXsq5RLn z)-xGg=F#5yK>4lZ0ySzs?nYab|DCB#tL#+fk|F=Il3dK7&i3@b=a}q9$wMhw`Jckw z6zbWP`S~!)QvT;r(mZTO!?C+4|1+p>0WFyJ|FHKS@KKc8|NoRscGH%G-jqdpPpAO| zmLN@#CJKVeLI@CrfHYA-7Qxy2J}#d7V!@AEm&%x0c! zLb&&Pf93W6GccK%=Y7s|o;GLBJUhFCexb#tuvpXLjsG6#hk>X!$A4dxS&e`GE(PDu z%kke9eI7(9!srA3N;H2Vx;>8h=C}Qge}2O~4fmb=&Ff*vPrXl=?`P%j;xtD-9RHnR zy&sMSV-2GZ8XFPRh~uC0$-`SH-Qf7|hgrgg$jKZ3ebBcPu=a!fA+VH=67c)_)h`p=@jn&YzL-}U zhH~;(fH@fz^_@980Hd@C2Qt0qgf(6pXMKb;; z!*)0H4d02vUl}<9vit;O6g$NwE@=dIfK=QnN|VZLi6=9O;7tm0be*R=S@|3-}G zWtiETgHLi+VBX;_>9-*7+Q$Eb$f+IrY$~>WF&n0j z|K~6#oQLm0-<2Hye3Nf?oO$&B52CfUf!wg)@xL`?{I5gXpMvvgBkDr`f4_|XOVRV^ z;MXADM}5@zzX-jq#{agOng_FwZBg5NjN>hs-@OcH+P9d6d=qu~9IbN)KG)#)^>^Vr zF1O-0>F>n%(jSF|BS3rLTk1FByY}zwcl_^6j{lu_cO%FDizwgM82@WAT9;$o?ve5T zYI6L?(FecC`2PS_emFS(|DPWJoPFRwb-!7;<=%lTlv6WC%z^*BSsw1yzVOac+4ts$ zIE%&91JU;KSMx;b8Gcm<-t{u4+7`-HmY;J*Uio<+TKmHJ0Y2%d?&Q@B9OrM;y?yQa zoMB=8RXI2-#=949Ca89O^<1{P17rNfJ8s@h^6u=wTafnEGryc`VQ%V~zuN7qc|uyG zJwEBm5^=7r=6hOyuAIeTsd*p6QqZoN`{JE%?TecI;tUO+M_28yes7!46xY6RUW4-u ze11~RU-7Px_lQiXec>o)gg|TTJLaUeoZqQ^;miT&0#yI=d2&7<$^Pf_!?iD}|M_e; z%gxx9vm%`3;C-MiM7180`h^Tg`SKz!bl{m*B555&Ief4=XN zGY@>G)$4yo*0nFH{~Nje&!=ZON5S7!KCu30d+{wd%|w$kH|kBGd|vjz`k%kNt@@vD z66G_pyq9Q()C1|i03=oa^Z8l!KflG#{y%g-cTJV;!v5#C?)fVOe1?wCW%B7Zew)7L zsH#$5?Wz9f{c>}(0Q;Zw3vH{4Rdd`*`k!~Me2Op=dUeo(?0?3DwJ({ti|3Pkoe_)k z`RiO9sq?=*;@jGnFj^{rnCvjLcWdO)4(0xL`@b7>`$+${Ku$g6E~g3ZtPZ^YJIH7& zK-8)FpW8x|srIFv^nVALAK<&Zz5Z{9{_k14I$}mXcXaiz9QuGy z#7sWm{_ijSKL)ktuTM5NA{c)I(Hi`1x!RVI7^Sn_{_lr#rW8+MlwstLN8~-UHf3-V zp7vObl@VwG_WvZ5J59C+*8luHEIx-j6K!AQ>;Kv4|HTJjpHF*D$LIW$@F_i?ylRCz zBL1%1aK!xw-v6r+$#+3KUyNsaF2-IIZFt4M)&JMv{z;wxv+*3sztjJ#-2Q(MPeaYb z`Op5Jh5o-E_ZGD;=i%(XDcS$eKxYl^bxuCu{(k_!vNjv{V?6))y8)%REBXLW1wD>; zH{M&jd6fBlxBnl+6Ck%s|1Zb(Wt{)~ZM52!&(K<{(ElIfd5tH~@)zNk$LRlOZa z|JT-f-aSX9oQYj^KjEdRBc`i66`hlMcPfmRQ}wCGE4jBa##FhHc)2ltWB$Bn;5FG> zn8JUIi}^V&b5S;w1g$H|_*va^@RK}mVI<8@U>Vn|*xtKe@+7!ru6%BsDNOJ{pDw#D#qexpk7;5>NDEncaRvt@)w-cXL6M#;HPzr zaQPV`=dt-YDC1Kv2jRk6KHt# zXKdLB_2IXNJPZ6>jh0z|eon-1R{8U{q0tnPL>^cxxBm5#+Q>+vM1TGHZ5S_izN3Nn zGOgYE^S9G8kxwP(FUa!^BL4b&zjn{u`F3Mf|8A&%GwAbME|vPZNa-#0=daZ_f_y7& z1giS0H%>IbtTMkL!nnrEf%Wf&8MSQ008K##!1Md__v+92=vKHc^Ecf4B(+(>`dDkO z{}HHfA6!#Z|4)$8`s+W&t^Y9eLJ_2fqb)}J@>limkL!Cklx-~H6utf~>O7Q&`i{{@&~_F9MIe;V55B(%}-sDByeq32`X zw34g(pNJfbv2y&+_2q70W_JdziJMTflaUwee+jO5mHJyz|LL%Q3rfLXj2@2t+kN~} z%zD?u6?Plyf3vY2bBt@W{uzPiRm<>1GM~G?7f*jyt^Zoof3;TsYccoi?|)VQ7u@e*f`kKFJWb9rsXUYyJ+OS#RfTg>YF^6w%WKVnENXs+lFGW8 zSL1%w>sa-<@$O!gnqHcF^uN4LsViRfT9v74UW1>Fvj*xZENb(JCGc9cQbXV4wSw0r z&Pl1KGH9JMJL+1hOQ#;Oyqr~1 z%4d6cXU$(;;PXprwygI4<9Gep|D0uGi*de>zd^v68ZP@k57ZMryk_(1Bep(&A(QoH z%uxG6X+|cTP4i05C#LvI2z;YfZ3~~+;V&Pk^N0OUtNgr>dDPzi{Qh_YT%-8(3-1;A zO>)kVai)%cYg-tz@F^|YK<#bhS=+*Q?=(Y9#s2S({yzlQan=8=4ygb6G)iab|JK;5 z{tqMK;}aPz(66=iUqd{<&>M4VHlmkiC;{J#uKK?dN>Y3Ow?m8b6aE3{y#Z(oM#9aJ zBcES7kZ%F<=@))uh5cWY?EeDH?G#FT)Yg7|VZF1Ill@=h_J3dO_d;CRwKjE>wio7M z`1|k2O0V}p3j6;c+SJiXmHj^p{XZUYqU!%i zh&gM1F2u{Y7oNtb+W(Ug@f~>opDO)72$5kk=tZUf$Kw2F|Br&1{ri8f|5u>@SKyQX z8K?pKKZ=?y_X@e6Z9P0Oa3W@D=D7Vo5%rmY@i5egq5sG3M^mBm(f@qP!@!)BfzQ_` z;~X&X>H5Fd|69@jTT#=M7&GkuvjP(uZzJ={=*j^90R@iQW&i&Zu_9kq3y6(aLRIH^w zTS(Ry6Hx9H8ntZQwu8>99PNPUwXnMZ+nw0Hfc1Lpzl8M$?7xilM(n?W^>5gJ72DUb z-irNA*lxjgH`Ym5m!e#lbdAw5Y{&XB_D^sbw`aM>tPATw`9qNh>&j!+si`YJ9$QQR zOI|Cm4>{(AmzgM8*oYM)jd^m*m1(O~n%F)A@*g10wG%rA`&=ihRqP@^(LED-u+RLA z7`C;xG35TYEE1KY1G!~CBI3qh+&9@svn<}cnmAH>mW|s3vbyyeG;G|YX|v{s9NHp$ zSgSVe+Pj5&49ZucK2Ks@hyACqeFp2*Sf9h1jkG+hyHRblxv?H;4X_S@KKo)Q($I#| zo=hKwl@kc;hkLMMtjgG=%;}Kj*hRl{%u*&c5-WA6%YIFVM+k+@8`}Jb%dwuTqDa&mHv3h;H7&1#-d5nYV7M`!@LR%`vNt698 zFT?I@SkZ4r!mZDB)oi`~WPQoq^}hci?E`OGS)GU<=k+OePbCt zgp)3V-i7UIY-d7$4ffB${)yQC z9qUQ3u@CFd*uNdyt=Qg)?I3I;*cM^SwmA=LJLq1FZ4XzUXu z{!na3yDQQTbio*;A3?@)>WWjrDU8d8g^43B9G$lMFO!j!t!62b z9OL>fu}M2@hu}CL>lmyI&9O=vj$^qvZj3F*0c9XBoOyWMFV7f>^2jrW@Rl)C>@=*< z*N&Oya>>s-_Uy4t%)c6afB9G*)<Qrtx$fW0m@1RL9(vX*Di9 zU*sahYh0QWNO#hMf%ITTMj#_I6IbEvtgM`z?Cek|CzM;KPMy5G+}yhL^6J*BkN<{= z|LDc)mP2qp(|7!da{Pt0C5{=Va_l^g^eI?}VxRspj{O5&P^Y>L8Z~Lwa{mgk&%wVz z-gTkyBep-`m_D=_%JB>Kf5Sdw@Gw^RH}Q+`84?>K9*MQa%4=XbSX=C8U_XSF{ubj+ zu0x3BVyqiF*U5YK@ zNyb@50$cjqC$Z%@j#XmLe_(qL)(??}yznT!5&H<+|6>d4%*EX#w_Xa<(}GzHO6%2c z?1ts7+lY?;&&4P=uLHMXdlj}}9#&U1*@*viR1ufj;f603tT@hx`tVE=opi1Up`NNbFh z*SZU_;`$|VF|XV8!CAgyq$6(NHC*CV_%OLQn+^uQEwSUfNP7<}$HQG%5eKrJBv!i$ zTecPTSZB7?EUf>n#jPfLleIf&IgJC*RUFX@atFW%Y@!8m(i7o0SZN#yUdd0e8n~(KBTP&#IYLkY`PGtsey($x` z+xrr>zrxDr)9)|a}Y?Jy}T?JDJ98QLR_ZOU@F$82|Lf3hxESq}CG z?XcakDBHXPMZ}-x&6_Az^)Ifi#kgiqf^QmRjKV0y4{PG@c&w8!Hiu#zk8_DXsyHb& z6*VqO8SRoKLtDAMz}J3IZxq6{)FW09B@wYF(GFVtF#mx5#Z3P5RNXD}g)0nZAjp$RB#G!OmyU{!#=S^i{2LJ) zfZoDO+G3H|NVEjc3|YJkW!nXwx>>9_`lKcPb(Fs?W1V6xq&Ho8w3Qdo9bU76 zyNKkQ@Rk%7jhi%Xkk_zocD=ey8g}l| zEx&t@p1peaDeT+t@BxDc7r6#hzPP0fWt+BR2eNW=0vWk!_3P)=4QAEPYSgenz08IU z8n$ZNu6>7&op=?~7d9H)Wwx1?mI>q34+e8kfKc5AO%4ekmJ%{yTxVzJ<~C^1uwf%c zzv*UXCS&uwyt;Mk*Kgj!%^p&@oD-!VtYx9M=G+E6An(0+&lSiB27;Lxi2JiLva+*r z^$+Fb)Tt8+<>uDOt(%vZSFawdHKJj8wI=03^{k*7Fw--ffRmY?5zNZU$_``&a(G9RlYv?^YTUG0Yq}H`1Z@xq z1Tr9$gXlFSN3@lV;fC9y>?}MgNXIUX76{^QDGNv34; zu!L0>Uc(quy{Y7R&*7b-^;}WYsT;&ivPrkcg}I2klOuJ^U5~rT#-YsvSs7`;>|g+$ znw1&I%*+V{v$E0YN+LT8m4Pu#b7H|?^dul$sp1aq)2mr{=LorAW_tY$6vGGx_!pgt zzp^xJl<7F3Kn~h1HzOOjP`NTE8HAA>CxB7xuvO(Bs-<-J7nc?EUYc!!RcR?X^D<1F zb3sb-L{D8zyFvB96>W>H1S`l5f+`Q625uWI(@_aY?lWWKoR?{9Us}p8ujlZVGLMCr zLt+-*3owTK8ONOS;=I{vtansfjg&0^odmgN=0c+#R$ea|FWig$XH+gRn3OpVT;nC4 zRLS07_S3q1N$IDf4x=}3mq@Kinx3Df(zE~T?4mdwyEgjb^mc?68CW&jtgE9_e z40smSwOASVAQqDO=Z~>P9QkiAJfG+XF_3l+!yZG6P*Z{dI4ngcN4A;q#Xsgkc0#){Sb!=g@#PzTvB2iv1Wr0;*|Mnxx`?M)-W=?CfXxiXoC-*Ao z-nAINlssg5S=s!>;o^lQ(-)V7jaH>)#dDX;ED0aJXz|R_vc+BJ48+sz$;8rm^N_f( zv`o@f^`}jnhs;XD)8=tIZBgm$vS}p?N(*|o_sI0lVQ+Uvhcm(`E0-DJ0iF&rbya3S z)Xk@4ae(-6k zQ?h7Lc=p2iOBRGrEnPe(+#_5xW|3;BaFxYt%G2k~%kLaU({&CnnqAg;ep$()&hw@( z8$EggYJjDRT9^VzOE&ro>Q|SrSmkX8l*QRpVNlS#8ZA!UV zMzokuZ~BZy90!H%4^UnW)g^`PrQzMNs%KI|JJwiU_FiRiQ`(2+O?H}YUUf|k_Nr@8 zjz!g`m09{uSg8|=!yMUE-h%U?+ELoGa+K=ht-Aj2B;8+aKD|^vo;hr5ve;WmR+~#< zN-q1!s36~8c8>dhXOZjaVYsFqjDHWtzX#*rgYoad`1gR_XRQHlEdu{}{9AA^{&fSE zdH-qrTcrsP#=nT055~U-<6n3`U-TOOzY_oU`ESL>efN`*7dKZMffu-%`@I%4#)sY` zj3^#+D96Xm2|O0C2Ok%P%|dgWIR~HRtT*xC-~q`rK7f2^tu|Y#MEfs~SL*$h*^^ne zpL$iwl-F2yzs#l@+DDg3RNIDCWp-E7&Z#ncjH-Q6olLMwe^oCN*7~$2nL=N`*DNzG zIX3nuGshi2`8HH{enI;cBFv2 zR4=clZYjU(ioN@`Q8tu2EY$eOI$5U%W5%GS{X6z(jXP46=MmVRh;s5VTw`!3_Z(|T zPP)C>glVxk6Ukqr{Arw-P4az>JiZ3WyYAe(ue6n)&um4`y#I!^{cC&om0)WWg>o;o zib9Pqv4@7j7pE14+F#_12<4xXJ|a}OI&f4dvM^LQIFvs))V?Sbh8*OJLj1*jlmY8F z|9BhGuEpV^}4z|F-7C6`f2V0<)7KjESA`x-7o;YuPxOm%a zb!cpJBC_W_)Yf{aI+ln1KyuHVE}W0paFIu`u=SqPZ0vI0i*fPzzxM9qlk3KME5eQ8 z$X|Tz!H&pYx_f-TrH<97`-XwXf@H~Zx8B1te0Trq?0M;%++(lYp1llL-aFpAPt|9cE5FY@_S$ogdpyPEuKNG>O?$Wfs~Y;$?bn~( zZF+h{L>ju=w(hpKyB+3kk9D`R-0f0#TQ&dTLx%JVw?AgalCs51!o9lo?3&-D_YyfO zIJ2O4*ZiJc3-E-4fN=Nxg5LSP^Z8mQJd7tfspdY%9i(z&UeyAQmHhIV-mvPK5fLf5 zQLj;cXPGBo*iy;Mje9ln%aC)LqzBD6a0XH4-*Doz(bmr z6)5h6Ov)G+H%*snf^o>a zE_o)CvS@KQ^2#p3PIn{gA#5gj$N2TL?sZYtljb5N!;TG&fTEaG5Xn`Zq+{farsQ1y zZbOE>&6C7eiH)oTbZ+w`k>^a5HElscBzJg{_+bwtr)Mvah3^R2t&vCZa9`TupM-p_ zkpv#uOj{blV9c<8^%Jq%3h7ce{7U~Cc)GOH3Pmz^SOld)UFzX5=P~%iv@<3M$=66h zE07g)g^cqP$$b^lC3n>S8rFZ+I*~ldlRO27IrmQlS-nlj0*#zaa`y8=mTIH|WlKBv zVEEi}eJPUVp5)V%b3 z(kfSZlCV}x$wzM&$#PHfTu<_GPZHZryU*9^Ti?=@gxW0 zFsC(7^A}bKiD~3^>b!K7kc6K|quh;j$=#B_$f->Tr$zf`Mcx?YmSzJEb5>!{IUPO} zlCF_kI)QZjLrAtpp2Std>C_;=_Nc3o>yHHK+)YShjf`ys(q*KOLp9PH7YwIsv5?jp z`8^2IZH17I8ky7uB>yTQ`5Nhqr^TIuyM*-CNNWUTPWPQc4%f&-XicZbCqjxe(yBd3 z&wWBhXe4J8NUtU+VTL_MBc-&{yN8g88X1YJvD4=$AyYKc;wX^9*+QZkc^HG*>AOnE zER8hk0MhSTA#*ii;>mfZ|Gh#MYUFt89R9M9Wf~cUQ`H&pg^)8fav7dPcLv%Stmzt! zEItHe&>=!D(8#+OHBO|DkaCS2F#=@pcp>XFQa%Qx=wu-qH1YmmHAc-w1h7BaLw5lM)Eaxiv&=cDTiD~5F zP9W0;2}x+=ZTisYaYBrv+%}Wk?mZG@`XXgVBeUp3XI!l8XyhpR(BfN_9gXB=fXsYc z*%{-vb0fV($-6=#8W~F;I_qCTVjAgB-!{7r&J$b-HS#Kb=$sBhjIn+@{n~?+4iOU3 zNb6A`C!HW9rjZ!!oP4T~ghrzDp>x*?F~<4r^g0S;-fco68hMRAwCrgiF^zQX05bm{ zLJ}Hj%+^`(n-F8X-_9cHoKg>?0pma;Gw4GXb`cWO$mXsfi-rqHXyiir(8be*7!&+< zexMIsa)ywIMyAq-F1=DnOe43B0Xg+fAqkCqO|tAcA;!^uJCo=`Py45kh(>N8IsGpo zF^y#7I^mqrsE&*SjSNMLIm-)#7!&<=x?(&zD@F;4XoO?kIkQAaOd~JW1zEXL+0n>n z^r5k}UkTz;MobQQ6VRrAL9R{!H1?NR&QwjhV}u8przWJdHHx z>}EnD8mU_k7v~$6A%8o|5 z(T85RUD?q{3;NKDUQu=?`|afS0J-=pWk)0D6@XmgY5tXg{PY z?)$YL$6pZBsRsb^W9jGE3Xq0nd&Dy z=|k6T7h)XmCo39(T=j~wqmh|?K-Pby?401&X-^+|wS%#UGyX(Bnb!s6nifKgX?{{N z9^~4-LJ}I8K;O3EXd$tvU+0TnAlJ=PcBcEuc>2(d=PElh{G>m9==C=!I~uu)cH$2y zJH>vTQ|Uu*cthD?poGPdUKqvm;KuKiof1F!5+{#yQwByHJikVU(jWeHMjjmla{G_U&RoBa&GB|ePJI~%^ZcZ2BFNTuLX0v$IRgjIor8rW zG}4+rblX%RvH5--UJ;$UmI#R~@ROnRly_gM?405!7m)mYv$CU+kI|dXJx?k-3;jC# znu6T>zOu8(Pddk&mo&<>%lq=Slj|9d`(cYvgnK(C3~N zB0tb#;8=7Vbg1+EheDz;e{LVrhwl7CNJ1l5(1*Uz0Dm*=@G8H~8T6qqb`uiQ$e;|6 zmqrSy(8%g8ATJjSiJYb7MjyJ19vc%)8i`Qnm8*mptNl9sX14R{T|%N7nL{7?+D;(} zjZB~qef<+5;Whr;w$g{bu}?@$BbU&JzS#sk!>-WCbe;!q^$-#{+n?Jf^f|ka5)#+Q zu8tsY&lX~wUexwim?j|9TOZ>S-=tK8BA|$SnYYzkY{w*QKrGA|X`p_S~7ZTOToSq;* zX2B~W0?^1iwDVINA>nd=Zqw*P|20TROe14$ke`neQlXJ3edsTXghbZ*bGx5D^w*1p z#5M9Ayp;3XtwM~;d^+MopFp~J&vf~Vd-)Y1$p874$VWZ-+i{rlb~li}z88|v$lgvM zd$aHf8@%4-t_{&?HV$N88zC`23H?GJYM2p06&kt?P6fXpGF4FI3SWMq%XlVO=2Ag% z4IN82YMW~X8CUwXuI>VqX5KC+s-d;xfgJN$K?w~#o(7a|ek3To&Yxi;y3&C8m!O!2 z_HZ-?&BkyVaDN&q9R-wO_7D`g%AeuW@GefKIYv-iLpS#a$}&p@8SDL8OX(Z4%{79e z8v1htP>y-MpoE6@P%C6UC@6fjKf@FH0@X3!5ERqU{q(81<{m*68oG4=P@b8E89MmE zYy260+ZCv;*;Y_oL%WcZQ_mbM$hg+8)rWqyzInW$sD|RKR|E4@K?x1LO3&KRyi8Dd zgFnN9u|SQ?I|Riv^esnJV{?a~3JrZV5vYmzPeGCE{25LR0yQ=F3W{s!;vAr6W)t{0 zc*Kokf2E1pW$0a0Uc((DJZU?O&r**%O;YKS*7P8+kG zpoE70ei%?&vq(_*#)!eiq1y=kdNlUhnJ0vqVeG~TfQR^7;ZA#VS(vEe#t49iexR)m z=H+3c$W0LvH^WnrtJBfk8YYTsXtoX1$$U>j`T0HeVGK*3f32Bz??p1VuD7 zk8Zcn45Bm9MjE=4Znv-5N>EHgx6MPpb8DW+yQ8)Ia`pi$zQKW*_Ff0vjl}TE(a>jy0F5y37Zladm;lg7^EE*+4Q;2}J<|MEP+UV_Ak7(NX0(=iX=nu9?r5{M zpb8B+g+ND{g9I6y{q?er0UBdY5fs+YT)N${<`O{>4c$z)JI*W@6xGn5ML^@t+XTfl z^fKM<1oIg|aSh!;r*^dYp`e6@E*lCo(fm_Tg@#UndvuO58?|9;7+d`HT5kXyYjzhD z*3fr!yOYeL1VuEIuz)6;a|A^-)RHAU&Ri`hrlB&r!YSrPL2(W3#ISXynhyv{XegH# zyyMN+1yyKhJ>BjJ=68aO+x+#)tPgaenc0?A4r}OAy4`6eA1i@J*3e2DC~8IoMKx4T zw>#aODk!F*&*^q&m`er4HPnLctJqvCDB(xqc5g?zINYG;b~n@Q&N816g$hq$9S%cI zKG1CQeL-P*BrJ}gj&!?o%wGjXH8hdIZmC(X9cvrcP%oaVCz)LZRcL7QAfS`Yk%Gc^ z_-!TVcITQi1w}QqCIe`mxl-BE(9?9gW#%=?mWCdo+nsOTt88uc+xi6u&H{6nvZbM+ zbi1dRUnyG}TGt+Ep_z^iuErX=Y822Sv!$T$oqk(C((Nub4;K{G&}($NOUy}v;u^ZK zBhXTFp|Yi+-XnodH7{1Sw)t%x+6icxxk=g5(1monrt4UDz!;#5%%_ws4eh4ez1aMRvZbLymhckucV$aMXV(L|)NFt; z2UmEX-_}3rcFWCtK~W90p9r+p93?2Op=~{ZE;DBds?gA3^?@!oS1DWD{kC|w?_6PS zP_{I572WQY=5}RELz{X4tuy(d63%4};h9u?G-Q6GY~Am-)u$2AdNbHr#=IYi+iit( zakv@s7ru4Qa41}B_7#P4Pay|~p?`9mZ7?Sa+NPmiFzsAt&KI;xLqCoK+Gt)NXpe?= z;{MFJ-n>~*?gMVQ#nxd>fZ}FCP`-w~qz}5md{@vo4RxslbffvRpamMbml@t<=5=91 zlxt|j;Xr>gI}6&Tq1$=#-)s&Sv`a&m@HD=~oFQnBh8)zyxz$`DDEC2sy*|$Z+GMU5 zl&_&4Joz`9e-|`PLw{uhZ82XGv_M0*vdXuaUkEDKP*~SbDJm_kGWM^gTv6Z z89=X?I|aoxG@5SrRr6Cpk%V6>b3D*%rir%4e@CDX%`*hWHS|&@&`0JvL6PVETIbR2{?oimP=$s* zX9+(xUl0`A>DTH^xBH3tnV|3sesmX_!THp*5Tam0Lqpkhfj%=25fpvVuhpMp<8!l6 zknxfq9XA2!3-f3}aSa{W4(Lm>Oi<)yzt$qU-LK5^1yyM1DfaT$=HCRxcKNk_YytF* z`Iw;aD}MCUaG-C^cLXIgv^E{+JM&+HqObb3O5q-zJ!Wn%>95!PD3fFUd$W_ExP~sJ z+x@{DCMfc{Uuy=d{G&NtP=$t89u4%9xm-}}4Zqf?BZ2;9UL`2}rXRh*)8S|HZb1nR zy-c_Ji}|9U=v#iR(Kv8^H9r?*?DnJlV}O1$ZPWp=zlNrB^!{!hDk$={U#r&`pg+vM zf+{rhd2^sY&543y@A$ReguiwEGUp2lzw1Zkbh~@a3j`%JbOU>NpLw&O=zD&xy$yg2 zDEZ*);?uRLqG7&w2sxZkW~(U=(p96r&g}jOHfop zzw+iT&l)EvuA%xz0M)fl7F40384ZEzS?4HQANg(F$PTV=-Jon~XdDK!)4<{v2rzIp z^gVjUX=uHrY-xz!8gLp}KPX%O^xL}90cvdJ^ks%o4L!<+YGSn)6xYy7wnkHHh@c7$ zJw~V2%sNp}_+!7VbDID)w@woj)zFrfK!;dY2#RayQ(hPjweA#Dp`nXL1GTW87Zm=) zZ|j97Kw;|>K~W7gr8jA5;Z5&sLk)GJH#y8|Ca6L~+c059?E9>r20_JBWH(CdL8A zyoMTf1nOlq7Zlgf?lhp@Rv$qX8p5jp@F9~mK~VTBzpYo$aS9}NYHSP?bJ$JQ8QJt!#rs~^2N5@@XThMh#{pr^# z$^tspx=c{`FF$&gZg-M(hoFRp_@Ih2+1eo}y4SB&P6v9N^-n>@K0oRg2AX2+6%^Od z8`PR=HGw!j^Dzb+TpT&SE~9Tf-s&l+LPO~cX-}}m3W}M2t^3gA&WYAZg2I*`eQp9x zv(6Tj(9m9LMXk7?sO{G(quZTsJtW9T^P_h3turhJ$GEC#Xg*P~#j^+Xa{OBD>2_yY z*+@f>r=gP%1uC)H35uorwF+7S&9aIFg#&)Hg6HyV>jXgw4LwaX$66*R8uV+OMjusb zT`tJT@S{CMCs|ts#Wi#+hv>=HbAlq7eyuO)cIR3j3##xVal8AFE)F+M{sxWES9H5& zRs%FJp4-TB^ZEkY&~Uol`BuK53Jr0R&{<%O5)@%8VsS*Pj05)+YnGt6hW63zF0@t& z!k5~8T6fXyF0wWVifU-g7@)=0c0maZ?Z^OHV!bLT9P(#)E4|55>l;Ba4Taesr&_@w z()Sv=m9gY9tCgTg9e;-3)9s#S4HOjDP!Zkk=@!3P4R4a`*D9ymJ;PcoD5{}dbi2!~ zO9dq~bSB;I3Tum?aGpQI7IeF3T2Bj#Y3QS#Kr5{ZK@}Q$l5RI<{UIn)*Pr3nY^YUM zL(~E1kB07`+da!F5MtWQ^X zj&+@&n1dHey7_#&w5Qzq=7%fUL2z5Ti*(bYlvUebS|(mhDv`m^lN>< z(R-oQT2NF&-RO2NvIYrCXy}=CKo?tlwhQ-9jrwbtu`q8fUiXoK~gpoE5oG1|S(%Eb6ae;wk_Fz5hnwAu)Y zX{d~D_j)TLs6s;~qHQN`O%)V5)R&>S-K9tuhpWE#VBziR?E4$7i$o#rDMWD?I)QHY zChJx~6&fmJ;r?blAt>C!H6vPUIB;*a-WL?rPy-I8TdZFN#WnOS-R`Ycy%B7P3JuMq z+udY!6%-EpZM{oZxY-&hD5{~!&4IR9GX=#p)QA0Xo3&Ee($MAYfNr<0QMOw8Z5_&! z{|@V3WlKZH;na4vTDz1j4GpGmz0>+i+0xKwMBA)%I5716VSZaz((T@5wG(uLP_GEkeby#rOG9Z#0&TaR zRJJr^_5ixy`as!g?Y9*?4Cn#tH)TshkJSfy(5jDo;r%uAJzM@EtDB$-4dt;l9=47Y z6mH|UHI32kBUXu^sD>8M?LKP7lr0VYi=+23>snP@%%v^79bR73m*sPl|9 zSx{U81n|G|^1XXD0eLC28 zt;K?j&Ta{%7^l<0zGv~<+Hgb~3Zm4``_>jg5e=Qo0q}wKw4kVl#<1o8VO0o>@ceDrk*qSXUtf5(m zKb=pkvjjynG>6_ zt&Fj(a)pMP!C^RGS*-;bUH$c%L|6H>HAqlcLxnK4{4K>XL`o)?fD5jyec&7Yntris5&=@+{->i*- z5*nIK2m8DAfS?Ku<X=n#a*w&sbD50S(=|Ju5 zMaouRzb%HrPJ8~wP)tKcOQ3%CVr5H1_t6pcw=Y$;2KsGn zW(g0swxh2d0q2nv^Y z3Tiq!4__msg)#QuL?JxLZIoqHpoPa$6ker;vGyCH5RbSDo2ftxdprg27bilEc`h7n zrynP$|6o_)9V*a5OQcJslM0+cbSBz;L?PiRWZ_UOOz;%E?_-AwX<@QGM-+@A*TUgc zpoP^b3YkNpaGZU$D8xO5c~oE>?$H%6do-7QI@Nw&6e>K0jZ~n8Pf`?G(+?eQ{~-#I zA#RagrUETAoZ?nGAXUe8d@}10wL1ggw$M{Ba3~grrziwzVY+>SD8xO50vv|=G4v?5 zmkCOEh`1wi&yaq{3+pobCsBxd3OlI4_NsGyRfYPraGKo)05Rz>w<5nmA+(Iw)HCdepvZ6+ zF|W|Q)LL#&6%-rc*J{Pf?V0vcm7#}3t6vkKmG)Xe;Uj%oQk&b6F11NMn)P-wD6F=h zP-Z-ZbvTsTyq}_Qgb9T;_K%{l%Tsuk3J;+K)AOi{)+nX zG;Gow3Ty2nMIq`b9EwA+P?DmsoUL@3eTFE6$GCMEO9j?povx4$|HD?g!oFP;qMkyG z3arDkDGEE;N>|$Ni-IxMwQv^|XyI2+AvpuTkdEORJ2Z`zj(7?mQGpgZAYBGuQei#o zaIHN^6v{n?dN>R%V`;CmrwB@ThR_Pe66$5XfyhoMHS&0Y4-g2EHrA~Ua0t1duy z+j-O31`9kSTF=qf-D7ta6!(y5T{HyfUVFHpJszT#+!G&kJ#2?iUorD<+=Mj68pqPh5>x8yIkJ?WPN_a@LTCi&p_6LG0 zJS1A@^CIxL{hOfh#KEc<)RGd1X1FEJF+%6F#82C;k%Y6t6Wt5V(5Qhx&)9-H~#Dm=s(H1s;rn|9q|*48)%N9-R4kD+ggcH3P9 zMLoo*FBB{SddD6iDDEMKYoWu4-m{AZ?edVEABPitV4o?d!b1{>Eba|dVP7riR}V=n zu#&fDAKCW^3Lop1P%g)pMSwoBUlz2$L%g3mWGksn>-gfxfhl6%_RlPlq}kfzo*|W#s;f4oz=; zId&0h#inD6WfWXS8eV5>;5D>wmOb@PAhaHD7Ro-Hf9{dt%0RpQT zRGj?Zu^ViJ-QDTmpK75&)*%1%AK>z^e-6^qf7wNmjH%rJmHW9FhocqKf8&1Rj5$pI zo%`X8rPTd{`|UHPbN^57=Vx5V{lBIraxgA)A~h^I zn4Gzu2WjS=C|)$vrdYapFAnBp&gMbTWN8; zkrb;zNWNmX%?K6><9%Kh*vqM?zoM*AaRCcALe(0svL+WQZ z2rLtUAGkXayMbBw6OtFo1geg7b3-0RYaP6)Mx^Yu8TY>{DfxUM9^4w=pI5UGn z_S%Z&xiKE*wv@wdEAwW}G|ajMa+Fw}+aC2aTYU|?_S*ZG=Y}cUn#Hr%?pU68lwo#b z$?Ub;mgk*hnEC2p)AGEN4YNQU+`c^b0knYGLml3;Joj>Da>P+$V%PHA_eigwBZsjS zxnJ{e_i8zeuc+Ib!gbA!a$J69U6aQX%?FhBin=#Ye4Y8aIzH3L{ut$9Wu#Rt)t;=5 z92cNH=?Svgk}QFelE0=A=!2B(Uw~K|Nwk%K5t!g1mP``UlzbTz4XfZ^KC$ZRqc_IVV~ql+BnSR+kgVAi-auD$k`-k^PWA!UaFA_441&UONA`= z6R~?C(xp~8MlRn56u2NRlIMAnXW%fGZvzTk^q`RS8reZ|$?HNk`HAHI1=1z=LyTO$ z4JdHMUXe_Al5gWMmu~|KtZN)#*()@{A6^Zt?=HkR&TVJW8Qd1+y3sc^Uj`m1F{OL*BI26eNo+PZV3q$hG2_hNu zB)fQ$vpq>zf2uts?^-UB<(}juO7c8i>q#~=a``r(z`eJKWZaYF`$|OeAx|>H$mQFB z0^4_qq%qa4`)xSP<=cP)4}2*k-y?Dcv#$HRJYa22AtWEJpTW9DJ<0DNAa(74bmca!;}e4n^{4Ptq}R`8J?HVva~|@+5~)as~cyl{{M*fi5^Va{0_^;K{2* zJmHD+2f}jsHlV=McL}M`2;T-2cy^}{<9N5~)DaUE*bx(hjNEo~M9=?ABqN^WE*$2z z=4t*yolI6erV+jkDDYATAqhXJ$8a*(Y8Z-LpW$S%_50ZMg_AEpC(ZcW1XAJTOSt|q zoUHl|yw~7(4~CNm!$}OE|IdVzw=vcWR2}K&hQS!?zHst|CBATS#}YT3q>#NfzSIpT z$IGD?PEMDjJxjE3^7AEHIQi=mUpQH@#1~HPUg8TU-&>-ElOHcp;pB)FVj{Lwg_Ad} zm&5XZ=1X$C?bNy#vd+aO11)=PVwnmrZ!yylX4q@@EUkMj`4?sj zb$qG{H@jN>-P6gJSjWh5>~s}=vhw1;-0+jtmt!sbWQmoO{6+XV8!2+#XXzy| z8GfEcMCZ?%2ug;Z*LjGQ5|j)-@AptLkW5zsMt}}XY_Y16n2b!n^$=?}NtE8rjkgEpdY>QC8GX zWUMyyqAZkE#j~A6GUiF9Gs@zqj(C#Ec=i~PG)mkO=6jMSd6LO^cBM#$J;^DQWIX$qNS1q&yD7;U)%60fWIWqW z0L5BDUK@$7h!G-kPV?~Fq?o>i~1%lC+!!K`b{%Oe@jUMYD*J;?<)l)7&5 zB$M&%V_|k zn4476R%67 zYQkJ{{RxyXs;ig3242lj$+XH!I(1NW)QcNdFrexgtY_MxtSr`trOe1l7OoJ|neHJ9 z$HOeo465VRE61x>sIva;nrJOn2ak68TFh4?)+Y}Y^wGL{d(`t+pY2iKpK!1}s%ej} zFh(rnZjKc5k5CT&nkEnMzuS^U3%iw;70+EVv!vUy!rs$*_v|vav~0<;F0;#)bX#=V zBEv6XbnV)$YghFbJN!R!?AXyq)AZkI8`ACHX z%IWP^+mvW4f72nfW7B!F;Z1_&p9FtGGg;~7Y_jt7;N4c2dch^qavRe>4L%p#iPihJ z)5>qKRaklYb5*x?L#vY+e9`LIK;)kfwzgU|urq>^vz_rV4FuojUkgtZ^Wb^;`+`c6 z?hEd$Oj7$+?}ow$q^b<4Nu{sI+D8O;K-ElNoNhm1>^&| zudMbmPqpUUPw+(2?GDWS604Eq&h}*fpZ)$mj6*z@;~-}l>hT~ zrnLhf6SDQa8vGY6poO0M#A<}|+Q9(-fASnJ_&!X8O6u^o1^&n%CoSO{~YHSX8!-vv)q?I&O-exXa4`wv)q@zl>c|D@+_|||B3&@ z_BqdPl03(m|NrzH_m!XRV`o^u`n*VWJuvP+uYp*|w0=&j^i%)kID{MI=_SR)?^Gc$oL07E-jK49Wkbq_FPy(*!6J#I zCUn>92Av+=SvBZXsdLYs`%Uj_%qSZ-f04iax=))>&`Y&b&8+8s^m^@w_1+KD+Xr4e^sXI{Z*N+_g7`QZnt3ClK_4O%SLrFmchggf@1~~|-%YQ{Zc6c8`5J~=57wcE;Uuhv;Uuhv z;Uuikm^*i2cdWb#foq_j@Z1A#E~@t&-CflsxOXe)J#DdeI$_AjiJ`Y3Qo9#QPt=sI zw+Q5WsDZ7gvxj8d=?z;cu6Jl9Mq}}QjB(& z+;wr-RLLntSIISGl3GN`yD-(K;2Kci_GF3=15>@+r&>L41k|jTdLF9oOm)7l11r!q zQ2XA}(Wwe<&!qy4#cHo;lB~BP$B`uKt(Z*KTQQlekGf=X>KK*0^%_CCrfyc%b>2332WjP7tyn3qH)CabN;_8TBr4_g@}N&$`II)RE;vCp zDmkT;DmkT)D#T3j$|^Y}6O~*;CVE9t5+$8lA61kpgBS9JH8?{z9IE0y*)rAn6lBzg zKC(*w5LcnGUe{!@Ue{!@URNY5|CW-8N>0f{CD)LN-eAeRQ_e7zNlH7aWPMn$+%>eK zo1P+HZE%fz-1L+xx#=l&a??{P<))|9%1uwHmYd$!7(V8h@Q{LnaIdaCyXJ?x=NI(O z@15T_+-2V4C1oW8FqvGku(TM5(-#)c8Gu>)F1>q(yUY%EnT43H_~b4N7S3N>QoMNn z!Y+#zFPvXCTZ`aOziLi$FEypkBAZfUNlmG*q^8tXQd8b`yDt=7K zq=wMChGBVILe}uQ_7-}Yse&}EZx;bC3U#g z)KzYJU*q(Wh4UBTbEjz~3rcZIh#8gSy`OJRrJzRAz3O0hBTE!z0Vhs4HRIl4%H1U| zL4Ez>z-L9KRN;;(jRdPxPs${(b zQJrd|tIG7A#*(r{rL)UQW`>LBOkY^Fja==NqPgiQWpmS03g@QlrNfYx)$5@5YX~R>#(CduU^Mway2)(zEC*jW;MyGpCR#Xa;ua; zT@zAD;7;Jw+yYgc8w#y*(%YZO)eO^QvOY|c$@(x&ChMi-NUAAd?(X$&jn26+Wk6JS zpGDJhcazd{Dmk_MBCVI71ud-J^SkMKHkI-<<&)YFD*x1zLZ$1SQklQr21qX`sD92t zl2b~lq*Ds1l2gj4l2eMPl2b}3fxVuJ&gkLwYjvYvbxG>=Ld_%SJ;=IB^qg8LNlvMh z8c`{ksN|GPRB{cOq_m8ZPH7pHthWKmt&&r^PTeD<-Z`oEMXRJVS@Khp8kJIvxXx6s z82hFAKvpHEw2qt$Rr(2;s2b=^oJ`g;NhYV1L}j8kaZ);^EmcYMYC>AMm6S|WvWh71 z8O_j{vr86@E5RpGYK}S8y}J{nsZ~|e_*K&7{HvxRE7SExs7%*ef$7~P&ehwpGCegP zC0|oMdP`L1lQLvoyD9DLrYD1>s!fNhNisw$^2JtiJykAg|Geg@A>|eHnxTumI}*&8Y_Yra<;E#MN zrF3nyQTP06&YjA1y@HkLdJQYn^(t1Tr&LBJMpK7`O4dus(yLE-Q+mNo*GpL`ua~ki zT`y&2dP+~Y`KOfLO;0VSI|-fw)crZ?tKFY@(+;EOx*yzCajGbptC*6Zx-M3^mZ81X z?UUY6$z;8qlF52AC6o15N+wsi$4se1l~@^dNX9Y#F^T-#8L`w+;40{qhJqIX>kk0{ zbg$_{xSBqNtLbAnm7Y>_H~;_D*}1^URaE)E^56|2yr1F)fefGfb>XN4qAz*~l zhj2Xo$rR-|{mB!5CM~ZC_;Z}T;(I-GX?28wP}bpREuGKH*;!&aIZG_(W{J(Bj=dN2 z(a|r*w797h@upU+Uek7PtCRQ;3h}1-;N=Orx{h6(O#16K^aZQPv1#g>&agp>3`02M zGhKt<+E7$bm>PL)v6 zS6o6)CfX*GJ~c2sBP@s6w}?(lZN;&-l|=_4r*kEiNiMN$N{LNVNZTekR4J{k$V?ci zt(`5XD^tF5TqROH9(F+16q4s;Wdp9)U-V^6?_t-i>e$U|8lbG(yrnU zW5fmH^0=v*uS^X0fHGR<&0~5gmsu#We=S|vH!zfy7w7#OWYG$r7h0G$?__g|v$7eD z&^aI9<$Q!_L{K_-P`O|ofDtI6b(5@{P#lfX!e zeJs6l$&RpuY@DaKbYLI>z?Y}?YVv^FJcN~RGoJd4h(5x$@$~-E^XU6WKM;89D;wZD7#;E!PmFB&8Ln*! zEnAt$Vm9JzTjd4Uh2%W&)q|UH0+;fwcr#9jH{%3umngZpOp|XueeSUJ{IC+5Wy0v|b1ga-kqs&m7a8{w z&vbpgUGf_+_HT;l+Qab7`0}wgOC^@Gro^UgBr@Iqk^H)a3(qLOh%>w@KeZ-BUdT%< zt17Xqs>EhkNZX7GVKXR%<=phzbm7>~&E%JU%qcXANU0)GVYK`OhUi~+1sl=hPDNx} zy%Mb>xvonrvsPl8wa9B@k<5UlNQo07HuXWoraoZVol;xo%j3j5f5Jwau+b)LwDCEC z9J?Y{e6=!qUPK>Akeh5JKxWD-hc^hy(Tl!^Ng;=_#C8-gh14oae9%kSh$KGdC2WS0 zut_&zlWxK$-C>m{uCJCSGKr6W%i~)spSV6-mQP%tEsxJgzP|JI+tlkn9hbfKLtdUw zj67HDrLgEXg}h+&n?fya<{aYXn6~20=+UXDnT&+ZJR&SB^;4Iyth2;s9#M3nB{HMM zvIqteSw+NUyzeNTfXNP(*mNjd(^BGPwCqrcP0QogqkP**-82zj*^y46flqxVScA^=i zOjGHy-K=B*Ig-T)#|*BR*pwn^K|VfqN>#|v1huJ#PP9e%PHCju_*!Y|NHig#%=B2# z!;u-uBQujn_H zOZha5{eTwl7>lbZ=BrXg!|>4ty`d|kVi%gDUj^_I@z1dQftIz7e2S&!Tqqg2rd_l) z^2V~nk+CaOB12c;>F$`7eXG0tjp2^Lt=x{GyOC9f`uchXj|qR8*5Uv140k~i&Q#VJ z`67RL<{7ySLU}B58-()MNMCg^GX=|bq%v|16sAf`J#l6nUL`3*!(Xdf_3WsHvp%~(6Q8d{zq?b655?QjkKHz=h$n8FLp-G;4WOkXlhERRu16O` znZ3wjh+Xh3hJ*e%-4=+w`z%@zUT|awy-c81glyjo17RuRwF%244QrwqdWx4xD%)bB z$!k-o3uhR?FJ!?&FX9&^mYpcE=|t>na%HqxkQ8lu7FuE&NMj-=k=N!0suy4wD}M>F zzrWJe+u_fGJB2NkC5OL6=nr{)Q0mX`z@snqscBMPMjzf*KO^WZpqW2}W$MdlnfemT z^px1-7)w~qUg#f>_2Qu;E*EgjQO=$PEb`_HGG@o?ElKdwPUHj$}m2pOHp zIAN0(!m>i&OLABvLfD89PKd~6m)a(=Bx1Tl*yIV9%1t<(c}J|3PEKZp+a?PO^(_j2 z>1R3{sOf8B;Y5R1Ewa)LD%M(uo)^kNwDGJdVp-RAB#X`o0-ZsGnH*-YNl7vH9ZN`v^df- zpNmM#n97zhl`Ugx+E8BDQ?K0M{B1aWe&qG&62DAgiDeE;Y??|Urmci!W4#DY=1rZ^ zJ72ZpO|6JG)q=}<{h%hVFY^I8h`t0YR<^XoWqMj%wzS1%OIzGbG}LQ)0B+hz*SSnH z37b|DPJN79ygM^WbbY1#rh&Td8Q#!o|DhtL%Y;pj37ZZRHvPrtQnOs8ucx!p*WEqX zHRLJ_POA)dtnKn|7dpd}cMq%@qG!eTQ2lo7u7SaD^1P~Z9o-?LxHVIy(%;cJ#rgZjpBAcHKzEjLm7c!k7rDyvH3OC9eLZVd z_o||lvzF8}SMe7LRnSaV8T4%kZ8>Sd!g=9v`QDlD!=VaI_l1h@xN<>ide9i?>gZHy zpzf{dT{GC#IoWmhcC7Zj_4x>)MLLSN3$12ODf3cfGj%`wfsUarf3qS=&LsLVnSM;A zAHKW2UF&@6i&64#Gw@sS)88&*Rj<#u-&%kw^EW|S(~ofoV>3B4N`2>})oSX}+M(jj zp_v49uzOWcS8rb^QjC+YR(2C_lUn_rp#o-^SKdjHSKi^<1;|^87dP}D;W5T<5-@Xg zZX(9`+oUgv@-c2G%E!8!qkJ28Z z#%*HyJG)I$zKg4E8;c+3)<^lSZo<4+{CJl~`EIVKf40+)F>ZIaG0OLF<1g>f;eHE@ zJ>9-hzL(3Qd~Y`~%J*@vUJ=vxJFM`2;lpYlF{X!{|o*IxZjB>JYECetoXjZBSrjkicbZ9Rq@5(<4?+iuHVl%JT3%p zSNuxw#fskwej)g_(D^oazv54VuT}i7;Fl>r&hJB0^y?aMKhohb5&UMw=YVfe{Cw~R zIM3j9;7!GE1a~Lrp+1h^2%ahaWAI$@=fJCqkM&!{6#c4!ucL0cL%`j9sy74A!87nZ z!7l*M!H)yKg7v}u4$I+D2VW1qBlvg0>)_{u{|ekK$OD-O{!j3BaGtjZjHP~6!HacR zJdOij567x)J7V*MA7%fTDqS)k5c2i{ct6X5QYJVbK*2Jjr5jym@Z@S5V^18*q) z80)`-6nLIL2fnT1#Wv@~`0lLup4$-LUGXEp_fB6s^XV{ z->vwK;NMpK4)BKJ-vfVG@n3-dSnK_80 zD?SsvruZW8hT>hUf11?4jP(`&DC;X;>}grFv!VERS%0zA-^}`ozrgy6Z?hBh6+aN% zoi6pKfai*z0$x+RgY^|($NFbT{SULg;$L8W#qVQ%#UE$=Go}9Xtgra!ohc7B#rFem zC_V|?Es^>Qz;nf`tgraHSzqxFvHn?7{|l_I`2DP}_>-)!_zSFmw$$Ht7s^Af_?y6M zicbY^D83Nfog?)-SzqzXSYPoQSzqxxSpQt9|9#e1{3+H~{6*GReCKhL2X`Ln-|gse z2zW#Bnc%ghGJX+w{!Ym|S^s>=FJ*njZ(#j*$@mSde}Uu=uzp4ICs<$c=UKlh<45m` z`OqQxe&BAI#vY}6YH;({P(P{ z`0K2{O2+Rs9{IUY@}t1rMUtNg-cWogc&$gqU(EWeCBKICdnNx2>nnZ_>-Wj{M_IpL z@@HB9V#)u>`ik$l8|9%kAmfh&&j%$x5!?+){!Z|Q;)CF|H8TD>@O-W0pJ)AdOa5)v zSNvzJzfQ*gf%PwueAMpnhf5{j54@rHB=Fk5$oK`|`DK!Ku>N}_zl8M_zk&5Hm+@a> z{VRx99X%cZuPgopxU0$d=fSIr7yChn^ApAQ0ngqmb=tsdiq8XYDtqIpi}Fxa{4nr_;>Uq!ACNj{ zg4Yzk2)wEI`@!?;q|PV7>xzFJ++8o@9|5l_-UM$b{wjF(L8&u-Z^}bW@rmF~#dGld zLsI7)@Ver?;O@gR{%Y{5;NTQ7AU1+OXoEO=A#*TM4}q|V;^P#)@vw}HEl z$oP}MtKcU&dYlj5P<#M9`zYyf{59Y;#cu^~Dt#UBE1DE<_9_6e!; zH}IO`JNge`iaazGKNvj!q|})SURV4yaCeK0?*^|b{vPm#;x~e4pOQLX0k0|kAb3;p zpM&S0mO5L&>xyr`Kjp#QD&sTos^T-i8;UOi&psn{y1;9SzX!aj_{YHWy41N7ysr2| z;O?_B{%P>4;xB?X6yNCp%0u=!sdFfJP4TyZHx)kSg`Y!865Ig6E1~0bW)7 zCh(f#cYxOwe-ON(_|L(cif;jTUzF|N?oF5viXQ}?D?Saps`x_in&QjA>xy3j-cWo! zcvJB&g1Zf}{r7`sia!CKEB;6Ds^Vh~qCC_T-ygiL_$2U#;`70qidVqhmt_0bf@g|< z5Ik4>cJQj=_kq_Ge;mB7`19Zm#YexH^3YU#e{lC@+5XAknc}B_=ZY@_uPS~icunye z!0U={0BQ`7_ z@wKe4_y<{E@!MGcYf}F^tgrZEtgrYVSYPosSbw9`-}?~cNAaV<>x$0>Zz}#y@a*eS ze}MHBzn1kCud}}5-(>x}r2eCCdWSzqxtSYPpd{K5(6+lse=XZJ|`dEiyW-vwS* zd=2X>{z2CNrqsWk^%cL5^%Z}D^%egU>)$K&w>b>+U-37AuLs}L(PJw3M#bL&zDeu?yf@cp(z7D*h_$*kc@u;ys7xMM^YYY z56k$2z_TAnJ{`QF_#*J?BQm}l-2G7U_khQ@TTGqf!BT{`BQl1#c++QSj=2%J@6L-Db(Z z4_;UNDe(N~GX5p-rsCt;F#mrc;|~YVekpkl-cbBJ@aj`CegND(E%|leb;WN3&!3U; z_klOT{pnnI{0DgUD~f0S2k@%mZ-Cbo-|HC4LsRi1!Lz2+pABAB{2cJQ;;UI-@he&X z*HZr$)>r&4)>r(8tgm>J^?xJvUtxX4$F)-)>WUu*-cN zir>uozm@u5V|~RRW_`tOD}Fia zEB-OoSNsmv|Gm`z9_uUq3)WZsudJ{5j*}@5*>h6=5b&zv$AZ@tKLfm}_=T+h2dV!) z)>r(KtgrZ8tgraLv;Kce{ok;@;{RZM#dn_qe^C4g@a%c1KL@<3_)_pXc-_&XA3Xmf z=`g<+)xXR5<>2lgl3xm5SNsO>{C{Np2Joih4}jNRlkrc2XaAJ^Pv8y3$4;j_ zR9~0z2Y|abB%cgkS9}3@?q<8{%-KvC>j4@@NBf?Uj%O`{s4G&jEw(J za5q-+KZDm5-);uwA>T&EzZtx#_zdvcwle-S@N7HDSAaJZzXH6vy^Q}jxZ6SUuYuPU z{{eWuqm2I*cvJCLz-v2E{8Eh9E;A_)O~nrd&v%ybv%u?$p9b!Bk?~#NRmJ}WyrK9F z;Mq8-^F{EQ;`f6$6@LOe-&N}T5xlPWm|2tuH(ti?4_;N=|4n$f?%Gg%K6tj9)Tw~i z6kiM8RQ!YB`R-EZHt@RQ-vM`f$oR*=tBU^tyrH-|mim?LDRuS%uPNRJ-c)=Zc)pj^ zIUl^P_#n93TgHC?ysG$T!5fO-3!d#Gb$$w7Q~X)*rsDqu&-ax&d%lhGQ&;>baJQd~ zp9@}9{Cx0+;zQus{!-_9@S5Vcfj1TZH}L!bsq;8^UGYDHy8~tX*yE_bRmBekZzw($ zJbRPWSqNTJyc4{s_+{YvK~m>N@H+Se_}G_ONAU)D_GZ%I_$R@uivN-I6(4;(<)Nwg zzTjCV_1nO!iq8eFEB;Q_SA2l=50?7ZvcBSV)>r(StgrZ^tbd5q{~hZq{u=8mzQ+m3 zkK#vwXNOAt+2B>h&jqh5-pBfiU(Naxr2eN_U-7$HU-2KYzT&@O{lldG-&tSr@o$Ge zD1JD2Q}GkPv$sh7v%ss0_prX=?`M6*Kgs%sOZ~62zT!V*eZ_yx`ilRZ^(RXG-E#Pb z;%^17D?S^%srY%|*;}Rl#jLORwXCoBXIWqIZ?XOnQvYYHuXyoxwfMZXuJ|ZlJbVtT zcwz4a&yJM(lfbLsnWM+a;5EhH1zuNt5WJ!Iwct&~KLhTL^1t{;7XJ5t=MJ7J{v+^Q z@n3^i6@L}HrueRNkT=EO0^U&kc<`p;OTgXHz9Rp~!vD@)1fD7WKJZ-ePk>hy-w0k) z{0HE5#h(FhDE<<7Q}LZoq&&Db+5SVpGsTYu&lNu%ysG$0@S5URfY%kj3A~~Bo#0Ky zzYp$?k?sE_c&7MY!E?oTm`i!6DxQJY6rTZJS9}q8L-B6#rs9`_yLQ?Bo4_;0zY3l! z{xEn|@n^tmioXnASA5(&%0ol(w}3YlKLOko2I3!C_}{s+!865s!E?p02Cpi9D|k)u zd%)|8KMLLepNRJS4%|(qb~1krJXd^=lPC{0#g71QC_Wq9O_BQNg6E3&vA*J0v%ccD zvi?-5e-G;`{wV7!{w(V&{yOVVllps~OnJx^Zv(F>eiC>?@e9D+bg93V^%egR>nr{R z)>r&~)}JBupJaW-UtoR3x1EpqulPaWZl=_q4xTH%2)w3vH|r~YIqT1o`Zuw@;$LNb z#UEyU#h+pQW2OGftgraE1(^Se9}eD7JO_7glltd@=ZX)ozT(%hzT&sB{&7ny> zzee%b!Rz3Qp>xnXsJ~ml_XIx{JbOE}bLA*HuoS$W6JLt>wcu_x@do%!;0AEu{A6Cz8%y;75R0!E^9a!0X`S!Mnj5D*kG4H<$D| z{&V0NxL-cu@gR6V`0n7(fY(+0>)=~d{Qjp>zp{B$??mXl4SYWMj^O8lS5^Ea;Mb`5 zo51Vf?W0KOo8Zlps9xW^@OT_NFWw0F2gknzUYjrDcV9&9Z-R6D6!7d68NV332G05H z2j2wF`Me(7y@Pb}QK4Dx4)A;-ah~UofY-rm6z-k_&rYTI41DZqm{;ID?i0WlgO5dg z4qgSn8@vjhEh7D+!7t-@@aw@p1@2Cxc%J|Fg6H6zpUvRw!8t!Kf;UwBo<1SP`@Zpu zNuT4}!E^9-v}ZARKlskzJ>WI)9Q=Cl2KadJ4d6``{|I&^gp6}%lf*Mrx=c^!QLd=vP1#5cg3;JbtW z0{m5Q_S=`hv$Lr^?33e{P=EWuS?37wIyld_x!~>`(qVtN0K6TXb=H9|2IuyF1iT8q zC)$6f=Of#jgZktoW_q7lLn#c77YYU-2iw*DC&3@XHi0@8=25>!rM(r{d-PJQXkR=Lvog z+F9PuQ}ObCp6AUDksM#%&r|X8ex8b#_w!V|yq_odI<%*}pXXAlHv=#4=Lyd9t-PNn zxc}H9Jj(ldg7dsB@8=25>#Mw=f4LZm97w%%7 zuLtM$m-q7o=hwUPexBeNbjtgADqh~t^L&}N@_wG+IdsbVc`9Ds&r|V-wzjU9QN3ne zgL8hGzWyQ)kARzXt@ys9u&xy^*R|s1x?WE0G3#3Ka$PHaE9$)v+^lQG%XO`Ixvmv2 z*EP6V*NT_xTJdsSgY!Bq*R|s1y6&X>aD2J06))Gd;^n$lyj<7dW?gqty&2|Vxvs%^ zU6kt@+^lPGv#!C-x&}Avx|`Z#)-^cK+j3oln{^G&?Jw6gxLMcWoQHB)yPW>V>>}KJdMw_i2ymyyD}X+r!-NefzTt zeS2T`-8?Vi^?l(9UjV;9ogMVYxs7x4pw2|)5(BJ+Xnzu6#&O?=}@J8YtK|it|#PWfm!J#$X-EGVLwjrmS zct&O6f-{#?Dz39@plijd!J)2!%Fyb{a=$5Xm*2jn(%Dy8(bKoAqo>m8x3C?obgWtD zmiMjh@97%q>TH`aZC0@rNhGM!y{dOrrDI^A;}XAD%Fw_iu6w}mic;xZvwHOpb-9oBhIljy#T*t1dXuS0t_CXe~8ypqR?{m5w_ z$a$SBx&{|_4b15++7~wYNgQeE=`t-f)q2_iDBg;#9ZR*|mrJxnD2g@~M@l_?q@`B0 zehzKmGpMs+kBwALW@MPAXrs~;t+dBbUpae*skX)~adhOeXss!`uxCJ|Asvv?FBMW% z6jR?14(&Q+^l_AiE^&0^sz(r~wzZOO^veKWh1fv+(yoEN)^_4*-|!;R@4H7^jfcqc z8AX;)^`>ma2EJyCt;kl;euuDW(b&jVeLgn6P3t6VT(25I+m)JDOo~?+-&;7c$DMD+ zr1of=WBZvG(W%WXqau^zRmL{p_1bZ1+Dp*%d~&?mvAv^I$mMuh|vg($WSsTi{lz(P9{3F6?MGI*f!w4 zGhs~_X)-5+X>cu$i;y{)Xj(r8(*!h_%*kLfCxgkH3{LDAOmosiC-$qPm1Cl#+l3ah zB#|sKCnH1VWH6bN!7wMw6Ul`+nRu9!<%x`uIhk-WCxa&?1`pSsbsA%*jLtV=**1g`s3l7RNQn zoJ=&Clg05W$(&4d@D)SJoD8P*W^r7E%*jO4`Z1Wy$zYn_29r4%Oy*=TEj5G5oDAk& zbJck?tsD~#bFw^O*MnUjeobFw&IC7F|n4!&Y2nUle^-YkxbkU5!XT0aJp zIT=jmWH6bN!DLPb(^4~-%*kLfCxdC_7z}f=JdrFiClgNQWH6bN!7wMw6Ul`+nRu9! z<%x`uIhk-WCxc;5hQpjJPox;;Wa42?mXkRd4s$Xb=43d`$?#xKv!do?XfP*3gE<)* z%*jwPCyRqQSsbr07>fxGPGKmSlf`ijGA9#F=45faN-`%C9el-5GADy+y;&R=A#*a( zw0;aGb26CB$zU=kgUOr>rln>unUld}P6pG;F&O4#c_LY4P9~hp$zU=kgJDjVCz1QJ^ z76*T_I2e@0XnGlWAE_u4OqbLd(gwEGOf#oR*d4u&&5~ROZOMYyomF%gMeh zhkr#5q;d@hvn60*kprppk%`#?FR7!6M{Y?VZ+f_0mgUMG6hM!rUkb$3>c=(y+ ziF)B@CZ2rAVECEgSe2G1bl_(u9&5~S_?hAGGsEF$hQrSc$AUB*er7oQ%y6tO!`aX5 zfmG(;XQlxB%y9Ub;p}JjKq}YlXQl-EnLUt7AN-A+t2mCik&8-auOZCK@Jbd1_uIMj0#I>Lk(#*Rk<4 z;)4|Z%4IPz+T-1Yc^Uo5iP46w*m&|f!{JYsCnf^i$;1b9lHalNy$Xxh&@ej;4NKS1 zkVQj-IT;!P4d!GhnUlrAoGgxakIczN$2&;oWTWFknUjr@%Xcz0-JnrJd7gUOr>CUdel zG1uZPfjJo!n3Ls+QHD9$crqu;6Dfc>*?2N1!(mRAr{-5;v|&zGhs?=vn3Ls+i2!pl z@nNRQuQ9MW85$;}p~0LC4Wn&nFegL9gfTRjlc8iz76)^(INm)nCmS8_Aeobmj(3sF z$wbq%wK(2Dnmjf-UL~26i6(QhI9?^0lZmG3YH>VOWKJfU=A^~(?$F9K(PT~rlQ|ho z=45eVuEkpdb22J0C(9F~40E#aWKNbRQUG(Z@nlYh!<;Nn&9B60!{J&9Hykj!JjM+BW`hUD2v0iu{d~?#bi0?|J@79p1Otm4NDVzKEK-6zEOH=~4Y*jO1lgE903VASNY1>}6o8dQ zq{z$c0hn3jKx%rx&U}esH;-97(6@Zfnr^;x4&AUMb$l{D6iXeS8H{JjR`jR3Wxb30 z2Iurf>YlolveQN=J8dgvr;ku}`c}%$7@_QpWLe5ryeuC}<&sYZ)47_tm3n7J+f4PQ z%Tm3wqGkD5s?DSwFU!YLWy=?pbcaWnxuos`Vx`N2Td6zVa5QYzRC&`j z5~a(7(UynXMbU~iRS!Eha@ojgEXyWVW4H@dQE#FwK7C8oOT!T_%g0h>`Eqf(zX=y8 z+Z=I_VaGN~QRXQ|#gwoWuMCtNiPtU+){|~QSvpYM7-E~eJnp3>U@$0Hf6)SEC zmnvqCwQ4KwP?suZj-gn{V4_&;*sx-$Muwa#$yPDbeol!m=8yFk=Ku?OPZZ|?;jVJ2 zBU6)QrX`O|Pac_(JTfzRWLENspEs#ydvlK*3U3~wSqMj>eGNyVeGNyVeGNyVJqkyB zyO)O%sI2HJ?y5Pt(y?}(zw4jBajD>wTD(#@>5SQ@&a2E@G}qtJlx}azzl)oUcDl;k z^A^oMb-{@~YS@vm`aL>%(OH#w^Px6>?isFf^1{>R%wAYI?WB{=oVTR1WcHke^NJdJ zRxMjzSw6TX-0swMEbAK>%JY*KE|_y-Wpdl(wrQ@iV9BYK*1c7ioO)t$XVoPg%X+$8 z|C*se72Va@G1TF@{q0u=yVRkIZ`|^WD$7@1RO#+m)zdm!+<`T;BecF!+&r~)Ftnjk zs21f1hFo|5z^dM%ZXK~=bzd(9{M}+Jv(G-)5122qY;X|O7p-&4`+dR&x-PDqJpWSH-Phlx z8+^*z${DyD?TI}dgM`AuSu5Iv=)k7W2 z{Li5Q`ni&S^C|2a=yz?seM4Psv*#>0dZ=Rso~`Iz)3$8Qs-DiHS9Q9!;@QfM!IiG9 z^O9b#M?Z%K=*Zfxfx%UMz2Zs59~W&>q?m(ke#~5(zt!(* zfBRm~x|Xe3;mdXO`WxNy(^b9Qef)dJvSkBZYx!Bvs@^XC-RF$&hW!8k^8jD8xHU81 zmwV>u+&^<}CcuH=S?fRC#<>K=ZIQS0|G4~;(Yb%-+!BB+JZt^O_oZes$^SCE{Ltt; z92!D--p3$7|DP^D*Rz-3c%zT&zj<`-iE}ptaQn9j)H%N2G@iOe{+FHnKQ4do=-fYZ z?p}Zl9WM4AD1PPgxc#;Bw}W6an_QgZjuls+ck10au z6v6({K=}sBZz1f8_7_^Z{D(X%a#FOfcx>Dz$ItM?-zi)^AX~y~{cpp|Z$kM^NZ7_Q zl78WR3i#)Zs(fwRJOtLzAZ{;}ZndAEf7<^ty#DnlzaHg3aso%vPp+5g=T-R$^YUu zV~d)&{tV@_|6}=Qec58Dx%@J`-fSFfOg9Ph)zgP-%y zKYKd7{pJ1(H7dUn<@g7ehk>jb^lAD#r?10zW(b_ej*3rXQrNy z@y#q++O9a4pQbqVipms+c1C#>=I%uO>(v1+&-j2u`QzV9k+)pJk@QoSKRi)>^FJu^ zRbH5o(dDNl%5VB7MLwkrK$oA5@;ZNaY)2J8>-RAj{^0Wbb2opG$8LDs-}WQAkOOg0 tJq=^0x)>sFt`KcsP6ZG3KgM|T;CaWdD@FHW^*{0;l|M4keo}Sre*y9r -#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));