optimized 5G NR LDPC decoder

This commit is contained in:
Sy
2020-07-03 14:21:00 +02:00
parent 559e8fdcd2
commit c8a787d22c
24 changed files with 7492 additions and 48 deletions
@@ -71,7 +71,7 @@ fprintf(fd, "// Process group with 1 CNs \n");
// Process group with 2 CNs
/*
if (lut_numBnInBnGroups[0] > 0)
{
// If elements in group move to next address
@@ -123,7 +123,7 @@ fprintf(fd, "// Process group with 1 CNs \n");
}
// =====================================================================
// Process group with 2 CNs
*/
fprintf(fd, "// Process group with 2 CNs \n");
@@ -4,8 +4,8 @@
#define NB_R 3
void nrLDPC_bnProc_BG1_generator_AVX512(int);
void nrLDPC_bnProc_BG2_generator_AVX512(int);
//void nrLDPC_bnProcPc_BG1_generator_AVX2(int);
//void nrLDPC_bnProcPc_BG2_generator_AVX2(int);
void nrLDPC_bnProcPc_BG1_generator_AVX512(int);
void nrLDPC_bnProcPc_BG2_generator_AVX512(int);
int main()
{
@@ -15,8 +15,8 @@ int main()
nrLDPC_bnProc_BG1_generator_AVX512(R[i]);
nrLDPC_bnProc_BG2_generator_AVX512(R[i]);
// nrLDPC_bnProcPc_BG1_generator_AVX2(R[i]);
// nrLDPC_bnProcPc_BG2_generator_AVX2(R[i]);
nrLDPC_bnProcPc_BG1_generator_AVX512(R[i]);
nrLDPC_bnProcPc_BG2_generator_AVX512(R[i]);
}
@@ -0,0 +1,440 @@
#include <stdint.h>
#include <immintrin.h>
void nrLDPC_bnProc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes, uint16_t Z ) {
__m256i* p_bnProcBuf;
__m256i* p_bnProcBufRes;
__m256i* p_llrRes;
__m256i* p_res;
uint32_t M, i;
// Process group with 2 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [6912];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [6912];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [6912];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [6912];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
// Process group with 3 CNs
// Process group with 4 CNs
M = (2*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [7680];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [7680];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [7296];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [7296];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [7296];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [7296];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
// Process group with 5 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [10752];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [10752];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [8064];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [8064];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [8064];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [8064];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [8064];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
// Process group with 6 CNs
M = (5*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [12672];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [12672];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [8448];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [8448];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[120];
p_llrRes = (__m256i*) &llrRes [8448];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
}
p_res = &p_bnProcBufRes[180];
p_llrRes = (__m256i*) &llrRes [8448];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[180 + i]);
}
p_res = &p_bnProcBufRes[240];
p_llrRes = (__m256i*) &llrRes [8448];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[240 + i]);
}
p_res = &p_bnProcBufRes[300];
p_llrRes = (__m256i*) &llrRes [8448];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[300 + i]);
}
// Process group with 7 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [24192];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [24192];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [10368];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [10368];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [10368];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [10368];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [10368];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [10368];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [10368];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
// Process group with 8 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [26880];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [26880];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [10752];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [10752];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [10752];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [10752];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [10752];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [10752];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [10752];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[84];
p_llrRes = (__m256i*) &llrRes [10752];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
}
// Process group with 9 CNs
// Process group with 10 CNs
// Process group with 11 CNs
// Process group with 12 CNs
// Process group with 13 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [29952];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [29952];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [11136];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [11136];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [11136];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [11136];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [11136];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [11136];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [11136];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[84];
p_llrRes = (__m256i*) &llrRes [11136];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
}
p_res = &p_bnProcBufRes[96];
p_llrRes = (__m256i*) &llrRes [11136];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
}
p_res = &p_bnProcBufRes[108];
p_llrRes = (__m256i*) &llrRes [11136];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
}
p_res = &p_bnProcBufRes[120];
p_llrRes = (__m256i*) &llrRes [11136];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
}
p_res = &p_bnProcBufRes[132];
p_llrRes = (__m256i*) &llrRes [11136];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
}
p_res = &p_bnProcBufRes[144];
p_llrRes = (__m256i*) &llrRes [11136];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
}
// Process group with 14 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [34944];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [34944];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[84];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
}
p_res = &p_bnProcBufRes[96];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
}
p_res = &p_bnProcBufRes[108];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
}
p_res = &p_bnProcBufRes[120];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
}
p_res = &p_bnProcBufRes[132];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
}
p_res = &p_bnProcBufRes[144];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
}
p_res = &p_bnProcBufRes[156];
p_llrRes = (__m256i*) &llrRes [11520];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[156 + i]);
}
// Process group with 15 CNs
// Process group with 16 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [40320];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [40320];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[84];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
}
p_res = &p_bnProcBufRes[96];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
}
p_res = &p_bnProcBufRes[108];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
}
p_res = &p_bnProcBufRes[120];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
}
p_res = &p_bnProcBufRes[132];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
}
p_res = &p_bnProcBufRes[144];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
}
p_res = &p_bnProcBufRes[156];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[156 + i]);
}
p_res = &p_bnProcBufRes[168];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[168 + i]);
}
p_res = &p_bnProcBufRes[180];
p_llrRes = (__m256i*) &llrRes [11904];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[180 + i]);
}
// Process group with 17 CNs
// Process group with 18 CNs
// Process group with 19 CNs
// Process group with 20 CNs
// Process group with 21 CNs
// Process group with 22 CNs
// Process group with <23 CNs
// Process group with 24 CNs
// Process group with 25 CNs
// Process group with 26 CNs
// Process group with 27 CNs
// Process group with 28 CNs
// Process group with 29 CNs
// Process group with 30 CNs
}
@@ -0,0 +1,799 @@
#include <stdint.h>
#include <immintrin.h>
void nrLDPC_bnProc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes, uint16_t Z ) {
__m256i* p_bnProcBuf;
__m256i* p_bnProcBufRes;
__m256i* p_llrRes;
__m256i* p_res;
uint32_t M, i;
// Process group with 2 CNs
// Process group with 3 CNs
// Process group with 4 CNs
// Process group with 5 CNs
M = (2*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [14592];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [14592];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [14592];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [14592];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [14592];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [14592];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[96];
p_llrRes = (__m256i*) &llrRes [14592];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
}
// Process group with 6 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [18432];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [18432];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [15360];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [15360];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [15360];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [15360];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [15360];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [15360];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
// Process group with 7 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [20736];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [20736];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [15744];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [15744];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [15744];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [15744];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [15744];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [15744];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [15744];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
// Process group with 8 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [23424];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [23424];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [16128];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [16128];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [16128];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [16128];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [16128];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [16128];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [16128];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[84];
p_llrRes = (__m256i*) &llrRes [16128];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
}
// Process group with 9 CNs
M = (2*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [26496];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [26496];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [16512];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [16512];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [16512];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [16512];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[96];
p_llrRes = (__m256i*) &llrRes [16512];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
}
p_res = &p_bnProcBufRes[120];
p_llrRes = (__m256i*) &llrRes [16512];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
}
p_res = &p_bnProcBufRes[144];
p_llrRes = (__m256i*) &llrRes [16512];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
}
p_res = &p_bnProcBufRes[168];
p_llrRes = (__m256i*) &llrRes [16512];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[168 + i]);
}
p_res = &p_bnProcBufRes[192];
p_llrRes = (__m256i*) &llrRes [16512];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[192 + i]);
}
// Process group with 10 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [33408];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [33408];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [17280];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [17280];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [17280];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [17280];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [17280];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [17280];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [17280];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[84];
p_llrRes = (__m256i*) &llrRes [17280];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
}
p_res = &p_bnProcBufRes[96];
p_llrRes = (__m256i*) &llrRes [17280];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
}
p_res = &p_bnProcBufRes[108];
p_llrRes = (__m256i*) &llrRes [17280];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
}
// Process group with 11 CNs
// Process group with 12 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [37248];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [37248];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [17664];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [17664];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [17664];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [17664];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [17664];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [17664];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [17664];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[84];
p_llrRes = (__m256i*) &llrRes [17664];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
}
p_res = &p_bnProcBufRes[96];
p_llrRes = (__m256i*) &llrRes [17664];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
}
p_res = &p_bnProcBufRes[108];
p_llrRes = (__m256i*) &llrRes [17664];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
}
p_res = &p_bnProcBufRes[120];
p_llrRes = (__m256i*) &llrRes [17664];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
}
p_res = &p_bnProcBufRes[132];
p_llrRes = (__m256i*) &llrRes [17664];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
}
// Process group with 13 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [41856];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [41856];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [18048];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [18048];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [18048];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [18048];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [18048];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [18048];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [18048];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[84];
p_llrRes = (__m256i*) &llrRes [18048];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
}
p_res = &p_bnProcBufRes[96];
p_llrRes = (__m256i*) &llrRes [18048];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
}
p_res = &p_bnProcBufRes[108];
p_llrRes = (__m256i*) &llrRes [18048];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
}
p_res = &p_bnProcBufRes[120];
p_llrRes = (__m256i*) &llrRes [18048];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
}
p_res = &p_bnProcBufRes[132];
p_llrRes = (__m256i*) &llrRes [18048];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
}
p_res = &p_bnProcBufRes[144];
p_llrRes = (__m256i*) &llrRes [18048];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
}
// Process group with 14 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [46848];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [46848];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[84];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
}
p_res = &p_bnProcBufRes[96];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
}
p_res = &p_bnProcBufRes[108];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
}
p_res = &p_bnProcBufRes[120];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
}
p_res = &p_bnProcBufRes[132];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
}
p_res = &p_bnProcBufRes[144];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
}
p_res = &p_bnProcBufRes[156];
p_llrRes = (__m256i*) &llrRes [18432];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[156 + i]);
}
// Process group with 15 CNs
// Process group with 16 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [52224];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [52224];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[84];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
}
p_res = &p_bnProcBufRes[96];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
}
p_res = &p_bnProcBufRes[108];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
}
p_res = &p_bnProcBufRes[120];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
}
p_res = &p_bnProcBufRes[132];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
}
p_res = &p_bnProcBufRes[144];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
}
p_res = &p_bnProcBufRes[156];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[156 + i]);
}
p_res = &p_bnProcBufRes[168];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[168 + i]);
}
p_res = &p_bnProcBufRes[180];
p_llrRes = (__m256i*) &llrRes [18816];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[180 + i]);
}
// Process group with 17 CNs
// Process group with 18 CNs
// Process group with 19 CNs
// Process group with 20 CNs
// Process group with 21 CNs
// Process group with 22 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [58368];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [58368];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[84];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
}
p_res = &p_bnProcBufRes[96];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
}
p_res = &p_bnProcBufRes[108];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
}
p_res = &p_bnProcBufRes[120];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
}
p_res = &p_bnProcBufRes[132];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
}
p_res = &p_bnProcBufRes[144];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
}
p_res = &p_bnProcBufRes[156];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[156 + i]);
}
p_res = &p_bnProcBufRes[168];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[168 + i]);
}
p_res = &p_bnProcBufRes[180];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[180 + i]);
}
p_res = &p_bnProcBufRes[192];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[192 + i]);
}
p_res = &p_bnProcBufRes[204];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[204 + i]);
}
p_res = &p_bnProcBufRes[216];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[216 + i]);
}
p_res = &p_bnProcBufRes[228];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[228 + i]);
}
p_res = &p_bnProcBufRes[240];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[240 + i]);
}
p_res = &p_bnProcBufRes[252];
p_llrRes = (__m256i*) &llrRes [19200];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[252 + i]);
}
// Process group with <23 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [66816];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [66816];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[84];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[84 + i]);
}
p_res = &p_bnProcBufRes[96];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
}
p_res = &p_bnProcBufRes[108];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
}
p_res = &p_bnProcBufRes[120];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
}
p_res = &p_bnProcBufRes[132];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[132 + i]);
}
p_res = &p_bnProcBufRes[144];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[144 + i]);
}
p_res = &p_bnProcBufRes[156];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[156 + i]);
}
p_res = &p_bnProcBufRes[168];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[168 + i]);
}
p_res = &p_bnProcBufRes[180];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[180 + i]);
}
p_res = &p_bnProcBufRes[192];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[192 + i]);
}
p_res = &p_bnProcBufRes[204];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[204 + i]);
}
p_res = &p_bnProcBufRes[216];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[216 + i]);
}
p_res = &p_bnProcBufRes[228];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[228 + i]);
}
p_res = &p_bnProcBufRes[240];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[240 + i]);
}
p_res = &p_bnProcBufRes[252];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[252 + i]);
}
p_res = &p_bnProcBufRes[264];
p_llrRes = (__m256i*) &llrRes [19584];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[264 + i]);
}
// Process group with 24 CNs
// Process group with 25 CNs
// Process group with 26 CNs
// Process group with 27 CNs
// Process group with 28 CNs
// Process group with 29 CNs
// Process group with 30 CNs
}
@@ -0,0 +1,153 @@
#include <stdint.h>
#include <immintrin.h>
void nrLDPC_bnProc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes, uint16_t Z ) {
__m256i* p_bnProcBuf;
__m256i* p_bnProcBufRes;
__m256i* p_llrRes;
__m256i* p_res;
uint32_t M, i;
// Process group with 2 CNs
M = (3*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [1152];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [1152];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [1152];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [1152];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
// Process group with 3 CNs
M = (5*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [3456];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [3456];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [2304];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [2304];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
p_res = &p_bnProcBufRes[120];
p_llrRes = (__m256i*) &llrRes [2304];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[120 + i]);
}
// Process group with 4 CNs
M = (3*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [9216];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [9216];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [4224];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [4224];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [4224];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[108];
p_llrRes = (__m256i*) &llrRes [4224];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[108 + i]);
}
// Process group with 5 CNs
M = (2*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [13824];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [13824];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [5376];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [5376];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [5376];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[72];
p_llrRes = (__m256i*) &llrRes [5376];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[72 + i]);
}
p_res = &p_bnProcBufRes[96];
p_llrRes = (__m256i*) &llrRes [5376];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[96 + i]);
}
// Process group with 6 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m256i*) &bnProcBuf [17664];
p_bnProcBufRes = (__m256i*) &bnProcBufRes [17664];
p_res = &p_bnProcBufRes[0];
p_llrRes = (__m256i*) &llrRes [6144];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[0 + i]);
}
p_res = &p_bnProcBufRes[12];
p_llrRes = (__m256i*) &llrRes [6144];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[12 + i]);
}
p_res = &p_bnProcBufRes[24];
p_llrRes = (__m256i*) &llrRes [6144];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[24 + i]);
}
p_res = &p_bnProcBufRes[36];
p_llrRes = (__m256i*) &llrRes [6144];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[36 + i]);
}
p_res = &p_bnProcBufRes[48];
p_llrRes = (__m256i*) &llrRes [6144];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[48 + i]);
}
p_res = &p_bnProcBufRes[60];
p_llrRes = (__m256i*) &llrRes [6144];
for (i=0;i<M;i++) {
p_res[i] = _mm256_subs_epi8(p_llrRes[i], p_bnProcBuf[60 + i]);
}
// Process group with 7 CNs
// Process group with 8 CNs
// Process group with 9 CNs
// Process group with 10 CNs
// Process group with 11 CNs
// Process group with 12 CNs
// Process group with 13 CNs
// Process group with 14 CNs
// Process group with 15 CNs
// Process group with 16 CNs
// Process group with 17 CNs
// Process group with 18 CNs
// Process group with 19 CNs
// Process group with 20 CNs
// Process group with 21 CNs
// Process group with 22 CNs
// Process group with <23 CNs
// Process group with 24 CNs
// Process group with 25 CNs
// Process group with 26 CNs
// Process group with 27 CNs
// Process group with 28 CNs
// Process group with 29 CNs
// Process group with 30 CNs
}
@@ -5,20 +5,6 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* llrRes
__m256i* p_llrRes;
uint32_t M ;
// Process group with 1 CNs
M = (42*Z + 31)>>5;
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
p_llrRes = (__m256i*) &llrRes [0];
for (int i=0,j=0;i<M;i++,j+=2) {
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[j + 1]);
ymm0 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
}
// Process group with 2 CNs
// Process group with 3 CNs
// Process group with 4 CNs
@@ -5,20 +5,6 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* llrRes
__m256i* p_llrRes;
uint32_t M ;
// Process group with 1 CNs
M = (9*Z + 31)>>5;
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
p_llrRes = (__m256i*) &llrRes [0];
for (int i=0,j=0;i<M;i++,j+=2) {
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[j + 1]);
ymm0 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
}
// Process group with 2 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m128i*) &bnProcBuf [3456];
@@ -5,20 +5,6 @@ static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* llrRes
__m256i* p_llrRes;
uint32_t M ;
// Process group with 1 CNs
M = (1*Z + 31)>>5;
p_bnProcBuf = (__m128i*) &bnProcBuf [0];
p_llrProcBuf = (__m128i*) &llrProcBuf [0];
p_llrRes = (__m256i*) &llrRes [0];
for (int i=0,j=0;i<M;i++,j+=2) {
ymm0 = _mm256_cvtepi8_epi16(p_bnProcBuf [j]);
ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[j + 1]);
ymm0 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);
ymmRes0 = _mm256_adds_epi16(ymmRes0, ymm0);
ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1);
ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);
p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);
}
// Process group with 2 CNs
M = (3*Z + 31)>>5;
p_bnProcBuf = (__m128i*) &bnProcBuf [384];
@@ -0,0 +1,743 @@
static inline void nrLDPC_bnProcPc_BG1_R13_AVX512(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
__m512i zmm0, zmm1, zmmRes0, zmmRes1;
__m256i* p_bnProcBuf;
__m256i* p_llrProcBuf;
__m512i* p_llrRes;
uint32_t M ;
// Process group with 1 CNs
M = (42*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [0];
p_llrProcBuf = (__m256i*) &llrProcBuf [0];
p_llrRes = (__m512i*) &llrRes [0];
for (int i=0,j=0;i<M;i++,j+=2) {
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[j + 1]);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 2 CNs
// Process group with 3 CNs
// Process group with 4 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [16128];
p_llrProcBuf = (__m256i*) &llrProcBuf [16128];
p_llrRes = (__m512i*) &llrRes [16128];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 5 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [17664];
p_llrProcBuf = (__m256i*) &llrProcBuf [16512];
p_llrRes = (__m512i*) &llrRes [16512];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 6 CNs
M = (2*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [19584];
p_llrProcBuf = (__m256i*) &llrProcBuf [16896];
p_llrRes = (__m512i*) &llrRes [16896];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 7 CNs
M = (4*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [24192];
p_llrProcBuf = (__m256i*) &llrProcBuf [17664];
p_llrRes = (__m512i*) &llrRes [17664];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 8 CNs
M = (3*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [34944];
p_llrProcBuf = (__m256i*) &llrProcBuf [19200];
p_llrRes = (__m512i*) &llrRes [19200];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[216 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[216 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 9 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [44160];
p_llrProcBuf = (__m256i*) &llrProcBuf [20352];
p_llrRes = (__m512i*) &llrRes [20352];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 10 CNs
M = (4*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [47616];
p_llrProcBuf = (__m256i*) &llrProcBuf [20736];
p_llrRes = (__m512i*) &llrRes [20736];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[336 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[336 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[384 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[384 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[432 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[432 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 11 CNs
M = (3*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [62976];
p_llrProcBuf = (__m256i*) &llrProcBuf [22272];
p_llrRes = (__m512i*) &llrRes [22272];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[216 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[216 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[324 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[324 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[360 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[360 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 12 CNs
M = (4*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [75648];
p_llrProcBuf = (__m256i*) &llrProcBuf [23424];
p_llrRes = (__m512i*) &llrRes [23424];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[336 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[336 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[384 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[384 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[432 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[432 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[480 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[480 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[528 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[528 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 13 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [94080];
p_llrProcBuf = (__m256i*) &llrProcBuf [24960];
p_llrRes = (__m512i*) &llrRes [24960];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 14 CNs
// Process group with 15 CNs
// Process group with 16 CNs
// Process group with 17 CNs
// Process group with 18 CNs
// Process group with 19 CNs
// Process group with 20 CNs
// Process group with 21 CNs
// Process group with 22 CNs
// Process group with <23 CNs
// Process group with 24 CNs
// Process group with 25 CNs
// Process group with 26 CNs
// Process group with 27 CNs
// Process group with 28 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [99072];
p_llrProcBuf = (__m256i*) &llrProcBuf [25344];
p_llrRes = (__m512i*) &llrRes [25344];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[204 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[204 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[216 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[216 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[228 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[228 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[264 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[264 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[276 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[276 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[300 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[300 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[312 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[312 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[324 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[324 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 29 CNs
// Process group with 30 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [109824];
p_llrProcBuf = (__m256i*) &llrProcBuf [25728];
p_llrRes = (__m512i*) &llrRes [25728];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[204 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[204 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[216 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[216 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[228 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[228 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[264 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[264 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[276 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[276 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[300 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[300 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[312 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[312 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[324 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[324 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[336 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[336 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[348 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[348 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
}
@@ -0,0 +1,293 @@
static inline void nrLDPC_bnProcPc_BG1_R23_AVX512(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
__m512i zmm0, zmm1, zmmRes0, zmmRes1;
__m256i* p_bnProcBuf;
__m256i* p_llrProcBuf;
__m512i* p_llrRes;
uint32_t M ;
// Process group with 1 CNs
M = (9*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [0];
p_llrProcBuf = (__m256i*) &llrProcBuf [0];
p_llrRes = (__m512i*) &llrRes [0];
for (int i=0,j=0;i<M;i++,j+=2) {
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[j + 1]);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 2 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [3456];
p_llrProcBuf = (__m256i*) &llrProcBuf [3456];
p_llrRes = (__m512i*) &llrRes [3456];
for (int i=0,j=0;i<M;i++,j+=2) {
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[j + 1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 3 CNs
M = (5*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [4224];
p_llrProcBuf = (__m256i*) &llrProcBuf [3840];
p_llrRes = (__m512i*) &llrRes [3840];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 4 CNs
M = (3*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [9984];
p_llrProcBuf = (__m256i*) &llrProcBuf [5760];
p_llrRes = (__m512i*) &llrRes [5760];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 5 CNs
M = (7*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [14592];
p_llrProcBuf = (__m256i*) &llrProcBuf [6912];
p_llrRes = (__m512i*) &llrRes [6912];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[336 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[336 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 6 CNs
M = (8*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [28032];
p_llrProcBuf = (__m256i*) &llrProcBuf [9600];
p_llrRes = (__m512i*) &llrRes [9600];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[288 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[384 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[384 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[480 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[480 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 7 CNs
// Process group with 8 CNs
// Process group with 9 CNs
// Process group with 10 CNs
// Process group with 11 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [46464];
p_llrProcBuf = (__m256i*) &llrProcBuf [12672];
p_llrRes = (__m512i*) &llrRes [12672];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 12 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [50688];
p_llrProcBuf = (__m256i*) &llrProcBuf [13056];
p_llrRes = (__m512i*) &llrRes [13056];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 13 CNs
// Process group with 14 CNs
// Process group with 15 CNs
// Process group with 16 CNs
// Process group with 17 CNs
// Process group with 18 CNs
// Process group with 19 CNs
// Process group with 20 CNs
// Process group with 21 CNs
// Process group with 22 CNs
// Process group with <23 CNs
// Process group with 24 CNs
// Process group with 25 CNs
// Process group with 26 CNs
// Process group with 27 CNs
// Process group with 28 CNs
// Process group with 29 CNs
// Process group with 30 CNs
}
@@ -0,0 +1,147 @@
static inline void nrLDPC_bnProcPc_BG1_R89_AVX512(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
__m512i zmm0, zmm1, zmmRes0, zmmRes1;
__m256i* p_bnProcBuf;
__m256i* p_llrProcBuf;
__m512i* p_llrRes;
uint32_t M ;
// Process group with 1 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [0];
p_llrProcBuf = (__m256i*) &llrProcBuf [0];
p_llrRes = (__m512i*) &llrRes [0];
for (int i=0,j=0;i<M;i++,j+=2) {
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[j + 1]);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 2 CNs
M = (3*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [384];
p_llrProcBuf = (__m256i*) &llrProcBuf [384];
p_llrRes = (__m512i*) &llrRes [384];
for (int i=0,j=0;i<M;i++,j+=2) {
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[j + 1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 3 CNs
M = (21*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [2688];
p_llrProcBuf = (__m256i*) &llrProcBuf [1536];
p_llrRes = (__m512i*) &llrRes [1536];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[504 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[504 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 4 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [26880];
p_llrProcBuf = (__m256i*) &llrProcBuf [9600];
p_llrRes = (__m512i*) &llrRes [9600];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 5 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [28416];
p_llrProcBuf = (__m256i*) &llrProcBuf [9984];
p_llrRes = (__m512i*) &llrRes [9984];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0, zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1, zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0, zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 6 CNs
// Process group with 7 CNs
// Process group with 8 CNs
// Process group with 9 CNs
// Process group with 10 CNs
// Process group with 11 CNs
// Process group with 12 CNs
// Process group with 13 CNs
// Process group with 14 CNs
// Process group with 15 CNs
// Process group with 16 CNs
// Process group with 17 CNs
// Process group with 18 CNs
// Process group with 19 CNs
// Process group with 20 CNs
// Process group with 21 CNs
// Process group with 22 CNs
// Process group with <23 CNs
// Process group with 24 CNs
// Process group with 25 CNs
// Process group with 26 CNs
// Process group with 27 CNs
// Process group with 28 CNs
// Process group with 29 CNs
// Process group with 30 CNs
}
@@ -0,0 +1,441 @@
static inline void nrLDPC_bnProcPc_BG2_R13_AVX512(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
__m512i zmm0,zmm1,zmmRes0,zmmRes1;
__m256i* p_bnProcBuf;
__m256i* p_llrProcBuf;
__m512i* p_llrRes;
uint32_t M ;
// Process group with 1 CNs
M = (18*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [0];
p_llrProcBuf = (__m256i*) &llrProcBuf [0];
p_llrRes = (__m512i*) &llrRes [0];
for (int i=0,j=0;i<M;i++,j+=2) {
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[j+1]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 2 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [6912];
p_llrProcBuf = (__m256i*) &llrProcBuf [6912];
p_llrRes = (__m512i*) &llrRes [6912];
for (int i=0,j=0;i<M;i++,j+=2) {
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[j + 1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 3 CNs
// Process group with 4 CNs
M = (2*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [7680];
p_llrProcBuf = (__m256i*) &llrProcBuf [7296];
p_llrRes = (__m512i*) &llrRes [7296];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 5 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [10752];
p_llrProcBuf = (__m256i*) &llrProcBuf [8064];
p_llrRes = (__m512i*) &llrRes [8064];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 6 CNs
M = (5*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [12672];
p_llrProcBuf = (__m256i*) &llrProcBuf [8448];
p_llrRes = (__m512i*) &llrRes [8448];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[300 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[300 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 7 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [24192];
p_llrProcBuf = (__m256i*) &llrProcBuf [10368];
p_llrRes = (__m512i*) &llrRes [10368];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 8 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [26880];
p_llrProcBuf = (__m256i*) &llrProcBuf [10752];
p_llrRes = (__m512i*) &llrRes [10752];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 9 CNs
// Process group with 10 CNs
// Process group with 11 CNs
// Process group with 12 CNs
// Process group with 13 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [29952];
p_llrProcBuf = (__m256i*) &llrProcBuf [11136];
p_llrRes = (__m512i*) &llrRes [11136];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 14 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [34944];
p_llrProcBuf = (__m256i*) &llrProcBuf [11520];
p_llrRes = (__m512i*) &llrRes [11520];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 15 CNs
// Process group with 16 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [40320];
p_llrProcBuf = (__m256i*) &llrProcBuf [11904];
p_llrRes = (__m512i*) &llrRes [11904];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 17 CNs
// Process group with 18 CNs
// Process group with 19 CNs
// Process group with 20 CNs
// Process group with 21 CNs
// Process group with 22 CNs
// Process group with <23 CNs
// Process group with 24 CNs
// Process group with 25 CNs
// Process group with 26 CNs
// Process group with 27 CNs
// Process group with 28 CNs
// Process group with 29 CNs
// Process group with 30 CNs
}
@@ -0,0 +1,751 @@
static inline void nrLDPC_bnProcPc_BG2_R15_AVX512(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
__m512i zmm0,zmm1,zmmRes0,zmmRes1;
__m256i* p_bnProcBuf;
__m256i* p_llrProcBuf;
__m512i* p_llrRes;
uint32_t M ;
// Process group with 1 CNs
M = (38*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [0];
p_llrProcBuf = (__m256i*) &llrProcBuf [0];
p_llrRes = (__m512i*) &llrRes [0];
for (int i=0,j=0;i<M;i++,j+=2) {
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[j+1]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 2 CNs
// Process group with 3 CNs
// Process group with 4 CNs
// Process group with 5 CNs
M = (2*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [14592];
p_llrProcBuf = (__m256i*) &llrProcBuf [14592];
p_llrRes = (__m512i*) &llrRes [14592];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 6 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [18432];
p_llrProcBuf = (__m256i*) &llrProcBuf [15360];
p_llrRes = (__m512i*) &llrRes [15360];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 7 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [20736];
p_llrProcBuf = (__m256i*) &llrProcBuf [15744];
p_llrRes = (__m512i*) &llrRes [15744];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 8 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [23424];
p_llrProcBuf = (__m256i*) &llrProcBuf [16128];
p_llrRes = (__m512i*) &llrRes [16128];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 9 CNs
M = (2*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [26496];
p_llrProcBuf = (__m256i*) &llrProcBuf [16512];
p_llrRes = (__m512i*) &llrRes [16512];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 10 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [33408];
p_llrProcBuf = (__m256i*) &llrProcBuf [17280];
p_llrRes = (__m512i*) &llrRes [17280];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 11 CNs
// Process group with 12 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [37248];
p_llrProcBuf = (__m256i*) &llrProcBuf [17664];
p_llrRes = (__m512i*) &llrRes [17664];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 13 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [41856];
p_llrProcBuf = (__m256i*) &llrProcBuf [18048];
p_llrRes = (__m512i*) &llrRes [18048];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 14 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [46848];
p_llrProcBuf = (__m256i*) &llrProcBuf [18432];
p_llrRes = (__m512i*) &llrRes [18432];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 15 CNs
// Process group with 16 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [52224];
p_llrProcBuf = (__m256i*) &llrProcBuf [18816];
p_llrRes = (__m512i*) &llrRes [18816];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 17 CNs
// Process group with 18 CNs
// Process group with 19 CNs
// Process group with 20 CNs
// Process group with 21 CNs
// Process group with 22 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [58368];
p_llrProcBuf = (__m256i*) &llrProcBuf [19200];
p_llrRes = (__m512i*) &llrRes [19200];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[204 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[204 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[216 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[216 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[228 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[228 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with <23 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [66816];
p_llrProcBuf = (__m256i*) &llrProcBuf [19584];
p_llrRes = (__m512i*) &llrRes [19584];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[84 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[132 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[144 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[156 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[168 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[180 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[192 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[204 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[204 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[216 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[216 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[228 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[228 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[240 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[252 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[264 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[264 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 24 CNs
// Process group with 25 CNs
// Process group with 26 CNs
// Process group with 27 CNs
// Process group with 28 CNs
// Process group with 29 CNs
// Process group with 30 CNs
}
@@ -0,0 +1,181 @@
static inline void nrLDPC_bnProcPc_BG2_R23_AVX512(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {
__m512i zmm0,zmm1,zmmRes0,zmmRes1;
__m256i* p_bnProcBuf;
__m256i* p_llrProcBuf;
__m512i* p_llrRes;
uint32_t M ;
// Process group with 1 CNs
M = (3*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [0];
p_llrProcBuf = (__m256i*) &llrProcBuf [0];
p_llrRes = (__m512i*) &llrRes [0];
for (int i=0,j=0;i<M;i++,j+=2) {
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[j+1]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 2 CNs
M = (3*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [1152];
p_llrProcBuf = (__m256i*) &llrProcBuf [1152];
p_llrRes = (__m512i*) &llrRes [1152];
for (int i=0,j=0;i<M;i++,j+=2) {
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[j + 1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 3 CNs
M = (5*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [3456];
p_llrProcBuf = (__m256i*) &llrProcBuf [2304];
p_llrRes = (__m512i*) &llrRes [2304];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[120 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 4 CNs
M = (3*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [9216];
p_llrProcBuf = (__m256i*) &llrProcBuf [4224];
p_llrRes = (__m512i*) &llrRes [4224];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[108 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 5 CNs
M = (2*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [13824];
p_llrProcBuf = (__m256i*) &llrProcBuf [5376];
p_llrRes = (__m512i*) &llrRes [5376];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[72 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[96 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 6 CNs
M = (1*Z + 63)>>6;
p_bnProcBuf = (__m256i*) &bnProcBuf [17664];
p_llrProcBuf = (__m256i*) &llrProcBuf [6144];
p_llrRes = (__m512i*) &llrRes [6144];
for (int i=0,j=0;i<M;i++,j+=2) {
zmmRes0 = _mm512_cvtepi8_epi16(p_bnProcBuf [j]);
zmmRes1 = _mm512_cvtepi8_epi16(p_bnProcBuf [j +1]);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[12 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[24 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[36 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[48 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_bnProcBuf[60 + j +1]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_cvtepi8_epi16(p_llrProcBuf[j]);
zmmRes0 = _mm512_adds_epi16(zmmRes0,zmm0);
zmm1 = _mm512_cvtepi8_epi16(p_llrProcBuf[j +1 ]);
zmmRes1 = _mm512_adds_epi16(zmmRes1,zmm1);
zmm0 = _mm512_packs_epi16(zmmRes0,zmmRes1);
p_llrRes[i] = _mm512_permutex_epi64(zmm0, 0xD8);
}
// Process group with 7 CNs
// Process group with 8 CNs
// Process group with 9 CNs
// Process group with 10 CNs
// Process group with 11 CNs
// Process group with 12 CNs
// Process group with 13 CNs
// Process group with 14 CNs
// Process group with 15 CNs
// Process group with 16 CNs
// Process group with 17 CNs
// Process group with 18 CNs
// Process group with 19 CNs
// Process group with 20 CNs
// Process group with 21 CNs
// Process group with 22 CNs
// Process group with <23 CNs
// Process group with 24 CNs
// Process group with 25 CNs
// Process group with 26 CNs
// Process group with 27 CNs
// Process group with 28 CNs
// Process group with 29 CNs
// Process group with 30 CNs
}