From 1fefd730d6c4a4de7d62592a14fa5573f2103149 Mon Sep 17 00:00:00 2001 From: laurent Date: Wed, 15 Feb 2023 11:19:54 +0100 Subject: [PATCH 01/13] fix ldpc ubsan --- .../PHY/CODING/nrLDPC_decoder/nrLDPC_init.h | 2217 ++++++++--------- .../PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h | 1048 ++------ .../PHY/CODING/nrLDPC_decoder/nrLDPC_types.h | 23 +- 3 files changed, 1164 insertions(+), 2124 deletions(-) diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init.h index ea031dc2da..a000b0218d 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init.h @@ -30,10 +30,25 @@ #ifndef __NR_LDPC_INIT__H__ #define __NR_LDPC_INIT__H__ - +#include #include "nrLDPC_lut.h" #include "nrLDPCdecoder_defs.h" +#define expandArr8(namE) \ + (const arr8_t) \ + { \ + (uint8_t*)namE, sizeof(namE) / sizeof(*namE), sizeof(*namE) / sizeof(**namE) \ + } +#define expandArr16(namE) \ + (const arr16_t) \ + { \ + (uint16_t*)namE, sizeof(namE) / sizeof(*namE), sizeof(*namE) / sizeof(**namE) \ + } +#define expandArr32(namE) \ + (const arr32_t) \ + { \ + (uint32_t*)namE, sizeof(namE) / sizeof(*namE), sizeof(*namE) / sizeof(**namE) \ + } /** \brief Initializes the decoder and sets correct LUTs \param p_decParams Pointer to decoder parameters @@ -46,118 +61,90 @@ static inline uint32_t nrLDPC_init(t_nrLDPC_dec_params* p_decParams, t_nrLDPC_lu uint8_t BG = p_decParams->BG; uint16_t Z = p_decParams->Z; uint8_t R = p_decParams->R; - + memset(p_lut, 0, sizeof(*p_lut)); if (BG == 2) { // LUT that only depend on BG p_lut->startAddrCnGroups = lut_startAddrCnGroups_BG2; - - p_lut->posBnInCnProcBuf[0] = (const uint8_t**) posBnInCnProcBuf_BG2_CNG3; - p_lut->posBnInCnProcBuf[1] = (const uint8_t**) posBnInCnProcBuf_BG2_CNG4; - p_lut->posBnInCnProcBuf[2] = (const uint8_t**) posBnInCnProcBuf_BG2_CNG5; - p_lut->posBnInCnProcBuf[3] = (const uint8_t**) posBnInCnProcBuf_BG2_CNG6; - p_lut->posBnInCnProcBuf[4] = (const uint8_t**) posBnInCnProcBuf_BG2_CNG8; - p_lut->posBnInCnProcBuf[5] = (const uint8_t**) posBnInCnProcBuf_BG2_CNG10; - p_lut->posBnInCnProcBuf[6] = NULL; - p_lut->posBnInCnProcBuf[7] = NULL; - p_lut->posBnInCnProcBuf[8] = NULL; + p_lut->posBnInCnProcBuf[0] = expandArr8(posBnInCnProcBuf_BG2_CNG3); + p_lut->posBnInCnProcBuf[1] = expandArr8(posBnInCnProcBuf_BG2_CNG4); + p_lut->posBnInCnProcBuf[2] = expandArr8(posBnInCnProcBuf_BG2_CNG5); + p_lut->posBnInCnProcBuf[3] = expandArr8(posBnInCnProcBuf_BG2_CNG6); + p_lut->posBnInCnProcBuf[4] = expandArr8(posBnInCnProcBuf_BG2_CNG8); + p_lut->posBnInCnProcBuf[5] = expandArr8(posBnInCnProcBuf_BG2_CNG10); // LUT that only depend on R if (R == 15) { - p_lut->startAddrBnProcBuf[0] = (const uint32_t**) startAddrBnProcBuf_BG2_R15_CNG3; - p_lut->startAddrBnProcBuf[1] = (const uint32_t**) startAddrBnProcBuf_BG2_R15_CNG4; - p_lut->startAddrBnProcBuf[2] = (const uint32_t**) startAddrBnProcBuf_BG2_R15_CNG5; - p_lut->startAddrBnProcBuf[3] = (const uint32_t**) startAddrBnProcBuf_BG2_R15_CNG6; - p_lut->startAddrBnProcBuf[4] = (const uint32_t**) startAddrBnProcBuf_BG2_R15_CNG8; - p_lut->startAddrBnProcBuf[5] = (const uint32_t**) startAddrBnProcBuf_BG2_R15_CNG10; - p_lut->startAddrBnProcBuf[6] = NULL; - p_lut->startAddrBnProcBuf[7] = NULL; - p_lut->startAddrBnProcBuf[8] = NULL; + p_lut->startAddrBnProcBuf[0] = expandArr32(startAddrBnProcBuf_BG2_R15_CNG3); + p_lut->startAddrBnProcBuf[1] = expandArr32(startAddrBnProcBuf_BG2_R15_CNG4); + p_lut->startAddrBnProcBuf[2] = expandArr32(startAddrBnProcBuf_BG2_R15_CNG5); + p_lut->startAddrBnProcBuf[3] = expandArr32(startAddrBnProcBuf_BG2_R15_CNG6); + p_lut->startAddrBnProcBuf[4] = expandArr32(startAddrBnProcBuf_BG2_R15_CNG8); + p_lut->startAddrBnProcBuf[5] = expandArr32(startAddrBnProcBuf_BG2_R15_CNG10); - p_lut->bnPosBnProcBuf[0] = (const uint8_t**) bnPosBnProcBuf_BG2_R15_CNG3; - p_lut->bnPosBnProcBuf[1] = (const uint8_t**) bnPosBnProcBuf_BG2_R15_CNG4; - p_lut->bnPosBnProcBuf[2] = (const uint8_t**) bnPosBnProcBuf_BG2_R15_CNG5; - p_lut->bnPosBnProcBuf[3] = (const uint8_t**) bnPosBnProcBuf_BG2_R15_CNG6; - p_lut->bnPosBnProcBuf[4] = (const uint8_t**) bnPosBnProcBuf_BG2_R15_CNG8; - p_lut->bnPosBnProcBuf[5] = (const uint8_t**) bnPosBnProcBuf_BG2_R15_CNG10; - p_lut->bnPosBnProcBuf[6] = NULL; - p_lut->bnPosBnProcBuf[7] = NULL; - p_lut->bnPosBnProcBuf[8] = NULL; + p_lut->bnPosBnProcBuf[0] = expandArr8(bnPosBnProcBuf_BG2_R15_CNG3); + p_lut->bnPosBnProcBuf[1] = expandArr8(bnPosBnProcBuf_BG2_R15_CNG4); + p_lut->bnPosBnProcBuf[2] = expandArr8(bnPosBnProcBuf_BG2_R15_CNG5); + p_lut->bnPosBnProcBuf[3] = expandArr8(bnPosBnProcBuf_BG2_R15_CNG6); + p_lut->bnPosBnProcBuf[4] = expandArr8(bnPosBnProcBuf_BG2_R15_CNG8); + p_lut->bnPosBnProcBuf[5] = expandArr8(bnPosBnProcBuf_BG2_R15_CNG10); - p_lut->llr2llrProcBufAddr = llr2llrProcBufAddr_BG2_R15; - p_lut->llr2llrProcBufBnPos = llr2llrProcBufBnPos_BG2_R15; + p_lut->llr2llrProcBufAddr = llr2llrProcBufAddr_BG2_R15; + p_lut->llr2llrProcBufBnPos = llr2llrProcBufBnPos_BG2_R15; - p_lut->numCnInCnGroups = lut_numCnInCnGroups_BG2_R15; - p_lut->numBnInBnGroups = lut_numBnInBnGroups_BG2_R15; - p_lut->startAddrBnGroups = lut_startAddrBnGroups_BG2_R15; - p_lut->startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG2_R15; + p_lut->numCnInCnGroups = lut_numCnInCnGroups_BG2_R15; + p_lut->numBnInBnGroups = lut_numBnInBnGroups_BG2_R15; + p_lut->startAddrBnGroups = lut_startAddrBnGroups_BG2_R15; + p_lut->startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG2_R15; - numLLR = NR_LDPC_NCOL_BG2_R15*Z; + numLLR = NR_LDPC_NCOL_BG2_R15 * Z; } else if (R == 13) { - p_lut->startAddrBnProcBuf[0] = NULL; - p_lut->startAddrBnProcBuf[1] = (const uint32_t**) startAddrBnProcBuf_BG2_R13_CNG4; - p_lut->startAddrBnProcBuf[2] = (const uint32_t**) startAddrBnProcBuf_BG2_R13_CNG5; - p_lut->startAddrBnProcBuf[3] = (const uint32_t**) startAddrBnProcBuf_BG2_R13_CNG6; - p_lut->startAddrBnProcBuf[4] = (const uint32_t**) startAddrBnProcBuf_BG2_R13_CNG8; - p_lut->startAddrBnProcBuf[5] = (const uint32_t**) startAddrBnProcBuf_BG2_R13_CNG10; - p_lut->startAddrBnProcBuf[6] = NULL; - p_lut->startAddrBnProcBuf[7] = NULL; - p_lut->startAddrBnProcBuf[8] = NULL; + p_lut->startAddrBnProcBuf[1] = expandArr32(startAddrBnProcBuf_BG2_R13_CNG4); + p_lut->startAddrBnProcBuf[2] = expandArr32(startAddrBnProcBuf_BG2_R13_CNG5); + p_lut->startAddrBnProcBuf[3] = expandArr32(startAddrBnProcBuf_BG2_R13_CNG6); + p_lut->startAddrBnProcBuf[4] = expandArr32(startAddrBnProcBuf_BG2_R13_CNG8); + p_lut->startAddrBnProcBuf[5] = expandArr32(startAddrBnProcBuf_BG2_R13_CNG10); - p_lut->bnPosBnProcBuf[0] = NULL; - p_lut->bnPosBnProcBuf[1] = (const uint8_t**) bnPosBnProcBuf_BG2_R13_CNG4; - p_lut->bnPosBnProcBuf[2] = (const uint8_t**) bnPosBnProcBuf_BG2_R13_CNG5; - p_lut->bnPosBnProcBuf[3] = (const uint8_t**) bnPosBnProcBuf_BG2_R13_CNG6; - p_lut->bnPosBnProcBuf[4] = (const uint8_t**) bnPosBnProcBuf_BG2_R13_CNG8; - p_lut->bnPosBnProcBuf[5] = (const uint8_t**) bnPosBnProcBuf_BG2_R13_CNG10; - p_lut->bnPosBnProcBuf[6] = NULL; - p_lut->bnPosBnProcBuf[7] = NULL; - p_lut->bnPosBnProcBuf[8] = NULL; + p_lut->bnPosBnProcBuf[1] = expandArr8(bnPosBnProcBuf_BG2_R13_CNG4); + p_lut->bnPosBnProcBuf[2] = expandArr8(bnPosBnProcBuf_BG2_R13_CNG5); + p_lut->bnPosBnProcBuf[3] = expandArr8(bnPosBnProcBuf_BG2_R13_CNG6); + p_lut->bnPosBnProcBuf[4] = expandArr8(bnPosBnProcBuf_BG2_R13_CNG8); + p_lut->bnPosBnProcBuf[5] = expandArr8(bnPosBnProcBuf_BG2_R13_CNG10); - p_lut->llr2llrProcBufAddr = llr2llrProcBufAddr_BG2_R13; - p_lut->llr2llrProcBufBnPos = llr2llrProcBufBnPos_BG2_R13; + p_lut->llr2llrProcBufAddr = llr2llrProcBufAddr_BG2_R13; + p_lut->llr2llrProcBufBnPos = llr2llrProcBufBnPos_BG2_R13; - p_lut->numCnInCnGroups = lut_numCnInCnGroups_BG2_R13; - p_lut->numBnInBnGroups = lut_numBnInBnGroups_BG2_R13; - p_lut->startAddrBnGroups = lut_startAddrBnGroups_BG2_R13; - p_lut->startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG2_R13; + p_lut->numCnInCnGroups = lut_numCnInCnGroups_BG2_R13; + p_lut->numBnInBnGroups = lut_numBnInBnGroups_BG2_R13; + p_lut->startAddrBnGroups = lut_startAddrBnGroups_BG2_R13; + p_lut->startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG2_R13; - numLLR = NR_LDPC_NCOL_BG2_R13*Z; + numLLR = NR_LDPC_NCOL_BG2_R13 * Z; } else if (R == 23) { - p_lut->startAddrBnProcBuf[0] = NULL; - p_lut->startAddrBnProcBuf[1] = (const uint32_t**) startAddrBnProcBuf_BG2_R23_CNG4; - p_lut->startAddrBnProcBuf[2] = NULL; - p_lut->startAddrBnProcBuf[3] = (const uint32_t**) startAddrBnProcBuf_BG2_R23_CNG6; - p_lut->startAddrBnProcBuf[4] = (const uint32_t**) startAddrBnProcBuf_BG2_R23_CNG8; - p_lut->startAddrBnProcBuf[5] = (const uint32_t**) startAddrBnProcBuf_BG2_R23_CNG10; - p_lut->startAddrBnProcBuf[6] = NULL; - p_lut->startAddrBnProcBuf[7] = NULL; - p_lut->startAddrBnProcBuf[8] = NULL; + p_lut->startAddrBnProcBuf[1] = expandArr32(startAddrBnProcBuf_BG2_R23_CNG4); + p_lut->startAddrBnProcBuf[3] = expandArr32(startAddrBnProcBuf_BG2_R23_CNG6); + p_lut->startAddrBnProcBuf[4] = expandArr32(startAddrBnProcBuf_BG2_R23_CNG8); + p_lut->startAddrBnProcBuf[5] = expandArr32(startAddrBnProcBuf_BG2_R23_CNG10); - p_lut->bnPosBnProcBuf[0] = NULL; - p_lut->bnPosBnProcBuf[1] = (const uint8_t**) bnPosBnProcBuf_BG2_R23_CNG4; - p_lut->bnPosBnProcBuf[2] = NULL; - p_lut->bnPosBnProcBuf[3] = (const uint8_t**) bnPosBnProcBuf_BG2_R23_CNG6; - p_lut->bnPosBnProcBuf[4] = (const uint8_t**) bnPosBnProcBuf_BG2_R23_CNG8; - p_lut->bnPosBnProcBuf[5] = (const uint8_t**) bnPosBnProcBuf_BG2_R23_CNG10; - p_lut->bnPosBnProcBuf[6] = NULL; - p_lut->bnPosBnProcBuf[7] = NULL; - p_lut->bnPosBnProcBuf[8] = NULL; + p_lut->bnPosBnProcBuf[1] = expandArr8(bnPosBnProcBuf_BG2_R23_CNG4); + p_lut->bnPosBnProcBuf[3] = expandArr8(bnPosBnProcBuf_BG2_R23_CNG6); + p_lut->bnPosBnProcBuf[4] = expandArr8(bnPosBnProcBuf_BG2_R23_CNG8); + p_lut->bnPosBnProcBuf[5] = expandArr8(bnPosBnProcBuf_BG2_R23_CNG10); - p_lut->llr2llrProcBufAddr = llr2llrProcBufAddr_BG2_R23; - p_lut->llr2llrProcBufBnPos = llr2llrProcBufBnPos_BG2_R23; + p_lut->llr2llrProcBufAddr = llr2llrProcBufAddr_BG2_R23; + p_lut->llr2llrProcBufBnPos = llr2llrProcBufBnPos_BG2_R23; - p_lut->numCnInCnGroups = lut_numCnInCnGroups_BG2_R23; - p_lut->numBnInBnGroups = lut_numBnInBnGroups_BG2_R23; - p_lut->startAddrBnGroups = lut_startAddrBnGroups_BG2_R23; - p_lut->startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG2_R23; + p_lut->numCnInCnGroups = lut_numCnInCnGroups_BG2_R23; + p_lut->numBnInBnGroups = lut_numBnInBnGroups_BG2_R23; + p_lut->startAddrBnGroups = lut_startAddrBnGroups_BG2_R23; + p_lut->startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG2_R23; - numLLR = NR_LDPC_NCOL_BG2_R23*Z; + numLLR = NR_LDPC_NCOL_BG2_R23 * Z; } // LUT that depend on Z and R @@ -165,678 +152,515 @@ static inline uint32_t nrLDPC_init(t_nrLDPC_dec_params* p_decParams, t_nrLDPC_lu { case 2: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z2_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z2_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z2_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z2_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z2_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z2_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z2_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z2_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z2_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z2_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z2_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z2_CNG10); + break; } case 3: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z3_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z3_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z3_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z3_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z3_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z3_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z3_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z3_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z3_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z3_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z3_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z3_CNG10); + break; } case 4: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z4_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z4_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z4_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z4_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z4_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z4_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z4_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z4_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z4_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z4_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z4_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z4_CNG10); + break; } case 5: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z5_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z5_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z5_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z5_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z5_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z5_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z5_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z5_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z5_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z5_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z5_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z5_CNG10); + break; } case 6: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z6_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z6_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z6_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z6_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z6_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z6_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z6_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z6_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z6_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z6_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z6_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z6_CNG10); + break; } case 7: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z7_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z7_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z7_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z7_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z7_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z7_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z7_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z7_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z7_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z7_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z7_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z7_CNG10); + break; } case 8: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z8_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z8_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z8_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z8_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z8_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z8_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z8_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z8_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z8_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z8_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z8_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z8_CNG10); + break; } case 9: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z9_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z9_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z9_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z9_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z9_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z9_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z9_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z9_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z9_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z9_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z9_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z9_CNG10); + break; } case 10: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z10_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z10_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z10_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z10_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z10_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z10_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z10_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z10_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z10_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z10_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z10_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z10_CNG10); + break; } case 11: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z11_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z11_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z11_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z11_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z11_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z11_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z11_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z11_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z11_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z11_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z11_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z11_CNG10); + break; } case 12: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z12_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z12_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z12_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z12_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z12_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z12_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z12_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z12_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z12_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z12_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z12_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z12_CNG10); + break; } case 13: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z13_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z13_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z13_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z13_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z13_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z13_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z13_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z13_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z13_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z13_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z13_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z13_CNG10); + break; } case 14: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z14_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z14_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z14_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z14_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z14_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z14_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z14_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z14_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z14_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z14_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z14_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z14_CNG10); + break; } case 15: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z15_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z15_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z15_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z15_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z15_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z15_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z15_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z15_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z15_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z15_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z15_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z15_CNG10); + break; } case 16: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z16_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z16_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z16_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z16_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z16_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z16_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z16_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z16_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z16_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z16_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z16_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z16_CNG10); + break; } case 18: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z18_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z18_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z18_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z18_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z18_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z18_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z18_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z18_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z18_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z18_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z18_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z18_CNG10); + break; } case 20: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z20_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z20_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z20_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z20_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z20_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z20_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z20_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z20_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z20_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z20_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z20_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z20_CNG10); + break; } case 22: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z22_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z22_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z22_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z22_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z22_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z22_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z22_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z22_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z22_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z22_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z22_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z22_CNG10); + break; } case 24: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z24_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z24_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z24_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z24_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z24_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z24_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z24_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z24_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z24_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z24_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z24_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z24_CNG10); + break; } case 26: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z26_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z26_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z26_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z26_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z26_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z26_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z26_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z26_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z26_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z26_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z26_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z26_CNG10); + break; } case 28: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z28_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z28_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z28_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z28_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z28_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z28_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z28_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z28_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z28_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z28_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z28_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z28_CNG10); + break; } case 30: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z30_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z30_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z30_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z30_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z30_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z30_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z30_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z30_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z30_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z30_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z30_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z30_CNG10); + break; } case 32: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z32_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z32_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z32_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z32_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z32_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z32_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z32_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z32_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z32_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z32_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z32_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z32_CNG10); + break; } case 36: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z36_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z36_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z36_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z36_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z36_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z36_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z36_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z36_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z36_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z36_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z36_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z36_CNG10); + break; } case 40: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z40_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z40_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z40_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z40_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z40_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z40_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z40_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z40_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z40_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z40_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z40_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z40_CNG10); + break; } case 44: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z44_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z44_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z44_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z44_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z44_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z44_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z44_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z44_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z44_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z44_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z44_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z44_CNG10); + break; } case 48: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z48_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z48_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z48_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z48_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z48_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z48_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z48_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z48_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z48_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z48_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z48_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z48_CNG10); + break; } case 52: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z52_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z52_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z52_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z52_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z52_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z52_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z52_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z52_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z52_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z52_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z52_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z52_CNG10); + break; } case 56: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z56_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z56_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z56_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z56_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z56_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z56_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z56_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z56_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z56_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z56_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z56_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z56_CNG10); + break; } case 60: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z60_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z60_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z60_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z60_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z60_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z60_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z60_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z60_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z60_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z60_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z60_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z60_CNG10); + break; } case 64: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z64_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z64_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z64_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z64_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z64_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z64_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z64_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z64_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z64_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z64_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z64_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z64_CNG10); + break; } case 72: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z72_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z72_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z72_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z72_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z72_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z72_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z72_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z72_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z72_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z72_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z72_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z72_CNG10); + break; } case 80: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z80_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z80_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z80_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z80_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z80_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z80_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z80_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z80_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z80_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z80_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z80_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z80_CNG10); + break; } case 88: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z88_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z88_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z88_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z88_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z88_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z88_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z88_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z88_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z88_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z88_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z88_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z88_CNG10); + break; } case 96: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z96_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z96_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z96_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z96_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z96_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z96_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z96_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z96_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z96_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z96_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z96_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z96_CNG10); + break; } case 104: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z104_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z104_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z104_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z104_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z104_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z104_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z104_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z104_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z104_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z104_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z104_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z104_CNG10); + break; } case 112: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z112_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z112_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z112_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z112_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z112_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z112_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z112_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z112_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z112_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z112_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z112_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z112_CNG10); + break; } case 120: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z120_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z120_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z120_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z120_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z120_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z120_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z120_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z120_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z120_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z120_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z120_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z120_CNG10); + break; } case 128: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z128_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z128_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z128_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z128_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z128_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z128_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z128_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z128_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z128_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z128_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z128_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z128_CNG10); + break; } case 144: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z144_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z144_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z144_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z144_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z144_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z144_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z144_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z144_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z144_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z144_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z144_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z144_CNG10); + break; } case 160: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z160_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z160_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z160_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z160_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z160_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z160_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z160_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z160_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z160_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z160_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z160_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z160_CNG10); + break; } case 176: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z176_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z176_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z176_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z176_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z176_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z176_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z176_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z176_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z176_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z176_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z176_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z176_CNG10); + break; } case 192: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z192_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z192_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z192_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z192_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z192_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z192_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z192_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z192_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z192_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z192_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z192_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z192_CNG10); + break; } case 208: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z208_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z208_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z208_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z208_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z208_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z208_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z208_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z208_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z208_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z208_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z208_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z208_CNG10); + break; } case 224: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z224_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z224_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z224_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z224_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z224_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z224_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z224_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z224_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z224_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z224_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z224_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z224_CNG10); + break; } case 240: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z240_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z240_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z240_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z240_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z240_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z240_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z240_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z240_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z240_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z240_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z240_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z240_CNG10); + break; } case 256: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z256_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z256_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z256_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z256_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z256_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z256_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z256_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z256_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z256_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z256_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z256_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z256_CNG10); + break; } case 288: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z288_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z288_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z288_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z288_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z288_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z288_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z288_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z288_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z288_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z288_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z288_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z288_CNG10); + break; } case 320: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z320_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z320_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z320_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z320_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z320_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z320_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z320_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z320_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z320_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z320_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z320_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z320_CNG10); + break; } case 352: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z352_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z352_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z352_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z352_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z352_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z352_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z352_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z352_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z352_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z352_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z352_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z352_CNG10); + break; } case 384: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG2_Z384_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG2_Z384_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG2_Z384_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG2_Z384_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG2_Z384_CNG8; - p_lut->circShift[5] = (const uint16_t**) circShift_BG2_Z384_CNG10; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; - break; + p_lut->circShift[0] = expandArr16(circShift_BG2_Z384_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG2_Z384_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG2_Z384_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG2_Z384_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG2_Z384_CNG8); + p_lut->circShift[5] = expandArr16(circShift_BG2_Z384_CNG10); + break; } - default: - { - p_lut->circShift[0] = NULL; - p_lut->circShift[1] = NULL; - p_lut->circShift[2] = NULL; - p_lut->circShift[3] = NULL; - p_lut->circShift[4] = NULL; - p_lut->circShift[5] = NULL; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; + default: { } } } @@ -845,112 +669,89 @@ static inline uint32_t nrLDPC_init(t_nrLDPC_dec_params* p_decParams, t_nrLDPC_lu // LUT that only depend on BG p_lut->startAddrCnGroups = lut_startAddrCnGroups_BG1; - p_lut->posBnInCnProcBuf[0] = (const uint8_t**) posBnInCnProcBuf_BG1_CNG3; - p_lut->posBnInCnProcBuf[1] = (const uint8_t**) posBnInCnProcBuf_BG1_CNG4; - p_lut->posBnInCnProcBuf[2] = (const uint8_t**) posBnInCnProcBuf_BG1_CNG5; - p_lut->posBnInCnProcBuf[3] = (const uint8_t**) posBnInCnProcBuf_BG1_CNG6; - p_lut->posBnInCnProcBuf[4] = (const uint8_t**) posBnInCnProcBuf_BG1_CNG7; - p_lut->posBnInCnProcBuf[5] = (const uint8_t**) posBnInCnProcBuf_BG1_CNG8; - p_lut->posBnInCnProcBuf[6] = (const uint8_t**) posBnInCnProcBuf_BG1_CNG9; - p_lut->posBnInCnProcBuf[7] = (const uint8_t**) posBnInCnProcBuf_BG1_CNG10; - p_lut->posBnInCnProcBuf[8] = (const uint8_t**) posBnInCnProcBuf_BG1_CNG19; + p_lut->posBnInCnProcBuf[0] = expandArr8(posBnInCnProcBuf_BG1_CNG3); + p_lut->posBnInCnProcBuf[1] = expandArr8(posBnInCnProcBuf_BG1_CNG4); + p_lut->posBnInCnProcBuf[2] = expandArr8(posBnInCnProcBuf_BG1_CNG5); + p_lut->posBnInCnProcBuf[3] = expandArr8(posBnInCnProcBuf_BG1_CNG6); + p_lut->posBnInCnProcBuf[4] = expandArr8(posBnInCnProcBuf_BG1_CNG7); + p_lut->posBnInCnProcBuf[5] = expandArr8(posBnInCnProcBuf_BG1_CNG8); + p_lut->posBnInCnProcBuf[6] = expandArr8(posBnInCnProcBuf_BG1_CNG9); + p_lut->posBnInCnProcBuf[7] = expandArr8(posBnInCnProcBuf_BG1_CNG10); + p_lut->posBnInCnProcBuf[8] = expandArr8(posBnInCnProcBuf_BG1_CNG19); // LUT that only depend on R if (R == 13) { - p_lut->startAddrBnProcBuf[0] = (const uint32_t**) startAddrBnProcBuf_BG1_R13_CNG3; - p_lut->startAddrBnProcBuf[1] = (const uint32_t**) startAddrBnProcBuf_BG1_R13_CNG4; - p_lut->startAddrBnProcBuf[2] = (const uint32_t**) startAddrBnProcBuf_BG1_R13_CNG5; - p_lut->startAddrBnProcBuf[3] = (const uint32_t**) startAddrBnProcBuf_BG1_R13_CNG6; - p_lut->startAddrBnProcBuf[4] = (const uint32_t**) startAddrBnProcBuf_BG1_R13_CNG7; - p_lut->startAddrBnProcBuf[5] = (const uint32_t**) startAddrBnProcBuf_BG1_R13_CNG8; - p_lut->startAddrBnProcBuf[6] = (const uint32_t**) startAddrBnProcBuf_BG1_R13_CNG9; - p_lut->startAddrBnProcBuf[7] = (const uint32_t**) startAddrBnProcBuf_BG1_R13_CNG10; - p_lut->startAddrBnProcBuf[8] = (const uint32_t**) startAddrBnProcBuf_BG1_R13_CNG19; + p_lut->startAddrBnProcBuf[0] = expandArr32(startAddrBnProcBuf_BG1_R13_CNG3); + p_lut->startAddrBnProcBuf[1] = expandArr32(startAddrBnProcBuf_BG1_R13_CNG4); + p_lut->startAddrBnProcBuf[2] = expandArr32(startAddrBnProcBuf_BG1_R13_CNG5); + p_lut->startAddrBnProcBuf[3] = expandArr32(startAddrBnProcBuf_BG1_R13_CNG6); + p_lut->startAddrBnProcBuf[4] = expandArr32(startAddrBnProcBuf_BG1_R13_CNG7); + p_lut->startAddrBnProcBuf[5] = expandArr32(startAddrBnProcBuf_BG1_R13_CNG8); + p_lut->startAddrBnProcBuf[6] = expandArr32(startAddrBnProcBuf_BG1_R13_CNG9); + p_lut->startAddrBnProcBuf[7] = expandArr32(startAddrBnProcBuf_BG1_R13_CNG10); + p_lut->startAddrBnProcBuf[8] = expandArr32(startAddrBnProcBuf_BG1_R13_CNG19); - p_lut->bnPosBnProcBuf[0] = (const uint8_t**) NULL; - p_lut->bnPosBnProcBuf[1] = (const uint8_t**) bnPosBnProcBuf_BG1_R13_CNG4; - p_lut->bnPosBnProcBuf[2] = (const uint8_t**) bnPosBnProcBuf_BG1_R13_CNG5; - p_lut->bnPosBnProcBuf[3] = (const uint8_t**) bnPosBnProcBuf_BG1_R13_CNG6; - p_lut->bnPosBnProcBuf[4] = (const uint8_t**) bnPosBnProcBuf_BG1_R13_CNG7; - p_lut->bnPosBnProcBuf[5] = (const uint8_t**) bnPosBnProcBuf_BG1_R13_CNG8; - p_lut->bnPosBnProcBuf[6] = (const uint8_t**) bnPosBnProcBuf_BG1_R13_CNG9; - p_lut->bnPosBnProcBuf[7] = (const uint8_t**) bnPosBnProcBuf_BG1_R13_CNG10; - p_lut->bnPosBnProcBuf[8] = (const uint8_t**) bnPosBnProcBuf_BG1_R13_CNG19; + p_lut->bnPosBnProcBuf[1] = expandArr8(bnPosBnProcBuf_BG1_R13_CNG4); + p_lut->bnPosBnProcBuf[2] = expandArr8(bnPosBnProcBuf_BG1_R13_CNG5); + p_lut->bnPosBnProcBuf[3] = expandArr8(bnPosBnProcBuf_BG1_R13_CNG6); + p_lut->bnPosBnProcBuf[4] = expandArr8(bnPosBnProcBuf_BG1_R13_CNG7); + p_lut->bnPosBnProcBuf[5] = expandArr8(bnPosBnProcBuf_BG1_R13_CNG8); + p_lut->bnPosBnProcBuf[6] = expandArr8(bnPosBnProcBuf_BG1_R13_CNG9); + p_lut->bnPosBnProcBuf[7] = expandArr8(bnPosBnProcBuf_BG1_R13_CNG10); + p_lut->bnPosBnProcBuf[8] = expandArr8(bnPosBnProcBuf_BG1_R13_CNG19); - p_lut->llr2llrProcBufAddr = llr2llrProcBufAddr_BG1_R13; - p_lut->llr2llrProcBufBnPos = llr2llrProcBufBnPos_BG1_R13; + p_lut->llr2llrProcBufAddr = llr2llrProcBufAddr_BG1_R13; + p_lut->llr2llrProcBufBnPos = llr2llrProcBufBnPos_BG1_R13; - p_lut->numCnInCnGroups = lut_numCnInCnGroups_BG1_R13; - p_lut->numBnInBnGroups = lut_numBnInBnGroups_BG1_R13; - p_lut->startAddrBnGroups = lut_startAddrBnGroups_BG1_R13; - p_lut->startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG1_R13; + p_lut->numCnInCnGroups = lut_numCnInCnGroups_BG1_R13; + p_lut->numBnInBnGroups = lut_numBnInBnGroups_BG1_R13; + p_lut->startAddrBnGroups = lut_startAddrBnGroups_BG1_R13; + p_lut->startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG1_R13; - numLLR = NR_LDPC_NCOL_BG1_R13*Z; + numLLR = NR_LDPC_NCOL_BG1_R13 * Z; } else if (R == 23) { - p_lut->startAddrBnProcBuf[0] = (const uint32_t**) startAddrBnProcBuf_BG1_R23_CNG3; - p_lut->startAddrBnProcBuf[1] = (const uint32_t**) NULL; - p_lut->startAddrBnProcBuf[2] = (const uint32_t**) NULL; - p_lut->startAddrBnProcBuf[3] = (const uint32_t**) NULL; - p_lut->startAddrBnProcBuf[4] = (const uint32_t**) startAddrBnProcBuf_BG1_R23_CNG7; - p_lut->startAddrBnProcBuf[5] = (const uint32_t**) startAddrBnProcBuf_BG1_R23_CNG8; - p_lut->startAddrBnProcBuf[6] = (const uint32_t**) startAddrBnProcBuf_BG1_R23_CNG9; - p_lut->startAddrBnProcBuf[7] = (const uint32_t**) startAddrBnProcBuf_BG1_R23_CNG10; - p_lut->startAddrBnProcBuf[8] = (const uint32_t**) startAddrBnProcBuf_BG1_R23_CNG19; + p_lut->startAddrBnProcBuf[0] = expandArr32(startAddrBnProcBuf_BG1_R23_CNG3); + p_lut->startAddrBnProcBuf[4] = expandArr32(startAddrBnProcBuf_BG1_R23_CNG7); + p_lut->startAddrBnProcBuf[5] = expandArr32(startAddrBnProcBuf_BG1_R23_CNG8); + p_lut->startAddrBnProcBuf[6] = expandArr32(startAddrBnProcBuf_BG1_R23_CNG9); + p_lut->startAddrBnProcBuf[7] = expandArr32(startAddrBnProcBuf_BG1_R23_CNG10); + p_lut->startAddrBnProcBuf[8] = expandArr32(startAddrBnProcBuf_BG1_R23_CNG19); - p_lut->bnPosBnProcBuf[0] = (const uint8_t**) NULL; - p_lut->bnPosBnProcBuf[1] = (const uint8_t**) NULL; - p_lut->bnPosBnProcBuf[2] = (const uint8_t**) NULL; - p_lut->bnPosBnProcBuf[3] = (const uint8_t**) NULL; - p_lut->bnPosBnProcBuf[4] = (const uint8_t**) bnPosBnProcBuf_BG1_R23_CNG7; - p_lut->bnPosBnProcBuf[5] = (const uint8_t**) bnPosBnProcBuf_BG1_R23_CNG8; - p_lut->bnPosBnProcBuf[6] = (const uint8_t**) bnPosBnProcBuf_BG1_R23_CNG9; - p_lut->bnPosBnProcBuf[7] = (const uint8_t**) bnPosBnProcBuf_BG1_R23_CNG10; - p_lut->bnPosBnProcBuf[8] = (const uint8_t**) bnPosBnProcBuf_BG1_R23_CNG19; + p_lut->bnPosBnProcBuf[4] = expandArr8(bnPosBnProcBuf_BG1_R23_CNG7); + p_lut->bnPosBnProcBuf[5] = expandArr8(bnPosBnProcBuf_BG1_R23_CNG8); + p_lut->bnPosBnProcBuf[6] = expandArr8(bnPosBnProcBuf_BG1_R23_CNG9); + p_lut->bnPosBnProcBuf[7] = expandArr8(bnPosBnProcBuf_BG1_R23_CNG10); + p_lut->bnPosBnProcBuf[8] = expandArr8(bnPosBnProcBuf_BG1_R23_CNG19); - p_lut->llr2llrProcBufAddr = llr2llrProcBufAddr_BG1_R23; - p_lut->llr2llrProcBufBnPos = llr2llrProcBufBnPos_BG1_R23; + p_lut->llr2llrProcBufAddr = llr2llrProcBufAddr_BG1_R23; + p_lut->llr2llrProcBufBnPos = llr2llrProcBufBnPos_BG1_R23; - p_lut->numCnInCnGroups = lut_numCnInCnGroups_BG1_R23; - p_lut->numBnInBnGroups = lut_numBnInBnGroups_BG1_R23; - p_lut->startAddrBnGroups = lut_startAddrBnGroups_BG1_R23; - p_lut->startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG1_R23; + p_lut->numCnInCnGroups = lut_numCnInCnGroups_BG1_R23; + p_lut->numBnInBnGroups = lut_numBnInBnGroups_BG1_R23; + p_lut->startAddrBnGroups = lut_startAddrBnGroups_BG1_R23; + p_lut->startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG1_R23; - numLLR = NR_LDPC_NCOL_BG1_R23*Z; + numLLR = NR_LDPC_NCOL_BG1_R23 * Z; } else if (R == 89) { - p_lut->startAddrBnProcBuf[0] = (const uint32_t**) startAddrBnProcBuf_BG1_R89_CNG3; - p_lut->startAddrBnProcBuf[1] = (const uint32_t**) NULL; - p_lut->startAddrBnProcBuf[2] = (const uint32_t**) NULL; - p_lut->startAddrBnProcBuf[3] = (const uint32_t**) NULL; - p_lut->startAddrBnProcBuf[4] = (const uint32_t**) NULL; - p_lut->startAddrBnProcBuf[5] = (const uint32_t**) NULL; - p_lut->startAddrBnProcBuf[6] = (const uint32_t**) NULL; - p_lut->startAddrBnProcBuf[7] = (const uint32_t**) NULL; - p_lut->startAddrBnProcBuf[8] = (const uint32_t**) startAddrBnProcBuf_BG1_R89_CNG19; + p_lut->startAddrBnProcBuf[0] = expandArr32(startAddrBnProcBuf_BG1_R89_CNG3); + p_lut->startAddrBnProcBuf[8] = expandArr32(startAddrBnProcBuf_BG1_R89_CNG19); - p_lut->bnPosBnProcBuf[0] = (const uint8_t**) NULL; - p_lut->bnPosBnProcBuf[1] = (const uint8_t**) NULL; - p_lut->bnPosBnProcBuf[2] = (const uint8_t**) NULL; - p_lut->bnPosBnProcBuf[3] = (const uint8_t**) NULL; - p_lut->bnPosBnProcBuf[4] = (const uint8_t**) NULL; - p_lut->bnPosBnProcBuf[5] = (const uint8_t**) NULL; - p_lut->bnPosBnProcBuf[6] = (const uint8_t**) NULL; - p_lut->bnPosBnProcBuf[7] = (const uint8_t**) NULL; - p_lut->bnPosBnProcBuf[8] = (const uint8_t**) bnPosBnProcBuf_BG1_R89_CNG19; + p_lut->bnPosBnProcBuf[8] = expandArr8(bnPosBnProcBuf_BG1_R89_CNG19); - p_lut->llr2llrProcBufAddr = llr2llrProcBufAddr_BG1_R89; - p_lut->llr2llrProcBufBnPos = llr2llrProcBufBnPos_BG1_R89; + p_lut->llr2llrProcBufAddr = llr2llrProcBufAddr_BG1_R89; + p_lut->llr2llrProcBufBnPos = llr2llrProcBufBnPos_BG1_R89; - p_lut->numCnInCnGroups = lut_numCnInCnGroups_BG1_R89; - p_lut->numBnInBnGroups = lut_numBnInBnGroups_BG1_R89; - p_lut->startAddrBnGroups = lut_startAddrBnGroups_BG1_R89; - p_lut->startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG1_R89; + p_lut->numCnInCnGroups = lut_numCnInCnGroups_BG1_R89; + p_lut->numBnInBnGroups = lut_numBnInBnGroups_BG1_R89; + p_lut->startAddrBnGroups = lut_startAddrBnGroups_BG1_R89; + p_lut->startAddrBnGroupsLlr = lut_startAddrBnGroupsLlr_BG1_R89; - numLLR = NR_LDPC_NCOL_BG1_R89*Z; + numLLR = NR_LDPC_NCOL_BG1_R89 * Z; } // LUT that depend on Z and R @@ -958,678 +759,668 @@ static inline uint32_t nrLDPC_init(t_nrLDPC_dec_params* p_decParams, t_nrLDPC_lu { case 2: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z2_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z2_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z2_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z2_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z2_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z2_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z2_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z2_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z2_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z2_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z2_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z2_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z2_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z2_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z2_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z2_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z2_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z2_CNG19); + break; } case 3: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z3_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z3_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z3_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z3_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z3_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z3_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z3_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z3_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z3_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z3_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z3_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z3_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z3_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z3_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z3_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z3_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z3_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z3_CNG19); + break; } case 4: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z4_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z4_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z4_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z4_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z4_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z4_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z4_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z4_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z4_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z4_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z4_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z4_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z4_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z4_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z4_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z4_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z4_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z4_CNG19); + break; } case 5: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z5_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z5_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z5_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z5_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z5_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z5_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z5_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z5_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z5_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z5_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z5_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z5_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z5_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z5_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z5_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z5_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z5_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z5_CNG19); + break; } case 6: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z6_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z6_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z6_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z6_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z6_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z6_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z6_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z6_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z6_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z6_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z6_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z6_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z6_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z6_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z6_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z6_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z6_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z6_CNG19); + break; } case 7: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z7_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z7_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z7_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z7_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z7_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z7_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z7_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z7_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z7_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z7_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z7_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z7_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z7_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z7_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z7_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z7_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z7_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z7_CNG19); + break; } case 8: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z8_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z8_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z8_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z8_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z8_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z8_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z8_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z8_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z8_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z8_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z8_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z8_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z8_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z8_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z8_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z8_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z8_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z8_CNG19); + break; } case 9: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z9_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z9_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z9_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z9_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z9_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z9_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z9_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z9_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z9_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z9_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z9_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z9_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z9_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z9_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z9_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z9_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z9_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z9_CNG19); + break; } case 10: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z10_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z10_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z10_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z10_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z10_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z10_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z10_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z10_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z10_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z10_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z10_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z10_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z10_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z10_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z10_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z10_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z10_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z10_CNG19); + break; } case 11: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z11_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z11_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z11_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z11_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z11_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z11_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z11_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z11_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z11_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z11_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z11_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z11_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z11_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z11_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z11_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z11_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z11_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z11_CNG19); + break; } case 12: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z12_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z12_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z12_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z12_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z12_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z12_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z12_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z12_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z12_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z12_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z12_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z12_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z12_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z12_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z12_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z12_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z12_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z12_CNG19); + break; } case 13: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z13_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z13_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z13_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z13_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z13_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z13_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z13_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z13_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z13_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z13_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z13_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z13_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z13_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z13_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z13_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z13_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z13_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z13_CNG19); + break; } case 14: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z14_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z14_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z14_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z14_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z14_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z14_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z14_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z14_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z14_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z14_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z14_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z14_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z14_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z14_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z14_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z14_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z14_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z14_CNG19); + break; } case 15: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z15_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z15_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z15_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z15_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z15_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z15_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z15_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z15_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z15_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z15_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z15_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z15_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z15_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z15_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z15_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z15_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z15_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z15_CNG19); + break; } case 16: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z16_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z16_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z16_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z16_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z16_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z16_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z16_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z16_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z16_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z16_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z16_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z16_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z16_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z16_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z16_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z16_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z16_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z16_CNG19); + break; } case 18: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z18_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z18_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z18_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z18_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z18_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z18_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z18_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z18_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z18_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z18_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z18_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z18_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z18_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z18_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z18_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z18_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z18_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z18_CNG19); + break; } case 20: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z20_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z20_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z20_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z20_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z20_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z20_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z20_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z20_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z20_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z20_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z20_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z20_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z20_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z20_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z20_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z20_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z20_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z20_CNG19); + break; } case 22: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z22_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z22_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z22_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z22_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z22_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z22_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z22_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z22_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z22_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z22_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z22_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z22_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z22_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z22_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z22_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z22_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z22_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z22_CNG19); + break; } case 24: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z24_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z24_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z24_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z24_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z24_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z24_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z24_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z24_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z24_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z24_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z24_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z24_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z24_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z24_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z24_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z24_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z24_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z24_CNG19); + break; } case 26: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z26_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z26_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z26_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z26_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z26_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z26_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z26_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z26_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z26_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z26_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z26_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z26_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z26_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z26_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z26_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z26_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z26_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z26_CNG19); + break; } case 28: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z28_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z28_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z28_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z28_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z28_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z28_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z28_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z28_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z28_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z28_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z28_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z28_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z28_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z28_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z28_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z28_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z28_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z28_CNG19); + break; } case 30: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z30_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z30_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z30_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z30_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z30_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z30_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z30_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z30_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z30_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z30_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z30_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z30_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z30_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z30_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z30_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z30_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z30_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z30_CNG19); + break; } case 32: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z32_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z32_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z32_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z32_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z32_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z32_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z32_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z32_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z32_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z32_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z32_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z32_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z32_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z32_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z32_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z32_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z32_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z32_CNG19); + break; } case 36: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z36_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z36_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z36_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z36_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z36_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z36_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z36_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z36_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z36_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z36_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z36_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z36_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z36_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z36_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z36_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z36_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z36_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z36_CNG19); + break; } case 40: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z40_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z40_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z40_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z40_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z40_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z40_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z40_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z40_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z40_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z40_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z40_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z40_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z40_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z40_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z40_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z40_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z40_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z40_CNG19); + break; } case 44: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z44_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z44_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z44_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z44_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z44_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z44_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z44_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z44_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z44_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z44_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z44_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z44_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z44_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z44_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z44_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z44_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z44_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z44_CNG19); + break; } case 48: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z48_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z48_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z48_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z48_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z48_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z48_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z48_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z48_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z48_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z48_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z48_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z48_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z48_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z48_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z48_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z48_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z48_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z48_CNG19); + break; } case 52: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z52_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z52_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z52_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z52_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z52_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z52_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z52_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z52_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z52_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z52_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z52_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z52_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z52_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z52_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z52_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z52_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z52_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z52_CNG19); + break; } case 56: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z56_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z56_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z56_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z56_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z56_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z56_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z56_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z56_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z56_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z56_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z56_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z56_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z56_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z56_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z56_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z56_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z56_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z56_CNG19); + break; } case 60: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z60_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z60_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z60_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z60_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z60_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z60_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z60_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z60_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z60_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z60_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z60_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z60_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z60_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z60_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z60_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z60_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z60_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z60_CNG19); + break; } case 64: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z64_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z64_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z64_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z64_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z64_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z64_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z64_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z64_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z64_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z64_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z64_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z64_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z64_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z64_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z64_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z64_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z64_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z64_CNG19); + break; } case 72: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z72_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z72_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z72_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z72_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z72_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z72_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z72_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z72_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z72_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z72_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z72_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z72_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z72_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z72_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z72_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z72_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z72_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z72_CNG19); + break; } case 80: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z80_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z80_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z80_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z80_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z80_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z80_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z80_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z80_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z80_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z80_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z80_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z80_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z80_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z80_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z80_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z80_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z80_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z80_CNG19); + break; } case 88: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z88_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z88_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z88_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z88_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z88_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z88_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z88_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z88_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z88_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z88_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z88_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z88_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z88_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z88_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z88_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z88_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z88_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z88_CNG19); + break; } case 96: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z96_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z96_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z96_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z96_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z96_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z96_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z96_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z96_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z96_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z96_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z96_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z96_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z96_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z96_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z96_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z96_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z96_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z96_CNG19); + break; } case 104: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z104_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z104_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z104_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z104_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z104_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z104_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z104_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z104_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z104_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z104_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z104_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z104_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z104_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z104_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z104_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z104_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z104_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z104_CNG19); + break; } case 112: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z112_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z112_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z112_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z112_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z112_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z112_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z112_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z112_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z112_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z112_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z112_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z112_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z112_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z112_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z112_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z112_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z112_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z112_CNG19); + break; } case 120: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z120_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z120_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z120_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z120_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z120_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z120_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z120_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z120_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z120_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z120_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z120_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z120_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z120_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z120_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z120_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z120_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z120_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z120_CNG19); + break; } case 128: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z128_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z128_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z128_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z128_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z128_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z128_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z128_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z128_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z128_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z128_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z128_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z128_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z128_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z128_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z128_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z128_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z128_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z128_CNG19); + break; } case 144: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z144_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z144_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z144_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z144_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z144_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z144_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z144_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z144_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z144_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z144_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z144_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z144_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z144_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z144_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z144_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z144_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z144_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z144_CNG19); + break; } case 160: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z160_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z160_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z160_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z160_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z160_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z160_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z160_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z160_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z160_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z160_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z160_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z160_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z160_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z160_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z160_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z160_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z160_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z160_CNG19); + break; } case 176: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z176_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z176_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z176_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z176_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z176_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z176_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z176_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z176_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z176_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z176_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z176_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z176_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z176_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z176_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z176_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z176_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z176_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z176_CNG19); + break; } case 192: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z192_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z192_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z192_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z192_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z192_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z192_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z192_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z192_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z192_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z192_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z192_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z192_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z192_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z192_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z192_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z192_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z192_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z192_CNG19); + break; } case 208: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z208_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z208_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z208_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z208_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z208_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z208_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z208_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z208_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z208_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z208_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z208_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z208_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z208_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z208_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z208_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z208_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z208_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z208_CNG19); + break; } case 224: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z224_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z224_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z224_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z224_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z224_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z224_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z224_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z224_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z224_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z224_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z224_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z224_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z224_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z224_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z224_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z224_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z224_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z224_CNG19); + break; } case 240: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z240_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z240_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z240_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z240_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z240_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z240_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z240_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z240_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z240_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z240_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z240_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z240_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z240_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z240_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z240_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z240_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z240_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z240_CNG19); + break; } case 256: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z256_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z256_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z256_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z256_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z256_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z256_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z256_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z256_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z256_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z256_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z256_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z256_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z256_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z256_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z256_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z256_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z256_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z256_CNG19); + break; } case 288: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z288_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z288_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z288_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z288_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z288_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z288_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z288_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z288_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z288_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z288_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z288_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z288_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z288_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z288_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z288_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z288_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z288_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z288_CNG19); + break; } case 320: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z320_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z320_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z320_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z320_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z320_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z320_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z320_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z320_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z320_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z320_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z320_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z320_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z320_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z320_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z320_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z320_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z320_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z320_CNG19); + break; } case 352: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z352_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z352_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z352_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z352_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z352_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z352_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z352_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z352_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z352_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z352_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z352_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z352_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z352_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z352_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z352_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z352_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z352_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z352_CNG19); + break; } case 384: { - p_lut->circShift[0] = (const uint16_t**) circShift_BG1_Z384_CNG3; - p_lut->circShift[1] = (const uint16_t**) circShift_BG1_Z384_CNG4; - p_lut->circShift[2] = (const uint16_t**) circShift_BG1_Z384_CNG5; - p_lut->circShift[3] = (const uint16_t**) circShift_BG1_Z384_CNG6; - p_lut->circShift[4] = (const uint16_t**) circShift_BG1_Z384_CNG7; - p_lut->circShift[5] = (const uint16_t**) circShift_BG1_Z384_CNG8; - p_lut->circShift[6] = (const uint16_t**) circShift_BG1_Z384_CNG9; - p_lut->circShift[7] = (const uint16_t**) circShift_BG1_Z384_CNG10; - p_lut->circShift[8] = (const uint16_t**) circShift_BG1_Z384_CNG19; - break; + p_lut->circShift[0] = expandArr16(circShift_BG1_Z384_CNG3); + p_lut->circShift[1] = expandArr16(circShift_BG1_Z384_CNG4); + p_lut->circShift[2] = expandArr16(circShift_BG1_Z384_CNG5); + p_lut->circShift[3] = expandArr16(circShift_BG1_Z384_CNG6); + p_lut->circShift[4] = expandArr16(circShift_BG1_Z384_CNG7); + p_lut->circShift[5] = expandArr16(circShift_BG1_Z384_CNG8); + p_lut->circShift[6] = expandArr16(circShift_BG1_Z384_CNG9); + p_lut->circShift[7] = expandArr16(circShift_BG1_Z384_CNG10); + p_lut->circShift[8] = expandArr16(circShift_BG1_Z384_CNG19); + break; } - default: - { - p_lut->circShift[0] = NULL; - p_lut->circShift[1] = NULL; - p_lut->circShift[2] = NULL; - p_lut->circShift[3] = NULL; - p_lut->circShift[4] = NULL; - p_lut->circShift[5] = NULL; - p_lut->circShift[6] = NULL; - p_lut->circShift[7] = NULL; - p_lut->circShift[8] = NULL; + default: { } } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h index ecbcac638d..de3bf58831 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h @@ -27,6 +27,7 @@ #define __NR_LDPC_MPASS__H__ #include +#include "common/utils/utils.h" #include "nrLDPCdecoder_defs.h" //#include /** @@ -42,6 +43,7 @@ \param cshift Circular shift */ +#define arrPos(a, b) a.d + b* a.dim2 static inline void *nrLDPC_inv_circ_memcpy(int8_t *str1, const int8_t *str2, uint16_t Z, uint16_t cshift) { uint16_t rem = Z - cshift; @@ -95,30 +97,25 @@ static inline void *nrLDPC_circ_memcpy(int8_t *str1, const int8_t *str2, uint16_ */ static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, int8_t* llrProcBuf, uint16_t Z, uint8_t BG) { - uint32_t i; - const uint8_t numBn2CnG1 = p_lut->numBnInBnGroups[0]; - uint32_t startColParity = (BG ==1 ) ? (NR_LDPC_START_COL_PARITY_BG1) : (NR_LDPC_START_COL_PARITY_BG2); + const uint8_t numBn2CnG1 = p_lut->numBnInBnGroups[0]; + uint32_t startColParity = (BG == 1) ? (NR_LDPC_START_COL_PARITY_BG1) : (NR_LDPC_START_COL_PARITY_BG2); - uint32_t colG1 = startColParity*Z; + uint32_t colG1 = startColParity * Z; - const uint16_t* lut_llr2llrProcBufAddr = p_lut->llr2llrProcBufAddr; - const uint8_t* lut_llr2llrProcBufBnPos = p_lut->llr2llrProcBufBnPos; + const uint16_t* lut_llr2llrProcBufAddr = p_lut->llr2llrProcBufAddr; + const uint8_t* lut_llr2llrProcBufBnPos = p_lut->llr2llrProcBufBnPos; - uint32_t idxBn; + // Copy LLRs connected to 1 CN + if (numBn2CnG1 > 0) { + memcpy(&llrProcBuf[0], &llr[colG1], numBn2CnG1 * Z); + } - // Copy LLRs connected to 1 CN - if (numBn2CnG1 > 0) - { - memcpy(&llrProcBuf[0], &llr[colG1], numBn2CnG1*Z); - } - - // First 2 columns might be set to zero directly if it's true they always belong to the groups with highest number of connected CNs... - for (i=0; icircShift[0]; - const uint16_t (*lut_circShift_CNG4) [lut_numCnInCnGroups_BG1_R13[1]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[1]]) p_lut->circShift[1]; - const uint16_t (*lut_circShift_CNG5) [lut_numCnInCnGroups_BG1_R13[2]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[2]]) p_lut->circShift[2]; - const uint16_t (*lut_circShift_CNG6) [lut_numCnInCnGroups_BG1_R13[3]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[3]]) p_lut->circShift[3]; - const uint16_t (*lut_circShift_CNG7) [lut_numCnInCnGroups_BG1_R13[4]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[4]]) p_lut->circShift[4]; - const uint16_t (*lut_circShift_CNG8) [lut_numCnInCnGroups_BG1_R13[5]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[5]]) p_lut->circShift[5]; - const uint16_t (*lut_circShift_CNG9) [lut_numCnInCnGroups_BG1_R13[6]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[6]]) p_lut->circShift[6]; - const uint16_t (*lut_circShift_CNG10)[lut_numCnInCnGroups_BG1_R13[7]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[7]]) p_lut->circShift[7]; - const uint16_t (*lut_circShift_CNG19)[lut_numCnInCnGroups_BG1_R13[8]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[8]]) p_lut->circShift[8]; + const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; + const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; - const uint8_t (*lut_posBnInCnProcBuf_CNG3) [lut_numCnInCnGroups_BG1_R13[0]] = (const uint8_t(*)[lut_numCnInCnGroups_BG1_R13[0]]) p_lut->posBnInCnProcBuf[0]; - const uint8_t (*lut_posBnInCnProcBuf_CNG4) [lut_numCnInCnGroups_BG1_R13[1]] = (const uint8_t(*)[lut_numCnInCnGroups_BG1_R13[1]]) p_lut->posBnInCnProcBuf[1]; - const uint8_t (*lut_posBnInCnProcBuf_CNG5) [lut_numCnInCnGroups_BG1_R13[2]] = (const uint8_t(*)[lut_numCnInCnGroups_BG1_R13[2]]) p_lut->posBnInCnProcBuf[2]; - const uint8_t (*lut_posBnInCnProcBuf_CNG6) [lut_numCnInCnGroups_BG1_R13[3]] = (const uint8_t(*)[lut_numCnInCnGroups_BG1_R13[3]]) p_lut->posBnInCnProcBuf[3]; - const uint8_t (*lut_posBnInCnProcBuf_CNG7) [lut_numCnInCnGroups_BG1_R13[4]] = (const uint8_t(*)[lut_numCnInCnGroups_BG1_R13[4]]) p_lut->posBnInCnProcBuf[4]; - const uint8_t (*lut_posBnInCnProcBuf_CNG8) [lut_numCnInCnGroups_BG1_R13[5]] = (const uint8_t(*)[lut_numCnInCnGroups_BG1_R13[5]]) p_lut->posBnInCnProcBuf[5]; - const uint8_t (*lut_posBnInCnProcBuf_CNG9) [lut_numCnInCnGroups_BG1_R13[6]] = (const uint8_t(*)[lut_numCnInCnGroups_BG1_R13[6]]) p_lut->posBnInCnProcBuf[6]; - const uint8_t (*lut_posBnInCnProcBuf_CNG10)[lut_numCnInCnGroups_BG1_R13[7]] = (const uint8_t(*)[lut_numCnInCnGroups_BG1_R13[7]]) p_lut->posBnInCnProcBuf[7]; - const uint8_t (*lut_posBnInCnProcBuf_CNG19)[lut_numCnInCnGroups_BG1_R13[8]] = (const uint8_t(*)[lut_numCnInCnGroups_BG1_R13[8]]) p_lut->posBnInCnProcBuf[8]; + uint32_t bitOffsetInGroup; - const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; - const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; + // ===================================================================== + // CN group with 3 BNs - uint32_t i; - uint32_t j; + bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0] * NR_LDPC_ZMAX; - uint32_t idxBn = 0; - int8_t* p_cnProcBuf; - uint32_t bitOffsetInGroup; + for (int j = 0; j < 3; j++) { + const uint16_t* lut_circShift_CNG3 = p_lut->circShift[0].d; + int8_t* p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[0] + j * bitOffsetInGroup]; + const uint8_t* lut_posBnInCnProcBuf_CNG3 = p_lut->posBnInCnProcBuf[0].d; - // ===================================================================== - // CN group with 3 BNs + const int idxBn = lut_posBnInCnProcBuf_CNG3[j] * Z; - bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX; + nrLDPC_circ_memcpy(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG3[j]); + } + // ===================================================================== + // CN group with BNs + int BNs[] = {3, 4, 5, 6, 7, 8, 9, 10, 19}; + for (int bn = 1; bn < sizeofArray(BNs); bn++) { + bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[bn] * NR_LDPC_ZMAX; + for (int j = 0; j < BNs[bn]; j++) { + int8_t* p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[bn] + j * bitOffsetInGroup]; + const uint16_t* lut_circShift = arrPos(p_lut->circShift[bn], j); + const uint8_t* lut_posBnInCnProcBuf = arrPos(p_lut->posBnInCnProcBuf[bn], j); + for (int i = 0; i < lut_numCnInCnGroups[bn]; i++) { + const int idxBn = lut_posBnInCnProcBuf[i] * Z; - for (j=0; j<3; j++) - { - p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[0] + j*bitOffsetInGroup]; + nrLDPC_circ_memcpy(p_cnProcBuf, &llr[idxBn], Z, lut_circShift[i]); - idxBn = lut_posBnInCnProcBuf_CNG3[j][0]*Z; - - nrLDPC_circ_memcpy(p_cnProcBuf, &llr[idxBn], Z, lut_circShift_CNG3[j][0]); + p_cnProcBuf += Z; + } } - - // ===================================================================== - // CN group with 4 BNs - - bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX; - - for (j=0; j<4; j++) - { - p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[1] + j*bitOffsetInGroup]; - - for (i=0; icircShift[0]; - const uint16_t (*lut_circShift_CNG4) [lut_numCnInCnGroups_BG2_R15[1]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[1]]) p_lut->circShift[1]; - const uint16_t (*lut_circShift_CNG5) [lut_numCnInCnGroups_BG2_R15[2]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[2]]) p_lut->circShift[2]; - const uint16_t (*lut_circShift_CNG6) [lut_numCnInCnGroups_BG2_R15[3]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[3]]) p_lut->circShift[3]; - const uint16_t (*lut_circShift_CNG8) [lut_numCnInCnGroups_BG2_R15[4]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[4]]) p_lut->circShift[4]; - const uint16_t (*lut_circShift_CNG10) [lut_numCnInCnGroups_BG2_R15[5]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[5]]) p_lut->circShift[5]; + const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; + const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; - const uint8_t (*lut_posBnInCnProcBuf_CNG3) [lut_numCnInCnGroups_BG2_R15[0]] = (const uint8_t(*)[lut_numCnInCnGroups_BG2_R15[0]]) p_lut->posBnInCnProcBuf[0]; - const uint8_t (*lut_posBnInCnProcBuf_CNG4) [lut_numCnInCnGroups_BG2_R15[1]] = (const uint8_t(*)[lut_numCnInCnGroups_BG2_R15[1]]) p_lut->posBnInCnProcBuf[1]; - const uint8_t (*lut_posBnInCnProcBuf_CNG5) [lut_numCnInCnGroups_BG2_R15[2]] = (const uint8_t(*)[lut_numCnInCnGroups_BG2_R15[2]]) p_lut->posBnInCnProcBuf[2]; - const uint8_t (*lut_posBnInCnProcBuf_CNG6) [lut_numCnInCnGroups_BG2_R15[3]] = (const uint8_t(*)[lut_numCnInCnGroups_BG2_R15[3]]) p_lut->posBnInCnProcBuf[3]; - const uint8_t (*lut_posBnInCnProcBuf_CNG8) [lut_numCnInCnGroups_BG2_R15[4]] = (const uint8_t(*)[lut_numCnInCnGroups_BG2_R15[4]]) p_lut->posBnInCnProcBuf[4]; - const uint8_t (*lut_posBnInCnProcBuf_CNG10) [lut_numCnInCnGroups_BG2_R15[5]] = (const uint8_t(*)[lut_numCnInCnGroups_BG2_R15[5]]) p_lut->posBnInCnProcBuf[5]; + uint32_t bitOffsetInGroup; - const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; - const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; + // ===================================================================== + // CN group with BNs + int BNs[] = {3, 4, 5, 6, 8, 10}; + for (int bn = 0; bn < sizeofArray(BNs); bn++) { + bitOffsetInGroup = lut_numCnInCnGroups_BG2_R15[bn] * NR_LDPC_ZMAX; - uint32_t i; - uint32_t j; + for (int j = 0; j < BNs[bn]; j++) { + int8_t* p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[bn] + j * bitOffsetInGroup]; + const uint16_t* lut_circShift = arrPos(p_lut->circShift[bn], j); + const uint8_t* lut_posBnInCnProcBuf = arrPos(p_lut->posBnInCnProcBuf[bn], j); - uint32_t idxBn = 0; - int8_t* p_cnProcBuf; - uint32_t bitOffsetInGroup; - - // ===================================================================== - // CN group with 3 BNs - - bitOffsetInGroup = lut_numCnInCnGroups_BG2_R15[0]*NR_LDPC_ZMAX; - - for (j=0; j<3; j++) - { - p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[0] + j*bitOffsetInGroup]; - - for (i=0; inumCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; - const uint16_t (*lut_circShift_CNG3) [lut_numCnInCnGroups_BG2_R15[0]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[0]]) p_lut->circShift[0]; - const uint16_t (*lut_circShift_CNG4) [lut_numCnInCnGroups_BG2_R15[1]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[1]]) p_lut->circShift[1]; - const uint16_t (*lut_circShift_CNG5) [lut_numCnInCnGroups_BG2_R15[2]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[2]]) p_lut->circShift[2]; - const uint16_t (*lut_circShift_CNG6) [lut_numCnInCnGroups_BG2_R15[3]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[3]]) p_lut->circShift[3]; - const uint16_t (*lut_circShift_CNG8) [lut_numCnInCnGroups_BG2_R15[4]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[4]]) p_lut->circShift[4]; - const uint16_t (*lut_circShift_CNG10) [lut_numCnInCnGroups_BG2_R15[5]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[5]]) p_lut->circShift[5]; - - const uint32_t (*lut_startAddrBnProcBuf_CNG3) [lut_numCnInCnGroups[0]] = (const uint32_t(*)[lut_numCnInCnGroups[0]]) p_lut->startAddrBnProcBuf[0]; - const uint32_t (*lut_startAddrBnProcBuf_CNG4) [lut_numCnInCnGroups[1]] = (const uint32_t(*)[lut_numCnInCnGroups[1]]) p_lut->startAddrBnProcBuf[1]; - const uint32_t (*lut_startAddrBnProcBuf_CNG5) [lut_numCnInCnGroups[2]] = (const uint32_t(*)[lut_numCnInCnGroups[2]]) p_lut->startAddrBnProcBuf[2]; - const uint32_t (*lut_startAddrBnProcBuf_CNG6) [lut_numCnInCnGroups[3]] = (const uint32_t(*)[lut_numCnInCnGroups[3]]) p_lut->startAddrBnProcBuf[3]; - const uint32_t (*lut_startAddrBnProcBuf_CNG8) [lut_numCnInCnGroups[4]] = (const uint32_t(*)[lut_numCnInCnGroups[4]]) p_lut->startAddrBnProcBuf[4]; - const uint32_t (*lut_startAddrBnProcBuf_CNG10) [lut_numCnInCnGroups[5]] = (const uint32_t(*)[lut_numCnInCnGroups[5]]) p_lut->startAddrBnProcBuf[5]; - - const uint8_t (*lut_bnPosBnProcBuf_CNG3) [lut_numCnInCnGroups[0]] = (const uint8_t(*)[lut_numCnInCnGroups[0]]) p_lut->bnPosBnProcBuf[0]; - const uint8_t (*lut_bnPosBnProcBuf_CNG4) [lut_numCnInCnGroups[1]] = (const uint8_t(*)[lut_numCnInCnGroups[1]]) p_lut->bnPosBnProcBuf[1]; - const uint8_t (*lut_bnPosBnProcBuf_CNG5) [lut_numCnInCnGroups[2]] = (const uint8_t(*)[lut_numCnInCnGroups[2]]) p_lut->bnPosBnProcBuf[2]; - const uint8_t (*lut_bnPosBnProcBuf_CNG6) [lut_numCnInCnGroups[3]] = (const uint8_t(*)[lut_numCnInCnGroups[3]]) p_lut->bnPosBnProcBuf[3]; - const uint8_t (*lut_bnPosBnProcBuf_CNG8) [lut_numCnInCnGroups[4]] = (const uint8_t(*)[lut_numCnInCnGroups[4]]) p_lut->bnPosBnProcBuf[4]; - const uint8_t (*lut_bnPosBnProcBuf_CNG10) [lut_numCnInCnGroups[5]] = (const uint8_t(*)[lut_numCnInCnGroups[5]]) p_lut->bnPosBnProcBuf[5]; - - int8_t* p_cnProcBufRes; uint32_t bitOffsetInGroup; - uint32_t i; - uint32_t j; - uint32_t idxBn = 0; // ===================================================================== // CN group with 3 BNs + int BNs[] = {3, 4, 5, 6, 8, 10}; + for (int bn = 0; bn < sizeofArray(BNs); bn++) { + bitOffsetInGroup = lut_numCnInCnGroups_BG2_R15[bn] * NR_LDPC_ZMAX; - bitOffsetInGroup = lut_numCnInCnGroups_BG2_R15[0]*NR_LDPC_ZMAX; + for (int j = 0; j < BNs[bn]; j++) { + int8_t* p_cnProcBufRes = &cnProcBufRes[lut_startAddrCnGroups[bn] + j * bitOffsetInGroup]; + const uint16_t* lut_circShift = arrPos(p_lut->circShift[bn], j); + const uint32_t* lut_startAddrBnProcBuf = arrPos(p_lut->startAddrBnProcBuf[bn], j); + const uint8_t* lut_bnPosBnProcBuf = arrPos(p_lut->bnPosBnProcBuf[bn], j); - for (j=0; j<3; j++) - { - p_cnProcBufRes = &cnProcBufRes[lut_startAddrCnGroups[0] + j*bitOffsetInGroup]; - for (i=0; inumCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; - - const uint16_t (*lut_circShift_CNG3) [lut_numCnInCnGroups_BG1_R13[0]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[0]]) p_lut->circShift[0]; - const uint16_t (*lut_circShift_CNG4) [lut_numCnInCnGroups_BG1_R13[1]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[1]]) p_lut->circShift[1]; - const uint16_t (*lut_circShift_CNG5) [lut_numCnInCnGroups_BG1_R13[2]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[2]]) p_lut->circShift[2]; - const uint16_t (*lut_circShift_CNG6) [lut_numCnInCnGroups_BG1_R13[3]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[3]]) p_lut->circShift[3]; - const uint16_t (*lut_circShift_CNG7) [lut_numCnInCnGroups_BG1_R13[4]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[4]]) p_lut->circShift[4]; - const uint16_t (*lut_circShift_CNG8) [lut_numCnInCnGroups_BG1_R13[5]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[5]]) p_lut->circShift[5]; - const uint16_t (*lut_circShift_CNG9) [lut_numCnInCnGroups_BG1_R13[6]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[6]]) p_lut->circShift[6]; - const uint16_t (*lut_circShift_CNG10)[lut_numCnInCnGroups_BG1_R13[7]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[7]]) p_lut->circShift[7]; - const uint16_t (*lut_circShift_CNG19)[lut_numCnInCnGroups_BG1_R13[8]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[8]]) p_lut->circShift[8]; - - const uint32_t (*lut_startAddrBnProcBuf_CNG3) [lut_numCnInCnGroups[0]] = (const uint32_t(*)[lut_numCnInCnGroups[0]]) p_lut->startAddrBnProcBuf[0]; - const uint32_t (*lut_startAddrBnProcBuf_CNG4) [lut_numCnInCnGroups[1]] = (const uint32_t(*)[lut_numCnInCnGroups[1]]) p_lut->startAddrBnProcBuf[1]; - const uint32_t (*lut_startAddrBnProcBuf_CNG5) [lut_numCnInCnGroups[2]] = (const uint32_t(*)[lut_numCnInCnGroups[2]]) p_lut->startAddrBnProcBuf[2]; - const uint32_t (*lut_startAddrBnProcBuf_CNG6) [lut_numCnInCnGroups[3]] = (const uint32_t(*)[lut_numCnInCnGroups[3]]) p_lut->startAddrBnProcBuf[3]; - const uint32_t (*lut_startAddrBnProcBuf_CNG7) [lut_numCnInCnGroups[4]] = (const uint32_t(*)[lut_numCnInCnGroups[4]]) p_lut->startAddrBnProcBuf[4]; - const uint32_t (*lut_startAddrBnProcBuf_CNG8) [lut_numCnInCnGroups[5]] = (const uint32_t(*)[lut_numCnInCnGroups[5]]) p_lut->startAddrBnProcBuf[5]; - const uint32_t (*lut_startAddrBnProcBuf_CNG9) [lut_numCnInCnGroups[6]] = (const uint32_t(*)[lut_numCnInCnGroups[6]]) p_lut->startAddrBnProcBuf[6]; - const uint32_t (*lut_startAddrBnProcBuf_CNG10)[lut_numCnInCnGroups[7]] = (const uint32_t(*)[lut_numCnInCnGroups[7]]) p_lut->startAddrBnProcBuf[7]; - const uint32_t (*lut_startAddrBnProcBuf_CNG19)[lut_numCnInCnGroups[8]] = (const uint32_t(*)[lut_numCnInCnGroups[8]]) p_lut->startAddrBnProcBuf[8]; - - const uint8_t (*lut_bnPosBnProcBuf_CNG4) [lut_numCnInCnGroups[1]] = (const uint8_t(*)[lut_numCnInCnGroups[1]]) p_lut->bnPosBnProcBuf[1]; - const uint8_t (*lut_bnPosBnProcBuf_CNG5) [lut_numCnInCnGroups[2]] = (const uint8_t(*)[lut_numCnInCnGroups[2]]) p_lut->bnPosBnProcBuf[2]; - const uint8_t (*lut_bnPosBnProcBuf_CNG6) [lut_numCnInCnGroups[3]] = (const uint8_t(*)[lut_numCnInCnGroups[3]]) p_lut->bnPosBnProcBuf[3]; - const uint8_t (*lut_bnPosBnProcBuf_CNG7) [lut_numCnInCnGroups[4]] = (const uint8_t(*)[lut_numCnInCnGroups[4]]) p_lut->bnPosBnProcBuf[4]; - const uint8_t (*lut_bnPosBnProcBuf_CNG8) [lut_numCnInCnGroups[5]] = (const uint8_t(*)[lut_numCnInCnGroups[5]]) p_lut->bnPosBnProcBuf[5]; - const uint8_t (*lut_bnPosBnProcBuf_CNG9) [lut_numCnInCnGroups[6]] = (const uint8_t(*)[lut_numCnInCnGroups[6]]) p_lut->bnPosBnProcBuf[6]; - const uint8_t (*lut_bnPosBnProcBuf_CNG10)[lut_numCnInCnGroups[7]] = (const uint8_t(*)[lut_numCnInCnGroups[7]]) p_lut->bnPosBnProcBuf[7]; - const uint8_t (*lut_bnPosBnProcBuf_CNG19)[lut_numCnInCnGroups[8]] = (const uint8_t(*)[lut_numCnInCnGroups[8]]) p_lut->bnPosBnProcBuf[8]; - - int8_t* p_cnProcBufRes; uint32_t bitOffsetInGroup; - uint32_t i; - uint32_t j; - uint32_t idxBn = 0; // ===================================================================== // CN group with 3 BNs bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX; - for (j=0; j<3; j++) - { - p_cnProcBufRes = &cnProcBufRes[lut_startAddrCnGroups[0] + j*bitOffsetInGroup]; - nrLDPC_inv_circ_memcpy(&bnProcBuf[lut_startAddrBnProcBuf_CNG3[j][0]],p_cnProcBufRes,Z,lut_circShift_CNG3[j][0]); + for (int j = 0; j < 3; j++) { + const uint16_t* lut_circShift_CNG3 = arrPos(p_lut->circShift[0], j); + const uint32_t* lut_startAddrBnProcBuf_CNG3 = arrPos(p_lut->startAddrBnProcBuf[0], j); + int8_t* p_cnProcBufRes = &cnProcBufRes[lut_startAddrCnGroups[0] + j * bitOffsetInGroup]; + nrLDPC_inv_circ_memcpy(&bnProcBuf[lut_startAddrBnProcBuf_CNG3[0]], p_cnProcBufRes, Z, lut_circShift_CNG3[0]); } // ===================================================================== // CN group with 4 BNs + // CN group with 3 BNs + int BNs[] = {3, 4, 5, 6, 7, 8, 9, 10, 19}; + for (int bn = 1; bn < sizeofArray(BNs); bn++) { + bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[bn] * NR_LDPC_ZMAX; - bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX; + for (int j = 0; j < BNs[bn]; j++) { + int8_t* p_cnProcBufRes = &cnProcBufRes[lut_startAddrCnGroups[bn] + j * bitOffsetInGroup]; + const uint16_t* lut_circShift_CNG = arrPos(p_lut->circShift[bn], j); + const uint32_t* lut_startAddrBnProcBuf_CNG = arrPos(p_lut->startAddrBnProcBuf[bn], j); + const uint8_t* lut_bnPosBnProcBuf_CNG = arrPos(p_lut->bnPosBnProcBuf[bn], j); - for (j=0; j<4; j++) - { - p_cnProcBufRes = &cnProcBufRes[lut_startAddrCnGroups[1] + j*bitOffsetInGroup]; - - for (i=0; inumCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; - const uint16_t (*lut_circShift_CNG3) [lut_numCnInCnGroups_BG2_R15[0]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[0]]) p_lut->circShift[0]; - const uint16_t (*lut_circShift_CNG4) [lut_numCnInCnGroups_BG2_R15[1]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[1]]) p_lut->circShift[1]; - const uint16_t (*lut_circShift_CNG5) [lut_numCnInCnGroups_BG2_R15[2]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[2]]) p_lut->circShift[2]; - const uint16_t (*lut_circShift_CNG6) [lut_numCnInCnGroups_BG2_R15[3]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[3]]) p_lut->circShift[3]; - const uint16_t (*lut_circShift_CNG8) [lut_numCnInCnGroups_BG2_R15[4]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[4]]) p_lut->circShift[4]; - const uint16_t (*lut_circShift_CNG10) [lut_numCnInCnGroups_BG2_R15[5]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[5]]) p_lut->circShift[5]; - - const uint32_t (*lut_startAddrBnProcBuf_CNG3) [lut_numCnInCnGroups[0]] = (const uint32_t(*)[lut_numCnInCnGroups[0]]) p_lut->startAddrBnProcBuf[0]; - const uint32_t (*lut_startAddrBnProcBuf_CNG4) [lut_numCnInCnGroups[1]] = (const uint32_t(*)[lut_numCnInCnGroups[1]]) p_lut->startAddrBnProcBuf[1]; - const uint32_t (*lut_startAddrBnProcBuf_CNG5) [lut_numCnInCnGroups[2]] = (const uint32_t(*)[lut_numCnInCnGroups[2]]) p_lut->startAddrBnProcBuf[2]; - const uint32_t (*lut_startAddrBnProcBuf_CNG6) [lut_numCnInCnGroups[3]] = (const uint32_t(*)[lut_numCnInCnGroups[3]]) p_lut->startAddrBnProcBuf[3]; - const uint32_t (*lut_startAddrBnProcBuf_CNG8) [lut_numCnInCnGroups[4]] = (const uint32_t(*)[lut_numCnInCnGroups[4]]) p_lut->startAddrBnProcBuf[4]; - const uint32_t (*lut_startAddrBnProcBuf_CNG10) [lut_numCnInCnGroups[5]] = (const uint32_t(*)[lut_numCnInCnGroups[5]]) p_lut->startAddrBnProcBuf[5]; - - const uint8_t (*lut_bnPosBnProcBuf_CNG3) [lut_numCnInCnGroups[0]] = (const uint8_t(*)[lut_numCnInCnGroups[0]]) p_lut->bnPosBnProcBuf[0]; - const uint8_t (*lut_bnPosBnProcBuf_CNG4) [lut_numCnInCnGroups[1]] = (const uint8_t(*)[lut_numCnInCnGroups[1]]) p_lut->bnPosBnProcBuf[1]; - const uint8_t (*lut_bnPosBnProcBuf_CNG5) [lut_numCnInCnGroups[2]] = (const uint8_t(*)[lut_numCnInCnGroups[2]]) p_lut->bnPosBnProcBuf[2]; - const uint8_t (*lut_bnPosBnProcBuf_CNG6) [lut_numCnInCnGroups[3]] = (const uint8_t(*)[lut_numCnInCnGroups[3]]) p_lut->bnPosBnProcBuf[3]; - const uint8_t (*lut_bnPosBnProcBuf_CNG8) [lut_numCnInCnGroups[4]] = (const uint8_t(*)[lut_numCnInCnGroups[4]]) p_lut->bnPosBnProcBuf[4]; - const uint8_t (*lut_bnPosBnProcBuf_CNG10) [lut_numCnInCnGroups[5]] = (const uint8_t(*)[lut_numCnInCnGroups[5]]) p_lut->bnPosBnProcBuf[5]; - - int8_t* p_cnProcBuf; uint32_t bitOffsetInGroup; - uint32_t i; - uint32_t j; - uint32_t idxBn = 0; // For CN groups 3 to 6 no need to send the last BN back since it's single edge // and BN processing does not change the value already in the CN proc buf // ===================================================================== // CN group with 3 BNs + int BNs[] = {2, 3, 4, 5, 8, 10}; + for (int bn = 0; bn < sizeofArray(BNs); bn++) { + bitOffsetInGroup = lut_numCnInCnGroups_BG2_R15[bn] * NR_LDPC_ZMAX; - bitOffsetInGroup = lut_numCnInCnGroups_BG2_R15[0]*NR_LDPC_ZMAX; + for (int j = 0; j < BNs[bn]; j++) { + int8_t* p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[bn] + j * bitOffsetInGroup]; + const uint16_t* lut_circShift_CNG = arrPos(p_lut->circShift[bn], j); + const uint32_t* lut_startAddrBnProcBuf_CNG = arrPos(p_lut->startAddrBnProcBuf[bn], j); + const uint8_t* lut_bnPosBnProcBuf_CNG = arrPos(p_lut->bnPosBnProcBuf[bn], j); - for (j=0; j<2; j++) - { - p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[0] + j*bitOffsetInGroup]; - for (i=0; inumCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; - - const uint16_t (*lut_circShift_CNG3) [lut_numCnInCnGroups_BG1_R13[0]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[0]]) p_lut->circShift[0]; - const uint16_t (*lut_circShift_CNG4) [lut_numCnInCnGroups_BG1_R13[1]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[1]]) p_lut->circShift[1]; - const uint16_t (*lut_circShift_CNG5) [lut_numCnInCnGroups_BG1_R13[2]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[2]]) p_lut->circShift[2]; - const uint16_t (*lut_circShift_CNG6) [lut_numCnInCnGroups_BG1_R13[3]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[3]]) p_lut->circShift[3]; - const uint16_t (*lut_circShift_CNG7) [lut_numCnInCnGroups_BG1_R13[4]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[4]]) p_lut->circShift[4]; - const uint16_t (*lut_circShift_CNG8) [lut_numCnInCnGroups_BG1_R13[5]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[5]]) p_lut->circShift[5]; - const uint16_t (*lut_circShift_CNG9) [lut_numCnInCnGroups_BG1_R13[6]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[6]]) p_lut->circShift[6]; - const uint16_t (*lut_circShift_CNG10)[lut_numCnInCnGroups_BG1_R13[7]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[7]]) p_lut->circShift[7]; - const uint16_t (*lut_circShift_CNG19)[lut_numCnInCnGroups_BG1_R13[8]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[8]]) p_lut->circShift[8]; - - const uint32_t (*lut_startAddrBnProcBuf_CNG3) [lut_numCnInCnGroups[0]] = (const uint32_t(*)[lut_numCnInCnGroups[0]]) p_lut->startAddrBnProcBuf[0]; - const uint32_t (*lut_startAddrBnProcBuf_CNG4) [lut_numCnInCnGroups[1]] = (const uint32_t(*)[lut_numCnInCnGroups[1]]) p_lut->startAddrBnProcBuf[1]; - const uint32_t (*lut_startAddrBnProcBuf_CNG5) [lut_numCnInCnGroups[2]] = (const uint32_t(*)[lut_numCnInCnGroups[2]]) p_lut->startAddrBnProcBuf[2]; - const uint32_t (*lut_startAddrBnProcBuf_CNG6) [lut_numCnInCnGroups[3]] = (const uint32_t(*)[lut_numCnInCnGroups[3]]) p_lut->startAddrBnProcBuf[3]; - const uint32_t (*lut_startAddrBnProcBuf_CNG7) [lut_numCnInCnGroups[4]] = (const uint32_t(*)[lut_numCnInCnGroups[4]]) p_lut->startAddrBnProcBuf[4]; - const uint32_t (*lut_startAddrBnProcBuf_CNG8) [lut_numCnInCnGroups[5]] = (const uint32_t(*)[lut_numCnInCnGroups[5]]) p_lut->startAddrBnProcBuf[5]; - const uint32_t (*lut_startAddrBnProcBuf_CNG9) [lut_numCnInCnGroups[6]] = (const uint32_t(*)[lut_numCnInCnGroups[6]]) p_lut->startAddrBnProcBuf[6]; - const uint32_t (*lut_startAddrBnProcBuf_CNG10)[lut_numCnInCnGroups[7]] = (const uint32_t(*)[lut_numCnInCnGroups[7]]) p_lut->startAddrBnProcBuf[7]; - const uint32_t (*lut_startAddrBnProcBuf_CNG19)[lut_numCnInCnGroups[8]] = (const uint32_t(*)[lut_numCnInCnGroups[8]]) p_lut->startAddrBnProcBuf[8]; - - const uint8_t (*lut_bnPosBnProcBuf_CNG4) [lut_numCnInCnGroups[1]] = (const uint8_t(*)[lut_numCnInCnGroups[1]]) p_lut->bnPosBnProcBuf[1]; - const uint8_t (*lut_bnPosBnProcBuf_CNG5) [lut_numCnInCnGroups[2]] = (const uint8_t(*)[lut_numCnInCnGroups[2]]) p_lut->bnPosBnProcBuf[2]; - const uint8_t (*lut_bnPosBnProcBuf_CNG6) [lut_numCnInCnGroups[3]] = (const uint8_t(*)[lut_numCnInCnGroups[3]]) p_lut->bnPosBnProcBuf[3]; - const uint8_t (*lut_bnPosBnProcBuf_CNG7) [lut_numCnInCnGroups[4]] = (const uint8_t(*)[lut_numCnInCnGroups[4]]) p_lut->bnPosBnProcBuf[4]; - const uint8_t (*lut_bnPosBnProcBuf_CNG8) [lut_numCnInCnGroups[5]] = (const uint8_t(*)[lut_numCnInCnGroups[5]]) p_lut->bnPosBnProcBuf[5]; - const uint8_t (*lut_bnPosBnProcBuf_CNG9) [lut_numCnInCnGroups[6]] = (const uint8_t(*)[lut_numCnInCnGroups[6]]) p_lut->bnPosBnProcBuf[6]; - const uint8_t (*lut_bnPosBnProcBuf_CNG10)[lut_numCnInCnGroups[7]] = (const uint8_t(*)[lut_numCnInCnGroups[7]]) p_lut->bnPosBnProcBuf[7]; - const uint8_t (*lut_bnPosBnProcBuf_CNG19)[lut_numCnInCnGroups[8]] = (const uint8_t(*)[lut_numCnInCnGroups[8]]) p_lut->bnPosBnProcBuf[8]; - - int8_t* p_cnProcBuf; uint32_t bitOffsetInGroup; - uint32_t i; - uint32_t j; - uint32_t idxBn = 0; // For CN groups 3 to 19 no need to send the last BN back since it's single edge // and BN processing does not change the value already in the CN proc buf @@ -1001,147 +355,32 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* bnProcBu bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX; - for (j=0;j<2; j++) - { - p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[0] + j*bitOffsetInGroup]; - nrLDPC_circ_memcpy(p_cnProcBuf, &bnProcBufRes[lut_startAddrBnProcBuf_CNG3[j][0]], Z, lut_circShift_CNG3[j][0]); + for (int j = 0; j < 2; j++) { + const uint16_t* lut_circShift_CNG3 = arrPos(p_lut->circShift[0], j); + const uint32_t* lut_startAddrBnProcBuf_CNG3 = arrPos(p_lut->startAddrBnProcBuf[0], j); + int8_t* p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[0] + j * bitOffsetInGroup]; + nrLDPC_circ_memcpy(p_cnProcBuf, &bnProcBufRes[lut_startAddrBnProcBuf_CNG3[0]], Z, lut_circShift_CNG3[0]); } // ===================================================================== // CN group with 4 BNs + int BNs[] = {2, 3, 4, 5, 6, 7, 8, 9, 19}; + for (int bn = 1; bn < sizeofArray(BNs); bn++) { + bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[bn] * NR_LDPC_ZMAX; - bitOffsetInGroup = lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX; - - for (j=0; j<3; j++) - { - p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[1] + j*bitOffsetInGroup]; + for (int j = 0; j < BNs[bn]; j++) { + int8_t* p_cnProcBuf = &cnProcBuf[lut_startAddrCnGroups[bn] + j * bitOffsetInGroup]; + const uint16_t* lut_circShift_CNG = arrPos(p_lut->circShift[bn], j); + const uint32_t* lut_startAddrBnProcBuf_CNG = arrPos(p_lut->startAddrBnProcBuf[bn], j); + const uint8_t* lut_bnPosBnProcBuf_CNG = arrPos(p_lut->bnPosBnProcBuf[bn], j); - for (i=0; inumBnInBnGroups[0]; - uint32_t startColParity = (BG ==1 ) ? (NR_LDPC_START_COL_PARITY_BG1) : (NR_LDPC_START_COL_PARITY_BG2); + const uint8_t numBn2CnG1 = p_lut->numBnInBnGroups[0]; + uint32_t startColParity = (BG == 1) ? (NR_LDPC_START_COL_PARITY_BG1) : (NR_LDPC_START_COL_PARITY_BG2); - uint32_t colG1 = startColParity*Z; + uint32_t colG1 = startColParity * Z; - const uint16_t* lut_llr2llrProcBufAddr = p_lut->llr2llrProcBufAddr; - const uint8_t* lut_llr2llrProcBufBnPos = p_lut->llr2llrProcBufBnPos; + const uint16_t* lut_llr2llrProcBufAddr = p_lut->llr2llrProcBufAddr; + const uint8_t* lut_llr2llrProcBufBnPos = p_lut->llr2llrProcBufBnPos; - int8_t* p_llrOut = &llrOut[0]; - uint32_t idxBn; + int8_t* p_llrOut = &llrOut[0]; - // Copy LLRs connected to 1 CN - if (numBn2CnG1 > 0) - { - memcpy(&llrOut[colG1], llrRes, numBn2CnG1*Z); - } - - for (i=0; i 0) { + memcpy(&llrOut[colG1], llrRes, numBn2CnG1 * Z); + } + for (int i = 0; i < startColParity; i++) { + const int idxBn = lut_llr2llrProcBufAddr[i] + lut_llr2llrProcBufBnPos[i] * Z; + memcpy(p_llrOut, &llrRes[idxBn], Z); + p_llrOut += Z; + } } #endif diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h index 226af8017e..513bcb1732 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h @@ -34,6 +34,21 @@ #include "time_meas.h" #endif #include "nrLDPCdecoder_defs.h" +typedef struct { + uint8_t* d; + int dim1; + int dim2; +} arr8_t; +typedef struct { + uint16_t* d; + int dim1; + int dim2; +} arr16_t; +typedef struct { + uint32_t* d; + int dim1; + int dim2; +} arr32_t; // ============================================================================== // TYPES @@ -46,12 +61,12 @@ typedef struct nrLDPC_lut { const uint8_t* numBnInBnGroups; /**< Number of CNs in every BN group */ const uint32_t* startAddrBnGroups; /**< Start addresses for BN groups in BN processing buffer */ const uint16_t* startAddrBnGroupsLlr; /**< Start addresses for BN groups in LLR processing buffer */ - const uint16_t** circShift[NR_LDPC_NUM_CN_GROUPS_BG1]; /**< LUT for circular shift values for all CN groups and Zs */ - const uint32_t** startAddrBnProcBuf[NR_LDPC_NUM_CN_GROUPS_BG1]; /**< LUT of start addresses of CN groups in BN proc buffer */ - const uint8_t** bnPosBnProcBuf[NR_LDPC_NUM_CN_GROUPS_BG1]; /**< LUT of BN positions in BG for CN groups */ + arr16_t circShift[NR_LDPC_NUM_CN_GROUPS_BG1]; /**< LUT for circular shift values for all CN groups and Zs */ + arr32_t startAddrBnProcBuf[NR_LDPC_NUM_CN_GROUPS_BG1]; /**< LUT of start addresses of CN groups in BN proc buffer */ + arr8_t bnPosBnProcBuf[NR_LDPC_NUM_CN_GROUPS_BG1]; /**< LUT of BN positions in BG for CN groups */ const uint16_t* llr2llrProcBufAddr; /**< LUT for transferring input LLRs to LLR processing buffer */ const uint8_t* llr2llrProcBufBnPos; /**< LUT BN position in BG */ - const uint8_t** posBnInCnProcBuf[NR_LDPC_NUM_CN_GROUPS_BG1]; /**< LUT for llr2cnProcBuf */ + arr8_t posBnInCnProcBuf[NR_LDPC_NUM_CN_GROUPS_BG1]; /**< LUT for llr2cnProcBuf */ } t_nrLDPC_lut; /** From 63fc39dc3f0e05c205fd9d8cb0dc8fb01fa4a8f8 Mon Sep 17 00:00:00 2001 From: laurent Date: Thu, 2 Mar 2023 18:46:10 +0100 Subject: [PATCH 02/13] fix bugs detected by ubsan --- openair1/PHY/LTE_TRANSPORT/dci_tools_common.c | 4 +- .../PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c | 6 ++- openair1/PHY/NR_REFSIG/dmrs_nr.h | 6 ++- openair1/PHY/NR_REFSIG/ptrs_nr.c | 11 ++---- openair1/PHY/NR_TRANSPORT/nr_dlsch.c | 27 +++++++------ .../NR_UE_TRANSPORT/nr_dlsch_demodulation.c | 1 + openair1/SIMULATION/LTE_PHY/dlsim.c | 4 +- openair1/SIMULATION/NR_PHY/dlsim.c | 13 ++----- openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c | 4 +- openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h | 2 +- openair2/RRC/NR/nr_rrc_proto.h | 2 +- openair2/RRC/NR/rrc_gNB_reconfig.c | 39 ++++++++++--------- 12 files changed, 62 insertions(+), 57 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c index 0addfdf14c..457b65178b 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c @@ -372,9 +372,9 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t if (ra_header==0) { for (i=0; i<25; i++) { if ((rb_alloc&(1<<(24-i))) != 0) - rb_alloc2[(4*i)>>5] |= (0xf<<((4*i)%32)); + rb_alloc2[(4 * i) >> 5] |= (0xfU << ((4 * i) % 32)); - // printf("rb_alloc2[%d] (type 0) %x (%d)\n",(4*i)>>5,rb_alloc2[(4*i)>>5],rb_alloc&(1<>5,rb_alloc2[(4*i)>>5],rb_alloc&(1<>((rb>>2)<<1))&3; + int tmp = (rb >> 2) << 1; + if (tmp >= 16) + *pmi_ext = 0; + else + *pmi_ext = (pmi >> tmp) & 3; memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); /* diff --git a/openair1/PHY/NR_REFSIG/dmrs_nr.h b/openair1/PHY/NR_REFSIG/dmrs_nr.h index 4611e363e5..8b9da28abc 100644 --- a/openair1/PHY/NR_REFSIG/dmrs_nr.h +++ b/openair1/PHY/NR_REFSIG/dmrs_nr.h @@ -72,7 +72,11 @@ void nr_chest_time_domain_avg(NR_DL_FRAME_PARMS *frame_parms, uint16_t dmrs_bitmap, uint16_t num_rbs); -static inline uint8_t is_dmrs_symbol(uint8_t l, uint16_t dmrsSymbMask ) { return ((dmrsSymbMask >> l) & 0x1); } +static inline uint8_t is_dmrs_symbol(uint8_t l, uint16_t dmrsSymbMask) +{ + DevAssert(l < 32); + return ((dmrsSymbMask >> l) & 0x1); +} #undef EXTERN #endif /* DMRS_NR_H */ diff --git a/openair1/PHY/NR_REFSIG/ptrs_nr.c b/openair1/PHY/NR_REFSIG/ptrs_nr.c index 5df4a25656..d941543821 100644 --- a/openair1/PHY/NR_REFSIG/ptrs_nr.c +++ b/openair1/PHY/NR_REFSIG/ptrs_nr.c @@ -373,7 +373,7 @@ int8_t nr_ptrs_process_slot(uint16_t dmrsSymbPos, } /* check for left side first */ /* right side a DMRS symbol then we need to left extrapolate */ - if(is_dmrs_symbol(rightRef,dmrsSymbPos)) { + if (rightRef != -1 && is_dmrs_symbol(rightRef, dmrsSymbPos)) { /* calculate slope from next valid estimates*/ tmp = get_next_estimate_in_slot(ptrsSymbPos,dmrsSymbPos,rightRef+1,symbInSlot); /* Special case when DMRS is not followed by PTRS symbol then reuse old slope */ @@ -382,22 +382,19 @@ int8_t nr_ptrs_process_slot(uint16_t dmrsSymbPos, } ptrs_estimate_from_slope(estPerSymb,slope_p,leftRef, rightRef); symb = rightRef -1; - } - else if(is_ptrs_symbol(rightRef,ptrsSymbPos)) { + } else if (rightRef != -1 && is_ptrs_symbol(rightRef, ptrsSymbPos)) { /* calculate slope from next valid estimates */ get_slope_from_estimates(leftRef,rightRef,estPerSymb, slope_p); ptrs_estimate_from_slope(estPerSymb,slope_p,leftRef, rightRef); symb = rightRef -1; - } - else if((rightRef ==-1) && (symb ofdm_symbol_size+start_sc)<<1)]; + __m128i *txF = (__m128i *)&txdataF_precoding[nl][((l * frame_parms->ofdm_symbol_size + start_sc) << 1)]; - __m64 *txl = (__m64*)&tx_layers[nl][m<<1]; - __m64 amp64=_mm_set1_pi16(amp); - for (int i=0; i<(upper_limit>>1); i++) { - - txF[i] = _mm_mulhrs_pi16(amp64,txl[i]); + __m128i *txl = (__m128i *)&tx_layers[nl][m << 1]; + __m128i amp64 = _mm_set1_epi16(amp); + DevAssert(upper_limit % 4 == 0); + for (int i = 0; i < (upper_limit >> 2); i++) { + const __m128i txL = _mm_loadu_si128(txl + i); + _mm_storeu_si128(txF + i, _mm_mulhrs_epi16(amp64, txL)); #ifdef DEBUG_DLSCH_MAPPING if ((i&1) > 0) printf("m %d\t l %d \t k %d \t txdataF: %d %d\n", @@ -422,13 +423,15 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = 0; txdataF_precoding[anl][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0; }*/ - } //RE loop, first part + } // RE loop, first part m+=upper_limit; if (remaining_re > 0) { - txF = (__m64*)&txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size)<<1)]; - txl = (__m64*)&tx_layers[nl][m<<1]; - for (int i=0; i<(remaining_re>>1); i++) { - txF[i] = _mm_mulhrs_pi16(amp64,txl[i]); + txF = (__m128i *)&txdataF_precoding[nl][((l * frame_parms->ofdm_symbol_size) << 1)]; + txl = (__m128i *)&tx_layers[nl][m << 1]; + DevAssert(remaining_re % 4 == 0); + for (int i = 0; i < (remaining_re >> 2); i++) { + const __m128i txL = _mm_loadu_si128(txl + i); + _mm_storeu_si128(txF + i, _mm_mulhrs_epi16(amp64, txL)); #ifdef DEBUG_DLSCH_MAPPING if ((i&1) > 0) printf("m %d\t l %d \t k %d \t txdataF: %d %d\n", @@ -440,7 +443,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = 0; txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0; }*/ - } //RE loop, second part + } // RE loop, second part } // m+=remaining_re; } // N_RB_DL even diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c index 942c6befdf..00e6d7ffca 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c @@ -1773,6 +1773,7 @@ static inline void nr_element_sign(c16_t *a, // a * Compute the matrix determinant for 4x4 Matrix * * */ +<<<<<<< HEAD static void nr_determin(int size, c16_t *a44[][size], // c16_t *ad_bc, // ad-bc diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index f8b1e359e5..c7e4f27f70 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -2080,9 +2080,7 @@ int main(int argc, char **argv) { squareRoot(&UE->dlsch_demodulation_stats), median(table_rx_demod), q1(table_rx_demod), q3(table_rx_demod)); //fprintf(time_meas_fd,"DEC;\n"); - fprintf(time_meas_fd,"%f;%f;%f;%f\n", - squareRoot(&UE->dlsch_decoding_stats[subframe]), - median(table_rx_dec), q1(table_rx_dec), q3(table_rx_dec)); + fprintf(time_meas_fd, "%f;%f;%f;%f\n", squareRoot(&UE->dlsch_decoding_stats[UE->current_thread_id[subframe]]), median(table_rx_dec), q1(table_rx_dec), q3(table_rx_dec)); printf("[passed] effective rate : %f (%2.1f%%,%f)): log and break \n",rate*effective_rate, 100*effective_rate, rate ); test_passed = 1; break; diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index 4cdc6e1882..1977b6ec3e 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -1372,16 +1372,11 @@ int main(int argc, char **argv) void update_ptrs_config(NR_CellGroupConfig_t *secondaryCellGroup, uint16_t *rbSize, uint8_t *mcsIndex, int8_t *ptrs_arg) { NR_BWP_Downlink_t *bwp=secondaryCellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.array[0]; - int *ptrsFreqDenst = calloc(2, sizeof(long)); - ptrsFreqDenst[0]= 25; - ptrsFreqDenst[1]= 115; - int *ptrsTimeDenst = calloc(3, sizeof(long)); - ptrsTimeDenst[0]= 2; - ptrsTimeDenst[1]= 4; - ptrsTimeDenst[2]= 10; + long ptrsFreqDenst[] = {25, 115}; + long ptrsTimeDenst[] = {2, 4, 10}; - int epre_Ratio = 0; - int reOffset = 0; + long epre_Ratio = 0; + long reOffset = 0; if(ptrs_arg[0] ==0) { ptrsTimeDenst[2]= *mcsIndex -1; diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c index d766e10ac8..f5a6ee536c 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c @@ -2764,8 +2764,8 @@ uint8_t get_L_ptrs(uint8_t mcs1, uint8_t mcs2, uint8_t mcs3, uint8_t I_mcs, uint * *********************************************************************/ -uint8_t get_K_ptrs(uint16_t nrb0, uint16_t nrb1, uint16_t N_RB) { - +uint8_t get_K_ptrs(uint32_t nrb0, uint32_t nrb1, uint32_t N_RB) +{ if (N_RB < nrb0) { LOG_D(PHY,"PUSH PT-RS is not present.\n"); return -1; diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h index 0fa747c3c4..7e3c233228 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h @@ -176,7 +176,7 @@ uint8_t get_l0_ul(uint8_t mapping_type, uint8_t dmrs_typeA_position); int32_t get_l_prime(uint8_t duration_in_symbols, uint8_t mapping_type, pusch_dmrs_AdditionalPosition_t additional_pos, pusch_maxLength_t pusch_maxLength, uint8_t start_symbolt, uint8_t dmrs_typeA_position); uint8_t get_L_ptrs(uint8_t mcs1, uint8_t mcs2, uint8_t mcs3, uint8_t I_mcs, uint8_t mcs_table); -uint8_t get_K_ptrs(uint16_t nrb0, uint16_t nrb1, uint16_t N_RB); +uint8_t get_K_ptrs(uint32_t nrb0, uint32_t nrb1, uint32_t N_RB); uint32_t nr_compute_tbs(uint16_t Qm, uint16_t R, diff --git a/openair2/RRC/NR/nr_rrc_proto.h b/openair2/RRC/NR/nr_rrc_proto.h index 6497874ab6..87d786b773 100644 --- a/openair2/RRC/NR/nr_rrc_proto.h +++ b/openair2/RRC/NR/nr_rrc_proto.h @@ -121,7 +121,7 @@ void nr_rrc_trigger(protocol_ctxt_t *ctxt, int CC_id, int frame, int subframe); \ *ptrsMcs Pointer to L_ptrs MCS related parameters \ *epre_Ratio Pointer to ep_ratio \ *reOffset Pointer to RE Offset Value */ -void rrc_config_dl_ptrs_params(NR_BWP_Downlink_t *bwp, int *ptrsNrb, int *ptrsMcs, int *epre_Ratio, int * reOffset); +void rrc_config_dl_ptrs_params(NR_BWP_Downlink_t *bwp, long *ptrsNrb, long *ptrsMcs, long *epre_Ratio, long *reOffset); void nr_rrc_mac_remove_ue(rnti_t rntiP); void nr_rrc_mac_update_cellgroup(rnti_t rntiMaybeUEid, NR_CellGroupConfig_t *cgc); diff --git a/openair2/RRC/NR/rrc_gNB_reconfig.c b/openair2/RRC/NR/rrc_gNB_reconfig.c index ffe8d0438a..bb107d8592 100644 --- a/openair2/RRC/NR/rrc_gNB_reconfig.c +++ b/openair2/RRC/NR/rrc_gNB_reconfig.c @@ -77,36 +77,39 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon } /* Function to set or overwrite PTRS DL RRC parameters */ -void rrc_config_dl_ptrs_params(NR_BWP_Downlink_t *bwp, int *ptrsNrb, int *ptrsMcs, int *epre_Ratio, int * reOffset) +void rrc_config_dl_ptrs_params(NR_BWP_Downlink_t *bwp, long *ptrsNrb, long *ptrsMcs, long *epre_Ratio, long *reOffset) { int i=0; + NR_DMRS_DownlinkConfig_t *tmp = bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup; + // struct NR_SetupRelease_PTRS_DownlinkConfig *tmp=bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS; /* check for memory allocation */ - if(bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS == NULL) { - bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS=calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS)); - bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->present = NR_SetupRelease_PTRS_DownlinkConfig_PR_setup; - bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup= calloc(1, sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup)); - bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->frequencyDensity = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->frequencyDensity)); - bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->timeDensity = calloc(1, sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->timeDensity)); - bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->epre_Ratio = calloc(1,sizeof(long)); - bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->resourceElementOffset = calloc(1,sizeof(long)); + if (tmp->phaseTrackingRS == NULL) { + asn1cCalloc(tmp->phaseTrackingRS, TrackingRS); + TrackingRS->present = NR_SetupRelease_PTRS_DownlinkConfig_PR_setup; + asn1cCalloc(TrackingRS->choice.setup, setup); + asn1cCalloc(setup->frequencyDensity, freqD); /* Fill the given values */ for(i = 0; i < 2; i++) { - asn1cSeqAdd(&bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->frequencyDensity->list,&ptrsNrb[i]); + asn1cSequenceAdd(freqD->list, long, nbr); + *nbr = ptrsNrb[i]; } + asn1cCalloc(setup->timeDensity, timeD); for(i = 0; i < 3; i++) { - asn1cSeqAdd(&bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->timeDensity->list,&ptrsMcs[i]); + asn1cSequenceAdd(timeD->list, long, mcs); + *mcs = ptrsMcs[i]; } - }// if memory exist then over write the old values - else { + asn1cCallocOne(setup->epre_Ratio, epre_Ratio[0]); + asn1cCallocOne(setup->resourceElementOffset, reOffset[0]); + } else { + NR_PTRS_DownlinkConfig_t *TrackingRS = tmp->phaseTrackingRS->choice.setup; for(i = 0; i < 2; i++) { - *bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->frequencyDensity->list.array[i] = ptrsNrb[i]; + *TrackingRS->frequencyDensity->list.array[i] = ptrsNrb[i]; } for(i = 0; i < 3; i++) { - *bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->timeDensity->list.array[i] = ptrsMcs[i]; + *TrackingRS->timeDensity->list.array[i] = ptrsMcs[i]; } + *TrackingRS->epre_Ratio = epre_Ratio[0]; + *TrackingRS->resourceElementOffset = reOffset[0]; } - - *bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->epre_Ratio = *epre_Ratio; - *bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS->choice.setup->resourceElementOffset = *reOffset; } #endif From 7f4e8f922052fa6e23e7a76a798f4c2afc259e28 Mon Sep 17 00:00:00 2001 From: laurent Date: Fri, 3 Mar 2023 00:26:56 +0100 Subject: [PATCH 03/13] fix-ubsan --- openair1/PHY/CODING/crc_byte.c | 20 +++---- openair1/PHY/LTE_TRANSPORT/dci_tools_common.c | 2 +- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 24 ++++---- .../PHY/NR_ESTIMATION/nr_measurements_gNB.c | 8 +-- openair1/PHY/NR_TRANSPORT/nr_dlsch.c | 58 +++++++++++++------ 5 files changed, 67 insertions(+), 45 deletions(-) diff --git a/openair1/PHY/CODING/crc_byte.c b/openair1/PHY/CODING/crc_byte.c index 604c316093..261119d283 100644 --- a/openair1/PHY/CODING/crc_byte.c +++ b/openair1/PHY/CODING/crc_byte.c @@ -95,11 +95,11 @@ crc table initialization static unsigned int crc24aTable[256]; static unsigned int crc24bTable[256]; static unsigned int crc24cTable[256]; -static unsigned short crc16Table[256]; -static unsigned short crc12Table[256]; -static unsigned short crc11Table[256]; -static unsigned char crc8Table[256]; -static unsigned char crc6Table[256]; +static unsigned int crc16Table[256]; +static unsigned int crc12Table[256]; +static unsigned int crc11Table[256]; +static unsigned int crc8Table[256]; +static unsigned int crc6Table[256]; #if USE_INTEL_CRC static DECLARE_ALIGNED(struct crc_pclmulqdq_ctx lte_crc24a_pclmulqdq, 16) = { @@ -131,11 +131,11 @@ void crcTableInit (void) crc24aTable[c] = crcbit (&c, 1, poly24a); crc24bTable[c] = crcbit (&c, 1, poly24b); crc24cTable[c] = crcbit (&c, 1, poly24c); - crc16Table[c] = (unsigned short) (crcbit (&c, 1, poly16) >> 16); - crc12Table[c] = (unsigned short) (crcbit (&c, 1, poly12) >> 16); - crc11Table[c] = (unsigned short) (crcbit (&c, 1, poly11) >> 16); - crc8Table[c] = (unsigned char) (crcbit (&c, 1, poly8) >> 24); - crc6Table[c] = (unsigned char) (crcbit (&c, 1, poly6) >> 24); + crc16Table[c] = crcbit(&c, 1, poly16) >> 16; + crc12Table[c] = crcbit(&c, 1, poly12) >> 16; + crc11Table[c] = crcbit(&c, 1, poly11) >> 16; + crc8Table[c] = crcbit(&c, 1, poly8) >> 24; + crc6Table[c] = crcbit(&c, 1, poly6) >> 24; } while (++c); #if USE_INTEL_CRC crc_xmm_be_le_swap128 = _mm_setr_epi32(0x0c0d0e0f, 0x08090a0b, diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c index 457b65178b..86a4c08e2e 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c @@ -353,7 +353,7 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t for (i=16; i>0; i--) { if ((rb_alloc&(1<>5] |= (7<<((3*(16-i))%32)); + rb_alloc2[(3 * (16 - i)) >> 5] |= (7U << ((3 * (16 - i)) % 32)); } // bit mask across diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 4b1cf2cbee..35408c28d5 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -840,16 +840,16 @@ int allocate_REs_in_RB_no_pilots_16QAM_tm2(PHY_VARS_eNB* phy_vars_eNB, (((uint32_t)x0p[4])<<5)|(((uint32_t)x0p[6])<<4)| (((uint32_t)x0p[5])<<7)|(((uint32_t)x0p[7])<<6); - txF0[0]=qam_table16_0[qam16_table_offset]; - txF1[0]=qam_table16_1[qam16_table_offset]; + memcpy(txF0, &qam_table16_0[qam16_table_offset], sizeof(*txF0)); + memcpy(txF1, &qam_table16_1[qam16_table_offset], sizeof(*txF1)); x0p+=8; qam16_table_offset=(((uint32_t)x0p[0])<<1)|(((uint32_t)x0p[2]))| (((uint32_t)x0p[1])<<3)|(((uint32_t)x0p[3])<<2) | (((uint32_t)x0p[4])<<5)|(((uint32_t)x0p[6])<<4) | (((uint32_t)x0p[5])<<7)|(((uint32_t)x0p[7])<<6); - txF0[1]=qam_table16_0[qam16_table_offset]; - txF1[1]=qam_table16_1[qam16_table_offset]; + memcpy(txF0 + 1, &qam_table16_0[qam16_table_offset], sizeof(*txF0)); + memcpy(txF1 + 1, &qam_table16_1[qam16_table_offset], sizeof(*txF1)); x0p+=8; qam16_table_offset=(((uint32_t)x0p[0])<<1)|(((uint32_t)x0p[2]))| @@ -857,8 +857,8 @@ int allocate_REs_in_RB_no_pilots_16QAM_tm2(PHY_VARS_eNB* phy_vars_eNB, (((uint32_t)x0p[4])<<5)|(((uint32_t)x0p[6])<<4) | (((uint32_t)x0p[5])<<7)|(((uint32_t)x0p[7])<<6); - txF0[2]=qam_table16_0[qam16_table_offset]; - txF1[2]=qam_table16_1[qam16_table_offset]; + memcpy(txF0 + 2, &qam_table16_0[qam16_table_offset], sizeof(*txF0)); + memcpy(txF1 + 2, &qam_table16_1[qam16_table_offset], sizeof(*txF1)); if(skip_half==0) { if (skip_dc>0) { @@ -872,23 +872,23 @@ int allocate_REs_in_RB_no_pilots_16QAM_tm2(PHY_VARS_eNB* phy_vars_eNB, (((uint32_t)x0p[4])<<5)|(((uint32_t)x0p[6])<<4) | (((uint32_t)x0p[5])<<7)|(((uint32_t)x0p[7])<<6); - txF0[3]=qam_table16_0[qam16_table_offset]; - txF1[3]=qam_table16_1[qam16_table_offset]; + memcpy(txF0 + 3, &qam_table16_0[qam16_table_offset], sizeof(*txF0)); + memcpy(txF1 + 3, &qam_table16_1[qam16_table_offset], sizeof(*txF1)); x0p+=8; qam16_table_offset=(((uint32_t)x0p[0])<<1)|(((uint32_t)x0p[2]))| (((uint32_t)x0p[1])<<3)|(((uint32_t)x0p[3])<<2) | (((uint32_t)x0p[4])<<5)|(((uint32_t)x0p[6])<<4) | (((uint32_t)x0p[5])<<7)|(((uint32_t)x0p[7])<<6); - txF0[4]=qam_table16_0[qam16_table_offset]; - txF1[4]=qam_table16_1[qam16_table_offset]; + memcpy(txF0 + 4, &qam_table16_0[qam16_table_offset], sizeof(*txF0)); + memcpy(txF1 + 4, &qam_table16_1[qam16_table_offset], sizeof(*txF1)); x0p+=8; qam16_table_offset=(((uint32_t)x0p[0])<<1)|(((uint32_t)x0p[2]))| (((uint32_t)x0p[1])<<3)|(((uint32_t)x0p[3])<<2) | (((uint32_t)x0p[4])<<5)|(((uint32_t)x0p[6])<<4) | (((uint32_t)x0p[5])<<7)|(((uint32_t)x0p[7])<<6); - txF0[5]=qam_table16_0[qam16_table_offset]; - txF1[5]=qam_table16_1[qam16_table_offset]; + memcpy(txF0 + 5, &qam_table16_0[qam16_table_offset], sizeof(*txF0)); + memcpy(txF1 + 5, &qam_table16_1[qam16_table_offset], sizeof(*txF1)); } if(skip_half!=0) { diff --git a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c index bf2466d2f2..f6c111301b 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c +++ b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c @@ -218,11 +218,11 @@ void nr_gnb_measurements(PHY_VARS_gNB *gNB, unsigned short rx_power_avg_dB; unsigned short rx_power_tot_dB; - double rx_gain = openair0_cfg[0].rx_gain[0]; - double rx_gain_offset = openair0_cfg[0].rx_gain_offset[0]; + double rx_gain = openair0_cfg[0].rx_gain[0]; + double rx_gain_offset = openair0_cfg[0].rx_gain_offset[0]; PHY_MEASUREMENTS_gNB *meas = &gNB->measurements; - NR_DL_FRAME_PARMS *fp = &gNB->frame_parms; - int ch_offset = fp->ofdm_symbol_size * symbol; + NR_DL_FRAME_PARMS *fp = &gNB->frame_parms; + int ch_offset = fp->ofdm_symbol_size * symbol; int N_RB_UL = ulsch->harq_process->ulsch_pdu.rb_size; ulsch_measurements_gNB *ulsch_measurements = &ulsch->ulsch_measurements; diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c index a190cfcccd..93dad56823 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c @@ -408,42 +408,64 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, __m128i *txl = (__m128i *)&tx_layers[nl][m << 1]; __m128i amp64 = _mm_set1_epi16(amp); - DevAssert(upper_limit % 4 == 0); - for (int i = 0; i < (upper_limit >> 2); i++) { + int i; + for (i = 0; i < (upper_limit >> 2); i++) { const __m128i txL = _mm_loadu_si128(txl + i); _mm_storeu_si128(txF + i, _mm_mulhrs_epi16(amp64, txL)); #ifdef DEBUG_DLSCH_MAPPING if ((i&1) > 0) - printf("m %d\t l %d \t k %d \t txdataF: %d %d\n", - m, l, start_sc+(i>>1), txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + start_sc+(i>>1))<<1)], - txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + start_sc+(i>>1))<<1) + 1]); + printf("m %d\t l %d \t k %d \t txdataF: %d %d\n", + m, + l, + start_sc + (i >> 1), + txdataF_precoding[nl][((l * frame_parms->ofdm_symbol_size + start_sc + (i >> 1)) << 1)], + txdataF_precoding[nl][((l * frame_parms->ofdm_symbol_size + start_sc + (i >> 1)) << 1) + 1]); #endif /* handle this, mute RE */ /*else { txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = 0; txdataF_precoding[anl][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0; - }*/ - } // RE loop, first part + }*/ + } + if (i * 4 != upper_limit) { + c16_t *txFc = (c16_t *)&txdataF_precoding[nl][((l * frame_parms->ofdm_symbol_size + start_sc) << 1)]; + c16_t *txlc = (c16_t *)&tx_layers[nl][m << 1]; + for (i = (upper_limit >> 2) << 2; i < upper_limit; i++) { + txFc[i].r = ((txlc[i].r * amp) >> 14) + 1; + txFc[i].i = ((txlc[i].i * amp) >> 14) + 1; + } + } m+=upper_limit; if (remaining_re > 0) { txF = (__m128i *)&txdataF_precoding[nl][((l * frame_parms->ofdm_symbol_size) << 1)]; txl = (__m128i *)&tx_layers[nl][m << 1]; - DevAssert(remaining_re % 4 == 0); - for (int i = 0; i < (remaining_re >> 2); i++) { + int i; + for (i = 0; i < (remaining_re >> 2); i++) { const __m128i txL = _mm_loadu_si128(txl + i); _mm_storeu_si128(txF + i, _mm_mulhrs_epi16(amp64, txL)); #ifdef DEBUG_DLSCH_MAPPING - if ((i&1) > 0) - printf("m %d\t l %d \t k %d \t txdataF: %d %d\n", - m, l, i>>1, txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + (i>>1))<<1) ], - txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + (i>>1))<<1) + 1]); + if ((i & 1) > 0) + printf("m %d\t l %d \t k %d \t txdataF: %d %d\n", + m, + l, + i >> 1, + txdataF_precoding[nl][((l * frame_parms->ofdm_symbol_size + (i >> 1)) << 1)], + txdataF_precoding[nl][((l * frame_parms->ofdm_symbol_size + (i >> 1)) << 1) + 1]); #endif - /* handle this, mute RE */ - /*else { - txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = 0; - txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0; - }*/ + /* handle this, mute RE */ + /*else { + txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) ] = 0; + txdataF_precoding[nl][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1] = 0; + }*/ } // RE loop, second part + if (i * 4 != remaining_re) { + c16_t *txFc = (c16_t *)&txdataF_precoding[nl][((l * frame_parms->ofdm_symbol_size) << 1)]; + c16_t *txlc = (c16_t *)&tx_layers[nl][m << 1]; + for (i = (remaining_re >> 2) << 2; i < remaining_re; i++) { + txFc[i].r = ((txlc[i].r * amp) >> 14) + 1; + txFc[i].i = ((txlc[i].i * amp) >> 14) + 1; + } + } } // m+=remaining_re; } // N_RB_DL even From 2faca0fdba916d379ed4bfa5a4108a080747c5ae Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 3 Mar 2023 13:17:30 +0100 Subject: [PATCH 04/13] Fix too large shift in nr_pucchsim --- openair1/PHY/NR_TRANSPORT/pucch_rx.c | 2 +- openair1/SIMULATION/NR_PHY/pucchsim.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/pucch_rx.c b/openair1/PHY/NR_TRANSPORT/pucch_rx.c index 71db65a14e..afd2eb0bb3 100644 --- a/openair1/PHY/NR_TRANSPORT/pucch_rx.c +++ b/openair1/PHY/NR_TRANSPORT/pucch_rx.c @@ -1774,7 +1774,7 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB, } bit_left = pucch_pdu->bit_len_csi_part1-((csi_part1_bytes-1)<<3); uci_pdu->csi_part1.csi_part1_payload[i] = decodedPayload[0] & ((1<>= pucch_pdu->bit_len_csi_part1; + decodedPayload[0] = pucch_pdu->bit_len_csi_part1 < 64 ? decodedPayload[0] >> pucch_pdu->bit_len_csi_part1 : 0; } if (pucch_pdu->bit_len_csi_part2>0) { diff --git a/openair1/SIMULATION/NR_PHY/pucchsim.c b/openair1/SIMULATION/NR_PHY/pucchsim.c index a0631767ba..f773b201fd 100644 --- a/openair1/SIMULATION/NR_PHY/pucchsim.c +++ b/openair1/SIMULATION/NR_PHY/pucchsim.c @@ -401,7 +401,7 @@ int main(int argc, char **argv) srand(time(NULL)); // Initialization, should only be called once. actual_payload = rand(); // Returns a pseudo-random integer between 0 and RAND_MAX. } - actual_payload &= ((1< Date: Fri, 3 Mar 2023 14:45:57 +0100 Subject: [PATCH 05/13] Fix too large shift in ulsim --- openair1/SCHED/phy_procedures_lte_eNb.c | 2 +- openair1/SIMULATION/LTE_PHY/ulsim.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index e48d9f30a4..efeba1d546 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1360,7 +1360,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) { rb<=ulsch_harq->nb_rb; rb++) { int rb2 = rb+ulsch_harq->first_rb; - eNB->rb_mask_ul[rb2>>5] |= (1<<(rb2&31)); + eNB->rb_mask_ul[rb2>>5] |= (1L<<(rb2&31)); } LOG_D(PHY,"[eNB %d] frame %d, subframe %d: Scheduling ULSCH Reception for UE %d \n", eNB->Mod_id, frame, subframe, i); diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index a0286ad719..d3cf14b185 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -806,7 +806,7 @@ int main(int argc, char **argv) { if (cqi_flag == 1) coded_bits_per_codeword-=UE->ulsch[0]->O; - rate = (double)dlsch_tbs25[get_I_TBS(mcs)][nb_rb-1]/(coded_bits_per_codeword); + rate = (double)TBStable[get_I_TBS(mcs)][nb_rb-1]/(coded_bits_per_codeword); printf("Rate = %f (mod %d), coded bits %u\n",rate,get_Qm_ul(mcs),coded_bits_per_codeword); for (ch_realization=0; ch_realization Date: Fri, 3 Mar 2023 18:22:23 +0100 Subject: [PATCH 06/13] remove ubsan from ziggurat random generator for speed and because it detects abs(MIN_INT32) cant be computed --- openair1/SIMULATION/TOOLS/rangen_double.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/SIMULATION/TOOLS/rangen_double.c b/openair1/SIMULATION/TOOLS/rangen_double.c index df45199006..30ab760be8 100644 --- a/openair1/SIMULATION/TOOLS/rangen_double.c +++ b/openair1/SIMULATION/TOOLS/rangen_double.c @@ -190,7 +190,7 @@ void tableNor(unsigned long seed) return; } -double __attribute__ ((no_sanitize_address)) gaussZiggurat(double mean, double variance) +double __attribute__ ((no_sanitize("address", "undefined"))) gaussZiggurat(double mean, double variance) { if (!tableNordDone) { // let's make reasonnable constant tables From 9509bdfdc18131baa1d75a99a40ae43ed24c35ef Mon Sep 17 00:00:00 2001 From: laurent Date: Sat, 4 Mar 2023 13:14:01 +0100 Subject: [PATCH 07/13] ubsan detected issue --- openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c | 1 - openair1/SIMULATION/NR_PHY/ulsim.c | 2 +- openair1/SIMULATION/TOOLS/rangen_double.c | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c index 00e6d7ffca..942c6befdf 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c @@ -1773,7 +1773,6 @@ static inline void nr_element_sign(c16_t *a, // a * Compute the matrix determinant for 4x4 Matrix * * */ -<<<<<<< HEAD static void nr_determin(int size, c16_t *a44[][size], // c16_t *ad_bc, // ad-bc diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c index f660e9559c..966f9542e9 100644 --- a/openair1/SIMULATION/NR_PHY/ulsim.c +++ b/openair1/SIMULATION/NR_PHY/ulsim.c @@ -873,7 +873,7 @@ int main(int argc, char **argv) if (input_fd != NULL || n_trials == 1) max_rounds=1; - if(1<= nb_symb_sch) + if (enable_ptrs && 1 << ptrs_time_density >= nb_symb_sch) pdu_bit_map &= ~PUSCH_PDU_BITMAP_PUSCH_PTRS; // disable PUSCH PTRS printf("\n"); diff --git a/openair1/SIMULATION/TOOLS/rangen_double.c b/openair1/SIMULATION/TOOLS/rangen_double.c index 30ab760be8..ddc453de9c 100644 --- a/openair1/SIMULATION/TOOLS/rangen_double.c +++ b/openair1/SIMULATION/TOOLS/rangen_double.c @@ -200,7 +200,7 @@ double __attribute__ ((no_sanitize("address", "undefined"))) gaussZiggurat(doubl } hz = SHR3; iz = hz & 127; - return abs(hz) < kn[iz] ? hz * wn[iz] : nfix(); + return hz != INT32_MIN && abs(hz) < kn[iz] ? hz * wn[iz] : nfix(); } #ifdef MAIN From 8a10d1b222c671f3f752bf82b815e0c6f342ad5d Mon Sep 17 00:00:00 2001 From: laurent Date: Fri, 17 Mar 2023 19:20:27 +0100 Subject: [PATCH 08/13] add phy layer variable and persited arrays --- common/platform_constants.h | 2 +- .../PHY/NR_ESTIMATION/nr_measurements_gNB.c | 48 ++++++++----- .../PHY/NR_TRANSPORT/nr_ulsch_demodulation.c | 8 ++- .../PHY/NR_UE_ESTIMATION/nr_ue_measurements.c | 25 +++++-- openair1/PHY/TOOLS/tools_defs.h | 67 +++++++++++++++++++ openair1/PHY/defs_gNB.h | 9 ++- openair1/PHY/defs_nr_UE.h | 4 +- openair1/SIMULATION/LTE_PHY/ulsim.c | 2 +- 8 files changed, 131 insertions(+), 34 deletions(-) diff --git a/common/platform_constants.h b/common/platform_constants.h index 8fc8d9c237..8e17c18343 100644 --- a/common/platform_constants.h +++ b/common/platform_constants.h @@ -81,7 +81,7 @@ #define RLC_TX_MAXSIZE 10000000 #define RLC_RX_MAXSIZE 10000000 #define SEND_MRW_ON 240 - +#define MAX_ANT 8 // CBA constant #define NUM_MAX_CBA_GROUP 4 diff --git a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c index f6c111301b..495f767798 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c +++ b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c @@ -146,7 +146,17 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb PHY_MEASUREMENTS_gNB *measurements = &gNB->measurements; int rb, nb_symb[275]={0}; - memset(measurements->n0_subband_power, 0, sizeof(measurements->n0_subband_power)); + allocCast2D(n0_subband_power, + unsigned int, + gNB->measurements.n0_subband_power, + frame_parms->nb_antennas_rx, + frame_parms->N_RB_UL); + clearArray(gNB->measurements.n0_subband_power, unsigned int); + allocCast2D(n0_subband_power_dB, + unsigned int, + gNB->measurements.n0_subband_power_dB, + frame_parms->nb_antennas_rx, + frame_parms->N_RB_UL); for (int s=first_symb;s<(first_symb+num_symb);s++) { int offset0 = ((slot&3)*frame_parms->symbols_per_slot + s) * frame_parms->ofdm_symbol_size; @@ -166,7 +176,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb } else { signal_energy = signal_energy_nodc(ul_ch, 12); } - measurements->n0_subband_power[aarx][rb] += signal_energy; + n0_subband_power[aarx][rb] += signal_energy; LOG_D(PHY,"slot %d symbol %d RB %d aarx %d n0_subband_power %d\n", slot, s, rb, aarx, signal_energy); } //antenna } @@ -182,10 +192,10 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb int32_t n0_subband_tot_perPRB=0; if (nb_symb[rb] > 0) { for (int aarx=0;aarxnb_antennas_rx;aarx++) { - measurements->n0_subband_power[aarx][rb]/=nb_symb[rb]; - measurements->n0_subband_power_dB[aarx][rb] = dB_fixed(measurements->n0_subband_power[aarx][rb]); - n0_subband_tot_perPRB+=measurements->n0_subband_power[aarx][rb]; - n0_subband_tot_perANT[aarx]+=measurements->n0_subband_power[aarx][rb]; + n0_subband_power[aarx][rb] /= nb_symb[rb]; + n0_subband_power_dB[aarx][rb] = dB_fixed(n0_subband_power[aarx][rb]); + n0_subband_tot_perPRB += n0_subband_power[aarx][rb]; + n0_subband_tot_perANT[aarx] += n0_subband_power[aarx][rb]; } n0_subband_tot_perPRB/=frame_parms->nb_antennas_rx; measurements->n0_subband_power_tot_dB[rb] = dB_fixed(n0_subband_tot_perPRB); @@ -223,25 +233,31 @@ void nr_gnb_measurements(PHY_VARS_gNB *gNB, PHY_MEASUREMENTS_gNB *meas = &gNB->measurements; NR_DL_FRAME_PARMS *fp = &gNB->frame_parms; int ch_offset = fp->ofdm_symbol_size * symbol; - int N_RB_UL = ulsch->harq_process->ulsch_pdu.rb_size; - ulsch_measurements_gNB *ulsch_measurements = &ulsch->ulsch_measurements; - int rx_power[fp->nb_antennas_rx]; + int N_RB_UL = gNB->ulsch->harq_processes->ulsch_pdu.rb_size; + int rx_power[NUMBER_OF_NR_ULSCH_MAX][fp->nb_antennas_rx]; + rx_power_tot[ulsch_id] = 0; + allocCast3D(rx_spatial_power, int, meas->rx_spatial_power, NUMBER_OF_NR_ULSCH_MAX, nrOfLayers, fp->nb_antennas_rx); + allocCast3D(rx_spatial_power_dB, + unsigned short, + meas->rx_spatial_power_dB, + NUMBER_OF_NR_ULSCH_MAX, + nrOfLayers, + fp->nb_antennas_rx); for (int aarx = 0; aarx < fp->nb_antennas_rx; aarx++){ rx_power[aarx] = 0; for (int aatx = 0; aatx < nrOfLayers; aatx++){ - ulsch_measurements->rx_spatial_power[aatx][aarx] = - (signal_energy_nodc(&pusch_vars->ul_ch_estimates[aatx * fp->nb_antennas_rx + aarx][ch_offset], + rx_spatial_power[ulsch_id][aatx][aarx] = + (signal_energy_nodc(&gNB->pusch_vars[ulsch_id]->ul_ch_estimates[aatx * fp->nb_antennas_rx + aarx][ch_offset], N_RB_UL * NR_NB_SC_PER_RB)); - if (ulsch_measurements->rx_spatial_power[aatx][aarx] < 0) { - ulsch_measurements->rx_spatial_power[aatx][aarx] = 0; + if (rx_spatial_power[ulsch_id][aatx][aarx] < 0) { + rx_spatial_power[ulsch_id][aatx][aarx] = 0; } - ulsch_measurements->rx_spatial_power_dB[aatx][aarx] = - (unsigned short)dB_fixed(ulsch_measurements->rx_spatial_power[aatx][aarx]); - rx_power[aarx] += ulsch_measurements->rx_spatial_power[aatx][aarx]; + rx_spatial_power_dB[ulsch_id][aatx][aarx] = (unsigned short)dB_fixed(rx_spatial_power[ulsch_id][aatx][aarx]); + rx_power[ulsch_id][aarx] += rx_spatial_power[ulsch_id][aatx][aarx]; } LOG_D(PHY, "[RNTI %04x] RX power in antenna %d = %d\n", ulsch->rnti, aarx, rx_power[aarx]); diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c index bb213c595b..0e7e77c54c 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c @@ -1905,7 +1905,11 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB, } nr_gnb_measurements(gNB, ulsch, pusch_vars, symbol, rel15_ul->nrOfLayers); - + allocCast2D(n0_subband_power, + unsigned int, + gNB->measurements.n0_subband_power, + frame_parms->nb_antennas_rx, + frame_parms->N_RB_UL); for (aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) { if (symbol == rel15_ul->start_symbol_index) { pusch_vars->ulsch_power[aarx] = 0; @@ -1918,7 +1922,7 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB, } for (int rb = 0; rb < rel15_ul->rb_size; rb++) { pusch_vars->ulsch_noise_power[aarx] += - gNB->measurements.n0_subband_power[aarx][rel15_ul->bwp_start + rel15_ul->rb_start + rb] / rel15_ul->rb_size; + n0_subband_power[aarx][rel15_ul->bwp_start + rel15_ul->rb_start + rb] / rel15_ul->rb_size; } LOG_D(PHY, "aa %d, bwp_start%d, rb_start %d, rb_size %d: ulsch_power %d, ulsch_noise_power %d\n", diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c b/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c index 78dc616d07..04e9c17788 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c @@ -88,6 +88,19 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue, ue->measurements.nb_antennas_rx = frame_parms->nb_antennas_rx; + allocCast3D(rx_spatial_power, + int, + ue->measurements.rx_spatial_power, + NUMBER_OF_CONNECTED_gNB_MAX, + frame_parms->nb_antennas_rx, + frame_parms->nb_antenna_ports_gNB); + allocCast3D(rx_spatial_power_dB, + unsigned short, + ue->measurements.rx_spatial_power_dB, + NUMBER_OF_CONNECTED_gNB_MAX, + frame_parms->nb_antennas_rx, + frame_parms->nb_antenna_ports_gNB); + // signal measurements for (gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++){ @@ -98,15 +111,13 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue, ue->measurements.rx_power[gNB_id][aarx] = 0; for (aatx = 0; aatx < frame_parms->nb_antenna_ports_gNB; aatx++){ + rx_spatial_power[gNB_id][aatx][aarx] = (signal_energy_nodc(&dl_ch_estimates[gNB_id][ch_offset], N_RB_DL * NR_NB_SC_PER_RB)); - ue->measurements.rx_spatial_power[gNB_id][aatx][aarx] = (signal_energy_nodc(&dl_ch_estimates[gNB_id][ch_offset], N_RB_DL*NR_NB_SC_PER_RB)); - - if (ue->measurements.rx_spatial_power[gNB_id][aatx][aarx]<0) - ue->measurements.rx_spatial_power[gNB_id][aatx][aarx] = 0; - - ue->measurements.rx_spatial_power_dB[gNB_id][aatx][aarx] = (unsigned short) dB_fixed(ue->measurements.rx_spatial_power[gNB_id][aatx][aarx]); - ue->measurements.rx_power[gNB_id][aarx] += ue->measurements.rx_spatial_power[gNB_id][aatx][aarx]; + if (rx_spatial_power[gNB_id][aatx][aarx] < 0) + rx_spatial_power[gNB_id][aatx][aarx] = 0; + rx_spatial_power_dB[gNB_id][aatx][aarx] = (unsigned short)dB_fixed(rx_spatial_power[gNB_id][aatx][aarx]); + ue->measurements.rx_power[gNB_id][aarx] += rx_spatial_power[gNB_id][aatx][aarx]; } ue->measurements.rx_power_dB[gNB_id][aarx] = (unsigned short) dB_fixed(ue->measurements.rx_power[gNB_id][aarx]); diff --git a/openair1/PHY/TOOLS/tools_defs.h b/openair1/PHY/TOOLS/tools_defs.h index 3079e5029c..b7dbbe8c42 100644 --- a/openair1/PHY/TOOLS/tools_defs.h +++ b/openair1/PHY/TOOLS/tools_defs.h @@ -34,6 +34,7 @@ #include #include "PHY/sse_intrin.h" #include "common/utils/assertions.h" +#include "common/utils/utils.h" #if defined(__x86_64__) || defined(__i386__) #define simd_q15_t __m128i @@ -94,6 +95,72 @@ extern "C" { int64_t i; } c64_t; + typedef struct { + int dim1; + int dim2; + int dim3; + int dim4; + } fourDimArray_t; + + static inline fourDimArray_t *allocateFourDimArray(int elmtSz, int dim1, int dim2, int dim3, int dim4) + { + int sz = elmtSz; + DevAssert(dim1 > 0); + sz *= dim1; + if (dim2) { + sz *= dim2; + if (dim3) { + sz *= dim3; + if (dim4) + sz *= dim4; + } + } + fourDimArray_t *tmp = (fourDimArray_t *)malloc16(sizeof(*tmp) + sz); + AssertFatal(tmp, "no more memory\n"); + *tmp = (fourDimArray_t){dim1, dim2, dim3, dim4}; + return tmp; + } + +#define CheckArrAllocated(workingVar, elementType, ArraY, diM1, diM2, diM3, diM4) \ + if (!(ArraY)) \ + ArraY = allocateFourDimArray(sizeof(elementType), diM1, diM2, diM3, diM4); \ + else { \ + DevAssert((diM1) == (ArraY)->dim1 && (diM2) == (ArraY)->dim2 && (diM3) == (ArraY)->dim3 && (diM4) == (ArraY)->dim4); \ + } + +#define cast1Darray(workingVar, elementType, ArraY) elementType *workingVar = (elementType *)((ArraY) + 1); + +#define allocCast1D(workingVar, elementType, ArraY, dim1) \ + CheckArrAllocated(workingVar, elementType, ArraY, dim1, 0, 0, 0); \ + cast1Darray(workingVar, elementType, ArraY); + +#define cast2Darray(workingVar, elementType, ArraY) \ + elementType(*workingVar)[(ArraY)->dim2] = (elementType(*)[(ArraY)->dim2])((ArraY) + 1); + +#define allocCast2D(workingVar, elementType, ArraY, dim1, dim2) \ + CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, 0, 0); \ + cast2Darray(workingVar, elementType, ArraY); + +#define cast3Darray(workingVar, elementType, ArraY) \ + elementType(*workingVar)[(ArraY)->dim2][(ArraY)->dim3] = (elementType(*)[(ArraY)->dim2][(ArraY)->dim3])((ArraY) + 1); + +#define allocCast3D(workingVar, elementType, ArraY, dim1, dim2, dim3) \ + CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, dim3, 0); \ + cast3Darray(workingVar, elementType, ArraY); + +#define cast4Darray(workingVar, elementType, ArraY) \ + elementType(*workingVar)[(ArraY)->dim2][(ArraY)->dim3][(ArraY)->dim4] = \ + (elementType(*)[(ArraY)->dim2][(ArraY)->dim3][(ArraY)->dim4])((ArraY) + 1); + +#define allocCast4D(workingVar, elementType, ArraY, dim1, dim2, dim3, dim4) \ + CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, dim3, dim4); \ + cast4Darray(workingVar, elementType, ArraY); + +#define clearArray(ArraY, elementType) \ + memset((ArraY) + 1, \ + 0, \ + sizeof(elementType) * (ArraY)->dim1 * max((ArraY)->dim2, 1) * max((ArraY)->dim3, 1) * max((ArraY)->dim4, 1)) + #define squaredMod(a) ((a).r*(a).r + (a).i*(a).i) #define csum(res, i1, i2) (res).r = (i1).r + (i2).r ; (res).i = (i1).i + (i2).i diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index 71853765af..bcc4e29a6e 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -103,8 +103,8 @@ typedef struct { int total_bytes_rx; int current_Qm; int current_RI; - int power[NB_ANTENNAS_RX]; - int noise_power[NB_ANTENNAS_RX]; + int power[MAX_ANT]; + int noise_power[MAX_ANT]; int DTX; int sync_pos; } NR_gNB_SCH_STATS_t; @@ -546,9 +546,9 @@ typedef struct { //! estimated avg noise power (dB) unsigned int n0_power_tot_dB; //! estimated avg noise power per RB per RX ant (lin) - unsigned int n0_subband_power[NB_ANTENNAS_RX][275]; + fourDimArray_t *n0_subband_power; //! estimated avg noise power per RB per RX ant (dB) - unsigned int n0_subband_power_dB[NB_ANTENNAS_RX][275]; + fourDimArray_t *n0_subband_power_dB; //! estimated avg subband noise power (dB) unsigned int n0_subband_power_avg_dB; //! estimated avg subband noise power per antenna (dB) @@ -557,7 +557,6 @@ typedef struct { int n0_subband_power_tot_dB[275]; //! estimated avg noise power per RB (dBm) int n0_subband_power_tot_dBm[275]; - /// PRACH background noise level int prach_I0; diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index 1543c81e00..0a2b8a12a1 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -151,9 +151,9 @@ typedef struct { // UE measurements //! estimated received spatial signal power (linear) - int rx_spatial_power[NUMBER_OF_CONNECTED_gNB_MAX][2][2]; + fourDimArray_t *rx_spatial_power; //! estimated received spatial signal power (dB) - unsigned short rx_spatial_power_dB[NUMBER_OF_CONNECTED_gNB_MAX][2][2]; + fourDimArray_t *rx_spatial_power_dB; /// estimated received signal power (sum over all TX antennas) int rx_power[NUMBER_OF_CONNECTED_gNB_MAX][NB_ANTENNAS_RX]; diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index d3cf14b185..9a49802909 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -806,7 +806,7 @@ int main(int argc, char **argv) { if (cqi_flag == 1) coded_bits_per_codeword-=UE->ulsch[0]->O; - rate = (double)TBStable[get_I_TBS(mcs)][nb_rb-1]/(coded_bits_per_codeword); + rate = (double)dlsch_tbs25[get_I_TBS(mcs)][nb_rb - 1] / (coded_bits_per_codeword); printf("Rate = %f (mod %d), coded bits %u\n",rate,get_Qm_ul(mcs),coded_bits_per_codeword); for (ch_realization=0; ch_realization Date: Fri, 17 Mar 2023 21:43:52 +0100 Subject: [PATCH 09/13] ubsan fixes --- common/utils/time_meas.h | 16 +- openair1/PHY/CODING/crc_byte.c | 106 ++++----- openair1/PHY/INIT/nr_init.c | 4 +- .../PHY/LTE_ESTIMATION/lte_ue_measurements.c | 2 +- openair1/PHY/LTE_TRANSPORT/dci_tools_common.c | 21 +- .../PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c | 7 +- .../PHY/NR_ESTIMATION/nr_measurements_gNB.c | 33 ++- openair1/PHY/NR_TRANSPORT/nr_ulsch.c | 3 +- openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c | 2 +- .../PHY/NR_TRANSPORT/nr_ulsch_demodulation.c | 3 +- .../PHY/NR_UE_ESTIMATION/nr_ue_measurements.c | 9 +- .../PHY/NR_UE_TRANSPORT/srs_modulation_nr.c | 2 +- openair1/PHY/TOOLS/tools_defs.h | 45 ++-- openair1/PHY/defs_gNB.h | 4 +- openair1/SCHED_NR/phy_procedures_nr_gNB.c | 3 +- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 206 +++++++++++------- openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 2 +- openair1/SIMULATION/LTE_PHY/ulsim.c | 5 +- openair1/SIMULATION/NR_PHY/dlsim.c | 1 + openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 1 + openair2/LAYER2/nr_rlc/nr_rlc_pdu.c | 2 +- openair2/LAYER2/nr_rlc/nr_rlc_pdu.h | 2 +- .../COMMON/EMM/MSG/FGSUplinkNasTransport.c | 6 +- .../ESM/MSG/PduSessionEstablishmentAccept.c | 14 +- .../NAS/COMMON/IES/FGCNasMessageContainer.c | 3 +- openair3/NAS/COMMON/IES/FGSMobileIdentity.c | 11 +- openair3/NAS/COMMON/UTIL/TLVDecoder.h | 10 +- openair3/NAS/COMMON/UTIL/TLVEncoder.h | 9 +- openair3/NAS/NR_UE/nr_nas_msg_sim.c | 4 +- 29 files changed, 301 insertions(+), 235 deletions(-) diff --git a/common/utils/time_meas.h b/common/utils/time_meas.h index 1bca9c3466..3b5e194c2c 100644 --- a/common/utils/time_meas.h +++ b/common/utils/time_meas.h @@ -153,15 +153,17 @@ static inline void start_meas(time_stats_t *ts) { static inline void stop_meas(time_stats_t *ts) { if (opp_enabled) { long long out = rdtsc_oai(); - ts->diff += (out-ts->in); - /// process duration is the difference between two clock points - ts->p_time = (out-ts->in); - ts->diff_square += ((double)out-ts->in)*((double)out-ts->in); + if (ts->in) { + ts->diff += (out - ts->in); + /// process duration is the difference between two clock points + ts->p_time = (out - ts->in); + ts->diff_square += ((double)out - ts->in) * ((double)out - ts->in); - if ((out-ts->in) > ts->max) - ts->max = out-ts->in; + if ((out - ts->in) > ts->max) + ts->max = out - ts->in; - ts->meas_flag=0; + ts->meas_flag = 0; + } } } diff --git a/openair1/PHY/CODING/crc_byte.c b/openair1/PHY/CODING/crc_byte.c index 261119d283..6b1fcebd80 100644 --- a/openair1/PHY/CODING/crc_byte.c +++ b/openair1/PHY/CODING/crc_byte.c @@ -44,16 +44,16 @@ /*ref 36-212 v8.6.0 , pp 8-9 */ /* the highest degree is set by default */ -unsigned int poly24a = 0x864cfb00; // 1000 0110 0100 1100 1111 1011 - // D^24 + D^23 + D^18 + D^17 + D^14 + D^11 + D^10 + D^7 + D^6 + D^5 + D^4 + D^3 + D + 1 -unsigned int poly24b = 0x80006300; // 1000 0000 0000 0000 0110 0011 - // D^24 + D^23 + D^6 + D^5 + D + 1 -unsigned int poly24c = 0xb2b11700; // 1011 0010 1011 0001 0001 0111 - // D^24+D^23+D^21+D^20+D^17+D^15+D^13+D^12+D^8+D^4+D^2+D+1 +uint32_t poly24a = 0x864cfb00; // 1000 0110 0100 1100 1111 1011 + // D^24 + D^23 + D^18 + D^17 + D^14 + D^11 + D^10 + D^7 + D^6 + D^5 + D^4 + D^3 + D + 1 +uint32_t poly24b = 0x80006300; // 1000 0000 0000 0000 0110 0011 + // D^24 + D^23 + D^6 + D^5 + D + 1 +uint32_t poly24c = 0xb2b11700; // 1011 0010 1011 0001 0001 0111 + // D^24+D^23+D^21+D^20+D^17+D^15+D^13+D^12+D^8+D^4+D^2+D+1 -unsigned int poly16 = 0x10210000; // 0001 0000 0010 0001 D^16 + D^12 + D^5 + 1 -unsigned int poly12 = 0x80F00000; // 1000 0000 1111 D^12 + D^11 + D^3 + D^2 + D + 1 -unsigned int poly8 = 0x9B000000; // 1001 1011 D^8 + D^7 + D^4 + D^3 + D + 1 +uint32_t poly16 = 0x10210000; // 0001 0000 0010 0001 D^16 + D^12 + D^5 + 1 +uint32_t poly12 = 0x80F00000; // 1000 0000 1111 D^12 + D^11 + D^3 + D^2 + D + 1 +uint32_t poly8 = 0x9B000000; // 1001 1011 D^8 + D^7 + D^4 + D^3 + D + 1 uint32_t poly6 = 0x84000000; // 10000100000... -> D^6+D^5+1 uint32_t poly11 = 0xc4200000; //11000100001000... -> D^11+D^10+D^9+D^5+1 @@ -65,14 +65,12 @@ For initialization && verification purposes, The first bit is in the MSB of each byte *********************************************************/ -unsigned int crcbit (unsigned char * inputptr, - int octetlen, - unsigned int poly) +uint32_t crcbit(unsigned char* inputptr, int octetlen, uint32_t poly) { - unsigned int i, crc = 0, c; + uint32_t i, crc = 0, c; while (octetlen-- > 0) { - c = ((unsigned int)(*inputptr++)) << 24; + c = ((uint32_t)(*inputptr++)) << 24; for (i = 8; i != 0; i--) { if ((1U << 31) & (c ^ crc)) @@ -92,14 +90,14 @@ unsigned int crcbit (unsigned char * inputptr, crc table initialization *********************************************************/ -static unsigned int crc24aTable[256]; -static unsigned int crc24bTable[256]; -static unsigned int crc24cTable[256]; -static unsigned int crc16Table[256]; -static unsigned int crc12Table[256]; -static unsigned int crc11Table[256]; -static unsigned int crc8Table[256]; -static unsigned int crc6Table[256]; +static uint32_t crc24aTable[256]; +static uint32_t crc24bTable[256]; +static uint32_t crc24cTable[256]; +static uint32_t crc16Table[256]; +static uint32_t crc12Table[256]; +static uint32_t crc11Table[256]; +static uint32_t crc8Table[256]; +static uint32_t crc6Table[256]; #if USE_INTEL_CRC static DECLARE_ALIGNED(struct crc_pclmulqdq_ctx lte_crc24a_pclmulqdq, 16) = { @@ -151,19 +149,18 @@ assuming initial byte is 0 padded (in MSB) if necessary can use SIMD optimized Intel CRC for LTE/NR 24a/24b variants *********************************************************/ -unsigned int crc24a (unsigned char * inptr, - int bitlen) +uint32_t crc24a(unsigned char* inptr, int bitlen) { int octetlen = bitlen / 8; /* Change in octets */ if ( bitlen % 8 || !USE_INTEL_CRC ) { - unsigned int crc = 0; - int resbit= (bitlen % 8); + uint32_t crc = 0; + int resbit = (bitlen % 8); - while (octetlen-- > 0) { - // printf("crc24a: in %x => crc %x\n",crc,*inptr); - crc = (crc << 8) ^ crc24aTable[(*inptr++) ^ (crc >> 24)]; - } + while (octetlen-- > 0) { + // printf("crc24a: in %x => crc %x\n",crc,*inptr); + crc = (crc << 8) ^ crc24aTable[(*inptr++) ^ (crc >> 24)]; + } if (resbit > 0) crc = (crc << resbit) ^ crc24aTable[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))]; @@ -188,19 +185,18 @@ static DECLARE_ALIGNED(struct crc_pclmulqdq_ctx lte_crc24b_pclmulqdq, 16) = { 0ULL /**< res */ }; #endif -unsigned int crc24b (unsigned char * inptr, - int bitlen) +uint32_t crc24b(unsigned char* inptr, int bitlen) { int octetlen = bitlen / 8; /* Change in octets */ if ( bitlen % 8 || !USE_INTEL_CRC ) { - unsigned int crc = 0; - int resbit = (bitlen % 8); + uint32_t crc = 0; + int resbit = (bitlen % 8); - while (octetlen-- > 0) { - // printf("crc24b: in %x => crc %x (%x)\n",crc,*inptr,crc24bTable[(*inptr) ^ (crc >> 24)]); - crc = (crc << 8) ^ crc24bTable[(*inptr++) ^ (crc >> 24)]; - } + while (octetlen-- > 0) { + // printf("crc24b: in %x => crc %x (%x)\n",crc,*inptr,crc24bTable[(*inptr) ^ (crc >> 24)]); + crc = (crc << 8) ^ crc24bTable[(*inptr++) ^ (crc >> 24)]; + } if (resbit > 0) crc = (crc << resbit) ^ crc24bTable[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))]; @@ -215,11 +211,10 @@ unsigned int crc24b (unsigned char * inptr, #endif } -unsigned int crc24c (unsigned char * inptr, - int bitlen) +uint32_t crc24c(unsigned char* inptr, int bitlen) { int octetlen, resbit; - unsigned int crc = 0; + uint32_t crc = 0; octetlen = bitlen / 8; /* Change in octets */ resbit = (bitlen % 8); @@ -234,11 +229,10 @@ unsigned int crc24c (unsigned char * inptr, return crc; } -unsigned int -crc16 (unsigned char * inptr, int bitlen) +uint32_t crc16(unsigned char* inptr, int bitlen) { int octetlen, resbit; - unsigned int crc = 0; + uint32_t crc = 0; octetlen = bitlen / 8; /* Change in octets */ resbit = (bitlen % 8); @@ -253,11 +247,10 @@ crc16 (unsigned char * inptr, int bitlen) return crc; } -unsigned int -crc12 (unsigned char * inptr, int bitlen) +uint32_t crc12(unsigned char* inptr, int bitlen) { int octetlen, resbit; - unsigned int crc = 0; + uint32_t crc = 0; octetlen = bitlen / 8; /* Change in octets */ resbit = (bitlen % 8); @@ -271,11 +264,10 @@ crc12 (unsigned char * inptr, int bitlen) return crc; } -unsigned int -crc11 (unsigned char * inptr, int bitlen) +uint32_t crc11(unsigned char* inptr, int bitlen) { int octetlen, resbit; - unsigned int crc = 0; + uint32_t crc = 0; octetlen = bitlen / 8; /* Change in octets */ resbit = (bitlen % 8); @@ -289,29 +281,27 @@ crc11 (unsigned char * inptr, int bitlen) return crc; } -unsigned int -crc8 (unsigned char * inptr, int bitlen) +uint32_t crc8(unsigned char* inptr, int bitlen) { int octetlen, resbit; - unsigned int crc = 0; + uint32_t crc = 0; octetlen = bitlen / 8; /* Change in octets */ resbit = (bitlen % 8); while (octetlen-- > 0) { - crc = ((unsigned int)crc8Table[(*inptr++) ^ (crc >> 24)]) << 24; + crc = ((uint32_t)crc8Table[(*inptr++) ^ (crc >> 24)]) << 24; } if (resbit > 0) - crc = (crc << resbit) ^ ((unsigned int)(crc8Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))]) << 24); + crc = (crc << resbit) ^ ((uint32_t)(crc8Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))]) << 24); return crc; } -unsigned int -crc6 (unsigned char * inptr, int bitlen) +uint32_t crc6(unsigned char* inptr, int bitlen) { int octetlen, resbit; - unsigned int crc = 0; + uint32_t crc = 0; octetlen = bitlen / 8; /* Change in octets */ resbit = (bitlen % 8); diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index 36561b110c..916cbd1cbf 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -753,7 +753,9 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB) const int Prx = gNB->gNB_config.carrier_config.num_rx_ant.value; const int max_ul_mimo_layers = 4; // taken from phy_init_nr_gNB() const int n_buf = Prx * max_ul_mimo_layers; - + PHY_MEASUREMENTS_gNB *meas=&gNB->measurements; + free_and_zero(meas->n0_subband_power); + free_and_zero(meas->n0_subband_power_dB); int max_dl_mimo_layers =(fp->nb_antennas_txnb_antennas_tx : NR_MAX_NB_LAYERS; if (fp->nb_antennas_tx>1) { for (int nl = 0; nl < max_dl_mimo_layers; nl++) { diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c index 6735e251ba..68d7b87984 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c @@ -1024,7 +1024,7 @@ void lte_ue_measurements(PHY_VARS_UE *ue, #elif defined(__arm__) || defined(__aarch64__) int16x8_t *dl_ch0_128, *dl_ch1_128; #endif - int *dl_ch0,*dl_ch1; + int *dl_ch0=NULL,*dl_ch1=NULL; LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms; int nb_subbands,subband_size,last_subband_size; diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c index 86a4c08e2e..19686eec6f 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools_common.c @@ -352,16 +352,16 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t if (ra_header==0) { for (i=16; i>0; i--) { - if ((rb_alloc&(1<> 5] |= (7U << ((3 * (16 - i)) % 32)); + if ((rb_alloc & (1 << i)) != 0) + rb_alloc2[(3 * (16 - i)) >> 5] |= (7U << ((3 * (16 - i)) % 32)); } // bit mask across if ((rb_alloc2[0]>>31)==1) - rb_alloc2[1] |= 1; + rb_alloc2[1] |= 1; if ((rb_alloc&1) != 0) - rb_alloc2[1] |= (3<<16); + rb_alloc2[1] |= (3 << 16); } else { LOG_W(PHY,"resource type 1 not supported for N_RB_DL=50\n"); @@ -371,10 +371,10 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t case 100: if (ra_header==0) { for (i=0; i<25; i++) { - if ((rb_alloc&(1<<(24-i))) != 0) - rb_alloc2[(4 * i) >> 5] |= (0xfU << ((4 * i) % 32)); + if ((rb_alloc & (1 << (24 - i))) != 0) + rb_alloc2[(4 * i) >> 5] |= (0xfU << ((4 * i) % 32)); - // printf("rb_alloc2[%d] (type 0) %x (%d)\n",(4*i)>>5,rb_alloc2[(4*i)>>5],rb_alloc&(1<>5,rb_alloc2[(4*i)>>5],rb_alloc&(1<tdd_config); - ret=255; + LOG_E(PHY, "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n", subframe, frame_parms->tdd_config); + ret = 255; } else ret = (subframe/7); break; @@ -996,8 +996,7 @@ uint8_t subframe2harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t } } - AssertFatal(ret!=255, - "invalid harq_pid(%d) at SFN/SF = %d/%d\n", (int8_t)ret, frame, subframe); + AssertFatal(ret != 255, "invalid harq_pid(%d) at SFN/SF = %d/%d\n", (int8_t)ret, frame, subframe); return ret; } diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c index fc48d0c1de..54633fbc18 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c @@ -4706,11 +4706,8 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF, } if (rb_alloc_ind==1) { - int tmp = (rb >> 2) << 1; - if (tmp >= 16) - *pmi_ext = 0; - else - *pmi_ext = (pmi >> tmp) & 3; + uint32_t tmp = (rb >> 2) << 1; + *pmi_ext = tmp >= 16 ? 0 : (pmi >> tmp) & 3; memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); /* diff --git a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c index 495f767798..a26a1d0574 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c +++ b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c @@ -150,13 +150,15 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb unsigned int, gNB->measurements.n0_subband_power, frame_parms->nb_antennas_rx, - frame_parms->N_RB_UL); + frame_parms->N_RB_UL, + false); clearArray(gNB->measurements.n0_subband_power, unsigned int); allocCast2D(n0_subband_power_dB, unsigned int, gNB->measurements.n0_subband_power_dB, frame_parms->nb_antennas_rx, - frame_parms->N_RB_UL); + frame_parms->N_RB_UL, + false); for (int s=first_symb;s<(first_symb+num_symb);s++) { int offset0 = ((slot&3)*frame_parms->symbols_per_slot + s) * frame_parms->ofdm_symbol_size; @@ -233,31 +235,26 @@ void nr_gnb_measurements(PHY_VARS_gNB *gNB, PHY_MEASUREMENTS_gNB *meas = &gNB->measurements; NR_DL_FRAME_PARMS *fp = &gNB->frame_parms; int ch_offset = fp->ofdm_symbol_size * symbol; + int N_RB_UL = ulsch->harq_process->ulsch_pdu.rb_size; + ulsch_measurements_gNB *ulsch_measurements = &ulsch->ulsch_measurements; - int N_RB_UL = gNB->ulsch->harq_processes->ulsch_pdu.rb_size; - int rx_power[NUMBER_OF_NR_ULSCH_MAX][fp->nb_antennas_rx]; - rx_power_tot[ulsch_id] = 0; - allocCast3D(rx_spatial_power, int, meas->rx_spatial_power, NUMBER_OF_NR_ULSCH_MAX, nrOfLayers, fp->nb_antennas_rx); - allocCast3D(rx_spatial_power_dB, - unsigned short, - meas->rx_spatial_power_dB, - NUMBER_OF_NR_ULSCH_MAX, - nrOfLayers, - fp->nb_antennas_rx); + int rx_power[fp->nb_antennas_rx]; + allocCast2D(rx_spatial_power, int, ulsch_measurements->rx_spatial_power, nrOfLayers, fp->nb_antennas_rx, true); + allocCast2D(rx_spatial_power_dB, unsigned short, ulsch_measurements->rx_spatial_power_dB, nrOfLayers, fp->nb_antennas_rx, true); for (int aarx = 0; aarx < fp->nb_antennas_rx; aarx++){ rx_power[aarx] = 0; for (int aatx = 0; aatx < nrOfLayers; aatx++){ - rx_spatial_power[ulsch_id][aatx][aarx] = - (signal_energy_nodc(&gNB->pusch_vars[ulsch_id]->ul_ch_estimates[aatx * fp->nb_antennas_rx + aarx][ch_offset], + rx_spatial_power[aatx][aarx] = + (signal_energy_nodc(&pusch_vars->ul_ch_estimates[aatx * fp->nb_antennas_rx + aarx][ch_offset], N_RB_UL * NR_NB_SC_PER_RB)); - if (rx_spatial_power[ulsch_id][aatx][aarx] < 0) { - rx_spatial_power[ulsch_id][aatx][aarx] = 0; + if (rx_spatial_power[aatx][aarx] < 0) { + rx_spatial_power[aatx][aarx] = 0; } - rx_spatial_power_dB[ulsch_id][aatx][aarx] = (unsigned short)dB_fixed(rx_spatial_power[ulsch_id][aatx][aarx]); - rx_power[ulsch_id][aarx] += rx_spatial_power[ulsch_id][aatx][aarx]; + rx_spatial_power_dB[aatx][aarx] = (unsigned short)dB_fixed(rx_spatial_power[aatx][aarx]); + rx_power[aarx] += rx_spatial_power[aatx][aarx]; } LOG_D(PHY, "[RNTI %04x] RX power in antenna %d = %d\n", ulsch->rnti, aarx, rx_power[aarx]); diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch.c index e7863d3820..352967c7f5 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch.c @@ -88,8 +88,7 @@ void nr_fill_ulsch(PHY_VARS_gNB *gNB, int frame, int slot, nfapi_nr_pusch_pdu_t harq->round++; memcpy(&ulsch->harq_process->ulsch_pdu, ulsch_pdu, sizeof(ulsch->harq_process->ulsch_pdu)); - - LOG_D(PHY, "Initializing nFAPI for ULSCH, harq_pid %d\n", harq_pid); + LOG_D(PHY, "Initializing nFAPI for ULSCH, harq_pid %d, layers %d\n", harq_pid, ulsch_pdu->nrOfLayers); } void reset_active_ulsch(PHY_VARS_gNB *gNB, int frame) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c index 410ffc89d5..bcd73c58a9 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c @@ -93,7 +93,7 @@ NR_gNB_ULSCH_t new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL) } uint32_t ulsch_bytes = a_segments * 1056; // allocated bytes per segment - NR_gNB_ULSCH_t ulsch; + NR_gNB_ULSCH_t ulsch = {0}; ulsch.max_ldpc_iterations = max_ldpc_iterations; ulsch.harq_pid = -1; diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c index 0e7e77c54c..0b83222732 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c @@ -1909,7 +1909,8 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB, unsigned int, gNB->measurements.n0_subband_power, frame_parms->nb_antennas_rx, - frame_parms->N_RB_UL); + frame_parms->N_RB_UL, + false); for (aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) { if (symbol == rel15_ul->start_symbol_index) { pusch_vars->ulsch_power[aarx] = 0; diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c b/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c index 04e9c17788..be1515072d 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c @@ -92,14 +92,16 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue, int, ue->measurements.rx_spatial_power, NUMBER_OF_CONNECTED_gNB_MAX, + frame_parms->nb_antenna_ports_gNB, frame_parms->nb_antennas_rx, - frame_parms->nb_antenna_ports_gNB); + false); allocCast3D(rx_spatial_power_dB, unsigned short, ue->measurements.rx_spatial_power_dB, NUMBER_OF_CONNECTED_gNB_MAX, + frame_parms->nb_antenna_ports_gNB, frame_parms->nb_antennas_rx, - frame_parms->nb_antenna_ports_gNB); + false); // signal measurements for (gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++){ @@ -111,7 +113,8 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue, ue->measurements.rx_power[gNB_id][aarx] = 0; for (aatx = 0; aatx < frame_parms->nb_antenna_ports_gNB; aatx++){ - rx_spatial_power[gNB_id][aatx][aarx] = (signal_energy_nodc(&dl_ch_estimates[gNB_id][ch_offset], N_RB_DL * NR_NB_SC_PER_RB)); + const int z=signal_energy_nodc(&dl_ch_estimates[gNB_id][ch_offset], N_RB_DL * NR_NB_SC_PER_RB); + rx_spatial_power[gNB_id][aatx][aarx] = z; if (rx_spatial_power[gNB_id][aatx][aarx] < 0) rx_spatial_power[gNB_id][aatx][aarx] = 0; diff --git a/openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c b/openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c index 7b602c2e81..2cbd2afbd5 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c @@ -403,7 +403,7 @@ int generate_srs_nr(nfapi_nr_srs_pdu_t *srs_config_pdu, LOG_I(NR_PHY,"(%d) \t%i\t%i\n", subcarrier_log, (int16_t)(r_real_amp&0xFFFF), (int16_t)(r_imag_amp&0xFFFF)); #endif - txdataF[p_index][symbol_offset+l_line_offset+subcarrier] = (r_real_amp & 0xFFFF) + ((r_imag_amp<<16)&0xFFFF0000); + *(c16_t *)&txdataF[p_index][symbol_offset + l_line_offset + subcarrier] = (c16_t){r_real_amp, r_imag_amp}; // Subcarrier increment subcarrier += K_TC; diff --git a/openair1/PHY/TOOLS/tools_defs.h b/openair1/PHY/TOOLS/tools_defs.h index b7dbbe8c42..e584d9f492 100644 --- a/openair1/PHY/TOOLS/tools_defs.h +++ b/openair1/PHY/TOOLS/tools_defs.h @@ -100,6 +100,7 @@ extern "C" { int dim2; int dim3; int dim4; + uint8_t data[]; } fourDimArray_t; static inline fourDimArray_t *allocateFourDimArray(int elmtSz, int dim1, int dim2, int dim3, int dim4) @@ -115,49 +116,55 @@ extern "C" { sz *= dim4; } } - fourDimArray_t *tmp = (fourDimArray_t *)malloc16(sizeof(*tmp) + sz); + fourDimArray_t *tmp = (fourDimArray_t *)malloc16_clear(sizeof(*tmp) + sz); AssertFatal(tmp, "no more memory\n"); *tmp = (fourDimArray_t){dim1, dim2, dim3, dim4}; return tmp; } -#define CheckArrAllocated(workingVar, elementType, ArraY, diM1, diM2, diM3, diM4) \ - if (!(ArraY)) \ - ArraY = allocateFourDimArray(sizeof(elementType), diM1, diM2, diM3, diM4); \ - else { \ - DevAssert((diM1) == (ArraY)->dim1 && (diM2) == (ArraY)->dim2 && (diM3) == (ArraY)->dim3 && (diM4) == (ArraY)->dim4); \ +#define CheckArrAllocated(workingVar, elementType, ArraY, diM1, diM2, diM3, diM4, resizeAllowed) \ + if (!(ArraY)) \ + ArraY = allocateFourDimArray(sizeof(elementType), diM1, diM2, diM3, diM4); \ + else { \ + if ((resizeAllowed) \ + && ((diM1) != (ArraY)->dim1 || (diM2) != (ArraY)->dim2 || (diM3) != (ArraY)->dim3 || (diM4) != (ArraY)->dim4)) { \ + LOG_I(PHY, "resizing %s to %d/%d/%d/%d\n", #ArraY, (diM1), (diM2), (diM3), (diM4)); \ + free(ArraY); \ + ArraY = allocateFourDimArray(sizeof(elementType), diM1, diM2, diM3, diM4); \ + } else \ + DevAssert((diM1) == (ArraY)->dim1 && (diM2) == (ArraY)->dim2 && (diM3) == (ArraY)->dim3 && (diM4) == (ArraY)->dim4); \ } -#define cast1Darray(workingVar, elementType, ArraY) elementType *workingVar = (elementType *)((ArraY) + 1); +#define cast1Darray(workingVar, elementType, ArraY) elementType *workingVar = (elementType *)((ArraY)->data); -#define allocCast1D(workingVar, elementType, ArraY, dim1) \ - CheckArrAllocated(workingVar, elementType, ArraY, dim1, 0, 0, 0); \ +#define allocCast1D(workingVar, elementType, ArraY, dim1, resizeAllowed) \ + CheckArrAllocated(workingVar, elementType, ArraY, dim1, 0, 0, 0, resizeAllowed); \ cast1Darray(workingVar, elementType, ArraY); #define cast2Darray(workingVar, elementType, ArraY) \ - elementType(*workingVar)[(ArraY)->dim2] = (elementType(*)[(ArraY)->dim2])((ArraY) + 1); + elementType(*workingVar)[(ArraY)->dim2] = (elementType(*)[(ArraY)->dim2])((ArraY)->data); -#define allocCast2D(workingVar, elementType, ArraY, dim1, dim2) \ - CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, 0, 0); \ +#define allocCast2D(workingVar, elementType, ArraY, dim1, dim2, resizeAllowed) \ + CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, 0, 0, resizeAllowed); \ cast2Darray(workingVar, elementType, ArraY); #define cast3Darray(workingVar, elementType, ArraY) \ - elementType(*workingVar)[(ArraY)->dim2][(ArraY)->dim3] = (elementType(*)[(ArraY)->dim2][(ArraY)->dim3])((ArraY) + 1); + elementType(*workingVar)[(ArraY)->dim2][(ArraY)->dim3] = (elementType(*)[(ArraY)->dim2][(ArraY)->dim3])((ArraY)->data); -#define allocCast3D(workingVar, elementType, ArraY, dim1, dim2, dim3) \ - CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, dim3, 0); \ +#define allocCast3D(workingVar, elementType, ArraY, dim1, dim2, dim3, resizeAllowed) \ + CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, dim3, 0, resizeAllowed); \ cast3Darray(workingVar, elementType, ArraY); #define cast4Darray(workingVar, elementType, ArraY) \ elementType(*workingVar)[(ArraY)->dim2][(ArraY)->dim3][(ArraY)->dim4] = \ - (elementType(*)[(ArraY)->dim2][(ArraY)->dim3][(ArraY)->dim4])((ArraY) + 1); + (elementType(*)[(ArraY)->dim2][(ArraY)->dim3][(ArraY)->dim4])((ArraY)->data); -#define allocCast4D(workingVar, elementType, ArraY, dim1, dim2, dim3, dim4) \ - CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, dim3, dim4); \ +#define allocCast4D(workingVar, elementType, ArraY, dim1, dim2, dim3, dim4, resizeAllowed) \ + CheckArrAllocated(workingVar, elementType, ArraY, dim1, dim2, dim3, dim4, resizeAllowed); \ cast4Darray(workingVar, elementType, ArraY); #define clearArray(ArraY, elementType) \ - memset((ArraY) + 1, \ + memset((ArraY)->data, \ 0, \ sizeof(elementType) * (ArraY)->dim1 * max((ArraY)->dim2, 1) * max((ArraY)->dim3, 1) * max((ArraY)->dim4, 1)) diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index bcc4e29a6e..bfbcbd981f 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -229,9 +229,9 @@ typedef struct { typedef struct { //! estimated received spatial signal power (linear) - unsigned int rx_spatial_power[NB_ANTENNAS_TX][NB_ANTENNAS_RX]; + fourDimArray_t * rx_spatial_power; //! estimated received spatial signal power (dB) - unsigned int rx_spatial_power_dB[NB_ANTENNAS_TX][NB_ANTENNAS_RX]; + fourDimArray_t * rx_spatial_power_dB; //! estimated rssi (dBm) int rx_rssi_dBm; //! estimated correlation (wideband linear) between spatial channels (computed in dlsch_demodulation) diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 24cacd092f..0b37171aac 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -631,7 +631,8 @@ void fill_ul_rb_mask(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) { nfapi_nr_srs_pdu_t *srs_pdu = &srs->srs_pdu; for(int symbol = 0; symbol<(1<num_symbols); symbol++) { for(rb = srs_pdu->bwp_start; rb < (srs_pdu->bwp_start+srs_pdu->bwp_size); rb++) { - gNB->rb_mask_ul[gNB->frame_parms.symbols_per_slot-srs_pdu->time_start_position-1+symbol][rb>>5] |= 1<<(rb&31); + gNB->rb_mask_ul[gNB->frame_parms.symbols_per_slot - srs_pdu->time_start_position - 1 + symbol][rb >> 5] |= 1U + << (rb & 31); } } } diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index adc5a013e6..b953c287ac 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -341,9 +341,6 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ int slot = scheduled_response->slot; // Note: we have to handle the thread IDs for this. To be revisited completely. - NR_UE_DLSCH_t *dlsch0 = &((nr_phy_data_t *)scheduled_response->phy_data)->dlsch[0]; - NR_UE_ULSCH_t *ulsch = &((nr_phy_data_tx_t *)scheduled_response->phy_data)->ulsch; - NR_UE_PUCCH *pucch_vars = &((nr_phy_data_tx_t *)scheduled_response->phy_data)->pucch_vars; NR_UE_CSI_IM *csiim_vars = PHY_vars_UE_g[module_id][cc_id]->csiim_vars[0]; NR_UE_CSI_RS *csirs_vars = PHY_vars_UE_g[module_id][cc_id]->csirs_vars[0]; NR_UE_PDCCH_CONFIG *phy_pdcch_config = NULL; @@ -384,27 +381,30 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ memcpy((void*)&(csirs_vars->csirs_config_pdu), (void*)csirs_config_pdu, sizeof(fapi_nr_dl_config_csirs_pdu_rel15_t)); csirs_vars->active = true; break; - case FAPI_NR_DL_CONFIG_TYPE_RA_DLSCH: + case FAPI_NR_DL_CONFIG_TYPE_RA_DLSCH: { dlsch_config_pdu = &dl_config->dl_config_list[i].dlsch_config_pdu.dlsch_config_rel15; + NR_UE_DLSCH_t *dlsch0 = &((nr_phy_data_t *)scheduled_response->phy_data)->dlsch[0]; dlsch0->rnti_type = _RA_RNTI_; dlsch0->dlsch_config = *dlsch_config_pdu; configure_dlsch(dlsch0, PHY_vars_UE_g[module_id][cc_id]->dl_harq_processes[0], dlsch_config_pdu, module_id, dl_config->dl_config_list[i].dlsch_config_pdu.rnti); - break; - case FAPI_NR_DL_CONFIG_TYPE_SI_DLSCH: + } break; + case FAPI_NR_DL_CONFIG_TYPE_SI_DLSCH: { dlsch_config_pdu = &dl_config->dl_config_list[i].dlsch_config_pdu.dlsch_config_rel15; + NR_UE_DLSCH_t *dlsch0 = &((nr_phy_data_t *)scheduled_response->phy_data)->dlsch[0]; dlsch0->rnti_type = _SI_RNTI_; dlsch0->dlsch_config = *dlsch_config_pdu; configure_dlsch(dlsch0, PHY_vars_UE_g[module_id][cc_id]->dl_harq_processes[0], dlsch_config_pdu, module_id, dl_config->dl_config_list[i].dlsch_config_pdu.rnti); - break; - case FAPI_NR_DL_CONFIG_TYPE_DLSCH: + } break; + case FAPI_NR_DL_CONFIG_TYPE_DLSCH: { dlsch_config_pdu = &dl_config->dl_config_list[i].dlsch_config_pdu.dlsch_config_rel15; + NR_UE_DLSCH_t *dlsch0 = &((nr_phy_data_t *)scheduled_response->phy_data)->dlsch[0]; dlsch0->rnti_type = _C_RNTI_; dlsch0->dlsch_config = *dlsch_config_pdu; configure_dlsch(dlsch0, PHY_vars_UE_g[module_id][cc_id]->dl_harq_processes[0], dlsch_config_pdu, module_id, dl_config->dl_config_list[i].dlsch_config_pdu.rnti); - break; + } break; } } dl_config->number_pdus = 0; @@ -435,90 +435,136 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ fapi_nr_ul_config_srs_pdu *srs_config_pdu; switch (pdu_type){ + case FAPI_NR_UL_CONFIG_TYPE_PUSCH: { + // pusch config pdu + pusch_config_pdu = &ul_config->ul_config_list[i].pusch_config_pdu; + current_harq_pid = pusch_config_pdu->pusch_data.harq_process_id; + NR_UL_UE_HARQ_t *harq_process_ul_ue = &PHY_vars_UE_g[module_id][cc_id]->ul_harq_processes[current_harq_pid]; + NR_UE_ULSCH_t *ulsch = &((nr_phy_data_tx_t *)scheduled_response->phy_data)->ulsch; + nfapi_nr_ue_pusch_pdu_t *pusch_pdu = &ulsch->pusch_pdu; - case (FAPI_NR_UL_CONFIG_TYPE_PUSCH): - // pusch config pdu - pusch_config_pdu = &ul_config->ul_config_list[i].pusch_config_pdu; - current_harq_pid = pusch_config_pdu->pusch_data.harq_process_id; - NR_UL_UE_HARQ_t *harq_process_ul_ue = &PHY_vars_UE_g[module_id][cc_id]->ul_harq_processes[current_harq_pid]; + LOG_D(PHY, + "In %s i %d: copy pusch_config_pdu nrOfLayers:%d, num_dmrs_cdm_grps_no_data:%d \n", + __FUNCTION__, + i, + pusch_config_pdu->nrOfLayers, + pusch_config_pdu->num_dmrs_cdm_grps_no_data); - nfapi_nr_ue_pusch_pdu_t *pusch_pdu = &ulsch->pusch_pdu; + memcpy(pusch_pdu, pusch_config_pdu, sizeof(nfapi_nr_ue_pusch_pdu_t)); + if (scheduled_response->tx_request) { + for (int j = 0; j < scheduled_response->tx_request->number_of_pdus; j++) { + fapi_nr_tx_request_body_t *tx_req_body = &scheduled_response->tx_request->tx_request_body[j]; + if ((tx_req_body->pdu_index == i) && (tx_req_body->pdu_length > 0)) { + LOG_D(PHY, + "%d.%d Copying %d bytes to harq_process_ul_ue->a (harq_pid %d)\n", + scheduled_response->frame, + slot, + tx_req_body->pdu_length, + current_harq_pid); + memcpy(harq_process_ul_ue->a, tx_req_body->pdu, tx_req_body->pdu_length); + break; + } + } - LOG_D(PHY, "In %s i %d: copy pusch_config_pdu nrOfLayers:%d, num_dmrs_cdm_grps_no_data:%d \n", __FUNCTION__, i, pusch_config_pdu->nrOfLayers,pusch_config_pdu->num_dmrs_cdm_grps_no_data); + harq_process_ul_ue->status = ACTIVE; + ul_config->ul_config_list[i].pdu_type = FAPI_NR_UL_CONFIG_TYPE_DONE; // not handle it any more + pdu_done++; + LOG_D(PHY, + "%d.%d ul A ul_config %p t %d pdu_done %d number_pdus %d\n", + scheduled_response->frame, + slot, + ul_config, + pdu_type, + pdu_done, + ul_config->number_pdus); - memcpy(pusch_pdu, pusch_config_pdu, sizeof(nfapi_nr_ue_pusch_pdu_t)); - if (scheduled_response->tx_request) { - for (int j=0; jtx_request->number_of_pdus; j++) { - fapi_nr_tx_request_body_t *tx_req_body = &scheduled_response->tx_request->tx_request_body[j]; - if ((tx_req_body->pdu_index == i) && (tx_req_body->pdu_length > 0)) { - LOG_D(PHY,"%d.%d Copying %d bytes to harq_process_ul_ue->a (harq_pid %d)\n",scheduled_response->frame,slot,tx_req_body->pdu_length,current_harq_pid); - memcpy(harq_process_ul_ue->a, tx_req_body->pdu, tx_req_body->pdu_length); + } else { + LOG_E(PHY, "[phy_procedures_nrUE_TX] harq_process_ul_ue is NULL !!\n"); + return -1; + } + } break; + + case FAPI_NR_UL_CONFIG_TYPE_PUCCH: { + NR_UE_PUCCH *pucch_vars = &((nr_phy_data_tx_t *)scheduled_response->phy_data)->pucch_vars; + found = false; + pucch_config_pdu = &ul_config->ul_config_list[i].pucch_config_pdu; + for (int j = 0; j < 2; j++) { + if (pucch_vars->active[j] == false) { + LOG_D(PHY, "%d.%d Copying pucch pdu to UE PHY\n", scheduled_response->frame, slot); + memcpy((void *)&(pucch_vars->pucch_pdu[j]), (void *)pucch_config_pdu, sizeof(fapi_nr_ul_config_pucch_pdu)); + pucch_vars->active[j] = true; + found = true; + ul_config->ul_config_list[i].pdu_type = FAPI_NR_UL_CONFIG_TYPE_DONE; // not handle it any more + pdu_done++; + LOG_D(PHY, + "%d.%d ul A ul_config %p t %d pdu_done %d number_pdus %d\n", + scheduled_response->frame, + slot, + ul_config, + pdu_type, + pdu_done, + ul_config->number_pdus); break; } } + if (!found) + LOG_E(PHY, "Couldn't find allocation for PUCCH PDU in PUCCH VARS\n"); + } break; - harq_process_ul_ue->status = ACTIVE; + case FAPI_NR_UL_CONFIG_TYPE_PRACH: + // prach config pdu + prach_config_pdu = &ul_config->ul_config_list[i].prach_config_pdu; + memcpy((void *)&(PHY_vars_UE_g[module_id][cc_id]->prach_vars[gNB_id]->prach_pdu), + (void *)prach_config_pdu, + sizeof(fapi_nr_ul_config_prach_pdu)); + PHY_vars_UE_g[module_id][cc_id]->prach_vars[gNB_id]->active = true; ul_config->ul_config_list[i].pdu_type = FAPI_NR_UL_CONFIG_TYPE_DONE; // not handle it any more pdu_done++; - LOG_D(PHY, "%d.%d ul A ul_config %p t %d pdu_done %d number_pdus %d\n", scheduled_response->frame, slot, ul_config, pdu_type, pdu_done, ul_config->number_pdus); + LOG_D(PHY, + "%d.%d ul A ul_config %p t %d pdu_done %d number_pdus %d\n", + scheduled_response->frame, + slot, + ul_config, + pdu_type, + pdu_done, + ul_config->number_pdus); + break; - } else { + case FAPI_NR_UL_CONFIG_TYPE_DONE: + pdu_done++; // count the no of pdu processed + LOG_D(PHY, + "%d.%d ul A ul_config %p t %d pdu_done %d number_pdus %d\n", + scheduled_response->frame, + slot, + ul_config, + pdu_type, + pdu_done, + ul_config->number_pdus); + break; - LOG_E(PHY, "[phy_procedures_nrUE_TX] harq_process_ul_ue is NULL !!\n"); - return -1; + case FAPI_NR_UL_CONFIG_TYPE_SRS: + // srs config pdu + srs_config_pdu = &ul_config->ul_config_list[i].srs_config_pdu; + memcpy((void *)&(PHY_vars_UE_g[module_id][cc_id]->srs_vars[gNB_id]->srs_config_pdu), + (void *)srs_config_pdu, + sizeof(fapi_nr_ul_config_srs_pdu)); + PHY_vars_UE_g[module_id][cc_id]->srs_vars[gNB_id]->active = true; + ul_config->ul_config_list[i].pdu_type = FAPI_NR_UL_CONFIG_TYPE_DONE; // not handle it any more + pdu_done++; + break; - } - - break; - - case (FAPI_NR_UL_CONFIG_TYPE_PUCCH): - found = false; - pucch_config_pdu = &ul_config->ul_config_list[i].pucch_config_pdu; - for(int j=0; j<2; j++) { - if(pucch_vars->active[j] == false) { - LOG_D(PHY,"%d.%d Copying pucch pdu to UE PHY\n",scheduled_response->frame,slot); - memcpy((void*)&(pucch_vars->pucch_pdu[j]), (void*)pucch_config_pdu, sizeof(fapi_nr_ul_config_pucch_pdu)); - pucch_vars->active[j] = true; - found = true; - ul_config->ul_config_list[i].pdu_type = FAPI_NR_UL_CONFIG_TYPE_DONE; // not handle it any more - pdu_done++; - LOG_D(PHY, "%d.%d ul A ul_config %p t %d pdu_done %d number_pdus %d\n", scheduled_response->frame, slot, ul_config, pdu_type, pdu_done, ul_config->number_pdus); - break; - } - } - if (!found) - LOG_E(PHY, "Couldn't find allocation for PUCCH PDU in PUCCH VARS\n"); - break; - - case (FAPI_NR_UL_CONFIG_TYPE_PRACH): - // prach config pdu - prach_config_pdu = &ul_config->ul_config_list[i].prach_config_pdu; - memcpy((void*)&(PHY_vars_UE_g[module_id][cc_id]->prach_vars[gNB_id]->prach_pdu), (void*)prach_config_pdu, sizeof(fapi_nr_ul_config_prach_pdu)); - PHY_vars_UE_g[module_id][cc_id]->prach_vars[gNB_id]->active = true; - ul_config->ul_config_list[i].pdu_type = FAPI_NR_UL_CONFIG_TYPE_DONE; // not handle it any more - pdu_done++; - LOG_D(PHY, "%d.%d ul A ul_config %p t %d pdu_done %d number_pdus %d\n", scheduled_response->frame, slot, ul_config, pdu_type, pdu_done, ul_config->number_pdus); - break; - - case (FAPI_NR_UL_CONFIG_TYPE_DONE): - pdu_done++; // count the no of pdu processed - LOG_D(PHY, "%d.%d ul A ul_config %p t %d pdu_done %d number_pdus %d\n", scheduled_response->frame, slot, ul_config, pdu_type, pdu_done, ul_config->number_pdus); - break; - - case (FAPI_NR_UL_CONFIG_TYPE_SRS): - // srs config pdu - srs_config_pdu = &ul_config->ul_config_list[i].srs_config_pdu; - memcpy((void*)&(PHY_vars_UE_g[module_id][cc_id]->srs_vars[gNB_id]->srs_config_pdu), (void*)srs_config_pdu, sizeof(fapi_nr_ul_config_srs_pdu)); - PHY_vars_UE_g[module_id][cc_id]->srs_vars[gNB_id]->active = true; - ul_config->ul_config_list[i].pdu_type = FAPI_NR_UL_CONFIG_TYPE_DONE; // not handle it any more - pdu_done++; - break; - - default: - ul_config->ul_config_list[i].pdu_type = FAPI_NR_UL_CONFIG_TYPE_DONE; // not handle it any more - pdu_done++; // count the no of pdu processed - LOG_D(PHY, "%d.%d ul A ul_config %p t %d pdu_done %d number_pdus %d\n", scheduled_response->frame, slot, ul_config, pdu_type, pdu_done, ul_config->number_pdus); - break; + default: + ul_config->ul_config_list[i].pdu_type = FAPI_NR_UL_CONFIG_TYPE_DONE; // not handle it any more + pdu_done++; // count the no of pdu processed + LOG_D(PHY, + "%d.%d ul A ul_config %p t %d pdu_done %d number_pdus %d\n", + scheduled_response->frame, + slot, + ul_config, + pdu_type, + pdu_done, + ul_config->number_pdus); + break; } } diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index 664cddcfdf..470d5fd627 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -544,7 +544,7 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, if (!(NR_MAX_NB_LAYERS>4)) { NR_UE_DLSCH_t *dlsch0 = &dlsch[0]; int harq_pid = dlsch0->dlsch_config.harq_process_nbr; - NR_DL_UE_HARQ_t *dlsch0_harq = ue->dl_harq_processes[harq_pid]; + NR_DL_UE_HARQ_t *dlsch0_harq = &ue->dl_harq_processes[0][harq_pid]; uint16_t BWPStart = dlsch0->dlsch_config.BWPStart; uint16_t pdsch_start_rb = dlsch0->dlsch_config.start_rb; uint16_t pdsch_nb_rb = dlsch0->dlsch_config.number_rbs; diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index 9a49802909..f3c2352084 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -53,8 +53,7 @@ #include "executables/lte-softmodem.h" #include "common/ran_context.h" #include "PHY/LTE_ESTIMATION/lte_estimation.h" -#include "openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h" - +#include "openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h" const char *__asan_default_options() { /* don't do leak checking in ulsim, not finished yet */ @@ -806,7 +805,7 @@ int main(int argc, char **argv) { if (cqi_flag == 1) coded_bits_per_codeword-=UE->ulsch[0]->O; - rate = (double)dlsch_tbs25[get_I_TBS(mcs)][nb_rb - 1] / (coded_bits_per_codeword); + rate = (double)TBStable[get_I_TBS(mcs)][nb_rb - 1] / (coded_bits_per_codeword); printf("Rate = %f (mod %d), coded bits %u\n",rate,get_Qm_ul(mcs),coded_bits_per_codeword); for (ch_realization=0; ch_realizationframe_parms,frame_parms,sizeof(NR_DL_FRAME_PARMS)); UE->frame_parms.nb_antennas_rx = n_rx; + UE->frame_parms.nb_antenna_ports_gNB = n_tx; UE->max_ldpc_iterations = max_ldpc_iterations; if (run_initial_sync==1) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 3c4fe6c2ee..8899dc5918 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -2609,6 +2609,7 @@ uint8_t get_ssb_rsrp_payload(NR_UE_MAC_INST_t *mac, int ssbri_bits = ceil(log2(nb_ssb)); int ssb_rsrp[2][nb_meas]; // the array contains index and RSRP of each SSB to be reported (nb_meas highest RSRPs) + memset(ssb_rsrp, 0, sizeof(ssb_rsrp)); //TODO replace the following 2 lines with a function to order the nb_meas highest SSB RSRPs for (int i=0; ibyte = 0; encoder->bit = 0; - encoder->buffer = buffer; + encoder->buffer = (unsigned char *)buffer; encoder->size = size; } diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_pdu.h b/openair2/LAYER2/nr_rlc/nr_rlc_pdu.h index 8e9872522f..0f5cd6c6d0 100644 --- a/openair2/LAYER2/nr_rlc/nr_rlc_pdu.h +++ b/openair2/LAYER2/nr_rlc/nr_rlc_pdu.h @@ -71,7 +71,7 @@ int nr_rlc_pdu_decoder_get_bits(nr_rlc_pdu_decoder_t *decoder, int count); typedef struct { int byte; /* next byte to encode */ int bit; /* next bit in next byte to encode */ - char *buffer; + unsigned char *buffer; int size; } nr_rlc_pdu_encoder_t; diff --git a/openair3/NAS/COMMON/EMM/MSG/FGSUplinkNasTransport.c b/openair3/NAS/COMMON/EMM/MSG/FGSUplinkNasTransport.c index d94df434b2..741ec095c3 100644 --- a/openair3/NAS/COMMON/EMM/MSG/FGSUplinkNasTransport.c +++ b/openair3/NAS/COMMON/EMM/MSG/FGSUplinkNasTransport.c @@ -55,9 +55,11 @@ int encode_fgs_payload_container(FGSPayloadContainer *paycontainer, uint8_t iei, encoded += encode_result; } if(iei > 0){ - *(uint16_t*) (buffer+1) = htons(encoded - 3); + uint16_t tmp = htons(encoded - 3); + memcpy(buffer + 1, &tmp, sizeof(tmp)); } else { - *(uint16_t*) (buffer) = htons(encoded - 2); + uint16_t tmp = htons(encoded - 2); + memcpy(buffer, &tmp, sizeof(tmp)); } return encoded; diff --git a/openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.c b/openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.c index ddda52e5f7..72dedb3f7a 100644 --- a/openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.c +++ b/openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.c @@ -35,14 +35,18 @@ void capture_pdu_session_establishment_accept_msg(uint8_t *buffer, uint32_t msg_ pdu_session_establishment_accept_msg_t psea_msg; sec_nas_hdr.epd = *(buffer + (offset++)); sec_nas_hdr.sht = *(buffer + (offset++)); - sec_nas_hdr.mac = htonl(*(uint32_t *)(buffer + offset)); + uint32_t tmp; + memcpy(&tmp, buffer + offset, sizeof(tmp)); + sec_nas_hdr.mac = htonl(tmp); offset+=sizeof(sec_nas_hdr.mac); sec_nas_hdr.sqn = *(buffer + (offset++)); sec_nas_msg.epd = *(buffer + (offset++)); sec_nas_msg.sht = *(buffer + (offset++)); sec_nas_msg.msg_type = *(buffer + (offset++)); sec_nas_msg.payload_type = *(buffer + (offset++)); - sec_nas_msg.payload_len = htons(*(uint16_t *)(buffer + offset)); + uint16_t tmp16; + memcpy(&tmp16, buffer + offset, sizeof(tmp16)); + sec_nas_msg.payload_len = htons(tmp16); offset+=sizeof(sec_nas_msg.payload_len); /* Mandatory Presence IEs */ psea_msg.epd = *(buffer + (offset++)); @@ -51,12 +55,14 @@ void capture_pdu_session_establishment_accept_msg(uint8_t *buffer, uint32_t msg_ psea_msg.msg_type = *(buffer + (offset++)); psea_msg.pdu_type = *(buffer + offset) & 0x0f; psea_msg.ssc_mode = (*(buffer + (offset++)) & 0xf0) >> 4; - psea_msg.qos_rules.length = htons(*(uint16_t *)(buffer + offset)); + memcpy(&tmp16, buffer + offset, sizeof(tmp16)); + psea_msg.qos_rules.length = htons(tmp16); offset+=sizeof(psea_msg.qos_rules.length); /* Supports the capture of only one QoS Rule, it should be changed for multiple QoS Rules */ qos_rule_t qos_rule; qos_rule.id = *(buffer + (offset++)); - qos_rule.length = htons(*(uint16_t *)(buffer + offset)); + memcpy(&tmp16, buffer + offset, sizeof(tmp16)); + qos_rule.length = htons(tmp16); offset+=sizeof(qos_rule.length); qos_rule.oc = (*(buffer + offset) & 0xE0) >> 5; qos_rule.dqr = (*(buffer + offset) & 0x10) >> 4; diff --git a/openair3/NAS/COMMON/IES/FGCNasMessageContainer.c b/openair3/NAS/COMMON/IES/FGCNasMessageContainer.c index 874f61e7b3..4e8de951a5 100644 --- a/openair3/NAS/COMMON/IES/FGCNasMessageContainer.c +++ b/openair3/NAS/COMMON/IES/FGCNasMessageContainer.c @@ -76,7 +76,8 @@ int encode_fgc_nas_message_container(FGCNasMessageContainer *nasmessagecontainer if ((encode_result = encode_octet_string(&nasmessagecontainer->nasmessagecontainercontents, buffer + encoded, len - encoded)) < 0) { return encode_result; } else { - *(uint16_t*) (buffer+1) = htons(encoded + encode_result - 3); + uint16_t tmp = htons(encoded + encode_result - 3); + memcpy(buffer + 1, &tmp, sizeof(tmp)); encoded += encode_result; } diff --git a/openair3/NAS/COMMON/IES/FGSMobileIdentity.c b/openair3/NAS/COMMON/IES/FGSMobileIdentity.c index 872fc8e53c..ea877481e6 100644 --- a/openair3/NAS/COMMON/IES/FGSMobileIdentity.c +++ b/openair3/NAS/COMMON/IES/FGSMobileIdentity.c @@ -53,8 +53,9 @@ int decode_5gs_mobile_identity(FGSMobileIdentity *fgsmobileidentity, uint8_t iei CHECK_IEI_DECODER(iei, *buffer); decoded++; } - - ielen = *(uint16_t*)(buffer + decoded); /* length is two bytes */ + uint16_t tmp; + memcpy(&tmp, buffer + decoded, sizeof(tmp)); + ielen = (uint8_t)tmp; decoded += 2; CHECK_LENGTH_DECODER(len - decoded, ielen); @@ -106,9 +107,11 @@ int encode_5gs_mobile_identity(FGSMobileIdentity *fgsmobileidentity, uint8_t iei } if(iei > 0){ - *(uint16_t*) (buffer+1) = htons(encoded + encoded_rc - 3); + uint16_t tmp = htons(encoded + encoded_rc - 3); + memcpy(buffer + 1, &tmp, sizeof(tmp)); } else { - *(uint16_t*) buffer = htons(encoded + encoded_rc - 2); + uint16_t tmp = htons(encoded + encoded_rc - 2); + memcpy(buffer, &tmp, sizeof(tmp)); } return (encoded + encoded_rc); diff --git a/openair3/NAS/COMMON/UTIL/TLVDecoder.h b/openair3/NAS/COMMON/UTIL/TLVDecoder.h index e8dce87d8d..941cbd850b 100644 --- a/openair3/NAS/COMMON/UTIL/TLVDecoder.h +++ b/openair3/NAS/COMMON/UTIL/TLVDecoder.h @@ -41,9 +41,13 @@ vALUE = ntohl(*(uint32_t*)(bUFFER)) >> 8; \ sIZE += sizeof(uint8_t) + sizeof(uint16_t) -#define DECODE_U32(bUFFER, vALUE, sIZE) \ - vALUE = ntohl(*(uint32_t*)(bUFFER)); \ - sIZE += sizeof(uint32_t) +#define DECODE_U32(bUFFER, vALUE, sIZE) \ + { \ + uint32_t v; \ + memcpy(&v, bUFFER, sizeof(v)); \ + vALUE = ntohl(v); \ + } \ + sIZE += sizeof(uint32_t) #if (BYTE_ORDER == LITTLE_ENDIAN) # define DECODE_LENGTH_U16(bUFFER, vALUE, sIZE) \ diff --git a/openair3/NAS/COMMON/UTIL/TLVEncoder.h b/openair3/NAS/COMMON/UTIL/TLVEncoder.h index df5b58a07f..a46de3fbba 100644 --- a/openair3/NAS/COMMON/UTIL/TLVEncoder.h +++ b/openair3/NAS/COMMON/UTIL/TLVEncoder.h @@ -36,9 +36,12 @@ *(uint32_t*)(buffer) = htonl(value); \ size += sizeof(uint8_t) + sizeof(uint16_t) -#define ENCODE_U32(buffer, value, size) \ - *(uint32_t*)(buffer) = htonl(value); \ - size += sizeof(uint32_t) +#define ENCODE_U32(buffer, value, size) \ + { \ + uint32_t tmp = htonl(value); \ + memcpy(buffer, &tmp, sizeof(tmp)); \ + } \ + size += sizeof(uint32_t) #define IES_ENCODE_U8(buffer, encoded, value) \ ENCODE_U8(buffer + encoded, value, encoded) diff --git a/openair3/NAS/NR_UE/nr_nas_msg_sim.c b/openair3/NAS/NR_UE/nr_nas_msg_sim.c index e20a0fc99e..e57e3800de 100644 --- a/openair3/NAS/NR_UE/nr_nas_msg_sim.c +++ b/openair3/NAS/NR_UE/nr_nas_msg_sim.c @@ -883,7 +883,9 @@ uint8_t get_msg_type(uint8_t *pdu_buffer, uint32_t length) { msg_type = ((mm_msg_header_t *)(pdu_buffer + offset))->message_type; if (msg_type == FGS_DOWNLINK_NAS_TRANSPORT) { - msg_type = ((dl_nas_transport_t *)(pdu_buffer+ offset))->sm_nas_msg_header.message_type; + dl_nas_transport_t tmp; + memcpy(&tmp, pdu_buffer + offset, sizeof(tmp)); + msg_type = tmp.sm_nas_msg_header.message_type; } } } else { // plain 5GS NAS message From 3b429c5399248bfe495f1bf934202a89d77767e1 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 20 Apr 2023 08:37:11 +0200 Subject: [PATCH 10/13] Fix uninitialized variable warning --- openair1/PHY/CODING/TESTBENCH/polartest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/PHY/CODING/TESTBENCH/polartest.c b/openair1/PHY/CODING/TESTBENCH/polartest.c index 72762ba441..7c1534ca51 100644 --- a/openair1/PHY/CODING/TESTBENCH/polartest.c +++ b/openair1/PHY/CODING/TESTBENCH/polartest.c @@ -127,7 +127,7 @@ int main(int argc, char *argv[]) time_t currentTime; char fileName[512], currentTimeInfo[25]; char folderName[] = "."; - FILE *logFile; + FILE *logFile = NULL; /*folderName=getenv("HOME"); strcat(folderName,"/Desktop/polartestResults");*/ From 8f85851a95a2bae16f81087f30a0f12979c3a3b4 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 19 Apr 2023 22:16:06 +0200 Subject: [PATCH 11/13] Remove clang from physim Dockerfile clang (at least version 14.0.6 used on the cluster) is very slow when compiling both ASan and UBSan into the binary. We therefore move clang out, into a separate file in a later commit --- docker/Dockerfile.phySim.rhel8.2 | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docker/Dockerfile.phySim.rhel8.2 b/docker/Dockerfile.phySim.rhel8.2 index ad0944f02b..57896df573 100644 --- a/docker/Dockerfile.phySim.rhel8.2 +++ b/docker/Dockerfile.phySim.rhel8.2 @@ -31,16 +31,14 @@ RUN rm -Rf /oai-ran WORKDIR /oai-ran COPY . . -#only install address sanitizer and LLVM (clang, ...) for this container, the others don't need it -RUN yum install -y libasan llvm-toolset +#only install address sanitizer for this container, the others don't need it +RUN yum install -y libasan #run build_oai to build the target image RUN /bin/sh oaienv && \ cd cmake_targets && \ mkdir -p log && \ - export CC=/usr/bin/clang && \ - export CXX=/usr/bin/clang++ && \ - ./build_oai --phy_simulators --gNB --eNB --nrUE --UE --ninja --verbose-ci --sanitize-address --noavx512 -c --cmake-opt -DCMAKE_C_FLAGS=-Werror --cmake-opt -DCMAKE_CXX_FLAGS=-Werror + ./build_oai --phy_simulators --ninja --verbose-ci --sanitize-address --noavx512 -c --cmake-opt -DCMAKE_C_FLAGS=-Werror --cmake-opt -DCMAKE_CXX_FLAGS=-Werror #start from scratch for target executable FROM registry.access.redhat.com/ubi8/ubi:latest as oai-physim From d12e67b0bc8e57b17d9e7e77e07030b8595ed33b Mon Sep 17 00:00:00 2001 From: laurent Date: Mon, 17 Apr 2023 09:32:31 +0200 Subject: [PATCH 12/13] Enable undefined behavior sanitizer in physim image --- docker/Dockerfile.phySim.rhel8.2 | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docker/Dockerfile.phySim.rhel8.2 b/docker/Dockerfile.phySim.rhel8.2 index 57896df573..df1e5af51c 100644 --- a/docker/Dockerfile.phySim.rhel8.2 +++ b/docker/Dockerfile.phySim.rhel8.2 @@ -31,14 +31,14 @@ RUN rm -Rf /oai-ran WORKDIR /oai-ran COPY . . -#only install address sanitizer for this container, the others don't need it -RUN yum install -y libasan +#only install address and undefined behavior sanitizer for this container, the others don't need it +RUN yum install -y libasan libubsan #run build_oai to build the target image RUN /bin/sh oaienv && \ cd cmake_targets && \ mkdir -p log && \ - ./build_oai --phy_simulators --ninja --verbose-ci --sanitize-address --noavx512 -c --cmake-opt -DCMAKE_C_FLAGS=-Werror --cmake-opt -DCMAKE_CXX_FLAGS=-Werror + ./build_oai --phy_simulators --ninja --verbose-ci --sanitize --noavx512 -c --cmake-opt -DCMAKE_C_FLAGS=-Werror --cmake-opt -DCMAKE_CXX_FLAGS=-Werror #start from scratch for target executable FROM registry.access.redhat.com/ubi8/ubi:latest as oai-physim @@ -87,6 +87,7 @@ COPY --from=phy-sim-build \ /lib64/libexslt.so.0 \ /lib64/libxslt.so.1 \ /usr/lib64/libasan.so.5 \ + /usr/lib64/libubsan.so.1 \ /oai-ran/cmake_targets/ran_build/build/libdfts.so \ /oai-ran/cmake_targets/ran_build/build/libldpc.so \ /oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \ From 62a5c4996c6d9f265a945a6e838053e8d85b5dd2 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 19 Apr 2023 22:26:43 +0200 Subject: [PATCH 13/13] Add clang build on OpenShift Cluster Add Dockerfile, OpenShift build config, and OpenShift image stream, to compile OAI using clang, notably to get compiler warnings and keep it OAI compilable using clang. --- ci-scripts/cls_cluster.py | 11 +++++++-- docker/Dockerfile.clang.rhel8.2 | 43 +++++++++++++++++++++++++++++++++ openshift/oai-clang-bc.yaml | 39 ++++++++++++++++++++++++++++++ openshift/oai-clang-is.yaml | 30 +++++++++++++++++++++++ 4 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 docker/Dockerfile.clang.rhel8.2 create mode 100644 openshift/oai-clang-bc.yaml create mode 100644 openshift/oai-clang-is.yaml diff --git a/ci-scripts/cls_cluster.py b/ci-scripts/cls_cluster.py index 487e203d36..d5586dee88 100644 --- a/ci-scripts/cls_cluster.py +++ b/ci-scripts/cls_cluster.py @@ -273,11 +273,18 @@ class Cluster: ranbuild_job = self._start_build('ran-build') attemptedImages += ['ran-build'] - wait = ranbuild_job is not None and physim_job is not None and self._wait_build_end([ranbuild_job, physim_job], 1200) - if not wait: logging.error('error during build of ranbuild_job or physim_job') + self._recreate_is_tag('oai-clang', imageTag, 'openshift/oai-clang-is.yaml') + self._recreate_bc('oai-clang', imageTag, 'openshift/oai-clang-bc.yaml') + self._retag_image_statement('ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.clang.rhel8.2') + clang_job = self._start_build('oai-clang') + attemptedImages += ['oai-clang'] + + wait = ranbuild_job is not None and physim_job is not None and clang_job is not None and self._wait_build_end([ranbuild_job, physim_job, clang_job], 1200) + if not wait: logging.error('error during build of ranbuild_job or physim_job or clang_job') status = status and wait self.cmd.run(f'oc logs {ranbuild_job} &> cmake_targets/log/ran-build.log') self.cmd.run(f'oc logs {physim_job} &> cmake_targets/log/oai-physim.log') + self.cmd.run(f'oc logs {clang_job} &> cmake_targets/log/oai-clang.log') self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log', '\$', 10) if status: diff --git a/docker/Dockerfile.clang.rhel8.2 b/docker/Dockerfile.clang.rhel8.2 new file mode 100644 index 0000000000..11ead620ee --- /dev/null +++ b/docker/Dockerfile.clang.rhel8.2 @@ -0,0 +1,43 @@ +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ +#--------------------------------------------------------------------- +# +# Dockerfile for the Open-Air-Interface BUILD service +# Valid for RHEL8 +# +#--------------------------------------------------------------------- + +FROM ran-base:latest AS oai-clang + +RUN rm -Rf /oai-ran +WORKDIR /oai-ran +COPY . . + +#only install LLVM (clang, ...) for this container, the others don't need it +RUN yum install -y llvm-toolset + +#run build_oai to build the target image +RUN /bin/sh oaienv && \ + cd cmake_targets && \ + mkdir -p log && \ + export CC=/usr/bin/clang && \ + export CXX=/usr/bin/clang++ && \ + ./build_oai --phy_simulators --gNB --eNB --nrUE --UE --ninja --verbose-ci --noavx512 -c --cmake-opt -DCMAKE_C_FLAGS=-Werror --cmake-opt -DCMAKE_CXX_FLAGS=-Werror diff --git a/openshift/oai-clang-bc.yaml b/openshift/oai-clang-bc.yaml new file mode 100644 index 0000000000..f882df8700 --- /dev/null +++ b/openshift/oai-clang-bc.yaml @@ -0,0 +1,39 @@ +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ +#--------------------------------------------------------------------- + +kind: BuildConfig +apiVersion: build.openshift.io/v1 +metadata: + name: "oai-clang" +spec: + runPolicy: "Serial" + nodeSelector: + kubernetes.io/hostname: theseus + source: + type: "Binary" + strategy: + dockerStrategy: + dockerfilePath: "docker/Dockerfile.clang.rhel8.2" + output: + to: + kind: "ImageStreamTag" + name: "oai-clang:latest" diff --git a/openshift/oai-clang-is.yaml b/openshift/oai-clang-is.yaml new file mode 100644 index 0000000000..d1d4c477f4 --- /dev/null +++ b/openshift/oai-clang-is.yaml @@ -0,0 +1,30 @@ +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ +#--------------------------------------------------------------------- +# +apiVersion: image.openshift.io/v1 +kind: ImageStream +metadata: + name: oai-clang + namespace: oaicicd-ran +spec: + lookupPolicy: + local: true