From 845a226410e47c07b1fec21626af0ddff03aa1b2 Mon Sep 17 00:00:00 2001 From: Sy Date: Mon, 6 Jul 2020 02:34:12 +0200 Subject: [PATCH] optimized 5G NR LDPC decoder --- .../CODING/nrLDPC_decoder/nrLDPC_decoder.c | 42 +- .../generator_bnProc/bnProcPc_gen_BG1_avx2.c | 121 ++-- .../generator_bnProc/bnProcPc_gen_BG1_avx2.o | Bin 67136 -> 0 bytes .../generator_bnProc/bnProcPc_gen_BG2_avx2.c | 64 +- .../generator_bnProc/bnProcPc_gen_BG2_avx2.o | Bin 68416 -> 0 bytes .../generator_bnProc/bnProc_gen_BG1_avx2.c | 283 +++----- .../generator_bnProc/bnProc_gen_BG1_avx2.o | Bin 43488 -> 0 bytes .../generator_bnProc/bnProc_gen_BG2_avx2.c | 285 +++----- .../generator_bnProc/bnProc_gen_BG2_avx2.o | Bin 43688 -> 0 bytes .../generator_bnProc/bnProc_gen_avx2 | Bin 119560 -> 110224 bytes .../nrLDPC_tools/generator_bnProc/main.o | Bin 3704 -> 0 bytes .../generator_bnProc/sauvegarde.tar.gz | Bin 9262 -> 0 bytes .../bnProcPc_gen_BG1_avx512.c | 8 +- .../bnProcPc_gen_BG2_avx512.c | 4 +- .../bnProc_gen_BG1_avx512.c | 282 +++----- .../bnProc_gen_BG2_avx512.c | 288 +++------ .../generator_bnProc_avx512/bnProc_gen_avx512 | Bin 119632 -> 114464 bytes .../bnProc/nrLDPC_bnProc_BG1_R13_AVX2.h | 600 ++++------------- .../bnProc/nrLDPC_bnProc_BG1_R23_AVX2.h | 190 ++---- .../bnProc/nrLDPC_bnProc_BG1_R89_AVX2.h | 68 +- .../bnProc/nrLDPC_bnProc_BG2_R13_AVX2.c | 320 +++------ .../bnProc/nrLDPC_bnProc_BG2_R15_AVX2.c | 606 +++++------------ .../bnProc/nrLDPC_bnProc_BG2_R23_AVX2.c | 92 +-- .../bnProcPc/nrLDPC_bnProcPc_BG1_R13_AVX2.h | 2 +- .../bnProcPc/nrLDPC_bnProcPc_BG1_R23_AVX2.h | 6 +- .../bnProcPc/nrLDPC_bnProcPc_BG1_R89_AVX2.h | 6 +- .../bnProcPc/nrLDPC_bnProcPc_BG2_R13_AVX2.h | 20 +- .../bnProcPc/nrLDPC_bnProcPc_BG2_R15_AVX2.h | 16 +- .../bnProcPc/nrLDPC_bnProcPc_BG2_R23_AVX2.h | 20 +- .../nrLDPC_bnProc_BG1_R13_AVX512.h | 600 ++++------------- .../nrLDPC_bnProc_BG1_R23_AVX512.h | 190 ++---- .../nrLDPC_bnProc_BG1_R89_AVX512.h | 68 +- .../nrLDPC_bnProc_BG2_R13_AVX512.h | 322 +++------- .../nrLDPC_bnProc_BG2_R15_AVX512.h | 608 +++++------------- .../nrLDPC_bnProc_BG2_R23_AVX512.h | 94 +-- .../nrLDPC_bnProcPc_BG1_R23_AVX512.h | 4 +- .../nrLDPC_bnProcPc_BG1_R89_AVX512.h | 4 +- .../nrLDPC_bnProcPc_BG2_R13_AVX512.h | 4 +- .../nrLDPC_bnProcPc_BG2_R23_AVX512.h | 4 +- 39 files changed, 1386 insertions(+), 3835 deletions(-) delete mode 100644 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_avx2.o delete mode 100644 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG2_avx2.o delete mode 100644 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_avx2.o delete mode 100644 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_avx2.o delete mode 100644 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/main.o delete mode 100644 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/sauvegarde.tar.gz diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c index ffcad00af4..3379742b5b 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c @@ -1,4 +1,5 @@ + /* * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more * contributor license agreements. See the NOTICE file distributed with @@ -328,17 +329,17 @@ 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->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 23: { - nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes, p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 89: { - nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes, p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } } @@ -349,20 +350,20 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP { case 15: { - nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes, p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 13: { - nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 23: { - nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } @@ -614,17 +615,17 @@ if (BG==1) { case 13: { - nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 23: { - nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes, p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 89: { - nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes, p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } } @@ -635,20 +636,20 @@ if (BG==1) { case 15: { - nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 13: { - nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 23: { - nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } @@ -723,7 +724,7 @@ if (BG==1) #ifdef __AVX512BW__ nrLDPC_bnProc_BG2_R13_AVX512(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, Z); #else - nrLDPC_bnProc_BG2_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,p_procBuf->llrRes, Z); + nrLDPC_bnProc_BG2_R13_AVX2(p_procBuf->bnProcBuf, p_procBuf->bnProcBufRes,+p_procBuf->llrRes, Z); #endif break; } @@ -906,7 +907,7 @@ if (BG==1) #ifdef NR_LDPC_PROFILER_DETAIL start_meas(&p_profiler->bnProcPc); #endif - //nrLDPC_bnProcPc(p_lut, p_procBuf, Z); + // nrLDPC_bnProcPc(p_lut, p_procBuf, Z); if (BG==1) { @@ -914,17 +915,17 @@ if (BG==1) { case 13: { - nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 23: { - nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes, p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 89: { - nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG1_R89_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes, p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } } @@ -935,20 +936,20 @@ if (BG==1) { case 15: { - nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf, p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R15_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes, p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 13: { - nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R13_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } case 23: { - nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); + nrLDPC_bnProcPc_BG2_R23_AVX2(p_procBuf->bnProcBuf,p_procBuf->bnProcBufRes,p_procBuf->llrRes, p_procBuf->llrProcBuf, Z); break; } @@ -1136,3 +1137,4 @@ if (BG==1) + diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_avx2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_avx2.c index fd01558049..3207a7a308 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_avx2.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_avx2.c @@ -1,6 +1,7 @@ + #include #include #include "../../nrLDPCdecoder_defs.h" @@ -24,7 +25,7 @@ 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* 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* bnProcBufRes,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; @@ -64,16 +65,18 @@ void nrLDPC_bnProcPc_BG1_generator_AVX2(int R) fprintf(fd," __m128i* p_bnProcBuf; \n"); fprintf(fd," __m128i* p_llrProcBuf;\n"); fprintf(fd," __m256i* p_llrRes; \n"); + // fprintf(fd," __m256i* p_bnProcBufRes; \n"); +// fprintf(fd," __m256i* p_llrProcBuf256; \n"); fprintf(fd," uint32_t M ;\n"); -fprintf(fd, "// Process group with 1 CNs \n"); + fprintf(fd, "// Process group with 1 CNs \n"); - - // Process group with 2 CNs /* - if (lut_numBnInBnGroups[0] > 0) - { + // Process group with 1 CNs + + // if (lut_numBnInBnGroups[0] > 0) + // { // If elements in group move to next address // idxBnGroup++; @@ -81,49 +84,44 @@ fprintf(fd, "// Process group with 1 CNs \n"); fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[0] ); // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[0]*NR_LDPC_ZMAX)>>4; + // 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_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]); // Loop over BNs fprintf(fd," for (int i=0,j=0;i>5 ); fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -516,7 +514,7 @@ fprintf(fd, "// Process group with 8 CNs \n"); //fprintf(fd," (__m256i*) &llrRes[%d + i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n",lut_startAddrBnGroupsLlr[idxBnGroup]>>5 ); fprintf(fd," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -572,7 +570,7 @@ fprintf(fd, "// Process group with 9 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[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -628,7 +626,7 @@ fprintf(fd, "// Process group with 10 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -686,7 +684,7 @@ fprintf(fd, "// Process group with 11 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } // ===================================================================== @@ -741,7 +739,7 @@ fprintf(fd, "// Process group with 12 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -797,7 +795,7 @@ fprintf(fd, "// Process group with 13 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -854,7 +852,7 @@ fprintf(fd, "// Process group with 14 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -910,7 +908,7 @@ fprintf(fd, "// Process group with 15 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -967,7 +965,7 @@ fprintf(fd, "// Process group with 16 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1023,7 +1021,7 @@ fprintf(fd, "// Process group with 17 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1079,7 +1077,7 @@ fprintf(fd, "// Process group with 18 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1134,7 +1132,7 @@ fprintf(fd, "// Process group with 19 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1190,7 +1188,7 @@ fprintf(fd, "// Process group with 20 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1250,7 +1248,7 @@ fprintf(fd, "// Process group with 21 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } // ===================================================================== @@ -1305,7 +1303,7 @@ fprintf(fd, "// Process group with 22 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1347,7 +1345,7 @@ fprintf(fd, "// Process group with <23 CNs \n"); fprintf(fd," ymm1 = _mm256_cvtepi8_epi16(p_bnProcBuf[%d + j +1]);\n", k*cnOffsetInGroup); fprintf(fd," ymmRes1 = _mm256_adds_epi16(ymmRes1, ymm1); \n"); - } + } // Add LLR from receiver input fprintf(fd," ymm0 = _mm256_cvtepi8_epi16(p_llrProcBuf[j]);\n"); @@ -1361,7 +1359,7 @@ fprintf(fd, "// Process group with <23 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1418,7 +1416,7 @@ fprintf(fd, "// Process group with 24 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1474,7 +1472,7 @@ fprintf(fd, "// Process group with 25 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1531,7 +1529,7 @@ fprintf(fd, "// Process group with 26 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1587,7 +1585,7 @@ fprintf(fd, "// Process group with 27 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1643,7 +1641,7 @@ fprintf(fd, "// Process group with 28 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1698,7 +1696,7 @@ fprintf(fd, "// Process group with 29 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1754,7 +1752,7 @@ fprintf(fd, "// Process group with 30 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," p_llrRes[i] = _mm256_permute4x64_epi64(ymm0, 0xD8);\n"); - + fprintf(fd,"}\n"); } @@ -1767,3 +1765,4 @@ fprintf(fd, "// Process group with 30 CNs \n"); + diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_avx2.o b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProcPc_gen_BG1_avx2.o deleted file mode 100644 index 8caf4b85a31f5704239e0d6aa2071be5529f93a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67136 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 #include #include "../../nrLDPCdecoder_defs.h" @@ -25,7 +21,7 @@ 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* 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* bnProcBufRes,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; @@ -51,10 +47,9 @@ void nrLDPC_bnProcPc_BG2_generator_AVX2(int R) } else { printf("aborting, illegal R %d\n",R); fclose(fd);abort();} - // Number of BNs in Groups -// uint32_t M; - //uint32_t M32rem; - //uint32_t i,j; + + + uint32_t k; // Offset to each bit within a group in terms of 32 Byte uint32_t cnOffsetInGroup; @@ -66,16 +61,18 @@ void nrLDPC_bnProcPc_BG2_generator_AVX2(int R) fprintf(fd," __m128i* p_bnProcBuf; \n"); fprintf(fd," __m128i* p_llrProcBuf;\n"); fprintf(fd," __m256i* p_llrRes; \n"); + // fprintf(fd," __m256i* p_bnProcBufRes; \n"); + // fprintf(fd," __m256i* p_llrProcBuf256; \n"); fprintf(fd," uint32_t M ;\n"); -fprintf(fd, "// Process group with 1 CNs \n"); + fprintf(fd, "// Process group with 1 CNs \n"); +/* + // Process group with 1 CNs - // Process group with 2 CNs - - if (lut_numBnInBnGroups[0] > 0) - { + // if (lut_numBnInBnGroups[0] > 0) + // { // If elements in group move to next address // idxBnGroup++; @@ -83,36 +80,30 @@ fprintf(fd, "// Process group with 1 CNs \n"); fprintf(fd," M = (%d*Z + 31)>>5;\n",lut_numBnInBnGroups[0] ); // Set the offset to each CN within a group in terms of 16 Byte - cnOffsetInGroup = (lut_numBnInBnGroups[0]*NR_LDPC_ZMAX)>>4; + // 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_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]); // Loop over BNs fprintf(fd," for (int i=0,j=0;irhOdy!c90)2JMHEC_z;ks~ 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 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 96dc885766..00ab6abb6f 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,12 +1,8 @@ - #include #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(int R) @@ -62,14 +58,7 @@ void nrLDPC_bnProc_BG1_generator_AVX2(int R) // 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"); - fprintf(fd," uint32_t M, i; \n"); + fprintf(fd," uint32_t M, i; \n"); @@ -79,9 +68,6 @@ void nrLDPC_bnProc_BG1_generator_AVX2(int R) // ===================================================================== - - // ===================================================================== - fprintf(fd, "// Process group with 2 CNs \n"); if (lut_numBnInBnGroups[1] > 0) @@ -97,18 +83,14 @@ fprintf(fd, "// Process group with 2 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -137,17 +119,16 @@ fprintf(fd, "// Process group with 3 CNs \n"); 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," ((__m256i*) bnProcBuf) = ((__m256i*) &bnProcBuf) [%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)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); } @@ -174,17 +155,15 @@ fprintf(fd, "// Process group with 4 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup),(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), ((lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup)); fprintf(fd,"}\n"); } @@ -210,18 +189,15 @@ fprintf(fd, "// Process group with 4 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -249,18 +225,15 @@ fprintf(fd, "// Process group with 6 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -287,18 +260,15 @@ fprintf(fd, "// Process group with 7 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -325,18 +295,15 @@ fprintf(fd, "// Process group with 8 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -362,18 +329,15 @@ fprintf(fd, "// Process group with 9 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -399,18 +363,15 @@ fprintf(fd, "// Process group with 10 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -435,18 +396,15 @@ fprintf(fd, "// Process group with 11 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -471,18 +429,15 @@ fprintf(fd, "// Process group with 12 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -509,18 +464,15 @@ fprintf(fd, "// Process group with 13 CNs \n"); 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<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)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -548,18 +500,15 @@ fprintf(fd, "// Process group with 14 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -586,18 +535,15 @@ fprintf(fd, "// Process group with 15 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -625,18 +571,15 @@ fprintf(fd, "// Process group with 16 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -663,18 +606,15 @@ fprintf(fd, "// Process group with 17 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -701,18 +641,15 @@ fprintf(fd, "// Process group with 18 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -738,18 +675,15 @@ fprintf(fd, "// Process group with 19 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -776,18 +710,15 @@ fprintf(fd, "// Process group with 20 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -818,18 +749,15 @@ fprintf(fd, "// Process group with 21 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -854,18 +782,15 @@ fprintf(fd, "// Process group with 22 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -892,18 +817,15 @@ fprintf(fd, "// Process group with <23 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -931,18 +853,15 @@ fprintf(fd, "// Process group with 24 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -969,18 +888,15 @@ fprintf(fd, "// Process group with 25 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1009,18 +925,15 @@ fprintf(fd, "// Process group with 26 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1047,18 +960,15 @@ fprintf(fd, "// Process group with 27 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1085,18 +995,15 @@ fprintf(fd, "// Process group with 28 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1121,18 +1028,15 @@ fprintf(fd, "// Process group with 29 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1158,18 +1062,15 @@ fprintf(fd, "// Process group with 30 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_avx2.o b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG1_avx2.o deleted file mode 100644 index d40fd0a3af91fdbdb82afdac3ac2f5500eec1dc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43488 zcmeI5eS8$vxyNUAvzrZhh43n%tGqOTm+QS?Z@pNn+~=9|Jjt17=j?`Z zKcD__b96Ive&;*Sob&u{e0DKY=`L{n)cyzv(svIXQ>(AwG(dIg8a7U{u!Gc_HCSV z{;0OUJ;w>>|AiUw!N>TOl~t2b}jZ*}E6flV=Qs@k6%kUH6Q z3iSS%v%2T2j?mNz^j=IMb_(Po8es~g$T0S5=oO4`pwG`$9ki7A%oC?UN1jG+2FArr zXPBENn489#o5q@(CVDm)AI63cb zX4^iy&))aUfy`%)1-4bailM5vkK6+5#atYzw)fps;2q}#(C4cTVZe9pg+Dh{9m@Yv z)vMcno-!(~{B2ly{$p1DW9ET?fzLbN zntkx4@&Oyu`9RE&5AMBf1>4Sf;K4hfw0UOi#K+KR2o<3v@ z)`vhUAFwf<55x@l;ORqPus#G+`GAe-d?04X2Tvb@gY_XZl@HjM&Ie+KeDL%kbFe;y zQu%<5>3kq&$Olg!LT(>UO+LYeQ(F9pkd?{@Y)t0^F+)Ch`j9nPABLs!0UOi#K+KR2 zo<0m4tPk0#e89$ZJ`gkHgQpMKgY_XNl@HjM&Ie+KeDL%kXRtoxrt$$B)A>NmkPn_d z%y*8S=r?hrGf1ke|v2Y)t0^F+)Ch`j9_Z9|}_WfQ{*VAZEx1Pag^f z>%;I=K44=yABY+9!PAG~gY{uVDj%>hoe#te`QYiph{5_$n92uiOy>hJLq2%=P&im0 zMyB!s8`Jqf%#aVBK8zf!52I4~fQ{*VAZEx1Paj6PeenLe0$%4EoyrGnOy>hJLq2%= zFxu^d`FiV^R6by1IvhJLq2%= zFk!GhOibkiHm37|m?0lLeVFL>!Q+dt>Z`Bn>(Re_7QRQIN+QFu67Uu1#P{HJ6tt-j ze<8fCfL9Z)OO)|YzYW;e6`#nmEq_KJm>J3%R%i!CgaSUFoq@~wc?JW(S}g0-37Oeh z8KIm|X3nsj>|vS1hUI34vU38#AhudoPIg8h0Ko$OAQbo;2twqb-;cwA63Fm-6`#+C zJqQg8j?99UTA@t*Yg?d?9y2Tu$ji(PhO!E>a`Fm%85zM~2!iJZGJ^r1-=E?92Ytr) z(=E%keHnfmR55ZJzu2E;2mF~KB(*R7W0i{SALZRZ?Neb2zZbB55Dh@J3T=rI&}TcK zg#LC84pYBB;D=>TtegXQ6?nB2USEXQR(SmYv?t*8A?iyOPL- zbrb;i8FD(|BDirSeII#PpnSVT6Kwf zjYv5QYtK)Nw#Fx>B+9H=uqN9ICZ;%j;pL!DRyDjXh1S*ZYJ}HU;I#u@`2F_B;Poqb z;Wyp`e@A|Bf5DHDuyH{j91onacELP)aTl~{C4u`R#7Gx>0 z*s4mLZ&fFjK(4@RLm8i#kT}gcJyB#$Pt34pCW>Kg8CDiJG|Ix?Ew~D7q$!IF_NZK! zrlbr$h(?c9o{*HLduf}?W?AL4tcrQol9rZeV{J=#MR-a*Y|F*PB`x*sb&n2u01Y&WcFq^stJ)sH@@3BxOZ3er6crDX^ub!x6eb zD4QGU3||?Z7T!3_s$JXG(b*hpJTu(v9#@!3B+^@2xWzacXq@*N_nT^Kd;l_@(uJ-WN&7Do*^6=t|ZL6o$uffGEnAaAA5n-!gLDky7sIy%n z&ZRv9LxY82wC5tS#gJ`xA|h%3^UYiR2T7d0;^o!@-+viZ$3W;hNzy>W9+ ze^xiIf%uVDv^Ns(S{si<+nXzjc-_!^rk(-lEabI$%{0i)CX*Ml*bCJwPe;66oJ~u5 zx6Vn~IyYtOXH<q->o>t&l_Sj+K=%VQ4Q))6QG3DL!Y^)XsS`wR7f7?VLMPJ7>?- z&iOO7_h-;MKjmriSDq$+LgpD^HWZ@-+D?Pm{m$H2Et}lfPM?3-Kxb-(SLkNbTAY|O|Az(LpYhn$+iN+S;DoC+(Y>?%}z znYe^fW^G0#!%_SpHKD*Nls^Mbb%^%AdLz=I0VU(+W!#vt9cL*b$YZv_+ck#FnYlL=X{)~`M0vteQWL^YGRIC1}}L zDN+^Nsg$aU?Xir=YJs!G7ARI5tRsVrBOOsBF+RkG|KKo@INCENZnRGL&J*Tx>V ztIBYv(y1zi_8w^IR+TX}W;~%PV{P>9E2=Wi-UHD#tI9%ACprs#5M$cB{%P`#xA^kE+aZ`qrl^pS53x_58xhhIT7>r{lxe;4U1b z%IiHiOY`^QaLI@JakK?s=SI+iAv7@uO~r2Kz6>*{qMeTV2UZJtdkBW!11+=L;XcIK z%bi)<53>z0n+Gq;&cVM}c$>Gs{X-z~S3nc?z`x`7*W#xX%g#gHzoYj$RUP%TQ$29) z@P>NJ9`iEPd^@UDTlfg9&$pvV)lNU`)M`}ijE|k#s^RM_dja;&x8riva*nEtioRj5o9uIcGj9& zc5O^tCcn?*Atp13{QgI7@>L`oV5`o9_Z`>T zADRS;?mv?iO!C@)w9HKwLDh-5mPuaw!&ke>6-eTKdNY%wsh^MRa+6PvwS!VYh!&E0A~b~L3gskYkPX0n;Z#MhrF0cK7RDo zxygk{&V;phGkF^I^V#igvI(kc1bgo{wLJe!a*GrFb@iQLm6P6;&T72D^GQ@!}iIP6&E*l#Qvhe&<^-WpZ!d}ARgv-{V9 z)!|UpT1O1Do-^)jc&0_6F5m*znec+QGAJ-Et?(PECONaW0OqqkfO*^gI4>8kbmEC8 zyzG*$ct=TdtgfZ2K599Ymgco3jdgV;-4$~qb7#-&h}JjNcFu&$9bMfevx_T==eTiN zwq$K{XB@Ax6c?+%FoXYJe#s?EFS9JVyn7QrQ!+V$P##dX-XcxOGF%EF}<=nTx) zM;l-s#@4x^JsO8ucrQexO%c#Ho>f;}>Z5gS_0f(9EQd6_b96ShMkB4!TCBn$7aUcY zf;oSV9V!g1w|p7CU=RGYdxD`K`=%C#y08-L48H4|H0HL=n|Iy1d2=tm{8_#t`{K|} z^`AdCba$vXRJO}Ed35M0-;6@vj8PctXZR=d2L2@_w9}FH<6r;Pp}S#f2QLizN8TN} z$60<9Ek6>8!7o4JB$pp9mp{S&7oOzuN&P>;^`GqWCp-R=T^{m0w=r#OC}VE#{b`#IU= z3r_O*eX`qc-rb>{PvU)GyQQl$66rjm*0r`JYDJb@ z5;=d#(kcsCxb4!>d2W4u2h&SiI@HY?xZy*=s_Gk~@#RrKDAX(qPA%a6i`81&y>#h{ zIc4R}wR5YvzMH~0D~Z>xk4B=gdMn-pH(Bsjj1_ObCJM{p1W!b)NLxcgJle@?S`6J@ z?CLh$bMow_>Z7UES^d==&7ILmduN9gX=tf!j9U?0+uYf(eoVpIu7=3k+Bo!~rLAtA zbxpLREsnPW@GgKAX|3&87ww2!b?se|hK}e}kqfG?G4=%0Ywo8?KHkm2lzAHjH^*o! zV4lpkX_U$;2oFF*OIvNHH3(aQ#nG$rSuJg`#<24T-SO_5$LKVV%G_DeTFUi!nhs-y zY(?t2IwEy#EnTfK=7jse!R&A?L5z#mv2x8H0*!v^xwe@9c0>i`_Y>zmZttNB4&4R6tS1!AV z#yAH#SBf2f+=@CpyB1f+2OL$>!B`#TU@sWhV6_Y+Zy&gG<4yQj8|+_AwaqaY4;=IO zh*w*;t_yC#;z93%i&ushhnJC#0j*1T!qnXUMd5+gGX5okJ~TwG}=-I^A~Mb=FD7iEgJI zJ{~OAchOz651+FPU zbmszsqfe&RGSW+_j+bMwTm&!VtDPELb)ab@>6Z$9GwD|feJAP8#Sxh2I8Tz^PW&k} z#T!Pr-X5X<7wNl&4qpv)_!misYpqV1Li#?TpG!J?wa_WduOa>SLf=68A4zv^^}zgX zq#qGFe!UI*|EbWQC%pisSn%swSPqh2D)i%|FBkfFxcY>T-Ben_t}!b?FOWT*Ivoj)zI*BjkmkkAO^Y;Y+?-K<90S z+i<$hpkHOsHyHHm4Ek3M`ppLYHiK@sLhL%-(B1+6-qU&S_jYxvZ)}6p6=R$EZ5G}? zX(`uflzIa;v|{&=!wAX@Ud%s@7h z+fps(&Io_{S0~bNt$^|oc6j(vpVO)XP$Dla}p2D>DV}2Tbw%0n;j6 zDM{)8wW_2TT2rrjV4Fx1F^{;rayWzM3IEzqwAI-5;OD1s&JbkF*~co$u0G z@%9e*$kkvqw6#ZLR(luRy=q{ouB8n=do(y7z3E^&il%U%&v~nN8YjE)8FojC<{{8~KgElPII2Qb7cinD=q3Tn(BAw&(Qk)kxet{O}ccgPZ3+S!x zpwJJH{+`hJyo%2!IZi3@L7K8&gNcHYCv-j!J6-6@sXk5U35ruDbUtsZB%SjxhE7c` zBpnymegB-MFN8ME^J-1k^V}ukms0#|G#-C;!f|>8znu8n4g7+!!T_)Cc2X5gO^d@J!UYP{Z`0GwB1;qkIxBS@F|DHS~Xh3DN^B)?kl>{pY4zd`Wq z7oPum#s8k**{>gJyq-_~9K_>gzkaRpdVUUy`0Ur)8n4ICq2n~i-$wZ#PCDjC=c@$I zeyz}Wy+7Lp&whQ&!0!<}`?c4=9~3-qV!;MuQZ8n4HnK>lz(_fq|I zn#%oarQq4GwHmMY=PtpsU*9+IF9@Ffdd2iB07Ciek-@sogc=qda8n64+BzX3#OXKzY+$4DRt4HJY_&*gqelHly;|BhH!Lwg~ z)p)%>bLdhn=aclXTP2`@V^y2`}GHn*YkNq@a)$o z8n5T4kZ#m)e%P3U(tBIKTips{d&>Bzb$z7>n{erkS@{l zc-gNo>2iBmD0uekA_HG5c=oG7<8{Bf1eYBX{x1YyLw^0zz<(lm z_G=j3WRUr(BAxTeeyuR@?Sf~&HW~Ok1{qFQzgY0>*J=ZQmEhU0^%}3|bF1LluiG_V&(DK`XTNr9ydM8m!S~Ys^;-j< z3qK3N!uespP9a@xKPv^#eyug|3Bj{p+YS7Kf@i<>82Hx(&wd>=@E-}D{rXhn^?Vl4 z4QI{|`!$htnV(sLXTK^mUXT9;!S|70wFdrn!LwiYXuQ7tyeWA0>s*{^Di*Wk*CD^YfD6*{^*XugCvy!G|$X zP(Cv7GsmfR&L{hI7U?pdU4m!7zGC2e1>y} z{W?|S^?a5Jp8Z;&@w#7^37-90rSW?FFAKhs{JP%2KO%Vc>*pG;_vaJAvtPsT*=bN@ zeu_xv{IFkh4E$w+XTNF;{I!B-ziu+{y9CdE-KX(-KKBTo{o1SXdVYQYh{d(KL2PeA6%YGG- zF1Md)f@i;qHD1q8rQq4GWg5Q#y1@6l>jck!HEFya|7O7_$gdp+ey`x!uYc9}1zLY{ z=?ksAJ+NP=kS_C6A$azy%D~qNp8aY!@V5w_{kqe@KP-6m>rsu@^ZA0{*{|0$UeC{a zf@i;uXuKYOwSj+6@a)$y13x+} z#!L5^CXp_;pLv33zZPozIS`Wfm*s+Izt(8Ho}akj*{^Pm*W-U%@O|XhE(8CX;MuP~ zYP{Z`iKkmmk^9$l(q(?C1p6|r^SNK}?AKw9 z*YoqS;Mp(h43#&`j~;(A>7364Sp4g5aAvtMr-_>Tq8 zeuX9tj92f^RML68?AI&{qMC>;2g*c=l_n#_REaAb9=?`@;tQ zu;AIR4>Vry&&nzfJ(5&;T1kZj&4g6-ovtK<1{)d8Rzn(PkuLz#~dR^o7 ze7-Gs_UkViua7r-iaS5-R{`mmA3gqT!H4O-;5-B0DtPwm8jaWc^N8Ttub&(E1A=G2 z-Z${sQ{Cfbzs8a-w}-icXTKI3_$vg@etl8n^?bGqp8eXS@p^u46FmEMhsNview*=3A{Ym5X zd>#`#`xPki&d+$#IX~=ISmX8h=Lx=s{90n*Hwm8ox>4ix?PssxdH?!X1Aj#D?AIp- ze*84={i}#{x&53kc=qcu1K%uo_A93GdOj0^XTP>2EJSH?AI0pf3M(q|JrTfUlu(3^*aN9RPgNAhZ?WvGc?1U zANFe$=`uev1kZkzYP=r*a>4gztMy%B;I|8&{rZ;1>)X$3f@i<}XyBb^q(K*k!7BhS z_AB>H)vu)SlFmH)Rbk*iCwTU&&cJUFJo|O6#_Rd)5j^{Km&WV)`HA4!uRR*C$N#d1kZkb$-r+FJo|OKf&Yo%*{?nW{|CXdU+)=syVyNm z_A5v_j#tm;Si!SjQ#4-pYrf#wuS$*A=!?wehu?SP@W`CSUYMW0}+}?1#Z&Cb3 zLcg8r%Y~kcJ3W+@YSJJ7o3;|x3Vja6=k@b?Gbm1{;IAQlgV6bR(KiTvVulj73!T3Q z|8=1sC;m>Mmrzpg5&AJ2*Zo4@N%fx!oi5v2j|;tkeE)^eCs6!Xgnl2@-x2z!#Q(R@ zCsEzmKwzHpJc{@nnzD}1BE~XS==}Te$wI${`p>`j;yC=fm$L<*N%bW{e}nwx-(mH~ zA+ApH)X#RIe@gw?B=oVQ-zfC0YPi-v3H<`9e@Ez96z5@~tH-*-)2oG!kM_mFzr*5j zEurmyzu><|+uLEGzfN&J5c)-w2Yem_7LGrQ>NymT^&ctB8YlG0l>ezhpF#R8p_h|h zDfD@yFB5tt=~oJUD~+pB=(}iKT|&PuQw`wDLZ3|atwKMQ*86p#FQ)wW3Y~w)^_I}z zCq9#=oX_dh&s@?m?X;-V(K5l0=DZ30`xNI3Lf=mMmxO+leC!tb1r+~Qq32SZUZHQI zIERIP1r6dT={PP5?JSW`@i-50;>VNDd@04BCwP302bLh1+{QkF0@C#`Fx!$)J2$IRilI#W~=E4nBcOs zIraZTlv7Ek-9^Fh_etH{epSWLs?KFOjQRI2kJk?5HiPl|X#M|A*RfE;QtA91_=DF% zWKOVk=UIxWqU~7KlG%CC;FZ5HU5IGUQ%hq0&?A|@3qkW*|DnZdIa@S}s=H+<0gO=CVf%6;rLX&9V z9k-!=Rp^{ig#9{wxEJ<8pc2 iCj9V{WzTA*d<#3L6*>Ol(B`%L5$gYLZCRX^%l|KM0e7VU 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 617dc54520..aef582ad6f 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 @@ -4,9 +4,7 @@ #include #include "../../nrLDPCdecoder_defs.h" #include "../../nrLDPC_types.h" -//#include "../../nrLDPC_bnProc.h" -//#include "../../nrLDPC_cnProc.h" -//#include "../../nrLDPC_init.h" + void nrLDPC_bnProc_BG2_generator_AVX2(int R) @@ -23,8 +21,7 @@ void nrLDPC_bnProc_BG2_generator_AVX2(int 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; @@ -77,9 +74,6 @@ void nrLDPC_bnProc_BG2_generator_AVX2(int R) // ===================================================================== - - // ===================================================================== - fprintf(fd, "// Process group with 2 CNs \n"); if (lut_numBnInBnGroups[1] > 0) @@ -95,18 +89,14 @@ fprintf(fd, "// Process group with 2 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -135,17 +125,16 @@ fprintf(fd, "// Process group with 3 CNs \n"); 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," ((__m256i*) bnProcBuf) = ((__m256i*) &bnProcBuf) [%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)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); } @@ -172,17 +161,15 @@ fprintf(fd, "// Process group with 4 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup),(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), ((lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup)); fprintf(fd,"}\n"); } @@ -208,18 +195,15 @@ fprintf(fd, "// Process group with 4 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -247,18 +231,15 @@ fprintf(fd, "// Process group with 6 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -285,18 +266,15 @@ fprintf(fd, "// Process group with 7 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -323,18 +301,15 @@ fprintf(fd, "// Process group with 8 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -360,18 +335,15 @@ fprintf(fd, "// Process group with 9 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -397,18 +369,15 @@ fprintf(fd, "// Process group with 10 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -433,18 +402,15 @@ fprintf(fd, "// Process group with 11 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -469,18 +435,15 @@ fprintf(fd, "// Process group with 12 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -507,18 +470,15 @@ fprintf(fd, "// Process group with 13 CNs \n"); 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<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)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -546,18 +506,15 @@ fprintf(fd, "// Process group with 14 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -584,18 +541,15 @@ fprintf(fd, "// Process group with 15 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -623,18 +577,15 @@ fprintf(fd, "// Process group with 16 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -661,18 +612,15 @@ fprintf(fd, "// Process group with 17 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -699,18 +647,15 @@ fprintf(fd, "// Process group with 18 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -736,25 +681,21 @@ fprintf(fd, "// Process group with 19 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); } } - // ===================================================================== @@ -774,18 +715,15 @@ fprintf(fd, "// Process group with 20 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -816,18 +754,15 @@ fprintf(fd, "// Process group with 21 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -852,18 +787,15 @@ fprintf(fd, "// Process group with 22 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -890,18 +822,15 @@ fprintf(fd, "// Process group with <23 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -929,18 +858,15 @@ fprintf(fd, "// Process group with 24 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -967,18 +893,15 @@ fprintf(fd, "// Process group with 25 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1007,18 +930,15 @@ fprintf(fd, "// Process group with 26 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1045,18 +965,15 @@ fprintf(fd, "// Process group with 27 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1083,18 +1000,15 @@ fprintf(fd, "// Process group with 28 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1119,18 +1033,15 @@ fprintf(fd, "// Process group with 29 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1156,18 +1067,15 @@ fprintf(fd, "// Process group with 30 CNs \n"); 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 (i=0;i>5)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>5), (lut_startAddrBnGroups[idxBnGroup]>>5)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1176,11 +1084,6 @@ fprintf(fd, "// Process group with 30 CNs \n"); fprintf(fd,"}\n"); fclose(fd); -}//end of the function nrLDPC_bnProc_BG1 - - - - - +}//end of the function nrLDPC_bnProc_BG2 diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_avx2.o b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/bnProc_gen_BG2_avx2.o deleted file mode 100644 index 248c7244cf105f023b1896cd4308aee4e0e8ce83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43688 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 z 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 literal 119560 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 F{{dpV-Z%gN diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/main.o b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/main.o deleted file mode 100644 index c9ea8704ae2d57a0c36127605f696ab9b1febb99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3704 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 diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG1_avx512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG1_avx512.c index 09bd995216..fabeda7551 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG1_avx512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProcPc_gen_BG1_avx512.c @@ -1,7 +1,3 @@ - - - - #include #include #include "../../nrLDPCdecoder_defs.h" @@ -148,8 +144,8 @@ fprintf(fd, "// Process group with 2 CNs \n"); // Loop over BNs fprintf(fd," for (int i=0,j=0;i #include #include "../../nrLDPCdecoder_defs.h" #include "../../nrLDPC_types.h" - void nrLDPC_bnProc_BG1_generator_AVX512(int R) { const char *ratestr[3]={"13","23","89"}; @@ -61,14 +58,7 @@ void nrLDPC_bnProc_BG1_generator_AVX512(int R) // Offset to each bit within a group in terms of 32 Byte uint32_t cnOffsetInGroup; uint8_t idxBnGroup = 0; - - - - fprintf(fd," __m512i* p_bnProcBuf; \n"); - fprintf(fd," __m512i* p_bnProcBufRes; \n"); - fprintf(fd," __m512i* p_llrRes; \n"); - fprintf(fd," __m512i* p_res; \n"); - fprintf(fd," uint32_t M, i; \n"); + fprintf(fd," uint32_t M, i; \n"); @@ -78,9 +68,6 @@ void nrLDPC_bnProc_BG1_generator_AVX512(int R) // ===================================================================== - - // ===================================================================== - fprintf(fd, "// Process group with 2 CNs \n"); if (lut_numBnInBnGroups[1] > 0) @@ -96,18 +83,14 @@ fprintf(fd, "// Process group with 2 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[1]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - + // Loop over BNs - fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -136,17 +119,16 @@ fprintf(fd, "// Process group with 3 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[2]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + //fprintf(fd," ((__m512i*) bnProcBuf) = ((__m512i*) &bnProcBuf) [%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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); } @@ -173,17 +155,15 @@ fprintf(fd, "// Process group with 4 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[3]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - + // Loop over BNs - fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup),(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), ((lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup)); fprintf(fd,"}\n"); } @@ -209,18 +189,15 @@ fprintf(fd, "// Process group with 4 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[4]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -248,18 +225,15 @@ fprintf(fd, "// Process group with 6 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[5]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -286,18 +260,15 @@ fprintf(fd, "// Process group with 7 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[6]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -324,18 +295,15 @@ fprintf(fd, "// Process group with 8 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[7]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -361,18 +329,15 @@ fprintf(fd, "// Process group with 9 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[8]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -398,18 +363,15 @@ fprintf(fd, "// Process group with 10 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[9]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -434,18 +396,15 @@ fprintf(fd, "// Process group with 11 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[10]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -470,18 +429,15 @@ fprintf(fd, "// Process group with 12 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[11]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -508,18 +464,15 @@ fprintf(fd, "// Process group with 13 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[12]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + // Loop over CNs for (k=0; k<13; k++) { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -547,18 +500,15 @@ fprintf(fd, "// Process group with 14 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[13]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -585,18 +535,15 @@ fprintf(fd, "// Process group with 15 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[14]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -624,18 +571,15 @@ fprintf(fd, "// Process group with 16 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[15]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -662,18 +606,15 @@ fprintf(fd, "// Process group with 17 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[16]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -700,18 +641,15 @@ fprintf(fd, "// Process group with 18 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[17]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -737,18 +675,15 @@ fprintf(fd, "// Process group with 19 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[18]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -775,18 +710,15 @@ fprintf(fd, "// Process group with 20 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[19]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -817,18 +749,15 @@ fprintf(fd, "// Process group with 21 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[20]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -853,18 +782,15 @@ fprintf(fd, "// Process group with 22 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[21]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -891,18 +817,15 @@ fprintf(fd, "// Process group with <23 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[22]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -930,18 +853,15 @@ fprintf(fd, "// Process group with 24 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[23]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -968,18 +888,15 @@ fprintf(fd, "// Process group with 25 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[24]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1008,18 +925,15 @@ fprintf(fd, "// Process group with 26 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[25]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1046,18 +960,15 @@ fprintf(fd, "// Process group with 27 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[26]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1084,18 +995,15 @@ fprintf(fd, "// Process group with 28 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[27]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1120,18 +1028,15 @@ fprintf(fd, "// Process group with 29 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[28]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1157,18 +1062,15 @@ fprintf(fd, "// Process group with 30 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[29]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG2_avx512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG2_avx512.c index ccd01d29a3..82f410bcda 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG2_avx512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_BG2_avx512.c @@ -1,5 +1,3 @@ - - #include #include #include "../../nrLDPCdecoder_defs.h" @@ -50,21 +48,12 @@ void nrLDPC_bnProc_BG2_generator_AVX512(int R) 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," __m512i* p_bnProcBuf; \n"); - fprintf(fd," __m512i* p_bnProcBufRes; \n"); - fprintf(fd," __m512i* p_llrRes; \n"); - fprintf(fd," __m512i* p_res; \n"); - fprintf(fd," uint32_t M, i; \n"); + fprintf(fd," uint32_t M, i; \n"); @@ -74,9 +63,6 @@ void nrLDPC_bnProc_BG2_generator_AVX512(int R) // ===================================================================== - - // ===================================================================== - fprintf(fd, "// Process group with 2 CNs \n"); if (lut_numBnInBnGroups[1] > 0) @@ -92,18 +78,14 @@ fprintf(fd, "// Process group with 2 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[1]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - + // Loop over BNs - fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -132,17 +114,16 @@ fprintf(fd, "// Process group with 3 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[2]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); + //fprintf(fd," ((__m512i*) bnProcBuf) = ((__m512i*) &bnProcBuf) [%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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); } @@ -169,17 +150,15 @@ fprintf(fd, "// Process group with 4 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[3]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); - + // Loop over BNs - fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup),(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), ((lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup)); fprintf(fd,"}\n"); } @@ -205,18 +184,15 @@ fprintf(fd, "// Process group with 4 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[4]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -244,18 +220,15 @@ fprintf(fd, "// Process group with 6 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[5]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -282,18 +255,15 @@ fprintf(fd, "// Process group with 7 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[6]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -320,18 +290,15 @@ fprintf(fd, "// Process group with 8 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[7]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -357,18 +324,15 @@ fprintf(fd, "// Process group with 9 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[8]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -394,18 +358,15 @@ fprintf(fd, "// Process group with 10 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[9]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -430,18 +391,15 @@ fprintf(fd, "// Process group with 11 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[10]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -466,18 +424,15 @@ fprintf(fd, "// Process group with 12 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[11]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -504,18 +459,15 @@ fprintf(fd, "// Process group with 13 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[12]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &bnProcBufRes [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - + // Loop over CNs for (k=0; k<13; k++) { - fprintf(fd," p_res = &p_bnProcBufRes[%d];\n", k*cnOffsetInGroup); - fprintf(fd," p_llrRes = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -543,18 +495,15 @@ fprintf(fd, "// Process group with 14 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[13]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -581,18 +530,15 @@ fprintf(fd, "// Process group with 15 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[14]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -620,18 +566,15 @@ fprintf(fd, "// Process group with 16 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[15]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -658,18 +601,15 @@ fprintf(fd, "// Process group with 17 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[16]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -696,18 +636,15 @@ fprintf(fd, "// Process group with 18 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[17]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -733,18 +670,15 @@ fprintf(fd, "// Process group with 19 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[18]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -771,18 +705,15 @@ fprintf(fd, "// Process group with 20 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[19]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -813,18 +744,15 @@ fprintf(fd, "// Process group with 21 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[20]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -849,18 +777,15 @@ fprintf(fd, "// Process group with 22 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[21]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -887,18 +812,15 @@ fprintf(fd, "// Process group with <23 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[22]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -926,18 +848,15 @@ fprintf(fd, "// Process group with 24 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[23]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -964,18 +883,15 @@ fprintf(fd, "// Process group with 25 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[24]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1004,18 +920,15 @@ fprintf(fd, "// Process group with 26 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[25]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1042,18 +955,15 @@ fprintf(fd, "// Process group with 27 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[26]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1080,18 +990,15 @@ fprintf(fd, "// Process group with 28 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[27]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1116,18 +1023,15 @@ fprintf(fd, "// Process group with 29 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[28]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1153,18 +1057,15 @@ fprintf(fd, "// Process group with 30 CNs \n"); cnOffsetInGroup = (lut_numBnInBnGroups[29]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 2 - fprintf(fd," p_bnProcBuf = (__m512i*) &bnProcBuf [%d];\n",lut_startAddrBnGroups[idxBnGroup]); - fprintf(fd," p_bnProcBufRes = (__m512i*) &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 = (__m512i*) &llrRes [%d];\n",lut_startAddrBnGroupsLlr[idxBnGroup]); + // Loop over BNs fprintf(fd," for (i=0;i>6)+ k*cnOffsetInGroup,(lut_startAddrBnGroupsLlr[idxBnGroup]>>6), (lut_startAddrBnGroups[idxBnGroup]>>6)+ k*cnOffsetInGroup); fprintf(fd,"}\n"); @@ -1179,6 +1080,3 @@ fprintf(fd, "// Process group with 30 CNs \n"); - - - diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_avx512 b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/bnProc_gen_avx512 index dabfabe18fdbb098b9ea9a0996079e0fde890445..86fe416a4a907302fb96ed46168e06f6ad0c6017 100755 GIT binary patch literal 114464 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 literal 119632 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 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 ada3706a6f..bd46948100 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 @@ -1,475 +1,281 @@ static inline void nrLDPC_bnProc_BG1_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 // Process group with 3 CNs // Process group with 4 CNs M = (1*Z + 31)>>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [16128]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [16128]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [16128]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [17664]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [17664]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [16512]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [19584]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [19584]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [16896]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [24192]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [24192]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [17664]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [34944]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [34944]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [19200]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [44160]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [44160]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [20352]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [47616]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [47616]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [20736]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [62976]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [62976]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [22272]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [75648]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [75648]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [23424]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [94080]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [94080]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [24960]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [99072]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [99072]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [25344]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [109824]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [109824]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [25728]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [3456]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [3456]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [3456]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [4224]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [4224]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [3840]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [9984]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [9984]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [5760]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [14592]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [14592]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [6912]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [28032]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [28032]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [9600]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [46464]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [46464]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [12672]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [50688]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [50688]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [13056]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [384]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [384]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [384]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [2688]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [2688]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [1536]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [26880]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [26880]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m256i*) &llrRes [9600]; for (i=0;i>5; - p_bnProcBuf = (__m256i*) &bnProcBuf [28416]; - p_bnProcBufRes = (__m256i*) &bnProcBufRes [28416]; - 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; @@ -8,188 +6,112 @@ void nrLDPC_bnProc_BG2_R13_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* 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; @@ -11,545 +9,325 @@ void nrLDPC_bnProc_BG2_R15_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* // 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; @@ -8,123 +6,73 @@ void nrLDPC_bnProc_BG2_R23_AVX2(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* 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; - p_bnProcBuf = (__m128i*) &bnProcBuf [0]; - p_llrProcBuf = (__m128i*) &llrProcBuf [0]; - p_llrRes = (__m256i*) &llrRes [0]; - for (int i=0,j=0;i>5; p_bnProcBuf = (__m128i*) &bnProcBuf [6912]; p_llrProcBuf = (__m128i*) &llrProcBuf [6912]; p_llrRes = (__m256i*) &llrRes [6912]; for (int i=0,j=0;i>5; - p_bnProcBuf = (__m128i*) &bnProcBuf [0]; - p_llrProcBuf = (__m128i*) &llrProcBuf [0]; - p_llrRes = (__m256i*) &llrRes [0]; - for (int i=0,j=0;i>5; - p_bnProcBuf = (__m128i*) &bnProcBuf [0]; - p_llrProcBuf = (__m128i*) &llrProcBuf [0]; - p_llrRes = (__m256i*) &llrRes [0]; - for (int i=0,j=0;i>5; p_bnProcBuf = (__m128i*) &bnProcBuf [1152]; p_llrProcBuf = (__m128i*) &llrProcBuf [1152]; p_llrRes = (__m256i*) &llrRes [1152]; for (int i=0,j=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [16128]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [16128]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [16128]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [17664]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [17664]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [16512]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [19584]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [19584]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [16896]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [24192]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [24192]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [17664]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [34944]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [34944]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [19200]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [44160]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [44160]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [20352]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [47616]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [47616]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [20736]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [62976]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [62976]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [22272]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [75648]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [75648]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [23424]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [94080]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [94080]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [24960]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [99072]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [99072]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [25344]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [109824]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [109824]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [25728]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [3456]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [3456]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [3456]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [4224]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [4224]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [3840]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [9984]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [9984]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [5760]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [14592]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [14592]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [6912]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [28032]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [28032]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [9600]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [46464]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [46464]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [12672]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [50688]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [50688]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [13056]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [384]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [384]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [384]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [2688]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [2688]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [1536]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [26880]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [26880]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [9600]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [28416]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [28416]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [9984]; for (i=0;i #include void nrLDPC_bnProc_BG2_R13_AVX512(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes, uint16_t Z ) { - __m512i* p_bnProcBuf; - __m512i* p_bnProcBufRes; - __m512i* p_llrRes; - __m512i* p_res; uint32_t M, i; // Process group with 2 CNs M = (1*Z + 63)>>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [6912]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [6912]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [6912]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [7680]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [7680]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [7296]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [10752]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [10752]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [8064]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [12672]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [12672]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [8448]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [24192]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [24192]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [10368]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [26880]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [26880]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [10752]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [29952]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [29952]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [11136]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [34944]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [34944]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [11520]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [40320]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [40320]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [11904]; for (i=0;i #include void nrLDPC_bnProc_BG2_R15_AVX512(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes, uint16_t Z ) { - __m512i* p_bnProcBuf; - __m512i* p_bnProcBufRes; - __m512i* p_llrRes; - __m512i* 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 + 63)>>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [14592]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [14592]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [14592]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [18432]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [18432]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [15360]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [20736]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [20736]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [15744]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [23424]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [23424]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [16128]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [26496]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [26496]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [16512]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [33408]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [33408]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [17280]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [37248]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [37248]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [17664]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [41856]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [41856]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [18048]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [46848]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [46848]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [18432]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [52224]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [52224]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [18816]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [58368]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [58368]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [19200]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [66816]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [66816]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [19584]; for (i=0;i #include void nrLDPC_bnProc_BG2_R23_AVX512(int8_t* bnProcBuf,int8_t* bnProcBufRes, int8_t* llrRes, uint16_t Z ) { - __m512i* p_bnProcBuf; - __m512i* p_bnProcBufRes; - __m512i* p_llrRes; - __m512i* p_res; uint32_t M, i; // Process group with 2 CNs M = (3*Z + 63)>>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [1152]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [1152]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [1152]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [3456]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [3456]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [2304]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [9216]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [9216]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [4224]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [13824]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [13824]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [5376]; for (i=0;i>6; - p_bnProcBuf = (__m512i*) &bnProcBuf [17664]; - p_bnProcBufRes = (__m512i*) &bnProcBufRes [17664]; - p_res = &p_bnProcBufRes[0]; - p_llrRes = (__m512i*) &llrRes [6144]; for (i=0;i