Commit 581a9731 authored by Raymond Knopp's avatar Raymond Knopp

removed one-level of unrolling in cnProc generator

parent 732b98d1
...@@ -39,7 +39,6 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -39,7 +39,6 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
// Number of CNs in Groups // Number of CNs in Groups
uint32_t M; uint32_t M;
uint32_t i;
uint32_t j; uint32_t j;
uint32_t k; uint32_t k;
// Offset to each bit within a group in terms of 32 Byte // Offset to each bit within a group in terms of 32 Byte
...@@ -58,7 +57,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -58,7 +57,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
// ===================================================================== // =====================================================================
// Process group with 3 BNs // Process group with 3 BNs
fprintf(fd,"//Process group with 3 BNs\n");
// LUT with offsets for bits that need to be processed // LUT with offsets for bits that need to be processed
// 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc. // 1. bit proc requires LLRs of 2. and 3. bit, 2.bits of 1. and 3. etc.
// Offsets are in units of bitOffsetInGroup (1*384/32) // Offsets are in units of bitOffsetInGroup (1*384/32)
...@@ -90,11 +89,13 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -90,11 +89,13 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
//p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup);
// Loop over CNs // Loop over CNs
for (i=0; i<M; i++,iprime++) // for (i=0; i<M; i++,iprime++)
{ // {
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
// Abs and sign of 32 CNs (first BN) // Abs and sign of 32 CNs (first BN)
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][0] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][0]);
// sgn = _mm256_sign_epi8(ones, ymm0); // sgn = _mm256_sign_epi8(ones, ymm0);
fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n");
// min = _mm256_abs_epi8(ymm0); // min = _mm256_abs_epi8(ymm0);
...@@ -102,7 +103,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -102,7 +103,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
// 32 CNs of second BN // 32 CNs of second BN
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i]; // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][1] + i];
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][1] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>5)+lut_idxCnProcG3[j][1]);
// min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n");
...@@ -115,14 +116,14 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -115,14 +116,14 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n");
// *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn);
// p_cnProcBufResBit++; // p_cnProcBufResBit++;
fprintf(fd," ((__m256i*)cnProcBufRes)[%d] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[0]>>5)+(j*bitOffsetInGroup)+i); fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[0]>>5)+(j*bitOffsetInGroup));
} fprintf(fd," }\n");
} }
} }
// ===================================================================== // =====================================================================
// Process group with 4 BNs // Process group with 4 BNs
fprintf(fd,"//Process group with 4 BNs\n");
// Offset is 5*384/32 = 60 // Offset is 5*384/32 = 60
const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}}; const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}};
...@@ -148,11 +149,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -148,11 +149,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
//p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup);
// Loop over CNs // Loop over CNs
for (i=0; i<M; i++,iprime++) // for (i=0; i<M; i++,iprime++)
{ // {
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
// Abs and sign of 32 CNs (first BN) // Abs and sign of 32 CNs (first BN)
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[1]>>5)+lut_idxCnProcG4[j][0] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>5)+lut_idxCnProcG4[j][0]);
// sgn = _mm256_sign_epi8(ones, ymm0); // sgn = _mm256_sign_epi8(ones, ymm0);
fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n");
// min = _mm256_abs_epi8(ymm0); // min = _mm256_abs_epi8(ymm0);
...@@ -162,7 +164,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -162,7 +164,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
// Loop over BNs // Loop over BNs
for (k=1; k<3; k++) for (k=1; k<3; k++)
{ {
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[1]>>5)+lut_idxCnProcG4[j][k] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>5)+lut_idxCnProcG4[j][k]);
// min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n");
...@@ -176,15 +178,15 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -176,15 +178,15 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n");
// *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn);
// p_cnProcBufResBit++; // p_cnProcBufResBit++;
fprintf(fd," ((__m256i*)cnProcBufRes)[%d] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[1]>>5)+(j*bitOffsetInGroup)+i); fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[1]>>5)+(j*bitOffsetInGroup));
} fprintf(fd," }\n");
} }
} }
// ===================================================================== // =====================================================================
// Process group with 5 BNs // Process group with 5 BNs
fprintf(fd,"//Process group with 5 BNs\n");
// Offset is 18*384/32 = 216 // Offset is 18*384/32 = 216
const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864}, const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864},
{0,216,648,864}, {0,216,432,864}, {0,216,432,648}}; {0,216,648,864}, {0,216,432,864}, {0,216,432,648}};
...@@ -212,11 +214,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -212,11 +214,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
//p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup);
// Loop over CNs // Loop over CNs
for (i=0; i<M; i++,iprime++) // for (i=0; i<M; i++,iprime++)
{ // {
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
// Abs and sign of 32 CNs (first BN) // Abs and sign of 32 CNs (first BN)
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[2]>>5)+lut_idxCnProcG5[j][0] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>5)+lut_idxCnProcG5[j][0]);
// sgn = _mm256_sign_epi8(ones, ymm0); // sgn = _mm256_sign_epi8(ones, ymm0);
fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n");
// min = _mm256_abs_epi8(ymm0); // min = _mm256_abs_epi8(ymm0);
...@@ -226,7 +229,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -226,7 +229,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
// Loop over BNs // Loop over BNs
for (k=1; k<4; k++) for (k=1; k<4; k++)
{ {
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[2]>>5)+lut_idxCnProcG5[j][k] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>5)+lut_idxCnProcG5[j][k]);
// min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n");
...@@ -240,8 +243,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -240,8 +243,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n");
// *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn);
// p_cnProcBufResBit++; // p_cnProcBufResBit++;
fprintf(fd," ((__m256i*)cnProcBufRes)[%d] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[2]>>5)+(j*bitOffsetInGroup)+i); fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[2]>>5)+(j*bitOffsetInGroup));
} fprintf(fd," }\n");
} }
} }
...@@ -276,11 +279,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -276,11 +279,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
//p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup);
// Loop over CNs // Loop over CNs
for (i=0; i<M; i++,iprime++) // for (i=0; i<M; i++,iprime++)
{ // {
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
// Abs and sign of 32 CNs (first BN) // Abs and sign of 32 CNs (first BN)
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[3]>>5)+lut_idxCnProcG6[j][0] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>5)+lut_idxCnProcG6[j][0]);
// sgn = _mm256_sign_epi8(ones, ymm0); // sgn = _mm256_sign_epi8(ones, ymm0);
fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n");
// min = _mm256_abs_epi8(ymm0); // min = _mm256_abs_epi8(ymm0);
...@@ -290,7 +294,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -290,7 +294,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
// Loop over BNs // Loop over BNs
for (k=1; k<5; k++) for (k=1; k<5; k++)
{ {
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[3]>>5)+lut_idxCnProcG6[j][k] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>5)+lut_idxCnProcG6[j][k]);
// min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n");
...@@ -304,8 +308,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -304,8 +308,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n");
// *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn);
// p_cnProcBufResBit++; // p_cnProcBufResBit++;
fprintf(fd," ((__m256i*)cnProcBufRes)[%d] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[3]>>5)+(j*bitOffsetInGroup)+i); fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[3]>>5)+(j*bitOffsetInGroup));
} fprintf(fd," }\n");
} }
} }
...@@ -343,11 +347,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -343,11 +347,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
//p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup);
// Loop over CNs // Loop over CNs
for (i=0; i<M; i++,iprime++) // for (i=0; i<M; i++,iprime++)
{ // {
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
// Abs and sign of 32 CNs (first BN) // Abs and sign of 32 CNs (first BN)
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[4]>>5)+lut_idxCnProcG7[j][0] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>5)+lut_idxCnProcG7[j][0]);
// sgn = _mm256_sign_epi8(ones, ymm0); // sgn = _mm256_sign_epi8(ones, ymm0);
fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n");
// min = _mm256_abs_epi8(ymm0); // min = _mm256_abs_epi8(ymm0);
...@@ -357,7 +362,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -357,7 +362,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
// Loop over BNs // Loop over BNs
for (k=1; k<6; k++) for (k=1; k<6; k++)
{ {
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[4]>>5)+lut_idxCnProcG7[j][k] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>5)+lut_idxCnProcG7[j][k]);
// min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n");
...@@ -371,8 +376,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -371,8 +376,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n");
// *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn);
// p_cnProcBufResBit++; // p_cnProcBufResBit++;
fprintf(fd," ((__m256i*)cnProcBufRes)[%d] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[4]>>5)+(j*bitOffsetInGroup)+i); fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[4]>>5)+(j*bitOffsetInGroup));
} fprintf(fd," }\n");
} }
} }
...@@ -411,11 +416,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -411,11 +416,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
//p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup);
// Loop over CNs // Loop over CNs
for (i=0; i<M; i++,iprime++) // for (i=0; i<M; i++,iprime++)
{ // {
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
// Abs and sign of 32 CNs (first BN) // Abs and sign of 32 CNs (first BN)
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[5]>>5)+lut_idxCnProcG8[j][0] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>5)+lut_idxCnProcG8[j][0]);
// sgn = _mm256_sign_epi8(ones, ymm0); // sgn = _mm256_sign_epi8(ones, ymm0);
fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n");
// min = _mm256_abs_epi8(ymm0); // min = _mm256_abs_epi8(ymm0);
...@@ -425,7 +431,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -425,7 +431,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
// Loop over BNs // Loop over BNs
for (k=1; k<7; k++) for (k=1; k<7; k++)
{ {
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[5]>>5)+lut_idxCnProcG8[j][k] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>5)+lut_idxCnProcG8[j][k]);
// min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n");
...@@ -439,8 +445,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -439,8 +445,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n");
// *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn);
// p_cnProcBufResBit++; // p_cnProcBufResBit++;
fprintf(fd," ((__m256i*)cnProcBufRes)[%d] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[5]>>5)+(j*bitOffsetInGroup)+i); fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[5]>>5)+(j*bitOffsetInGroup));
} fprintf(fd," }\n");
} }
} }
...@@ -480,11 +486,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -480,11 +486,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
//p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup);
// Loop over CNs // Loop over CNs
for (i=0; i<M; i++,iprime++) // for (i=0; i<M; i++,iprime++)
{ // {
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
// Abs and sign of 32 CNs (first BN) // Abs and sign of 32 CNs (first BN)
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[6]>>5)+lut_idxCnProcG9[j][0] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>5)+lut_idxCnProcG9[j][0]);
// sgn = _mm256_sign_epi8(ones, ymm0); // sgn = _mm256_sign_epi8(ones, ymm0);
fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n");
// min = _mm256_abs_epi8(ymm0); // min = _mm256_abs_epi8(ymm0);
...@@ -494,7 +501,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -494,7 +501,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
// Loop over BNs // Loop over BNs
for (k=1; k<8; k++) for (k=1; k<8; k++)
{ {
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[6]>>5)+lut_idxCnProcG9[j][k] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>5)+lut_idxCnProcG9[j][k]);
// min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n");
...@@ -508,8 +515,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -508,8 +515,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n");
// *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn);
// p_cnProcBufResBit++; // p_cnProcBufResBit++;
fprintf(fd," ((__m256i*)cnProcBufRes)[%d] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[6]>>5)+(j*bitOffsetInGroup)+i); fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[6]>>5)+(j*bitOffsetInGroup));
} fprintf(fd," }\n");
} }
} }
...@@ -549,11 +556,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -549,11 +556,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
//p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup);
// Loop over CNs // Loop over CNs
for (i=0; i<M; i++,iprime++) // for (i=0; i<M; i++,iprime++)
{ // {
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
// Abs and sign of 32 CNs (first BN) // Abs and sign of 32 CNs (first BN)
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[7]>>5)+lut_idxCnProcG10[j][0] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>5)+lut_idxCnProcG10[j][0]);
// sgn = _mm256_sign_epi8(ones, ymm0); // sgn = _mm256_sign_epi8(ones, ymm0);
fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n");
// min = _mm256_abs_epi8(ymm0); // min = _mm256_abs_epi8(ymm0);
...@@ -563,7 +571,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -563,7 +571,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
// Loop over BNs // Loop over BNs
for (k=1; k<9; k++) for (k=1; k<9; k++)
{ {
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[7]>>5)+lut_idxCnProcG10[j][k] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>5)+lut_idxCnProcG10[j][k]);
// min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n");
...@@ -577,8 +585,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -577,8 +585,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n");
// *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn);
// p_cnProcBufResBit++; // p_cnProcBufResBit++;
fprintf(fd," ((__m256i*)cnProcBufRes)[%d] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[7]>>5)+(j*bitOffsetInGroup)+i); fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[7]>>5)+(j*bitOffsetInGroup));
} fprintf(fd," }\n");
} }
} }
...@@ -620,11 +628,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -620,11 +628,12 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
//p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup); //p_cnProcBufResBit = p_cnProcBufRes + (j*bitOffsetInGroup);
// Loop over CNs // Loop over CNs
for (i=0; i<M; i++,iprime++) // for (i=0; i<M; i++,iprime++)
{ // {
fprintf(fd," for (int i=0;i<%d;i++) {\n",M);
// Abs and sign of 32 CNs (first BN) // Abs and sign of 32 CNs (first BN)
// ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i]; // ymm0 = p_cnProcBuf[lut_idxCnProcG3[j][0] + i];
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[8]>>5)+lut_idxCnProcG19[j][0] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>5)+lut_idxCnProcG19[j][0]);
// sgn = _mm256_sign_epi8(ones, ymm0); // sgn = _mm256_sign_epi8(ones, ymm0);
fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n"); fprintf(fd," sgn = _mm256_sign_epi8(ones, ymm0);\n");
// min = _mm256_abs_epi8(ymm0); // min = _mm256_abs_epi8(ymm0);
...@@ -634,7 +643,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -634,7 +643,7 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
// Loop over BNs // Loop over BNs
for (k=1; k<18; k++) for (k=1; k<18; k++)
{ {
fprintf(fd," ymm0 = ((__m256i*)&cnProcBuf)[%d];\n",(lut_startAddrCnGroups[8]>>5)+lut_idxCnProcG19[j][k] + i); fprintf(fd," ymm0 = ((__m256i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>5)+lut_idxCnProcG19[j][k]);
// min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0)); // min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));
fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n"); fprintf(fd," min = _mm256_min_epu8(min, _mm256_abs_epi8(ymm0));\n");
...@@ -648,8 +657,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R) ...@@ -648,8 +657,8 @@ void nrLDPC_cnProc_BG1_generator(uint16_t Z,int R)
fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n"); fprintf(fd," min = _mm256_min_epu8(min, maxLLR);\n");
// *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn); // *p_cnProcBufResBit = _mm256_sign_epi8(min, sgn);
// p_cnProcBufResBit++; // p_cnProcBufResBit++;
fprintf(fd," ((__m256i*)cnProcBufRes)[%d] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[8]>>5)+(j*bitOffsetInGroup)+i); fprintf(fd," ((__m256i*)cnProcBufRes)[%d+i] = _mm256_sign_epi8(min, sgn);\n",(lut_startAddrCnGroups[8]>>5)+(j*bitOffsetInGroup));
} fprintf(fd," }\n");
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment