diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c index e6ca01d28e..6061c397fb 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c @@ -1,4 +1,3 @@ - /* * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more * contributor license agreements. See the NOTICE file distributed with @@ -35,7 +34,7 @@ /*---------------------------------------------------------------------- -| cn processing files -->AVX512 +| cn processing files -->AVX512 /----------------------------------------------------------------------*/ //BG1------------------------------------------------------------------- @@ -53,7 +52,7 @@ #else /*---------------------------------------------------------------------- -| cn Processing files -->AVX2 +| cn Processing files -->AVX2 /----------------------------------------------------------------------*/ //BG1------------------------------------------------------------------ @@ -68,7 +67,7 @@ #endif /*---------------------------------------------------------------------- -| bn Processing files -->AVX2 +| bn Processing files -->AVX2 /----------------------------------------------------------------------*/ //bnProcPc------------------------------------------------------------- @@ -94,6 +93,9 @@ + + + #define NR_LDPC_ENABLE_PARITY_CHECK #define NR_LDPC_PROFILER_DETAIL @@ -179,7 +181,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #endif if (BG == 1) { - nrLDPC_llr2CnProcBuf_BG1(p_lut, p_llr, p_procBuf, Z); + nrLDPC_llr2CnProcBuf_BG1(p_lut, p_llr, p_procBuf, Z); } else { @@ -217,8 +219,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP case 23: { #ifdef __AVX512BW__ - nrLDPC_cnProc_BG1_R23_AVX512(p_procBuf->cnProcBuf, p_procBuf->cnProcBufRes, Z); - //nrLDPC_cnProc_BG1_R13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + nrLDPC_cnProc_BG1_R23_AVX512(p_procBuf->cnProcBuf, p_procBuf->cnProcBufRes, Z); #else nrLDPC_cnProc_BG1_R23_AVX2(p_procBuf->cnProcBuf, p_procBuf->cnProcBufRes, Z); #endif @@ -236,7 +237,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP } } - } //end if + } else { switch (R) @@ -272,7 +273,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP } } - }//end of else + } #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->cnProc); #endif @@ -315,47 +316,47 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP { case 13: { - nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 23: { - nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 89: { - nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } } - } //end if + } else { switch (R) { case 15: { - nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 13: - + { - nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } - + case 23: - + { - nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } - + } - }//end of else + } #ifdef NR_LDPC_PROFILER_DETAIL @@ -370,9 +371,9 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #ifdef NR_LDPC_PROFILER_DETAIL start_meas(&p_profiler->bnProc); #endif - nrLDPC_bnProc(p_lut, p_procBuf, Z); +// nrLDPC_bnProc(p_lut, p_procBuf, Z); + -/* if (BG==1) { switch (R) @@ -393,7 +394,7 @@ if (BG==1) break; } } - } //end if + } else { switch (R) @@ -404,23 +405,23 @@ if (BG==1) break; } case 13: - + { nrLDPC_bnProc_BG2_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, Z); break; } - + case 23: - + { nrLDPC_bnProc_BG2_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, Z); break; } - + } - }//end of else -*/ + } + #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->bnProc); #endif @@ -500,7 +501,7 @@ if (BG==1) } } - } //end if + } else { switch (R) @@ -536,7 +537,7 @@ if (BG==1) } } - }//end of else + } #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->cnProc); #endif @@ -577,47 +578,47 @@ if (BG==1) { case 13: { - nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 23: { - nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 89: { - nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } } - } //end if + } else { switch (R) { case 15: { - nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } - case 13: - + case 13: + { - nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } - + case 23: - + { - nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } - + } - }//end of else + } #ifdef NR_LDPC_PROFILER_DETAIL @@ -631,8 +632,8 @@ if (BG==1) #ifdef NR_LDPC_PROFILER_DETAIL start_meas(&p_profiler->bnProc); #endif - nrLDPC_bnProc(p_lut, p_procBuf, Z); -/* +// nrLDPC_bnProc(p_lut, p_procBuf, Z); + if (BG==1) { switch (R) @@ -653,7 +654,7 @@ if (BG==1) break; } } - } //end if + } else { switch (R) @@ -664,23 +665,23 @@ if (BG==1) break; } case 13: - + { nrLDPC_bnProc_BG2_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, Z); break; } - + case 23: - + { nrLDPC_bnProc_BG2_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, Z); break; } - + } - }//end of else -*/ + } + @@ -759,7 +760,6 @@ if (BG==1) { #ifdef __AVX512BW__ nrLDPC_cnProc_BG1_R23_AVX512(p_procBuf->cnProcBuf, p_procBuf->cnProcBufRes, Z); - //nrLDPC_cnProc_BG1_R13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); #else nrLDPC_cnProc_BG1_R23_AVX2(p_procBuf->cnProcBuf, p_procBuf->cnProcBufRes, Z); #endif @@ -777,7 +777,7 @@ if (BG==1) } } - } //end if + } else { switch (R) @@ -813,7 +813,7 @@ if (BG==1) } } - }//end of else + } #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->cnProc); #endif @@ -854,47 +854,47 @@ if (BG==1) { case 13: { - nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 23: { - nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 89: { - nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } } - } //end if + } else { switch (R) { case 15: { - nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf, p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 13: - + { - nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } - + case 23: - + { - nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } - + } - }//end of else + } #ifdef NR_LDPC_PROFILER_DETAIL @@ -912,9 +912,9 @@ if (BG==1) start_meas(&p_profiler->bnProc); #endif -nrLDPC_bnProc(p_lut, p_procBuf, Z); +//nrLDPC_bnProc(p_lut, p_procBuf, Z); + -/* if (BG==1) { switch (R) @@ -935,7 +935,7 @@ if (BG==1) break; } } - } //end if + } else { switch (R) @@ -946,23 +946,23 @@ if (BG==1) break; } case 13: - + { nrLDPC_bnProc_BG2_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, Z); break; } - + case 23: - + { nrLDPC_bnProc_BG2_R23_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, Z); break; } - + } } -*/ + #ifdef NR_LDPC_PROFILER_DETAIL @@ -1053,3 +1053,4 @@ if (BG==1) + diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h index f2373c6341..9053b24117 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h @@ -1,4 +1,3 @@ - /* * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more * contributor license agreements. See the NOTICE file distributed with @@ -22,7 +21,7 @@ /*!\file nrLDPC_mPass.h * \brief Defines the functions for message passing - * + * */ #ifndef __NR_LDPC_MPASS__H__ #define __NR_LDPC_MPASS__H__ @@ -42,7 +41,7 @@ \param Z Lifting size \param cshift Circular shift */ -//more faster memcpy by using "rep movsb", which on modern processors is highly optimized +//more faster memcpy by using "rep movsb", which on modern processors is highly optimized void *memcpy1(void *dst, const void *src, size_t n) { @@ -177,8 +176,7 @@ static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, t_ bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX; -// #pragma omp simd -// #pragma omp parallel for schedule(dynamic) + for (j=0; j<3; j++) { @@ -1026,7 +1024,7 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf // CN group with 3 BNs bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX; -// #pragma omp simd + for (j=0;j<2; j++) { p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[0] + j*bitOffsetInGroup]; @@ -1037,11 +1035,11 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf // CN group with 4 BNs bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX; - // #pragma omp simd + for (j=0; j<3; j++) { p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[1] + j*bitOffsetInGroup]; - // #pragma omp simd + for (i=0; i #include #include "../../nrLDPCdecoder_defs.h" @@ -22,8 +23,8 @@ void nrLDPC_bnProcPc_BG1_generator_AVX2(int R) // fprintf(fd,"#include \n"); // fprintf(fd,"#include \n"); - - fprintf(fd,"static inline void nrLDPC_bnProcPc_BG1_R%s_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {\n",ratestr[R]); + + fprintf(fd,"static inline void nrLDPC_bnProcPc_BG1_R%s_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {\n",ratestr[R]); const uint8_t* lut_numBnInBnGroups; const uint32_t* lut_startAddrBnGroups; const uint16_t* lut_startAddrBnGroupsLlr; @@ -59,72 +60,67 @@ void nrLDPC_bnProcPc_BG1_generator_AVX2(int R) fprintf(fd," __m256i ymm0, ymm1, ymmRes0, ymmRes1; \n"); - + fprintf(fd," __m128i* p_bnProcBuf; \n"); - fprintf(fd," __m256i* p_bnProcBufRes; \n"); fprintf(fd," __m128i* p_llrProcBuf;\n"); - fprintf(fd," __m256i* p_llrProcBuf256; \n"); fprintf(fd," __m256i* p_llrRes; \n"); fprintf(fd," uint32_t M ;\n"); - - - - - // ===================================================================== - // Process group with 1 CN - // Already done in bnProcBufPc - - // ===================================================================== - fprintf(fd, "// Process group with 1 CNs \n"); - // if (lut_numBnInBnGroups[1] > 0) - // { + + // Process group with 2 CNs + + if (lut_numBnInBnGroups[0] > 0) + { // If elements in group move to next address -// idxBnGroup++; + // idxBnGroup++; // Number of groups of 32 BNs for parallel processing - fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[26] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[0] ); - fprintf(fd," p_bnProcBuf = (__m128i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_llrProcBuf = (__m128i*) &llrProcBuf [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - fprintf(fd," p_llrProcBuf256 = (__m256i*) &llrProcBuf [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Set the offset to each CN within a group in terms of 16 Byte + cnOffsetInGroup = (lut_numBnInBnGroups[0]*NR_LDPC_ZMAX)>>4; + // Set pointers to start of group 2 + fprintf(fd," p_bnProcBuf = (__m128i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + fprintf(fd," p_llrProcBuf = (__m128i*) &llrProcBuf [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (int i=0,j=0;i>5 ); - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 8 CNs - + fprintf(fd, "// Process group with 8 CNs \n"); // Process group with 8 CNs @@ -519,14 +515,14 @@ fprintf(fd, "// Process group with 8 CNs \n"); // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] //fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 ); - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 9 CNs - + fprintf(fd, "// Process group with 9 CNs \n"); // Process group with 9 CNs @@ -575,15 +571,15 @@ fprintf(fd, "// Process group with 9 CNs \n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] //fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 ); - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 10 CNs - + fprintf(fd, "// Process group with 10 CNs \n"); // Process group with 10 CNs @@ -631,15 +627,15 @@ fprintf(fd, "// Process group with 10 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== - + fprintf(fd, "// Process group with 11 CNs \n"); @@ -689,8 +685,8 @@ fprintf(fd, "// Process group with 11 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== @@ -744,8 +740,8 @@ fprintf(fd, "// Process group with 12 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -800,8 +796,8 @@ fprintf(fd, "// Process group with 13 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -857,15 +853,15 @@ fprintf(fd, "// Process group with 14 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 5 CNs - + fprintf(fd, "// Process group with 15 CNs \n"); // Process group with 5 CNs @@ -913,8 +909,8 @@ fprintf(fd, "// Process group with 15 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -922,7 +918,7 @@ fprintf(fd, "// Process group with 15 CNs \n"); // ===================================================================== // Process group with 6 CNs - + fprintf(fd, "// Process group with 16 CNs \n"); // Process group with 6 CNs @@ -970,15 +966,15 @@ fprintf(fd, "// Process group with 16 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 17 CNs - + fprintf(fd, "// Process group with 17 CNs \n"); // Process group with 17 CNs @@ -1026,15 +1022,15 @@ fprintf(fd, "// Process group with 17 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 18 CNs - + fprintf(fd, "// Process group with 18 CNs \n"); // Process group with 8 CNs @@ -1082,14 +1078,14 @@ fprintf(fd, "// Process group with 18 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 9 CNs - + fprintf(fd, "// Process group with 19 CNs \n"); // Process group with 9 CNs @@ -1137,15 +1133,15 @@ fprintf(fd, "// Process group with 19 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 20 CNs - + fprintf(fd, "// Process group with 20 CNs \n"); // Process group with 20 CNs @@ -1193,8 +1189,8 @@ fprintf(fd, "// Process group with 20 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -1203,7 +1199,7 @@ fprintf(fd, "// Process group with 20 CNs \n"); // ===================================================================== - + fprintf(fd, "// Process group with 21 CNs \n"); @@ -1253,8 +1249,8 @@ fprintf(fd, "// Process group with 21 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== @@ -1308,8 +1304,8 @@ fprintf(fd, "// Process group with 22 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -1364,8 +1360,8 @@ fprintf(fd, "// Process group with <23 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -1421,15 +1417,15 @@ fprintf(fd, "// Process group with 24 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 5 CNs - + fprintf(fd, "// Process group with 25 CNs \n"); // Process group with 5 CNs @@ -1477,8 +1473,8 @@ fprintf(fd, "// Process group with 25 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -1486,7 +1482,7 @@ fprintf(fd, "// Process group with 25 CNs \n"); // ===================================================================== // Process group with 6 CNs - + fprintf(fd, "// Process group with 26 CNs \n"); // Process group with 6 CNs @@ -1534,15 +1530,15 @@ fprintf(fd, "// Process group with 26 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 17 CNs - + fprintf(fd, "// Process group with 27 CNs \n"); // Process group with 17 CNs @@ -1590,15 +1586,15 @@ fprintf(fd, "// Process group with 27 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 18 CNs - + fprintf(fd, "// Process group with 28 CNs \n"); // Process group with 8 CNs @@ -1646,14 +1642,14 @@ fprintf(fd, "// Process group with 28 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 9 CNs - + fprintf(fd, "// Process group with 29 CNs \n"); // Process group with 9 CNs @@ -1701,15 +1697,15 @@ fprintf(fd, "// Process group with 29 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 20 CNs - + fprintf(fd, "// Process group with 30 CNs \n"); // Process group with 20 CNs @@ -1757,8 +1753,8 @@ fprintf(fd, "// Process group with 30 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -1769,3 +1765,5 @@ fprintf(fd, "// Process group with 30 CNs \n"); + + diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG2_avx2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG2_avx2.c index fbb7dde5e0..a6662ee331 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG2_avx2.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG2_avx2.c @@ -1,5 +1,7 @@ + + #include #include #include "../../nrLDPCdecoder_defs.h" @@ -22,8 +24,8 @@ void nrLDPC_bnProcPc_BG2_generator_AVX2(int R) // fprintf(fd,"#include \n"); //fprintf(fd,"#include \n"); - - fprintf(fd,"static inline void nrLDPC_bnProcPc_BG2_R%s_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {\n",ratestr[R]); + + fprintf(fd,"static inline void nrLDPC_bnProcPc_BG2_R%s_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) {\n",ratestr[R]); const uint8_t* lut_numBnInBnGroups; const uint32_t* lut_startAddrBnGroups; const uint16_t* lut_startAddrBnGroupsLlr; @@ -60,72 +62,67 @@ void nrLDPC_bnProcPc_BG2_generator_AVX2(int R) fprintf(fd," __m256i ymm0, ymm1, ymmRes0, ymmRes1; \n"); - + fprintf(fd," __m128i* p_bnProcBuf; \n"); - fprintf(fd," __m256i* p_bnProcBufRes; \n"); fprintf(fd," __m128i* p_llrProcBuf;\n"); - fprintf(fd," __m256i* p_llrProcBuf256; \n"); fprintf(fd," __m256i* p_llrRes; \n"); fprintf(fd," uint32_t M ;\n"); - - - - - // ===================================================================== - // Process group with 1 CN - // Already done in bnProcBufPc - - // ===================================================================== - fprintf(fd, "// Process group with 1 CNs \n"); - // if (lut_numBnInBnGroups[1] > 0) - // { + + // Process group with 2 CNs + + if (lut_numBnInBnGroups[0] > 0) + { // If elements in group move to next address -// idxBnGroup++; + // idxBnGroup++; // Number of groups of 32 BNs for parallel processing - fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[26] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[0] ); - fprintf(fd," p_bnProcBuf = (__m128i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_llrProcBuf = (__m128i*) &llrProcBuf [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - fprintf(fd," p_llrProcBuf256 = (__m256i*) &llrProcBuf [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Set the offset to each CN within a group in terms of 16 Byte + cnOffsetInGroup = (lut_numBnInBnGroups[0]*NR_LDPC_ZMAX)>>4; + // Set pointers to start of group 2 + fprintf(fd," p_bnProcBuf = (__m128i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + fprintf(fd," p_llrProcBuf = (__m128i*) &llrProcBuf [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (int i=0,j=0;i>5 ); - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 8 CNs - + fprintf(fd, "// Process group with 8 CNs \n"); // Process group with 8 CNs @@ -520,14 +517,14 @@ fprintf(fd, "// Process group with 8 CNs \n"); // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] //fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 ); - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 9 CNs - + fprintf(fd, "// Process group with 9 CNs \n"); // Process group with 9 CNs @@ -576,15 +573,15 @@ fprintf(fd, "// Process group with 9 CNs \n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] //fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 ); - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 10 CNs - + fprintf(fd, "// Process group with 10 CNs \n"); // Process group with 10 CNs @@ -632,15 +629,15 @@ fprintf(fd, "// Process group with 10 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== - + fprintf(fd, "// Process group with 11 CNs \n"); @@ -690,8 +687,8 @@ fprintf(fd, "// Process group with 11 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== @@ -745,8 +742,8 @@ fprintf(fd, "// Process group with 12 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -801,8 +798,8 @@ fprintf(fd, "// Process group with 13 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -858,15 +855,15 @@ fprintf(fd, "// Process group with 14 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 5 CNs - + fprintf(fd, "// Process group with 15 CNs \n"); // Process group with 5 CNs @@ -914,8 +911,8 @@ fprintf(fd, "// Process group with 15 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -923,7 +920,7 @@ fprintf(fd, "// Process group with 15 CNs \n"); // ===================================================================== // Process group with 6 CNs - + fprintf(fd, "// Process group with 16 CNs \n"); // Process group with 6 CNs @@ -971,15 +968,15 @@ fprintf(fd, "// Process group with 16 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 17 CNs - + fprintf(fd, "// Process group with 17 CNs \n"); // Process group with 17 CNs @@ -1027,15 +1024,15 @@ fprintf(fd, "// Process group with 17 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 18 CNs - + fprintf(fd, "// Process group with 18 CNs \n"); // Process group with 8 CNs @@ -1083,14 +1080,14 @@ fprintf(fd, "// Process group with 18 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 9 CNs - + fprintf(fd, "// Process group with 19 CNs \n"); // Process group with 9 CNs @@ -1138,15 +1135,15 @@ fprintf(fd, "// Process group with 19 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 20 CNs - + fprintf(fd, "// Process group with 20 CNs \n"); // Process group with 20 CNs @@ -1194,8 +1191,8 @@ fprintf(fd, "// Process group with 20 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -1204,7 +1201,7 @@ fprintf(fd, "// Process group with 20 CNs \n"); // ===================================================================== - + fprintf(fd, "// Process group with 21 CNs \n"); @@ -1254,8 +1251,8 @@ fprintf(fd, "// Process group with 21 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== @@ -1309,8 +1306,8 @@ fprintf(fd, "// Process group with 22 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -1318,7 +1315,7 @@ fprintf(fd, "// Process group with 22 CNs \n"); // Process group with 13 CNs -fprintf(fd, "// Process group with 23 CNs \n"); +fprintf(fd, "// Process group with <23 CNs \n"); // Process group with 3 CNs @@ -1365,8 +1362,8 @@ fprintf(fd, "// Process group with 23 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -1422,15 +1419,15 @@ fprintf(fd, "// Process group with 24 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 5 CNs - + fprintf(fd, "// Process group with 25 CNs \n"); // Process group with 5 CNs @@ -1478,8 +1475,8 @@ fprintf(fd, "// Process group with 25 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -1487,7 +1484,7 @@ fprintf(fd, "// Process group with 25 CNs \n"); // ===================================================================== // Process group with 6 CNs - + fprintf(fd, "// Process group with 26 CNs \n"); // Process group with 6 CNs @@ -1535,15 +1532,15 @@ fprintf(fd, "// Process group with 26 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 17 CNs - + fprintf(fd, "// Process group with 27 CNs \n"); // Process group with 17 CNs @@ -1591,15 +1588,15 @@ fprintf(fd, "// Process group with 27 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 18 CNs - + fprintf(fd, "// Process group with 28 CNs \n"); // Process group with 8 CNs @@ -1647,14 +1644,14 @@ fprintf(fd, "// Process group with 28 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 9 CNs - + fprintf(fd, "// Process group with 29 CNs \n"); // Process group with 9 CNs @@ -1702,15 +1699,15 @@ fprintf(fd, "// Process group with 29 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } // ===================================================================== // Process group with 20 CNs - + fprintf(fd, "// Process group with 30 CNs \n"); // Process group with 20 CNs @@ -1758,8 +1755,8 @@ fprintf(fd, "// Process group with 30 CNs \n"); fprintf(fd," ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1);\n"); // ymm0 = [ymmRes1[255:128] ymmRes0[255:128] ymmRes1[127:0] ymmRes0[127:0]] // p_llrRes = [ymmRes1[255:128] ymmRes1[127:0] ymmRes0[255:128] ymmRes0[127:0]] - fprintf(fd," *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); + fprintf(fd,"}\n"); } @@ -1770,3 +1767,8 @@ fprintf(fd, "// Process group with 30 CNs \n"); + + + + + diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_avx2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_avx2.c index 4cb44cc0bb..96dc885766 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_avx2.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_avx2.c @@ -1,4 +1,5 @@ + #include #include #include "../../nrLDPCdecoder_defs.h" @@ -25,9 +26,9 @@ void nrLDPC_bnProc_BG1_generator_AVX2(int R) //fprintf(fd,"#include \n"); //fprintf(fd,"#include \n"); - + fprintf(fd,"static inline void nrLDPC_bnProc_BG1_R%s_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes, uint16_t Z ) {\n", ratestr[R]); - + const uint8_t* lut_numBnInBnGroups; const uint32_t* lut_startAddrBnGroups; const uint16_t* lut_startAddrBnGroupsLlr; @@ -63,7 +64,7 @@ void nrLDPC_bnProc_BG1_generator_AVX2(int R) uint8_t idxBnGroup = 0; - + fprintf(fd," __m256i* p_bnProcBuf; \n"); fprintf(fd," __m256i* p_bnProcBufRes; \n"); fprintf(fd," __m256i* p_llrRes; \n"); @@ -78,6 +79,9 @@ void nrLDPC_bnProc_BG1_generator_AVX2(int R) // ===================================================================== + + // ===================================================================== + fprintf(fd, "// Process group with 2 CNs \n"); if (lut_numBnInBnGroups[1] > 0) @@ -87,15 +91,15 @@ fprintf(fd, "// Process group with 2 CNs \n"); // Number of groups of 32 BNs or parallel processing fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[1] ); - + // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[1]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<2; k++) { @@ -104,16 +108,14 @@ fprintf(fd, "// Process group with 2 CNs \n"); // Loop over BNs fprintf(fd," for (i=0;i 0) { @@ -175,8 +175,8 @@ fprintf(fd, "// Process group with 4 CNs \n"); // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + for (k=0; k<4; k++) { fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); @@ -184,9 +184,7 @@ fprintf(fd, "// Process group with 4 CNs \n"); // Loop over BNs fprintf(fd," for (i=0;i 0) @@ -450,8 +436,8 @@ fprintf(fd, "// Process group with 11 CNs \n"); // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<11; k++) { @@ -460,12 +446,10 @@ fprintf(fd, "// Process group with 11 CNs \n"); // Loop over BNs fprintf(fd," for (i=0;i 0) { @@ -650,8 +626,8 @@ fprintf(fd, "// Process group with 16 CNs \n"); // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<16; k++) { @@ -660,19 +636,17 @@ fprintf(fd, "// Process group with 16 CNs \n"); // Loop over BNs fprintf(fd," for (i=0;i 0) { @@ -853,8 +819,8 @@ fprintf(fd, "// Process group with 21 CNs \n"); // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<21; k++) { @@ -863,12 +829,10 @@ fprintf(fd, "// Process group with 21 CNs \n"); // Loop over BNs fprintf(fd," for (i=0;i 0) { @@ -1053,8 +1010,8 @@ fprintf(fd, "// Process group with 26 CNs \n"); // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<26; k++) { @@ -1063,19 +1020,17 @@ fprintf(fd, "// Process group with 26 CNs \n"); // Loop over BNs fprintf(fd," for (i=0;i -#include -#include "../../nrLDPCdecoder_defs.h" -#include "../../nrLDPC_types.h" -#include "../../nrLDPC_bnProc.h" -#include "../../nrLDPC_cnProc.h" -#include "../../nrLDPC_init.h" - -void nrLDPC_bnProc_BG1_generator_AVX2(uint16_t Z,int R) -{ - const char *ratestr[3]={"13","23","89"}; - - if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();} - - - // system("mkdir -p ../ldpc_gen_files"); - - char fname[50]; - sprintf(fname,"../ldpc_gen_files/bnProc/nrLDPC_bnProc_BG1_Z%d_R%s_AVX2.c",Z,ratestr[R]); - FILE *fd=fopen(fname,"w"); - if (fd == NULL) {printf("Cannot create \n");abort();} - - fprintf(fd,"#include \n"); - fprintf(fd,"#include \n"); - - - fprintf(fd,"void nrLDPC_bnProc_BG1_Z%d_R%s_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes ) {\n",Z, ratestr[R]); - const uint8_t* lut_numBnInBnGroups; - const uint32_t* lut_startAddrBnGroups; - const uint16_t* lut_startAddrBnGroupsLlr; - if (R==0) { - - - lut_numBnInBnGroups = lut_numBnInBnGroups_BG1_R13; - lut_startAddrBnGroups = lut_startAddrBnGroups_BG1_R13; - lut_startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG1_R13; - - } - else if (R==1){ - - lut_numBnInBnGroups = lut_numBnInBnGroups_BG1_R23; - lut_startAddrBnGroups = lut_startAddrBnGroups_BG1_R23; - lut_startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG1_R23; - } - else if (R==2) { - - lut_numBnInBnGroups = lut_numBnInBnGroups_BG1_R89; - lut_startAddrBnGroups = lut_startAddrBnGroups_BG1_R89; - lut_startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG1_R89; - } - else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();} - - - uint32_t M; - //uint32_t M32rem; - // uint32_t i; - uint32_t k; - // Offset to each bit within a group in terms of 32 Byte - uint32_t cnOffsetInGroup; - uint8_t idxBnGroup = 0; - - - - fprintf(fd," __m256i* p_bnProcBuf; \n"); - fprintf(fd," __m256i* p_bnProcBufRes; \n"); - fprintf(fd," __m256i* p_llrRes; \n"); - fprintf(fd," __m256i* p_res; \n"); - - - -// ===================================================================== - // Process group with 1 CN - // Already done in bnProcBufPc - - // ===================================================================== - -fprintf(fd, "// Process group with 2 CNs \n"); - - if (lut_numBnInBnGroups[1] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[1]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[1]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<2; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - - - - } - - // ===================================================================== - - -fprintf(fd, "// Process group with 3 CNs \n"); - - - - if (lut_numBnInBnGroups[2] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[2]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[2]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - for (k=0; k<3; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - } - } - - - - // ===================================================================== - - -fprintf(fd, "// Process group with 4 CNs \n"); - - - - if (lut_numBnInBnGroups[3] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[3]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[3]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - for (k=0; k<4; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - } - } - - - // ===================================================================== - - - fprintf(fd, "// Process group with 5 CNs \n"); - - - - if (lut_numBnInBnGroups[4] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[4]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[4]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<5; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - - // ===================================================================== - - -fprintf(fd, "// Process group with 6 CNs \n"); - - // Process group with 6 CNs - - if (lut_numBnInBnGroups[5] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[5]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[5]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<6; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - // ===================================================================== - - -fprintf(fd, "// Process group with 7 CNs \n"); - - // Process group with 7 CNs - - if (lut_numBnInBnGroups[6] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[6]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[6]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<7; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - // ===================================================================== - - -fprintf(fd, "// Process group with 8 CNs \n"); - - // Process group with 8 CNs - - if (lut_numBnInBnGroups[7] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[7]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[7]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<8; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - // ===================================================================== - - -fprintf(fd, "// Process group with 9 CNs \n"); - - // Process group with 9 CNs - - if (lut_numBnInBnGroups[8] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[8]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[8]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<9; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - // ===================================================================== - -fprintf(fd, "// Process group with 10 CNs \n"); - - // Process group with 10 CNs - - if (lut_numBnInBnGroups[9] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[9]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[9]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<10; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - - // ===================================================================== - -fprintf(fd, "// Process group with 11 CNs \n"); - - if (lut_numBnInBnGroups[10] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[10]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[10]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<11; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - // ===================================================================== - - - -fprintf(fd, "// Process group with 12 CNs \n"); - - - if (lut_numBnInBnGroups[11] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[11]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[11]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<12; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - // ===================================================================== - - - -fprintf(fd, "// Process group with 13 CNs \n"); - - - - if (lut_numBnInBnGroups[12] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[12]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[12]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<1; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - - // ===================================================================== - - -fprintf(fd, "// Process group with 14 CNs \n"); - - - - if (lut_numBnInBnGroups[13] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[13]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[13]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<14; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - // ===================================================================== - - -fprintf(fd, "// Process group with 15 CNs \n"); - - - - if (lut_numBnInBnGroups[14] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[14]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[14]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<15; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - - // ===================================================================== - - -fprintf(fd, "// Process group with 16 CNs \n"); - - - - if (lut_numBnInBnGroups[15] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[15]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[15]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<16; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - // ===================================================================== - // Process group with 17 CNs - -fprintf(fd, "// Process group with 17 CNs \n"); - - // Process group with 17 CNs - - if (lut_numBnInBnGroups[16] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[16]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[16]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<17; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - // ===================================================================== - - -fprintf(fd, "// Process group with 18 CNs \n"); - - // Process group with 8 CNs - - if (lut_numBnInBnGroups[17] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[17]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[17]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<18; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - // ===================================================================== - - -fprintf(fd, "// Process group with 19 CNs \n"); - - - - if (lut_numBnInBnGroups[18] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[18]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[18]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<19; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - // ===================================================================== - - -fprintf(fd, "// Process group with 20 CNs \n"); - - - - if (lut_numBnInBnGroups[19] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[19]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[19]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<20; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - - - - // ===================================================================== - -fprintf(fd, "// Process group with 21 CNs \n"); - - - - - - if (lut_numBnInBnGroups[20] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[20]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[20]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<21; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - // ===================================================================== - - - -fprintf(fd, "// Process group with 22 CNs \n"); - - - if (lut_numBnInBnGroups[21] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[21]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[21]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<22; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - // ===================================================================== - - - -fprintf(fd, "// Process group with <23 CNs \n"); - - - - if (lut_numBnInBnGroups[22] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[22]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[22]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<23; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - - // ===================================================================== - - -fprintf(fd, "// Process group with 24 CNs \n"); - - // Process group with 4 CNs - - if (lut_numBnInBnGroups[23] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[23]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[23]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<24; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - // ===================================================================== - - -fprintf(fd, "// Process group with 25 CNs \n"); - - - - if (lut_numBnInBnGroups[24] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[24]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[24]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<25; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - - // ===================================================================== - - -fprintf(fd, "// Process group with 26 CNs \n"); - - - - if (lut_numBnInBnGroups[25] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[25]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[25]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<26; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - // ===================================================================== - - -fprintf(fd, "// Process group with 27 CNs \n"); - - // Process group with 17 CNs - - if (lut_numBnInBnGroups[26] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[26]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[26]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<27; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - // ===================================================================== - - -fprintf(fd, "// Process group with 28 CNs \n"); - - // Process group with 8 CNs - - if (lut_numBnInBnGroups[27] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[27]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[27]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<28; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - // ===================================================================== - -fprintf(fd, "// Process group with 29 CNs \n"); - - // Process group with 9 CNs - - if (lut_numBnInBnGroups[28] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[28]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[28]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<29; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - - // ===================================================================== - -fprintf(fd, "// Process group with 30 CNs \n"); - - // Process group with 20 CNs - - if (lut_numBnInBnGroups[29] > 0) - { - // If elements in group move to next address - idxBnGroup++; - - // Number of groups of 32 BNs for parallel processing - M = (lut_numBnInBnGroups[29]*Z + 31)>>5; - - // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[29]*NR_LDPC_ZMAX)>>5; - - // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - - // Loop over CNs - for (k=0; k<30; k++) - { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - - // Loop over BNs - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); - - fprintf(fd,"}\n"); - - } - } - - fprintf(fd,"}\n"); - fclose(fd); -}//end of the function nrLDPC_bnProc_BG1 - - - - diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_avx2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_avx2.c index 670bb4d13e..617dc54520 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_avx2.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_avx2.c @@ -1,10 +1,13 @@ + + #include #include #include "../../nrLDPCdecoder_defs.h" #include "../../nrLDPC_types.h" -#include "../../nrLDPC_bnProc.h" -#include "../../nrLDPC_cnProc.h" -#include "../../nrLDPC_init.h" +//#include "../../nrLDPC_bnProc.h" +//#include "../../nrLDPC_cnProc.h" +//#include "../../nrLDPC_init.h" + void nrLDPC_bnProc_BG2_generator_AVX2(int R) { @@ -16,13 +19,13 @@ void nrLDPC_bnProc_BG2_generator_AVX2(int R) // system("mkdir -p ../ldpc_gen_files"); char fname[50]; - sprintf(fname,"../ldpc_gen_files/bnProc/nrLDPC_bnProc_BG2_R%s_AVX2.h",ratestr[R]); + sprintf(fname,"../ldpc_gen_files/bnProc/nrLDPC_bnProc_BG2_R%s_AVX2.c",ratestr[R]); FILE *fd=fopen(fname,"w"); if (fd == NULL) {printf("Cannot create \n");abort();} fprintf(fd,"#include \n"); fprintf(fd,"#include \n"); - + fprintf(fd,"void nrLDPC_bnProc_BG2_R%s_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes, uint16_t Z ) {\n",ratestr[R]); const uint8_t* lut_numBnInBnGroups; const uint32_t* lut_startAddrBnGroups; @@ -59,12 +62,12 @@ void nrLDPC_bnProc_BG2_generator_AVX2(int R) uint8_t idxBnGroup = 0; - + fprintf(fd," __m256i* p_bnProcBuf; \n"); fprintf(fd," __m256i* p_bnProcBufRes; \n"); fprintf(fd," __m256i* p_llrRes; \n"); fprintf(fd," __m256i* p_res; \n"); - fprintf(fd," uint32_t M, i;\n"); + fprintf(fd," uint32_t M, i; \n"); @@ -74,6 +77,9 @@ void nrLDPC_bnProc_BG2_generator_AVX2(int R) // ===================================================================== + + // ===================================================================== + fprintf(fd, "// Process group with 2 CNs \n"); if (lut_numBnInBnGroups[1] > 0) @@ -81,16 +87,17 @@ fprintf(fd, "// Process group with 2 CNs \n"); // If elements in group move to next address idxBnGroup++; - // Number of groups of 32 BNs for parallel processing - fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[1] ); + // Number of groups of 32 BNs or parallel processing + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[1] ); + // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[1]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<2; k++) { @@ -98,18 +105,15 @@ fprintf(fd, "// Process group with 2 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[1] ); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[2] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[2] ); // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[2]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + for (k=0; k<3; k++) { fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[2] ); - fprintf(fd," *p_res = _mm256_subs_epi8(*p_llrRes, p_bnProcBuf[%d + i]);\n",k*cnOffsetInGroup); - fprintf(fd," p_res++;\n"); - fprintf(fd," p_llrRes++;\n"); + fprintf(fd," for (i=0;i 0) { @@ -165,26 +166,23 @@ fprintf(fd, "// Process group with 4 CNs \n"); idxBnGroup++; // Number of groups of 32 BNs for parallel processing - fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[3] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[3] ); // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[3]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + for (k=0; k<4; k++) { fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[4] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[4] ); // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[4]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<5; k++) { @@ -220,22 +218,19 @@ fprintf(fd, "// Process group with 4 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[5] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[5] ); // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[5]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<6; k++) { @@ -262,21 +257,18 @@ fprintf(fd, "// Process group with 6 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[6] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[6] ); // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[6]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<7; k++) { @@ -303,21 +295,18 @@ fprintf(fd, "// Process group with 7 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[7] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[7] ); // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[7]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<8; k++) { @@ -344,20 +333,17 @@ fprintf(fd, "// Process group with 8 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[8] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[8] ); // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[8]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<9; k++) { @@ -384,14 +370,11 @@ fprintf(fd, "// Process group with 9 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[9] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[9] ); // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[9]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<10; k++) { @@ -424,21 +407,18 @@ fprintf(fd, "// Process group with 10 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i 0) @@ -447,15 +427,15 @@ fprintf(fd, "// Process group with 11 CNs \n"); idxBnGroup++; // Number of groups of 32 BNs for parallel processing - fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[10] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[10] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[10]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<11; k++) { @@ -463,14 +443,11 @@ fprintf(fd, "// Process group with 11 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[11] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[11] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[11]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<12; k++) { @@ -502,14 +479,11 @@ fprintf(fd, "// Process group with 12 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[12] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[12] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[12]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs - for (k=0; k<1; k++) + for (k=0; k<13; k++) { fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[13] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[13] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[13]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<14; k++) { @@ -585,21 +556,18 @@ fprintf(fd, "// Process group with 14 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[14] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[14] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[14]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<15; k++) { @@ -626,14 +594,11 @@ fprintf(fd, "// Process group with 15 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i 0) { @@ -652,15 +617,15 @@ fprintf(fd, "// Process group with 16 CNs \n"); idxBnGroup++; // Number of groups of 32 BNs for parallel processing - fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[15] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[15] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[15]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<16; k++) { @@ -668,21 +633,18 @@ fprintf(fd, "// Process group with 16 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[16] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[16] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[16]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<17; k++) { @@ -709,21 +671,18 @@ fprintf(fd, "// Process group with 17 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[17] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[17] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[17]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<18; k++) { @@ -750,20 +709,17 @@ fprintf(fd, "// Process group with 18 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[18] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[18] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[18]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<19; k++) { @@ -790,21 +746,18 @@ fprintf(fd, "// Process group with 19 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[19] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[19] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[19]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<20; k++) { @@ -831,14 +784,11 @@ fprintf(fd, "// Process group with 20 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i 0) { @@ -860,15 +810,15 @@ fprintf(fd, "// Process group with 21 CNs \n"); idxBnGroup++; // Number of groups of 32 BNs for parallel processing - fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[20] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[20] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[20]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<21; k++) { @@ -876,14 +826,11 @@ fprintf(fd, "// Process group with 21 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[21] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[21] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[21]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<22; k++) { @@ -915,22 +862,19 @@ fprintf(fd, "// Process group with 22 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[22] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[22] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[22]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<23; k++) { @@ -956,21 +900,18 @@ fprintf(fd, "// Process group with 23 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[23] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[23] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[23]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<24; k++) { @@ -998,21 +939,18 @@ fprintf(fd, "// Process group with 24 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[24] ); + // Number of groups of 32 BNs for parallel processing + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[24] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[24]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<25; k++) { @@ -1039,25 +977,23 @@ fprintf(fd, "// Process group with 25 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i 0) { @@ -1065,15 +1001,15 @@ fprintf(fd, "// Process group with 26 CNs \n"); idxBnGroup++; // Number of groups of 32 BNs for parallel processing - fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[25] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[25] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[25]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<26; k++) { @@ -1081,21 +1017,18 @@ fprintf(fd, "// Process group with 26 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[26] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[26] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[26]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<27; k++) { @@ -1122,21 +1055,18 @@ fprintf(fd, "// Process group with 27 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[27] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[27] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[27]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<28; k++) { @@ -1163,18 +1093,16 @@ fprintf(fd, "// Process group with 28 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[28] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[28] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[28]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<29; k++) { @@ -1201,14 +1129,11 @@ fprintf(fd, "// Process group with 29 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i>5;\n",lut_numBnInBnGroups[29] ); + fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[29] );; // Set the offset to each CN within a group in terms of 16 Byte cnOffsetInGroup = (lut_numBnInBnGroups[29]*NR_LDPC_ZMAX)>>5; // Set pointers to start of group 2 fprintf(fd," p_bnProcBuf = (__m256i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + fprintf(fd," p_bnProcBufRes = (__m256i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + // Loop over CNs for (k=0; k<30; k++) { @@ -1241,13 +1166,11 @@ fprintf(fd, "// Process group with 30 CNs \n"); fprintf(fd," p_llrRes = (__m256i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); // Loop over BNs - fprintf(fd," for (i=0;i #include #include "../../nrLDPCdecoder_defs.h" @@ -327,14 +325,13 @@ void nrLDPC_cnProc_BG1_generator_AVX512(int R) // ===================================================================== // Process group with 8 BNs fprintf(fd,"//Process group with 8 BNs\n"); - // Offset is 2*384/32 = 12 - const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168}, - {0,24,72,96,112,144,168}, {0,24,48,96,112,144,168}, - {0,24,48,72,112,144,168}, {0,24,48,72,96,144,168}, - {0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}}; - - + // Offset is 2*384/32 = 24 + const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,120,144,168}, {0,48,72,96,120,144,168}, + {0,24,72,96,120,144,168}, {0,24,48,96,120,144,168}, + {0,24,48,72,120,144,168}, {0,24,48,72,96,144,168}, + {0,24,48,72,96,120,168}, {0,24,48,72,96,120,144}}; + if (lut_numCnInCnGroups[5] > 0) { // Number of groups of 64 CNs for parallel processing diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_BG1_avx512.save1 b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_BG1_avx512.save1 deleted file mode 100644 index 462f196d1d..0000000000 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_BG1_avx512.save1 +++ /dev/null @@ -1,603 +0,0 @@ - -#include -#include -#include "../../nrLDPCdecoder_defs.h" - -void nrLDPC_cnProc_BG1_generator_AVX512(int R) -{ - const char *ratestr[3]={"13","23","89"}; - - if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();} - - - // system("mkdir -p ../ldpc_gen_files"); - - char fname[50]; - sprintf(fname,"../ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG1_R%s_AVX512.h",ratestr[R]); - FILE *fd=fopen(fname,"w"); - if (fd == NULL) {printf("Cannot create \n");abort();} - - fprintf(fd,"#include \n"); - fprintf(fd,"#include \n"); - - - fprintf(fd, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n"); - - - fprintf(fd,"static inline void nrLDPC_cnProc_BG1_R%s_AVX512(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z) {\n",ratestr[R]); - - const uint8_t* lut_numCnInCnGroups; - const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1; - - if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R13; - else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R23; - else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R89; - else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();} - - - - uint32_t i,j; - uint32_t k; - // Offset to each bit within a group in terms of 64 Byte - uint32_t bitOffsetInGroup; - - - fprintf(fd," uint32_t M, i;\n"); - fprintf(fd," int8_t* cnProcBuf = p_procBuf->cnProcBuf;\n"); - fprintf(fd," int8_t* cnProcBufRes = p_procBuf->cnProcBufRes;\n"); - fprintf(fd," __m512i* p_cnProcBufResBit;\n"); - fprintf(fd," __m512i* p_cnProcBufRes;\n"); - fprintf(fd," __m512i* p_cnProcBuf;\n"); - - - fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR, ones;\n"); - - fprintf(fd," zeros = _mm512_setzero_si512();\n"); - fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n"); - fprintf(fd," ones = _mm512_set1_epi8((char)1);\n"); - - - - // ===================================================================== - // Process group with 3 BNs - fprintf(fd,"//Process group with 3 BNs\n"); - // LUT with offsets for bits that need to be processed - // 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc. - // Offsets are in units of bitOffsetInGroup (1*384/32)12 - // Offsets are in units of bitOffsetInGroup (1*384/32)12 - - const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}}; - - if (lut_numCnInCnGroups[0] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - //M = (lut_numCnInCnGroups[0]*Z + 63)>>6; - - fprintf(fd," M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[0] ); - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups[0]*NR_LDPC_ZMAX)>>6; - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[0]); - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[0]); - - // Loop over every BN - - for (j=0; j<3; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (i=0;i 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - //M = (lut_numCnInCnGroups[1]*Z + 63)>>6; - fprintf(fd," M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[1] ); - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups[1]*NR_LDPC_ZMAX)>>6; - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[1]); - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[1]); - - // Loop over every BN - for (j=0; j<4; j++) - { - // Loop over CNs - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup)); - // { - fprintf(fd," for (i=0;i 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - //M = (lut_numCnInCnGroups[2]*Z + 63)>>6; - fprintf(fd," M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[2] ); - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups[2]*NR_LDPC_ZMAX)>>6; - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[2]); - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[2]); - - // Loop over every BN - - for (j=0; j<5; j++) - { -fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (i=0;i 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - //M = (lut_numCnInCnGroups[3]*Z + 63)>>6; - - fprintf(fd, "M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[3] ); - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups[3]*NR_LDPC_ZMAX)>>6; - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[3]); - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[3]); - - // Loop over every BN - - for (j=0; j<6; j++) - { -fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (i=0;i 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - // M = (lut_numCnInCnGroups[4]*Z + 63)>>6; - fprintf(fd, "M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[4] ); - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups[4]*NR_LDPC_ZMAX)>>6; - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[4]); - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[4]); - - // Loop over every BN - - for (j=0; j<7; j++) - { - // Loop over CNs -fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup)); - // { - fprintf(fd," for (i=0;i 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - // M = (lut_numCnInCnGroups[5]*Z + 63)>>6; - fprintf(fd, "M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[5] ); - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups[5]*NR_LDPC_ZMAX)>>6; - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[5]); - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[5]); - - // Loop over every BN - - for (j=0; j<8; j++) - { -fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup)); - // { - fprintf(fd," for (i=0;i 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - // M = (lut_numCnInCnGroups[5]*Z + 63)>>6; - fprintf(fd, "M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[6] ); - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups[6]*NR_LDPC_ZMAX)>>6; - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[6]); - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[6]); - - // Loop over every BN - - for (j=0; j<9; j++) - { -fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (i=0;i 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - //M = (lut_numCnInCnGroups[7]*Z + 63)>>6; - fprintf(fd, " M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[7] ); - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups[7]*NR_LDPC_ZMAX)>>6; - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[7]); - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[7]); - - - // Loop over every BN - - for (j=0; j<10; j++) - { -fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup)); - // { - fprintf(fd," for (i=0;i 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - // M = (lut_numCnInCnGroups[8]*Z + 63)>>6; - fprintf(fd, " M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[8] ); - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups[8]*NR_LDPC_ZMAX)>>6; - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[8]); - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf[%d];\n", lut_startAddrCnGroups[8]); - - // Loop over every BN - - for (j=0; j<19; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d ;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (i=0;i #include #include "../../nrLDPCdecoder_defs.h" @@ -24,7 +25,7 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) fprintf(fd, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n"); - + fprintf(fd,"static inline void nrLDPC_cnProc_BG2_R%s_AVX512(int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z) {\n",ratestr[R]); const uint8_t* lut_numCnInCnGroups; const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG2; @@ -42,16 +43,17 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) // Offset to each bit within a group in terms of 64 Byte uint32_t bitOffsetInGroup; - fprintf(fd," uint32_t M;\n"); - fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR;\n"); + fprintf(fd," uint32_t M;\n"); + fprintf(fd," __m512i zmm0, min, sgn,zeros,ones,maxLLR;\n"); fprintf(fd," zeros = _mm512_setzero_si512();\n"); fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n"); + fprintf(fd," ones = _mm512_set1_epi8((char)1);\n"); // ===================================================================== // Process group with 3 BNs fprintf(fd,"//Process group with 3 BNs\n"); // LUT with offsets for bits that need to be processed // 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc. - // Offsets are in units of bitOffsetInGroup + // Offsets are in units of bitOffsetInGroup const uint8_t lut_idxCnProcG3[3][2] = {{72,144}, {0,144}, {0,72}}; @@ -59,7 +61,7 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - fprintf(fd," M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[1] ); + fprintf(fd," M = (%d*Z + 63)>>6;\n",lut_numCnInCnGroups[0] ); // Set the offset to each bit within a group in terms of 64 Byte bitOffsetInGroup = (lut_numCnInCnGroups_BG2_R15[0]*NR_LDPC_ZMAX)>>6; @@ -71,57 +73,38 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) { - fprintf(fd," for (int i=0;i>6)+lut_idxCnProcG3[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][0]/2); + fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - // 32 CNs of second BN - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][1]/2); - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); + // for (k=1; k<2; k++) + //{ + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][1]/2); - // sgn = _mm512_sign_epi8(sgn, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); + // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); + fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); + + // sgn = _mm512_sign_epi8(*p_ones, zmm0); + fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); + // } // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 + // min = _mm512_min_epu8(min, *maxLLR); // 128 in epi8 is -127 fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - + // *p_cnProcBufResBit = _mm512_sign_epi8(min, sgn); + // p_cnProcBufResBit++; fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[0]>>6)+(j*bitOffsetInGroup)); - - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+(lut_idxCnProcG3[j][0]/2)+1); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); - - // 32 CNs of second BN - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+(lut_idxCnProcG3[j][1]/2)+1); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(sgn, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[0]>>6)+(j*bitOffsetInGroup)+1); - fprintf(fd," }\n"); } + } + // ===================================================================== // Process group with 4 BNs fprintf(fd,"//Process group with 4 BNs\n"); @@ -140,14 +123,13 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) // Loop over every BN for (j=0; j<4; j++) - { + { fprintf(fd," for (int i=0;i>6)+lut_idxCnProcG4[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>6)+lut_idxCnProcG4[j][0]/2); + fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); // Loop over BNs @@ -179,6 +161,7 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) // Offset is 9*384/32 = 108 const uint16_t lut_idxCnProcG5[5][4] = {{108,216,324,432}, {0,216,324,432}, {0,108,324,432}, {0,108,216,432}, {0,108,216,324}}; + @@ -199,10 +182,9 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) fprintf(fd," for (int i=0;i>6)+lut_idxCnProcG5[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>6)+lut_idxCnProcG5[j][0]/2); + fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); // Loop over BNs @@ -233,6 +215,7 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) const uint16_t lut_idxCnProcG6[6][5] = {{36,72,108,144,180}, {0,72,108,144,180}, {0,36,108,144,180}, {0,36,72,144,180}, {0,36,72,108,180}, {0,36,72,108,144}}; + @@ -253,10 +236,9 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) fprintf(fd," for (int i=0;i>6)+lut_idxCnProcG6[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>6)+lut_idxCnProcG6[j][0]/2); + fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); // Loop over BNs @@ -291,6 +273,8 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) {0,24,48,72,120,144,168}, {0,24,48,72,96,144,168}, {0,24,48,72,96,120,168}, {0,24,48,72,96,120,144}}; + + if (lut_numCnInCnGroups[4] > 0) { @@ -305,14 +289,13 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) for (j=0; j<8; j++) { - + fprintf(fd," for (int i=0;i>6)+lut_idxCnProcG8[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>6)+lut_idxCnProcG8[j][0]/2); + fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); // Loop over BNs @@ -330,7 +313,7 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) // Store result // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[4]>>6)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } @@ -340,13 +323,15 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) // ===================================================================== // Process group with 10 BNs fprintf(fd,"//Process group with 10 BNs\n"); - + const uint8_t lut_idxCnProcG10[10][9] = {{24,48,72,96,120,144,168,192,216}, {0,48,72,96,120,144,168,192,216}, {0,24,72,96,120,144,168,192,216}, {0,24,48,96,120,144,168,192,216}, {0,24,48,72,120,144,168,192,216}, {0,24,48,72,96,144,168,192,216}, {0,24,48,72,96,120,168,192,216}, {0,24,48,72,96,120,144,192,216}, {0,24,48,72,96,120,144,168,216}, {0,24,48,72,96,120,144,168,192}}; + + if (lut_numCnInCnGroups[5] > 0) { @@ -365,10 +350,9 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) fprintf(fd," for (int i=0;i>6)+lut_idxCnProcG10[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>6)+lut_idxCnProcG10[j][0]/2); + fprintf(fd," sgn = _mm512_xor_si512(ones, zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); // Loop over BNs @@ -392,7 +376,7 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) } } - + fprintf(fd,"}\n"); fclose(fd); }//end of the function nrLDPC_cnProc_BG2 @@ -404,3 +388,4 @@ void nrLDPC_cnProc_BG2_generator_AVX512(int R) + diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_avx512 b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_avx512 index 9f1d553a1c..7d6d59a058 100755 Binary files a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_avx512 and b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/cnProc_gen_avx512 differ diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/sauvegarde.tar.gz b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/sauvegarde.tar.gz index 5e2fc29a8f..69e1d9ca37 100644 Binary files a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/sauvegarde.tar.gz and b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/sauvegarde.tar.gz differ diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.2 b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.2 deleted file mode 100644 index da72d4a934..0000000000 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.2 +++ /dev/null @@ -1,583 +0,0 @@ - -#include -#include -#include "../../nrLDPCdecoder_defs.h" - -void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) -{ - const char *ratestr[3]={"13","23","89"}; - - if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();} - - - // system("mkdir -p ../ldpc_gen_files"); - - char fname[50]; - sprintf(fname,"../ldpc_gen_files/nrLDPC_cnProc_BG1_Z%d_%s_AVX512.c",Z,ratestr[R]); - FILE *fd=fopen(fname,"w"); - if (fd == NULL) {printf("Cannot create \n");abort();} - - fprintf(fd,"#include \n"); - fprintf(fd,"#include \n"); - - - fprintf(fd, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n"); - - - fprintf(fd,"void nrLDPC_cnProc_BG1_Z%d_%s_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) {\n",Z,ratestr[R]); - - const uint8_t* lut_numCnInCnGroups; - const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1; - - if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R13; - else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R23; - else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R89; - else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();} - - - uint32_t M; - uint32_t j; - uint32_t k; - // Offset to each bit within a group in terms of 64 Byte - uint32_t bitOffsetInGroup; - - - - // ===================================================================== - // Process group with 3 BNs - fprintf(fd,"//Process group with 3 BNs\n"); - // LUT with offsets for bits that need to be processed - // 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc. - // Offsets are in units of bitOffsetInGroup (1*384/32)12 - // Offsets are in units of bitOffsetInGroup (1*384/32)12 - - const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}}; - - - fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR;\n"); - fprintf(fd," zeros = _mm512_setzero_si512();\n"); - fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n"); - - if (lut_numCnInCnGroups[0] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[0]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - - for (j=0; j<3; j++) - { - - fprintf(fd," for (int i=0;i<%d;i+=2) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); - - // 32 CNs of second BN - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][1]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(sgn, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[0]>>6)+(j*bitOffsetInGroup)); - - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+(lut_idxCnProcG3[j][0]/2)+1); - - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); - - // 32 CNs of second BN - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+(lut_idxCnProcG3[j][1]/2)+1); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(sgn, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[0]>>6)+(j*bitOffsetInGroup)+1); - - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 4 BNs - fprintf(fd,"//Process group with 4 BNs\n"); - // Offset is 5*384/32 = 30 - const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}}; - - if (lut_numCnInCnGroups[1] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[1]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - for (j=0; j<4; j++) - { - // Loop over CNs - // for (i=0; i>6)+lut_idxCnProcG4[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); - - - // Loop over BNs - for (k=1; k<3; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>6)+lut_idxCnProcG4[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(sgn, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - // *p_cnProcBufResBit = _mm512_sign_epi8(min, sgn); - // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[1]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 5 BNs - fprintf(fd,"//Process group with 5 BNs\n"); - // Offset is 18*384/32 = 216 - const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864}, - {0,216,648,864}, {0,216,432,864}, {0,216,432,648}}; - - - if (lut_numCnInCnGroups[2] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[2]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - - for (j=0; j<5; j++) - { - - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>6)+lut_idxCnProcG5[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); - - - // Loop over BNs - for (k=1; k<4; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>6)+lut_idxCnProcG5[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(sgn, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[2]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 6 BNs - fprintf(fd,"//Process group with 6 BNs\n"); - // Offset is 8*384/32 = 48 - const uint16_t lut_idxCnProcG6[6][5] = {{96,192,288,384,480}, {0,192,288,384,480}, - {0,96,288,384,480}, {0,96,192,384,480}, - {0,96,192,288,480}, {0,96,192,288,384}}; - - - if (lut_numCnInCnGroups[3] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[3]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - - for (j=0; j<6; j++) - { - - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>6)+lut_idxCnProcG6[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); - - - // Loop over BNs - for (k=1; k<5; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>6)+lut_idxCnProcG6[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(sgn, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[3]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 7 BNs - fprintf(fd,"//Process group with 7 BNs\n"); - // Offset is 5*384/32 = 30 - const uint16_t lut_idxCnProcG7[7][6] = {{60,120,180,240,300,360}, {0,120,180,240,300,360}, - {0,60,180,240,300,360}, {0,60,120,240,300,360}, - {0,60,120,180,300,360}, {0,60,120,180,240,360}, - {0,60,120,180,240,300}}; - - - if (lut_numCnInCnGroups[4] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[4]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - - for (j=0; j<7; j++) - { - // Loop over CNs - // for (i=0; i>6)+lut_idxCnProcG7[j][0]/2); - // sgn = _mm512_sign_epi816(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); - - - // Loop over BNs - for (k=1; k<6; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>6)+lut_idxCnProcG7[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(sgn, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[4]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 8 BNs - fprintf(fd,"//Process group with 8 BNs\n"); - // Offset is 2*384/32 = 12 - const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168}, - {0,24,72,96,112,144,168}, {0,24,48,96,112,144,168}, - {0,24,48,72,112,144,168}, {0,24,48,72,96,144,168}, - {0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}}; - - - - if (lut_numCnInCnGroups[5] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[5]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - - for (j=0; j<8; j++) - { - // Loop over CNs - // for (i=0; i>6)+lut_idxCnProcG8[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); - - - // Loop over BNs - for (k=1; k<7; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>6)+lut_idxCnProcG8[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(sgn, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[5]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 9 BNs - fprintf(fd,"//Process group with 9 BNs\n"); - // Offset is 2*384/32 = 12 - const uint8_t lut_idxCnProcG9[9][8] = {{24,48,72,96,120,144,168,192}, {0,48,72,96,120,144,168,192}, - {0,24,72,96,120,144,168,192}, {0,24,48,96,120,144,168,192}, - {0,24,48,72,120,144,168,192}, {0,24,48,72,96,144,168,192}, - {0,24,48,72,96,120,168,192}, {0,24,48,72,96,120,144,192}, - {0,24,48,72,96,120,144,168}}; - - - - - if (lut_numCnInCnGroups[6] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[6]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group - // Loop over every BN - - for (j=0; j<9; j++) - { - // Loop over CNs - // for (i=0; i>6)+lut_idxCnProcG9[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); - - - // Loop over BNs - for (k=1; k<8; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>6)+lut_idxCnProcG9[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(sgn, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn, zeros);\n",(lut_startAddrCnGroups[6]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 10 BNs - fprintf(fd,"//Process group with 10 BNs\n"); - // Offset is 1*384/32 = 6 - const uint8_t lut_idxCnProcG10[10][9] = {{12,24,36,48,60,72,84,96,108}, {0,24,36,48,60,72,84,96,108}, - {0,12,36,48,60,72,84,96,108}, {0,12,24,48,60,72,84,96,108}, - {0,12,24,36,60,72,84,96,108}, {0,12,24,36,48,72,84,96,108}, - {0,12,24,36,48,60,84,96,108}, {0,12,24,36,48,60,72,96,108}, - {0,12,24,36,48,60,72,84,108}, {0,12,24,36,48,60,72,84,96}}; - - if (lut_numCnInCnGroups[7] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[7]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>6; - - - // Loop over every BN - - for (j=0; j<10; j++) - { - // Loop over CNs - // for (i=0; i>6)+lut_idxCnProcG10[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); - - - // Loop over BNs - for (k=1; k<9; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>6)+lut_idxCnProcG10[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(sgn, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min,sgn,zeros);\n",(lut_startAddrCnGroups[7]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 19 BNs - fprintf(fd,"//Process group with 19 BNs\n"); - // Offset is 4*384/32 = 24 - const uint16_t lut_idxCnProcG19[19][18] = {{48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816}}; - - - if (lut_numCnInCnGroups[8] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[8]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - - for (j=0; j<19; j++) - { - // Loop over CNs - // for (i=0; i>6)+lut_idxCnProcG19[j][0]/2); - // sgn = _mm512_sign_epi8(ones, zmm0); - // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); - - - // Loop over BNs - for (k=1; k<18; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>6)+lut_idxCnProcG19[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(sgn, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[8]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - fprintf(fd,"}\n"); - fclose(fd); -}//end of the function nrLDPC_cnProc_BG1 - - - diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.c deleted file mode 100644 index 6f9036db18..0000000000 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.c +++ /dev/null @@ -1,557 +0,0 @@ - -#include -#include -#include "../../nrLDPCdecoder_defs.h" - -void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) -{ - const char *ratestr[3]={"13","23","89"}; - - if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();} - - - // system("mkdir -p ../ldpc_gen_files"); - - char fname[50]; - sprintf(fname,"../ldpc_gen_files/nrLDPC_cnProc_BG1_Z%d_R%s_AVX512.c",Z,ratestr[R]); - FILE *fd=fopen(fname,"w"); - if (fd == NULL) {printf("Cannot create \n");abort();} - - fprintf(fd,"#include \n"); - fprintf(fd,"#include \n"); - - - fprintf(fd, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n"); - - - fprintf(fd,"void nrLDPC_cnProc_BG1_Z%d_R%s_AVX512(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf) {\n",Z,ratestr[R]); - - const uint8_t* lut_numCnInCnGroups; - const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1; - - if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R13; - else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R23; - else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R89; - else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();} - - - uint32_t M; - uint32_t j; - uint32_t k; - // Offset to each bit within a group in terms of 64 Byte - uint32_t bitOffsetInGroup; - - - - // ===================================================================== - // Process group with 3 BNs - fprintf(fd,"//Process group with 3 BNs\n"); - // LUT with offsets for bits that need to be processed - // 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc. - // Offsets are in units of bitOffsetInGroup (1*384/32)12 - // Offsets are in units of bitOffsetInGroup (1*384/32)12 - - const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}}; - - fprintf(fd," int8_t* cnProcBuf = p_procBuf->cnProcBuf;\n"); - fprintf(fd," int8_t* cnProcBufRes = p_procBuf->cnProcBufRes;\n"); - - fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR;\n"); - - fprintf(fd," zeros = _mm512_setzero_si512();\n"); - fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n"); - - fprintf(fd," const __m512i* p_ones = (__m512i*) ones512_epi8;\n"); - - if (lut_numCnInCnGroups[0] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[0]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - - for (j=0; j<3; j++) - { - - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // 32 CNs of second BN - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][1]/2); - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[0]>>6)+(j*bitOffsetInGroup)); - - - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 4 BNs - fprintf(fd,"//Process group with 4 BNs\n"); - // Offset is 5*384/32 = 30 - const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}}; - - if (lut_numCnInCnGroups[1] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[1]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - for (j=0; j<4; j++) - { - // Loop over CNs - // for (i=0; i>6)+lut_idxCnProcG4[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<3; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>6)+lut_idxCnProcG4[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - // *p_cnProcBufResBit = _mm512_sign_epi8(min, sgn); - // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[1]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 5 BNs - fprintf(fd,"//Process group with 5 BNs\n"); - // Offset is 18*384/32 = 216 - const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864}, - {0,216,648,864}, {0,216,432,864}, {0,216,432,648}}; - - - if (lut_numCnInCnGroups[2] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[2]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - - for (j=0; j<5; j++) - { - - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>6)+lut_idxCnProcG5[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<4; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>6)+lut_idxCnProcG5[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[2]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 6 BNs - fprintf(fd,"//Process group with 6 BNs\n"); - // Offset is 8*384/32 = 48 - const uint16_t lut_idxCnProcG6[6][5] = {{96,192,288,384,480}, {0,192,288,384,480}, - {0,96,288,384,480}, {0,96,192,384,480}, - {0,96,192,288,480}, {0,96,192,288,384}}; - - - if (lut_numCnInCnGroups[3] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[3]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - - for (j=0; j<6; j++) - { - - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>6)+lut_idxCnProcG6[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<5; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>6)+lut_idxCnProcG6[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[3]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 7 BNs - fprintf(fd,"//Process group with 7 BNs\n"); - // Offset is 5*384/32 = 30 - const uint16_t lut_idxCnProcG7[7][6] = {{60,120,180,240,300,360}, {0,120,180,240,300,360}, - {0,60,180,240,300,360}, {0,60,120,240,300,360}, - {0,60,120,180,300,360}, {0,60,120,180,240,360}, - {0,60,120,180,240,300}}; - - - if (lut_numCnInCnGroups[4] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[4]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - - for (j=0; j<7; j++) - { - // Loop over CNs - // for (i=0; i>6)+lut_idxCnProcG7[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<6; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>6)+lut_idxCnProcG7[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[4]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 8 BNs - fprintf(fd,"//Process group with 8 BNs\n"); - // Offset is 2*384/32 = 12 - const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168}, - {0,24,72,96,112,144,168}, {0,24,48,96,112,144,168}, - {0,24,48,72,112,144,168}, {0,24,48,72,96,144,168}, - {0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}}; - - - - if (lut_numCnInCnGroups[5] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[5]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - - for (j=0; j<8; j++) - { - // Loop over CNs - // for (i=0; i>6)+lut_idxCnProcG8[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<7; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>6)+lut_idxCnProcG8[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[5]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 9 BNs - fprintf(fd,"//Process group with 9 BNs\n"); - // Offset is 2*384/32 = 12 - const uint8_t lut_idxCnProcG9[9][8] = {{24,48,72,96,120,144,168,192}, {0,48,72,96,120,144,168,192}, - {0,24,72,96,120,144,168,192}, {0,24,48,96,120,144,168,192}, - {0,24,48,72,120,144,168,192}, {0,24,48,72,96,144,168,192}, - {0,24,48,72,96,120,168,192}, {0,24,48,72,96,120,144,192}, - {0,24,48,72,96,120,144,168}}; - - - - - if (lut_numCnInCnGroups[6] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[6]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group - // Loop over every BN - - for (j=0; j<9; j++) - { - // Loop over CNs - // for (i=0; i>6)+lut_idxCnProcG9[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<8; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>6)+lut_idxCnProcG9[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn, zeros);\n",(lut_startAddrCnGroups[6]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 10 BNs - fprintf(fd,"//Process group with 10 BNs\n"); - // Offset is 1*384/32 = 6 - const uint8_t lut_idxCnProcG10[10][9] = {{12,24,36,48,60,72,84,96,108}, {0,24,36,48,60,72,84,96,108}, - {0,12,36,48,60,72,84,96,108}, {0,12,24,48,60,72,84,96,108}, - {0,12,24,36,60,72,84,96,108}, {0,12,24,36,48,72,84,96,108}, - {0,12,24,36,48,60,84,96,108}, {0,12,24,36,48,60,72,96,108}, - {0,12,24,36,48,60,72,84,108}, {0,12,24,36,48,60,72,84,96}}; - - if (lut_numCnInCnGroups[7] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[7]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>6; - - - // Loop over every BN - - for (j=0; j<10; j++) - { - // Loop over CNs - // for (i=0; i>6)+lut_idxCnProcG10[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<9; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>6)+lut_idxCnProcG10[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min,sgn,zeros);\n",(lut_startAddrCnGroups[7]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 19 BNs - fprintf(fd,"//Process group with 19 BNs\n"); - // Offset is 4*384/32 = 24 - const uint16_t lut_idxCnProcG19[19][18] = {{48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816}}; - - - if (lut_numCnInCnGroups[8] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[8]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>6; - - // Loop over every BN - - for (j=0; j<19; j++) - { - // Loop over CNs - // for (i=0; i>6)+lut_idxCnProcG19[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<18; k++) - { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>6)+lut_idxCnProcG19[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[8]>>6)+(j*bitOffsetInGroup)); - fprintf(fd," }\n"); - } - } - - fprintf(fd,"}\n"); - fclose(fd); -}//end of the function nrLDPC_cnProc_BG1 - - - - diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.c.today b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.c.today deleted file mode 100644 index a9dab4bf99..0000000000 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.c.today +++ /dev/null @@ -1,596 +0,0 @@ - -#include -#include -#include "../../nrLDPCdecoder_defs.h" - -void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) -{ - const char *ratestr[3]={"13","23","89"}; - - if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();} - - - // system("mkdir -p ../ldpc_gen_files"); - - char fname[50]; - sprintf(fname,"../ldpc_gen_files/nrLDPC_cnProc_BG1_Z%d_R%s_AVX512.c",Z,ratestr[R]); - FILE *fd=fopen(fname,"w"); - if (fd == NULL) {printf("Cannot create \n");abort();} - - fprintf(fd,"#include \n"); - fprintf(fd,"#include \n"); - - - fprintf(fd, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n"); - - - fprintf(fd,"void nrLDPC_cnProc_BG1_Z%d_R%s_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) {\n",Z,ratestr[R]); - - const uint8_t* lut_numCnInCnGroups; - const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1; - - if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R13; - else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R23; - else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R89; - else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();} - - - uint32_t M; - uint32_t j; - uint32_t k; - // Offset to each bit within a group in terms of 64 Byte - uint32_t bitOffsetInGroup; - - - - // ===================================================================== - // Process group with 3 BNs - fprintf(fd,"//Process group with 3 BNs\n"); - // LUT with offsets for bits that need to be processed - // 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc. - // Offsets are in units of bitOffsetInGroup (1*384/32)12 - // Offsets are in units of bitOffsetInGroup (1*384/32)12 - - const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}}; - - - fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR;\n"); - fprintf(fd," zeros = _mm512_setzero_si512();\n"); - fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n"); - fprintf(fd," __m512i* p_cnProcBufResBit;\n"); - fprintf(fd," __m512i* p_cnProcBuf;\n"); - fprintf(fd," __m512i* p_cnProcBufRes;\n"); - fprintf(fd," const __m512i* p_ones = (__m512i*) ones512_epi8;\n"); - - - - if (lut_numCnInCnGroups[0] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[0]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>6; - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[0]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[0]); - - // Loop over every BN - // Loop over every BN - - - - - for (j=0; j<3; j++) - { - - - // Set of results pointer to correct BN address - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG3[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // 32 CNs of second BN - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG3[j][1]/2)); - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 4 BNs - fprintf(fd,"//Process group with 4 BNs\n"); - // Offset is 5*384/32 = 30 - const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}}; - - if (lut_numCnInCnGroups[1] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[1]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[1]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[1]); - - // Loop over every BN - for (j=0; j<4; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG4[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<3; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG4[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - // *p_cnProcBufResBit = _mm512_sign_epi8(min, sgn); - // p_cnProcBufResBit++; - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 5 BNs - fprintf(fd,"//Process group with 5 BNs\n"); - // Offset is 18*384/32 = 216 - const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864}, - {0,216,648,864}, {0,216,432,864}, {0,216,432,648}}; - - - if (lut_numCnInCnGroups[2] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[2]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[2]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[2]); - - // Loop over every BN - - for (j=0; j<5; j++) - { - - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG5[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<4; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG5[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 6 BNs - fprintf(fd,"//Process group with 6 BNs\n"); - // Offset is 8*384/32 = 48 - const uint16_t lut_idxCnProcG6[6][5] = {{96,192,288,384,480}, {0,192,288,384,480}, - {0,96,288,384,480}, {0,96,192,384,480}, - {0,96,192,288,480}, {0,96,192,288,384}}; - - - if (lut_numCnInCnGroups[3] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[3]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>6; - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[3]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[3]); - - // Loop over every BN - - for (j=0; j<6; j++) - { - - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG6[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<5; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG6[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 7 BNs - fprintf(fd,"//Process group with 7 BNs\n"); - // Offset is 5*384/32 = 30 - const uint16_t lut_idxCnProcG7[7][6] = {{60,120,180,240,300,360}, {0,120,180,240,300,360}, - {0,60,180,240,300,360}, {0,60,120,240,300,360}, - {0,60,120,180,300,360}, {0,60,120,180,240,360}, - {0,60,120,180,240,300}}; - - - if (lut_numCnInCnGroups[4] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[4]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>6; - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[4]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[4]); - - // Loop over every BN - - for (j=0; j<7; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0= p_cnProcBuf [%d+i];\n",(lut_idxCnProcG7[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<6; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG7[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 8 BNs - fprintf(fd,"//Process group with 8 BNs\n"); - // Offset is 2*384/32 = 12 - const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168}, - {0,24,72,96,112,144,168}, {0,24,48,96,112,144,168}, - {0,24,48,72,112,144,168}, {0,24,48,72,96,144,168}, - {0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}}; - - - - if (lut_numCnInCnGroups[5] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[5]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[5]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[5]); - - // Loop over every BN - - for (j=0; j<8; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG8[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<7; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG8[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 9 BNs - fprintf(fd,"//Process group with 9 BNs\n"); - // Offset is 2*384/32 = 12 - const uint8_t lut_idxCnProcG9[9][8] = {{24,48,72,96,120,144,168,192}, {0,48,72,96,120,144,168,192}, - {0,24,72,96,120,144,168,192}, {0,24,48,96,120,144,168,192}, - {0,24,48,72,120,144,168,192}, {0,24,48,72,96,144,168,192}, - {0,24,48,72,96,120,168,192}, {0,24,48,72,96,120,144,192}, - {0,24,48,72,96,120,144,168}}; - - - - - if (lut_numCnInCnGroups[6] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[6]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[6]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[6]); - - // Set pointers to start of group - // Loop over every BN - - for (j=0; j<9; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG9[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<8; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG9[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 10 BNs - fprintf(fd,"//Process group with 10 BNs\n"); - // Offset is 1*384/32 = 6 - const uint8_t lut_idxCnProcG10[10][9] = {{12,24,36,48,60,72,84,96,108}, {0,24,36,48,60,72,84,96,108}, - {0,12,36,48,60,72,84,96,108}, {0,12,24,48,60,72,84,96,108}, - {0,12,24,36,60,72,84,96,108}, {0,12,24,36,48,72,84,96,108}, - {0,12,24,36,48,60,84,96,108}, {0,12,24,36,48,60,72,96,108}, - {0,12,24,36,48,60,72,84,108}, {0,12,24,36,48,60,72,84,96}}; - - if (lut_numCnInCnGroups[7] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[7]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[7]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[7]); - - - // Loop over every BN - - for (j=0; j<10; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG10[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<9; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG10[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 19 BNs - fprintf(fd,"//Process group with 19 BNs\n"); - // Offset is 4*384/32 = 24 - const uint16_t lut_idxCnProcG19[19][18] = {{48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816}}; - - - if (lut_numCnInCnGroups[8] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[8]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[8]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[8]); - - // Loop over every BN - - for (j=0; j<19; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG19[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<18; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG19[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - fprintf(fd,"}\n"); - fclose(fd); -}//end of the function nrLDPC_cnProc_BG1 - - - - diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.native b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.native deleted file mode 100644 index f8de0dc0b7..0000000000 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.native +++ /dev/null @@ -1,596 +0,0 @@ - -#include -#include -#include "../../nrLDPCdecoder_defs.h" - -void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) -{ - const char *ratestr[3]={"13","23","89"}; - - if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();} - - - // system("mkdir -p ../ldpc_gen_files"); - - char fname[50]; - sprintf(fname,"../ldpc_gen_files/nrLDPC_cnProc_BG1_Z%d_R%s_AVX512.c",Z,ratestr[R]); - FILE *fd=fopen(fname,"w"); - if (fd == NULL) {printf("Cannot create \n");abort();} - - fprintf(fd,"#include \n"); - fprintf(fd,"#include \n"); - - - fprintf(fd, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n"); - - - fprintf(fd,"void nrLDPC_cnProc_BG1_Z%d_R%s_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) {\n",Z,ratestr[R]); - - const uint8_t* lut_numCnInCnGroups; - const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1; - - if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R13; - else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R23; - else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R89; - else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();} - - - uint32_t M; - uint32_t j; - uint32_t k; - // Offset to each bit within a group in terms of 64 Byte - uint32_t bitOffsetInGroup; - - - - // ===================================================================== - // Process group with 3 BNs - fprintf(fd,"//Process group with 3 BNs\n"); - // LUT with offsets for bits that need to be processed - // 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc. - // Offsets are in units of bitOffsetInGroup (1*384/32)12 - // Offsets are in units of bitOffsetInGroup (1*384/32)12 - - const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}}; - - - fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR;\n"); - fprintf(fd," zeros = _mm512_setzero_si512();\n"); - fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n"); - fprintf(fd," __m512i* p_cnProcBufResBit;\n"); - fprintf(fd," __m512i* p_cnProcBuf;\n"); - fprintf(fd," __m512i* p_cnProcBufRes;\n"); - fprintf(fd," const __m512i* p_ones = (__m512i*) ones512_epi8;\n"); - fprintf(fd," const __m512i* p_maxLLR = (__m512i*) maxLLR512_epi8;\n"); - - - if (lut_numCnInCnGroups[0] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[0]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>6; - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[0]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[0]); - - // Loop over every BN - // Loop over every BN - - - - - for (j=0; j<3; j++) - { - - - // Set of results pointer to correct BN address - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup); - - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG3[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // 32 CNs of second BN - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG3[j][1]/2); - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - - // Store result - // min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n"); - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 4 BNs - fprintf(fd,"//Process group with 4 BNs\n"); - // Offset is 5*384/32 = 30 - const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}}; - - if (lut_numCnInCnGroups[1] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[1]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[1]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[1]); - - // Loop over every BN - for (j=0; j<4; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup); - - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG4[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<3; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG4[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n"); - // *p_cnProcBufResBit = _mm512_sign_epi8(min, sgn); - // p_cnProcBufResBit++; - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 5 BNs - fprintf(fd,"//Process group with 5 BNs\n"); - // Offset is 18*384/32 = 216 - const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864}, - {0,216,648,864}, {0,216,432,864}, {0,216,432,648}}; - - - if (lut_numCnInCnGroups[2] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[2]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[2]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[2]); - - // Loop over every BN - - for (j=0; j<5; j++) - { - - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG5[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<4; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG5[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 6 BNs - fprintf(fd,"//Process group with 6 BNs\n"); - // Offset is 8*384/32 = 48 - const uint16_t lut_idxCnProcG6[6][5] = {{96,192,288,384,480}, {0,192,288,384,480}, - {0,96,288,384,480}, {0,96,192,384,480}, - {0,96,192,288,480}, {0,96,192,288,384}}; - - - if (lut_numCnInCnGroups[3] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[3]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>6; - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[3]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[3]); - - // Loop over every BN - - for (j=0; j<6; j++) - { - - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG6[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<5; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG6[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 7 BNs - fprintf(fd,"//Process group with 7 BNs\n"); - // Offset is 5*384/32 = 30 - const uint16_t lut_idxCnProcG7[7][6] = {{60,120,180,240,300,360}, {0,120,180,240,300,360}, - {0,60,180,240,300,360}, {0,60,120,240,300,360}, - {0,60,120,180,300,360}, {0,60,120,180,240,360}, - {0,60,120,180,240,300}}; - - - if (lut_numCnInCnGroups[4] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[4]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>6; - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[4]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[4]); - - // Loop over every BN - - for (j=0; j<7; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0= p_cnProcBuf [%d+i];\n",lut_idxCnProcG7[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<6; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG7[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 8 BNs - fprintf(fd,"//Process group with 8 BNs\n"); - // Offset is 2*384/32 = 12 - const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168}, - {0,24,72,96,112,144,168}, {0,24,48,96,112,144,168}, - {0,24,48,72,112,144,168}, {0,24,48,72,96,144,168}, - {0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}}; - - - - if (lut_numCnInCnGroups[5] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[5]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[5]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[5]); - - // Loop over every BN - - for (j=0; j<8; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG8[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<7; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG8[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 9 BNs - fprintf(fd,"//Process group with 9 BNs\n"); - // Offset is 2*384/32 = 12 - const uint8_t lut_idxCnProcG9[9][8] = {{24,48,72,96,120,144,168,192}, {0,48,72,96,120,144,168,192}, - {0,24,72,96,120,144,168,192}, {0,24,48,96,120,144,168,192}, - {0,24,48,72,120,144,168,192}, {0,24,48,72,96,144,168,192}, - {0,24,48,72,96,120,168,192}, {0,24,48,72,96,120,144,192}, - {0,24,48,72,96,120,144,168}}; - - - - - if (lut_numCnInCnGroups[6] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[6]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[6]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[6]); - - // Set pointers to start of group - // Loop over every BN - - for (j=0; j<9; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG9[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<8; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG9[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - // ===================================================================== - // Process group with 10 BNs - fprintf(fd,"//Process group with 10 BNs\n"); - // Offset is 1*384/32 = 6 - const uint8_t lut_idxCnProcG10[10][9] = {{12,24,36,48,60,72,84,96,108}, {0,24,36,48,60,72,84,96,108}, - {0,12,36,48,60,72,84,96,108}, {0,12,24,48,60,72,84,96,108}, - {0,12,24,36,60,72,84,96,108}, {0,12,24,36,48,72,84,96,108}, - {0,12,24,36,48,60,84,96,108}, {0,12,24,36,48,60,72,96,108}, - {0,12,24,36,48,60,72,84,108}, {0,12,24,36,48,60,72,84,96}}; - - if (lut_numCnInCnGroups[7] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[7]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[7]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[7]); - - - // Loop over every BN - - for (j=0; j<10; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG10[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<9; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG10[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - - // ===================================================================== - // Process group with 19 BNs - fprintf(fd,"//Process group with 19 BNs\n"); - // Offset is 4*384/32 = 24 - const uint16_t lut_idxCnProcG19[19][18] = {{48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816}}; - - - if (lut_numCnInCnGroups[8] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[8]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[8]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[8]); - - // Loop over every BN - - for (j=0; j<19; j++) - { - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", j*bitOffsetInGroup); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG19[j][0]/2); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<18; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",lut_idxCnProcG19[j][k]/2); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, *p_maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, *p_maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - } - } - - fprintf(fd,"}\n"); - fclose(fd); -}//end of the function nrLDPC_cnProc_BG1 - - - - diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.unrolled b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.unrolled deleted file mode 100644 index 96002878a1..0000000000 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/save/cnProc_gen_BG1_avx512.unrolled +++ /dev/null @@ -1,590 +0,0 @@ - -#include -#include -#include "../../nrLDPCdecoder_defs.h" - -void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) -{ - const char *ratestr[3]={"13","23","89"}; - - if (R<0 || R>2) {printf("Illegal R %d\n",R); abort();} - - - // system("mkdir -p ../ldpc_gen_files"); - - char fname[50]; - sprintf(fname,"../ldpc_gen_files/nrLDPC_cnProc_BG1_Z%d_R%s_AVX512.c",Z,ratestr[R]); - FILE *fd=fopen(fname,"w"); - if (fd == NULL) {printf("Cannot create \n");abort();} - - fprintf(fd,"#include \n"); - fprintf(fd,"#include \n"); - - - fprintf(fd, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n"); - - - fprintf(fd,"void nrLDPC_cnProc_BG1_Z%d_R%s_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) {\n",Z,ratestr[R]); - - const uint8_t* lut_numCnInCnGroups; - const uint32_t* lut_startAddrCnGroups = lut_startAddrCnGroups_BG1; - - if (R==0) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R13; - else if (R==1) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R23; - else if (R==2) lut_numCnInCnGroups = lut_numCnInCnGroups_BG1_R89; - else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();} - - - uint32_t M; - uint32_t j; - uint32_t k; - // Offset to each bit within a group in terms of 64 Byte - uint32_t bitOffsetInGroup; - - - - // ===================================================================== - // Process group with 3 BNs - fprintf(fd,"//Process group with 3 BNs\n"); - // LUT with offsets for bits that need to be processed - // 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc. - // Offsets are in units of bitOffsetInGroup (1*384/32)12 - // Offsets are in units of bitOffsetInGroup (1*384/32)12 - - const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}}; - - - fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR;\n"); - fprintf(fd," zeros = _mm512_setzero_si512();\n"); - fprintf(fd," maxLLR = _mm512_set1_epi8((char)127);\n"); - fprintf(fd," __m512i* p_cnProcBufResBit;\n"); - fprintf(fd," __m512i* p_cnProcBuf;\n"); - fprintf(fd," __m512i* p_cnProcBufRes;\n"); - fprintf(fd," const __m512i* p_ones = (__m512i*) ones512_epi8;\n"); - - - - if (lut_numCnInCnGroups[0] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[0]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>6; - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[0]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[0]); - - // Loop over every BN - // Loop over every BN - - - - -fprintf(fd," for (int j=0;j<3;j++) {\n"); - - - // Set of results pointer to correct BN address - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG3[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // 32 CNs of second BN - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG3[j][1]/2)); - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - - fprintf(fd," }\n"); - fprintf(fd,"}\n"); - } - - // ===================================================================== - // Process group with 4 BNs - fprintf(fd,"//Process group with 4 BNs\n"); - // Offset is 5*384/32 = 30 - const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}}; - - if (lut_numCnInCnGroups[1] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[1]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[1]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[1]); - - // Loop over every BN - //for (j=0; j<4; j++) - // { - - fprintf(fd," for (int j=0;j<4;j++) {\n"); - - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG4[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<3; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG4[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - // *p_cnProcBufResBit = _mm512_sign_epi8(min, sgn); - // p_cnProcBufResBit++; - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - fprintf(fd,"}\n"); - } - - - // ===================================================================== - // Process group with 5 BNs - fprintf(fd,"//Process group with 5 BNs\n"); - // Offset is 18*384/32 = 216 - const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864}, - {0,216,648,864}, {0,216,432,864}, {0,216,432,648}}; - - - if (lut_numCnInCnGroups[2] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[2]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[2]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[2]); - - // Loop over every BN - - fprintf(fd," for (int j=0;j<5;j++) {\n"); - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG5[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<4; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG5[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - fprintf(fd,"}\n"); - } - - // ===================================================================== - // Process group with 6 BNs - fprintf(fd,"//Process group with 6 BNs\n"); - // Offset is 8*384/32 = 48 - const uint16_t lut_idxCnProcG6[6][5] = {{96,192,288,384,480}, {0,192,288,384,480}, - {0,96,288,384,480}, {0,96,192,384,480}, - {0,96,192,288,480}, {0,96,192,288,384}}; - - - if (lut_numCnInCnGroups[3] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[3]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>6; - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[3]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[3]); - - // Loop over every BN - - fprintf(fd," for (int j=0;j<6;j++) {\n"); - - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG6[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<5; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG6[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - fprintf(fd,"}\n"); - } - - - // ===================================================================== - // Process group with 7 BNs - fprintf(fd,"//Process group with 7 BNs\n"); - // Offset is 5*384/32 = 30 - const uint16_t lut_idxCnProcG7[7][6] = {{60,120,180,240,300,360}, {0,120,180,240,300,360}, - {0,60,180,240,300,360}, {0,60,120,240,300,360}, - {0,60,120,180,300,360}, {0,60,120,180,240,360}, - {0,60,120,180,240,300}}; - - - if (lut_numCnInCnGroups[4] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[4]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>6; - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[4]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[4]); - - // Loop over every BN - - fprintf(fd," for (int j=0;j<7;j++) {\n"); - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0= p_cnProcBuf [%d+i];\n",(lut_idxCnProcG7[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<6; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG7[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - fprintf(fd,"}\n"); - } - - - // ===================================================================== - // Process group with 8 BNs - fprintf(fd,"//Process group with 8 BNs\n"); - // Offset is 2*384/32 = 12 - const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168}, - {0,24,72,96,112,144,168}, {0,24,48,96,112,144,168}, - {0,24,48,72,112,144,168}, {0,24,48,72,96,144,168}, - {0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}}; - - - - if (lut_numCnInCnGroups[5] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[5]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[5]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[5]); - - // Loop over every BN - - fprintf(fd," for (int j=0;j<8;j++) {\n"); - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG8[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<7; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG8[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - fprintf(fd,"}\n"); - } - - // ===================================================================== - // Process group with 9 BNs - fprintf(fd,"//Process group with 9 BNs\n"); - // Offset is 2*384/32 = 12 - const uint8_t lut_idxCnProcG9[9][8] = {{24,48,72,96,120,144,168,192}, {0,48,72,96,120,144,168,192}, - {0,24,72,96,120,144,168,192}, {0,24,48,96,120,144,168,192}, - {0,24,48,72,120,144,168,192}, {0,24,48,72,96,144,168,192}, - {0,24,48,72,96,120,168,192}, {0,24,48,72,96,120,144,192}, - {0,24,48,72,96,120,144,168}}; - - - - - if (lut_numCnInCnGroups[6] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[6]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[6]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[6]); - - // Set pointers to start of group - // Loop over every BN - - fprintf(fd," for (int j=0;j<9;j++) {\n"); - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG9[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<8; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG9[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - fprintf(fd,"}\n"); - } - - // ===================================================================== - // Process group with 10 BNs - fprintf(fd,"//Process group with 10 BNs\n"); - // Offset is 1*384/32 = 6 - const uint8_t lut_idxCnProcG10[10][9] = {{12,24,36,48,60,72,84,96,108}, {0,24,36,48,60,72,84,96,108}, - {0,12,36,48,60,72,84,96,108}, {0,12,24,48,60,72,84,96,108}, - {0,12,24,36,60,72,84,96,108}, {0,12,24,36,48,72,84,96,108}, - {0,12,24,36,48,60,84,96,108}, {0,12,24,36,48,60,72,96,108}, - {0,12,24,36,48,60,72,84,108}, {0,12,24,36,48,60,72,84,96}}; - - if (lut_numCnInCnGroups[7] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[7]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[7]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[7]); - - - // Loop over every BN - - fprintf(fd," for (int j=0;j<10;j++) {\n"); - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG10[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<9; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG10[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - fprintf(fd,"}\n"); - } - - - // ===================================================================== - // Process group with 19 BNs - fprintf(fd,"//Process group with 19 BNs\n"); - // Offset is 4*384/32 = 24 - const uint16_t lut_idxCnProcG19[19][18] = {{48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,288,336,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,384,432,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,480,528,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,576,624,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,672,720,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,768,816,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,864}, - {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816}}; - - - if (lut_numCnInCnGroups[8] > 0) - { - // Number of groups of 64 CNs for parallel processing - // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[8]*Z + 63)>>6; - - // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>6; - - // Set pointers to start of group 3 - fprintf(fd," p_cnProcBuf = (__m512i*) &cnProcBuf [%d];\n", lut_startAddrCnGroups[8]); - fprintf(fd," p_cnProcBufRes = (__m512i*) &cnProcBufRes[%d];\n", lut_startAddrCnGroups[8]); - - // Loop over every BN - - fprintf(fd," for (int j=0;j<11;j++) {\n"); - fprintf(fd," p_cnProcBufResBit = p_cnProcBufRes + %d;\n", (j*bitOffsetInGroup)); - fprintf(fd," for (int i=0;i<%d;i++) {\n",M); - // Abs and sign of 64 CNs (first BN) - // zmm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG19[j][0]/2)); - fprintf(fd," sgn = _mm512_xor_si512(*p_ones, zmm0);\n"); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); - - - // Loop over BNs - for (k=1; k<18; k++) - { - fprintf(fd," zmm0 = p_cnProcBuf [%d+i];\n",(lut_idxCnProcG19[j][k]/2)); - - // min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - fprintf(fd," min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0));\n"); - - // sgn = _mm512_sign_epi8(*p_ones, zmm0); - fprintf(fd," sgn = _mm512_xor_si512(sgn, zmm0);\n"); - } - - // Store result - // min = _mm512_min_epu8(min, maxLLR); // 128 in epi8 is -127 - fprintf(fd," min = _mm512_min_epu8(min, maxLLR);\n"); - - fprintf(fd," *p_cnProcBufResBit = conditional_negate(min, sgn,zeros);\n"); - fprintf(fd," p_cnProcBufResBit++;\n"); - fprintf(fd," }\n"); - fprintf(fd,"}\n"); - } - - fprintf(fd,"}\n"); - fclose(fd); -}//end of the function nrLDPC_cnProc_BG1 - - - - diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProc/nrLDPC_bnProc_BG1_R13_AVX2.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProc/nrLDPC_bnProc_BG1_R13_AVX2.h index d6bdfb4571..ada3706a6f 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProc/nrLDPC_bnProc_BG1_R13_AVX2.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProc/nrLDPC_bnProc_BG1_R13_AVX2.h @@ -13,30 +13,22 @@ static inline void nrLDPC_bnProc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [16128]; for (i=0;i>5; @@ -45,37 +37,27 @@ static inline void nrLDPC_bnProc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [16512]; for (i=0;i>5; @@ -84,44 +66,32 @@ static inline void nrLDPC_bnProc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [16896]; for (i=0;i>5; @@ -130,51 +100,37 @@ static inline void nrLDPC_bnProc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [17664]; for (i=0;i>5; @@ -183,58 +139,42 @@ static inline void nrLDPC_bnProc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [19200]; for (i=0;i>5; @@ -243,65 +183,47 @@ static inline void nrLDPC_bnProc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [20352]; for (i=0;i>5; @@ -310,72 +232,52 @@ static inline void nrLDPC_bnProc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [20736]; for (i=0;i>5; @@ -384,79 +286,57 @@ static inline void nrLDPC_bnProc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [22272]; for (i=0;i>5; @@ -465,86 +345,62 @@ static inline void nrLDPC_bnProc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [23424]; for (i=0;i>5; @@ -553,9 +409,67 @@ static inline void nrLDPC_bnProc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [24960]; for (i=0;i>5; @@ -29,23 +25,17 @@ static inline void nrLDPC_bnProc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [3840]; for (i=0;i>5; @@ -54,30 +44,22 @@ static inline void nrLDPC_bnProc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [5760]; for (i=0;i>5; @@ -86,37 +68,27 @@ static inline void nrLDPC_bnProc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [6912]; for (i=0;i>5; @@ -125,44 +97,32 @@ static inline void nrLDPC_bnProc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [9600]; for (i=0;i>5; @@ -256,86 +194,62 @@ static inline void nrLDPC_bnProc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [13056]; for (i=0;i>5; @@ -29,23 +25,17 @@ static inline void nrLDPC_bnProc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [1536]; for (i=0;i>5; @@ -54,30 +44,22 @@ static inline void nrLDPC_bnProc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [9600]; for (i=0;i>5; @@ -86,37 +68,27 @@ static inline void nrLDPC_bnProc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProcBu p_res = &p_bnProcBufRes[0]; p_llrRes = (__m256i*) &llrRes [9984]; for (i=0;i +#include +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>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>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>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>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>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>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>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>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 +#include +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>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>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>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>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>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>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>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>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>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>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>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 +#include +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>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>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>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>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>5; + M = (42*Z + 31)>>5; p_bnProcBuf = (__m128i*) &bnProcBuf [0]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [0]; p_llrProcBuf = (__m128i*) &llrProcBuf [0]; - p_llrProcBuf256 = (__m256i*) &llrProcBuf [0]; p_llrRes = (__m256i*) &llrRes [0]; for (int i=0,j=0;i>5; @@ -84,8 +77,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 6 CNs M = (2*Z + 31)>>5; @@ -120,8 +112,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 7 CNs M = (4*Z + 31)>>5; @@ -160,8 +151,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 8 CNs M = (3*Z + 31)>>5; @@ -204,8 +194,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 9 CNs M = (1*Z + 31)>>5; @@ -252,8 +241,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 10 CNs M = (4*Z + 31)>>5; @@ -304,8 +292,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 11 CNs M = (3*Z + 31)>>5; @@ -360,8 +347,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 12 CNs M = (4*Z + 31)>>5; @@ -420,8 +406,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 13 CNs M = (1*Z + 31)>>5; @@ -484,8 +469,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 14 CNs // Process group with 15 CNs @@ -622,8 +606,7 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 29 CNs // Process group with 30 CNs @@ -755,7 +738,6 @@ static inline void nrLDPC_bnProcPc_BG1_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG1_R23_AVX2.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG1_R23_AVX2.h index 6d6572bea3..47fd449fe4 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG1_R23_AVX2.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG1_R23_AVX2.h @@ -1,29 +1,23 @@ -static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) { +static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) { __m256i ymm0, ymm1, ymmRes0, ymmRes1; __m128i* p_bnProcBuf; - __m256i* p_bnProcBufRes; __m128i* p_llrProcBuf; - __m256i* p_llrProcBuf256; __m256i* p_llrRes; uint32_t M ; // Process group with 1 CNs - M = (0*Z + 31)>>5; + M = (9*Z + 31)>>5; p_bnProcBuf = (__m128i*) &bnProcBuf [0]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [0]; p_llrProcBuf = (__m128i*) &llrProcBuf [0]; - p_llrProcBuf256 = (__m256i*) &llrProcBuf [0]; p_llrRes = (__m256i*) &llrRes [0]; for (int i=0,j=0;i>5; @@ -32,7 +26,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc p_llrRes = (__m256i*) &llrRes [3456]; for (int i=0,j=0;i>5; @@ -66,8 +59,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 4 CNs M = (3*Z + 31)>>5; @@ -94,8 +86,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 5 CNs M = (7*Z + 31)>>5; @@ -126,8 +117,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 6 CNs M = (8*Z + 31)>>5; @@ -162,8 +152,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 7 CNs // Process group with 8 CNs @@ -222,8 +211,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 12 CNs M = (1*Z + 31)>>5; @@ -282,8 +270,7 @@ static inline void nrLDPC_bnProcPc_BG1_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 13 CNs // Process group with 14 CNs diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG1_R89_AVX2.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG1_R89_AVX2.h index 11f974ee87..8c7fa43f5d 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG1_R89_AVX2.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG1_R89_AVX2.h @@ -1,29 +1,23 @@ -static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) { +static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) { __m256i ymm0, ymm1, ymmRes0, ymmRes1; __m128i* p_bnProcBuf; - __m256i* p_bnProcBufRes; __m128i* p_llrProcBuf; - __m256i* p_llrProcBuf256; __m256i* p_llrRes; uint32_t M ; // Process group with 1 CNs - M = (0*Z + 31)>>5; + M = (1*Z + 31)>>5; p_bnProcBuf = (__m128i*) &bnProcBuf [0]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [0]; p_llrProcBuf = (__m128i*) &llrProcBuf [0]; - p_llrProcBuf256 = (__m256i*) &llrProcBuf [0]; p_llrRes = (__m256i*) &llrRes [0]; for (int i=0,j=0;i>5; @@ -32,7 +26,7 @@ static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProc p_llrRes = (__m256i*) &llrRes [384]; for (int i=0,j=0;i>5; @@ -66,8 +59,7 @@ static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 4 CNs M = (1*Z + 31)>>5; @@ -94,8 +86,7 @@ static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 5 CNs M = (1*Z + 31)>>5; @@ -126,8 +117,7 @@ static inline void nrLDPC_bnProcPc_BG1_R89_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 6 CNs // Process group with 7 CNs diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG2_R13_AVX2.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG2_R13_AVX2.h index 4ca040e27d..c4268cd7af 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG2_R13_AVX2.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG2_R13_AVX2.h @@ -1,29 +1,23 @@ -static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) { +static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) { __m256i ymm0, ymm1, ymmRes0, ymmRes1; __m128i* p_bnProcBuf; - __m256i* p_bnProcBufRes; __m128i* p_llrProcBuf; - __m256i* p_llrProcBuf256; __m256i* p_llrRes; uint32_t M ; // Process group with 1 CNs - M = (0*Z + 31)>>5; + M = (18*Z + 31)>>5; p_bnProcBuf = (__m128i*) &bnProcBuf [0]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [0]; p_llrProcBuf = (__m128i*) &llrProcBuf [0]; - p_llrProcBuf256 = (__m256i*) &llrProcBuf [0]; p_llrRes = (__m256i*) &llrRes [0]; for (int i=0,j=0;i>5; @@ -32,7 +26,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc p_llrRes = (__m256i*) &llrRes [6912]; for (int i=0,j=0;i>5; @@ -103,8 +95,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 6 CNs M = (5*Z + 31)>>5; @@ -139,8 +130,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 7 CNs M = (1*Z + 31)>>5; @@ -179,8 +169,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 8 CNs M = (1*Z + 31)>>5; @@ -223,8 +212,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 9 CNs // Process group with 10 CNs @@ -291,8 +279,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 14 CNs M = (1*Z + 31)>>5; @@ -359,8 +346,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 15 CNs // Process group with 16 CNs @@ -436,8 +422,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 17 CNs // Process group with 18 CNs @@ -445,7 +430,7 @@ static inline void nrLDPC_bnProcPc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProc // Process group with 20 CNs // Process group with 21 CNs // Process group with 22 CNs -// Process group with 23 CNs +// Process group with <23 CNs // Process group with 24 CNs // Process group with 25 CNs // Process group with 26 CNs diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG2_R15_AVX2.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG2_R15_AVX2.h index 2dc723ad25..3a43ebe6b5 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG2_R15_AVX2.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG2_R15_AVX2.h @@ -1,29 +1,23 @@ -static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) { +static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) { __m256i ymm0, ymm1, ymmRes0, ymmRes1; __m128i* p_bnProcBuf; - __m256i* p_bnProcBufRes; __m128i* p_llrProcBuf; - __m256i* p_llrProcBuf256; __m256i* p_llrRes; uint32_t M ; // Process group with 1 CNs - M = (0*Z + 31)>>5; + M = (38*Z + 31)>>5; p_bnProcBuf = (__m128i*) &bnProcBuf [0]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [0]; p_llrProcBuf = (__m128i*) &llrProcBuf [0]; - p_llrProcBuf256 = (__m256i*) &llrProcBuf [0]; p_llrRes = (__m256i*) &llrRes [0]; for (int i=0,j=0;i>5; @@ -93,8 +86,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 7 CNs M = (1*Z + 31)>>5; @@ -133,8 +125,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 8 CNs M = (1*Z + 31)>>5; @@ -177,8 +168,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 9 CNs M = (2*Z + 31)>>5; @@ -225,8 +215,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 10 CNs M = (1*Z + 31)>>5; @@ -277,8 +266,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 11 CNs // Process group with 12 CNs @@ -338,8 +326,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 13 CNs M = (1*Z + 31)>>5; @@ -402,8 +389,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 14 CNs M = (1*Z + 31)>>5; @@ -470,8 +456,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 15 CNs // Process group with 16 CNs @@ -547,8 +532,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 17 CNs // Process group with 18 CNs @@ -652,10 +636,9 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } -// Process group with 23 CNs +// Process group with <23 CNs M = (1*Z + 31)>>5; p_bnProcBuf = (__m128i*) &bnProcBuf [66816]; p_llrProcBuf = (__m128i*) &llrProcBuf [19584]; @@ -756,8 +739,7 @@ static inline void nrLDPC_bnProcPc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 24 CNs // Process group with 25 CNs diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG2_R23_AVX2.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG2_R23_AVX2.h index ddb40887f7..aec8838761 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG2_R23_AVX2.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/bnProcPc/nrLDPC_bnProcPc_BG2_R23_AVX2.h @@ -1,29 +1,23 @@ -static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) { +static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* llrRes , int8_t* llrProcBuf, uint16_t Z ) { __m256i ymm0, ymm1, ymmRes0, ymmRes1; __m128i* p_bnProcBuf; - __m256i* p_bnProcBufRes; __m128i* p_llrProcBuf; - __m256i* p_llrProcBuf256; __m256i* p_llrRes; uint32_t M ; // Process group with 1 CNs - M = (0*Z + 31)>>5; + M = (3*Z + 31)>>5; p_bnProcBuf = (__m128i*) &bnProcBuf [0]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [0]; p_llrProcBuf = (__m128i*) &llrProcBuf [0]; - p_llrProcBuf256 = (__m256i*) &llrProcBuf [0]; p_llrRes = (__m256i*) &llrRes [0]; for (int i=0,j=0;i>5; @@ -32,7 +26,7 @@ static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc p_llrRes = (__m256i*) &llrRes [1152]; for (int i=0,j=0;i>5; @@ -66,8 +59,7 @@ static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 4 CNs M = (3*Z + 31)>>5; @@ -94,8 +86,7 @@ static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 5 CNs M = (2*Z + 31)>>5; @@ -126,8 +117,7 @@ static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 6 CNs M = (1*Z + 31)>>5; @@ -162,8 +152,7 @@ static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc ymm1 = _mm256_cvtepi8_epi16(p_llrProcBuf[j +1 ]); ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); ymm0 = _mm256_packs_epi16(ymmRes0, ymmRes1); - *p_llrRes = _mm256_permute4x64_epi64(ymm0, 0xD8); - p_llrRes++; + p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8); } // Process group with 7 CNs // Process group with 8 CNs @@ -181,7 +170,7 @@ static inline void nrLDPC_bnProcPc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProc // Process group with 20 CNs // Process group with 21 CNs // Process group with 22 CNs -// Process group with 23 CNs +// Process group with <23 CNs // Process group with 24 CNs // Process group with 25 CNs // Process group with 26 CNs diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc/nrLDPC_cnProc_BG1_R13_AVX2.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc/nrLDPC_cnProc_BG1_R13_AVX2.h index 12ccd19459..19f4406ae7 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc/nrLDPC_cnProc_BG1_R13_AVX2.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc/nrLDPC_cnProc_BG1_R13_AVX2.h @@ -460,7 +460,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2448+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2496+i]; @@ -485,7 +485,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2448+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2496+i]; @@ -510,7 +510,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2448+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2496+i]; @@ -535,7 +535,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2448+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2496+i]; @@ -560,7 +560,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2424+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2496+i]; @@ -613,7 +613,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2448+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2520+i]; @@ -638,7 +638,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2448+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2496+i]; diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc/nrLDPC_cnProc_BG1_R23_AVX2.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc/nrLDPC_cnProc_BG1_R23_AVX2.h index 3fafddd85e..113daa7e21 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc/nrLDPC_cnProc_BG1_R23_AVX2.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc/nrLDPC_cnProc_BG1_R23_AVX2.h @@ -211,7 +211,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2448+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2496+i]; @@ -236,7 +236,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2448+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2496+i]; @@ -261,7 +261,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2448+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2496+i]; @@ -286,7 +286,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2448+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2496+i]; @@ -311,7 +311,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2424+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2496+i]; @@ -364,7 +364,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2448+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2520+i]; @@ -389,7 +389,7 @@ M = (2*Z + 31)>>5; ymm0 = ((__m256i*)cnProcBuf)[2448+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); - ymm0 = ((__m256i*)cnProcBuf)[2464+i]; + ymm0 = ((__m256i*)cnProcBuf)[2472+i]; min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); sgn = _mm256_sign_epi8(sgn, ymm0); ymm0 = ((__m256i*)cnProcBuf)[2496+i]; diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG1_R13_AVX512.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG1_R13_AVX512.h index b53bff6d41..4e60809501 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG1_R13_AVX512.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG1_R13_AVX512.h @@ -460,7 +460,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1248+i]; @@ -485,7 +485,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1248+i]; @@ -510,7 +510,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1248+i]; @@ -535,7 +535,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1248+i]; @@ -560,7 +560,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1248+i]; @@ -613,7 +613,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1260+i]; @@ -638,7 +638,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1248+i]; diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG1_R23_AVX512.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG1_R23_AVX512.h index 18ad638b6b..2f5ad66dc3 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG1_R23_AVX512.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG1_R23_AVX512.h @@ -211,7 +211,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1248+i]; @@ -236,7 +236,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1248+i]; @@ -261,7 +261,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1248+i]; @@ -286,7 +286,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1248+i]; @@ -311,7 +311,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1248+i]; @@ -364,7 +364,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1260+i]; @@ -389,7 +389,7 @@ M = (2*Z + 63)>>6; zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1232+i]; + zmm0 = ((__m512i*)cnProcBuf)[1236+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); sgn = _mm512_xor_si512(sgn, zmm0); zmm0 = ((__m512i*)cnProcBuf)[1248+i]; diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG2_R13_AVX512.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG2_R13_AVX512.h index 2fd076df2d..a4fa8b480e 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG2_R13_AVX512.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/cnProc_avx512/nrLDPC_cnProc_BG2_R13_AVX512.h @@ -1,15 +1,17 @@ #define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) static inline void nrLDPC_cnProc_BG2_R13_AVX512(int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z) { uint32_t M; - __m512i zmm0, min, sgn,zeros,maxLLR; + __m512i zmm0, min, sgn,zeros,ones,maxLLR; zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); + ones = _mm512_set1_epi8((char)1); //Process group with 3 BNs //Process group with 4 BNs M = (8*Z + 63)>>6; for (int i=0;i>6; for (int i=0;i>6; for (int i=0;i>6; for (int i=0;i>6; for (int i=0;i>6; - for (int i=0;i>6; + for (int i=0;i>6; for (int i=0;i>6; for (int i=0;i>6; for (int i=0;i>6; for (int i=0;i>6; for (int i=0;i>6; for (int i=0;i>6; for (int i=0;i>6; for (int i=0;i>6; for (int i=0;i +#pragma omp declare simd notinbranch +static inline void nrLDPC_llr2CnProcBuf_BG1_AVX2(t_nrLDPC_lut* p_lut, int8_t* llr, int8_t* cnProcBuf, uint16_t Z) { + const uint16_t (*lut_circShift_CNG3) [lut_numCnInCnGroups_BG1_R13[0]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[0]]) p_lut->circShift[0]; + const uint16_t (*lut_circShift_CNG4) [lut_numCnInCnGroups_BG1_R13[1]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[1]]) p_lut->circShift[1]; + const uint16_t (*lut_circShift_CNG5) [lut_numCnInCnGroups_BG1_R13[2]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[2]]) p_lut->circShift[2]; + const uint16_t (*lut_circShift_CNG6) [lut_numCnInCnGroups_BG1_R13[3]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[3]]) p_lut->circShift[3]; + const uint16_t (*lut_circShift_CNG7) [lut_numCnInCnGroups_BG1_R13[4]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[4]]) p_lut->circShift[4]; + const uint16_t (*lut_circShift_CNG8) [lut_numCnInCnGroups_BG1_R13[5]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[5]]) p_lut->circShift[5]; + const uint16_t (*lut_circShift_CNG9) [lut_numCnInCnGroups_BG1_R13[6]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[6]]) p_lut->circShift[6]; + const uint16_t (*lut_circShift_CNG10)[lut_numCnInCnGroups_BG1_R13[7]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[7]]) p_lut->circShift[7]; + const uint16_t (*lut_circShift_CNG19)[lut_numCnInCnGroups_BG1_R13[8]] = (uint16_t(*)[lut_numCnInCnGroups_BG1_R13[8]]) p_lut->circShift[8]; + const uint8_t (*lut_posBnInCnProcBuf_CNG3) [lut_numCnInCnGroups_BG1_R13[0]] = (uint8_t(*)[lut_numCnInCnGroups_BG1_R13[0]]) p_lut->posBnInCnProcBuf[0]; + const uint8_t (*lut_posBnInCnProcBuf_CNG4) [lut_numCnInCnGroups_BG1_R13[1]] = (uint8_t(*)[lut_numCnInCnGroups_BG1_R13[1]]) p_lut->posBnInCnProcBuf[1]; + const uint8_t (*lut_posBnInCnProcBuf_CNG5) [lut_numCnInCnGroups_BG1_R13[2]] = (uint8_t(*)[lut_numCnInCnGroups_BG1_R13[2]]) p_lut->posBnInCnProcBuf[2]; + const uint8_t (*lut_posBnInCnProcBuf_CNG6) [lut_numCnInCnGroups_BG1_R13[3]] = (uint8_t(*)[lut_numCnInCnGroups_BG1_R13[3]]) p_lut->posBnInCnProcBuf[3]; + const uint8_t (*lut_posBnInCnProcBuf_CNG7) [lut_numCnInCnGroups_BG1_R13[4]] = (uint8_t(*)[lut_numCnInCnGroups_BG1_R13[4]]) p_lut->posBnInCnProcBuf[4]; + const uint8_t (*lut_posBnInCnProcBuf_CNG8) [lut_numCnInCnGroups_BG1_R13[5]] = (uint8_t(*)[lut_numCnInCnGroups_BG1_R13[5]]) p_lut->posBnInCnProcBuf[5]; + const uint8_t (*lut_posBnInCnProcBuf_CNG9) [lut_numCnInCnGroups_BG1_R13[6]] = (uint8_t(*)[lut_numCnInCnGroups_BG1_R13[6]]) p_lut->posBnInCnProcBuf[6]; + const uint8_t (*lut_posBnInCnProcBuf_CNG10)[lut_numCnInCnGroups_BG1_R13[7]] = (uint8_t(*)[lut_numCnInCnGroups_BG1_R13[7]]) p_lut->posBnInCnProcBuf[7]; + const uint8_t (*lut_posBnInCnProcBuf_CNG19)[lut_numCnInCnGroups_BG1_R13[8]] = (uint8_t(*)[lut_numCnInCnGroups_BG1_R13[8]]) p_lut->posBnInCnProcBuf[8]; + int8_t* p_cnProcBuf; + uint32_t idxBn = 0; + p_cnProcBuf= &cnProcBuf[0]; + idxBn = lut_posBnInCnProcBuf_CNG3[0][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG3[0][0]); + p_cnProcBuf= &cnProcBuf[384]; + idxBn = lut_posBnInCnProcBuf_CNG3[1][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG3[1][0]); + p_cnProcBuf= &cnProcBuf[768]; + idxBn = lut_posBnInCnProcBuf_CNG3[2][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG3[2][0]); + p_cnProcBuf= &cnProcBuf[1152]; + idxBn = lut_posBnInCnProcBuf_CNG4[0][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[0][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[0][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[0][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[0][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[0][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[0][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[0][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[0][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[0][4]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[3072]; + idxBn = lut_posBnInCnProcBuf_CNG4[1][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[1][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[1][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[1][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[1][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[1][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[1][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[1][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[1][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[1][4]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[4992]; + idxBn = lut_posBnInCnProcBuf_CNG4[2][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[2][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[2][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[2][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[2][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[2][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[2][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[2][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[2][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[2][4]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[6912]; + idxBn = lut_posBnInCnProcBuf_CNG4[3][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[3][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[3][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[3][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[3][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[3][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[3][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[3][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG4[3][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG4[3][4]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[8832]; + idxBn = lut_posBnInCnProcBuf_CNG5[0][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][4]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][5]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][5]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][6]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][6]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][7]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][7]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][8]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][8]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][9]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][9]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][10]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][10]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][11]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][11]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][12]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][12]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][13]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][13]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][14]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][14]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][15]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][15]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][16]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][16]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[0][17]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[0][17]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[15744]; + idxBn = lut_posBnInCnProcBuf_CNG5[1][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][4]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][5]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][5]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][6]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][6]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][7]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][7]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][8]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][8]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][9]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][9]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][10]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][10]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][11]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][11]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][12]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][12]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][13]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][13]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][14]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][14]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][15]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][15]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][16]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][16]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[1][17]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[1][17]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[22656]; + idxBn = lut_posBnInCnProcBuf_CNG5[2][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][4]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][5]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][5]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][6]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][6]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][7]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][7]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][8]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][8]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][9]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][9]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][10]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][10]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][11]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][11]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][12]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][12]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][13]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][13]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][14]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][14]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][15]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][15]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][16]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][16]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[2][17]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[2][17]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[29568]; + idxBn = lut_posBnInCnProcBuf_CNG5[3][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][4]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][5]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][5]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][6]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][6]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][7]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][7]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][8]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][8]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][9]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][9]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][10]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][10]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][11]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][11]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][12]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][12]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][13]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][13]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][14]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][14]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][15]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][15]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][16]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][16]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[3][17]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[3][17]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[36480]; + idxBn = lut_posBnInCnProcBuf_CNG5[4][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][4]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][5]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][5]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][6]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][6]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][7]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][7]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][8]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][8]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][9]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][9]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][10]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][10]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][11]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][11]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][12]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][12]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][13]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][13]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][14]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][14]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][15]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][15]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][16]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][16]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG5[4][17]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG5[4][17]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[43392]; + idxBn = lut_posBnInCnProcBuf_CNG6[0][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[0][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[0][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[0][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[0][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[0][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[0][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[0][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[0][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[0][4]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[0][5]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[0][5]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[0][6]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[0][6]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[0][7]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[0][7]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[46464]; + idxBn = lut_posBnInCnProcBuf_CNG6[1][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[1][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[1][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[1][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[1][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[1][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[1][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[1][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[1][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[1][4]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[1][5]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[1][5]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[1][6]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[1][6]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[1][7]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[1][7]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[49536]; + idxBn = lut_posBnInCnProcBuf_CNG6[2][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[2][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[2][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[2][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[2][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[2][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[2][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[2][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[2][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[2][4]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[2][5]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[2][5]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[2][6]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[2][6]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[2][7]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[2][7]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[52608]; + idxBn = lut_posBnInCnProcBuf_CNG6[3][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[3][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[3][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[3][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[3][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[3][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[3][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[3][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[3][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[3][4]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[3][5]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[3][5]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[3][6]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[3][6]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[3][7]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[3][7]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[55680]; + idxBn = lut_posBnInCnProcBuf_CNG6[4][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[4][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[4][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[4][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[4][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[4][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[4][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[4][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[4][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[4][4]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[4][5]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[4][5]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[4][6]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[4][6]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[4][7]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[4][7]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[58752]; + idxBn = lut_posBnInCnProcBuf_CNG6[5][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[5][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[5][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[5][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[5][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[5][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[5][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[5][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[5][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[5][4]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[5][5]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[5][5]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[5][6]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[5][6]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG6[5][7]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG6[5][7]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[61824]; + idxBn = lut_posBnInCnProcBuf_CNG7[0][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[0][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[0][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[0][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[0][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[0][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[0][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[0][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[0][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[0][4]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[63744]; + idxBn = lut_posBnInCnProcBuf_CNG7[1][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[1][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[1][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[1][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[1][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[1][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[1][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[1][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[1][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[1][4]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[65664]; + idxBn = lut_posBnInCnProcBuf_CNG7[2][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[2][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[2][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[2][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[2][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[2][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[2][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[2][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[2][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[2][4]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[67584]; + idxBn = lut_posBnInCnProcBuf_CNG7[3][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[3][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[3][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[3][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[3][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[3][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[3][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[3][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[3][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[3][4]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[69504]; + idxBn = lut_posBnInCnProcBuf_CNG7[4][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[4][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[4][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[4][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[4][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[4][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[4][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[4][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[4][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[4][4]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[71424]; + idxBn = lut_posBnInCnProcBuf_CNG7[5][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[5][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[5][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[5][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[5][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[5][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[5][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[5][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[5][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[5][4]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[73344]; + idxBn = lut_posBnInCnProcBuf_CNG7[6][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[6][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[6][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[6][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[6][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[6][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[6][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[6][3]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG7[6][4]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG7[6][4]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[75264]; + idxBn = lut_posBnInCnProcBuf_CNG8[0][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[0][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG8[0][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[0][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[76032]; + idxBn = lut_posBnInCnProcBuf_CNG8[1][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[1][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG8[1][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[1][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[76800]; + idxBn = lut_posBnInCnProcBuf_CNG8[2][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[2][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG8[2][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[2][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[77568]; + idxBn = lut_posBnInCnProcBuf_CNG8[3][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[3][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG8[3][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[3][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[78336]; + idxBn = lut_posBnInCnProcBuf_CNG8[4][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[4][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG8[4][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[4][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[79104]; + idxBn = lut_posBnInCnProcBuf_CNG8[5][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[5][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG8[5][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[5][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[79872]; + idxBn = lut_posBnInCnProcBuf_CNG8[6][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[6][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG8[6][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[6][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[80640]; + idxBn = lut_posBnInCnProcBuf_CNG8[7][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[7][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG8[7][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG8[7][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[81408]; + idxBn = lut_posBnInCnProcBuf_CNG9[0][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[0][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG9[0][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[0][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[82176]; + idxBn = lut_posBnInCnProcBuf_CNG9[1][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[1][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG9[1][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[1][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[82944]; + idxBn = lut_posBnInCnProcBuf_CNG9[2][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[2][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG9[2][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[2][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[83712]; + idxBn = lut_posBnInCnProcBuf_CNG9[3][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[3][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG9[3][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[3][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[84480]; + idxBn = lut_posBnInCnProcBuf_CNG9[4][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[4][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG9[4][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[4][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[85248]; + idxBn = lut_posBnInCnProcBuf_CNG9[5][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[5][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG9[5][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[5][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[86016]; + idxBn = lut_posBnInCnProcBuf_CNG9[6][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[6][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG9[6][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[6][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[86784]; + idxBn = lut_posBnInCnProcBuf_CNG9[7][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[7][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG9[7][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[7][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[87552]; + idxBn = lut_posBnInCnProcBuf_CNG9[8][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[8][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG9[8][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG9[8][1]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[88320]; + idxBn = lut_posBnInCnProcBuf_CNG10[0][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG10[0][0]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[88704]; + idxBn = lut_posBnInCnProcBuf_CNG10[1][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG10[1][0]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[89088]; + idxBn = lut_posBnInCnProcBuf_CNG10[2][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG10[2][0]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[89472]; + idxBn = lut_posBnInCnProcBuf_CNG10[3][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG10[3][0]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[89856]; + idxBn = lut_posBnInCnProcBuf_CNG10[4][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG10[4][0]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[90240]; + idxBn = lut_posBnInCnProcBuf_CNG10[5][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG10[5][0]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[90624]; + idxBn = lut_posBnInCnProcBuf_CNG10[6][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG10[6][0]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[91008]; + idxBn = lut_posBnInCnProcBuf_CNG10[7][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG10[7][0]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[91392]; + idxBn = lut_posBnInCnProcBuf_CNG10[8][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG10[8][0]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[91776]; + idxBn = lut_posBnInCnProcBuf_CNG10[9][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG10[9][0]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[92160]; + idxBn = lut_posBnInCnProcBuf_CNG19[0][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[0][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[0][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[0][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[0][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[0][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[0][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[0][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[93696]; + idxBn = lut_posBnInCnProcBuf_CNG19[1][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[1][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[1][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[1][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[1][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[1][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[1][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[1][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[95232]; + idxBn = lut_posBnInCnProcBuf_CNG19[2][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[2][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[2][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[2][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[2][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[2][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[2][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[2][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[96768]; + idxBn = lut_posBnInCnProcBuf_CNG19[3][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[3][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[3][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[3][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[3][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[3][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[3][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[3][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[98304]; + idxBn = lut_posBnInCnProcBuf_CNG19[4][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[4][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[4][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[4][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[4][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[4][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[4][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[4][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[99840]; + idxBn = lut_posBnInCnProcBuf_CNG19[5][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[5][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[5][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[5][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[5][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[5][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[5][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[5][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[101376]; + idxBn = lut_posBnInCnProcBuf_CNG19[6][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[6][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[6][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[6][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[6][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[6][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[6][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[6][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[102912]; + idxBn = lut_posBnInCnProcBuf_CNG19[7][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[7][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[7][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[7][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[7][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[7][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[7][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[7][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[104448]; + idxBn = lut_posBnInCnProcBuf_CNG19[8][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[8][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[8][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[8][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[8][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[8][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[8][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[8][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[105984]; + idxBn = lut_posBnInCnProcBuf_CNG19[9][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[9][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[9][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[9][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[9][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[9][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[9][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[9][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[107520]; + idxBn = lut_posBnInCnProcBuf_CNG19[10][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[10][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[10][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[10][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[10][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[10][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[10][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[10][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[109056]; + idxBn = lut_posBnInCnProcBuf_CNG19[11][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[11][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[11][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[11][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[11][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[11][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[11][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[11][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[110592]; + idxBn = lut_posBnInCnProcBuf_CNG19[12][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[12][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[12][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[12][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[12][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[12][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[12][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[12][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[112128]; + idxBn = lut_posBnInCnProcBuf_CNG19[13][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[13][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[13][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[13][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[13][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[13][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[13][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[13][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[113664]; + idxBn = lut_posBnInCnProcBuf_CNG19[14][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[14][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[14][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[14][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[14][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[14][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[14][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[14][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[115200]; + idxBn = lut_posBnInCnProcBuf_CNG19[15][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[15][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[15][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[15][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[15][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[15][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[15][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[15][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[116736]; + idxBn = lut_posBnInCnProcBuf_CNG19[16][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[16][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[16][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[16][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[16][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[16][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[16][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[16][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[118272]; + idxBn = lut_posBnInCnProcBuf_CNG19[17][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[17][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[17][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[17][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[17][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[17][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[17][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[17][3]); + p_cnProcBuf += Z; + p_cnProcBuf= &cnProcBuf[119808]; + idxBn = lut_posBnInCnProcBuf_CNG19[18][0]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[18][0]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[18][1]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[18][1]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[18][2]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[18][2]); + p_cnProcBuf += Z; + idxBn = lut_posBnInCnProcBuf_CNG19[18][3]*Z; + nrLDPC_circ_memcpy1(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG19[18][3]); + p_cnProcBuf += Z; +}