diff --git a/ci-scripts/cls_cluster.py b/ci-scripts/cls_cluster.py index 9e0988c323..72d76d7083 100644 --- a/ci-scripts/cls_cluster.py +++ b/ci-scripts/cls_cluster.py @@ -332,11 +332,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/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/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/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/docker/Dockerfile.phySim.rhel8.2 b/docker/Dockerfile.phySim.rhel8.2 index ad0944f02b..df1e5af51c 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 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 && \ - 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 --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 @@ -89,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 \ 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");*/ diff --git a/openair1/PHY/CODING/crc_byte.c b/openair1/PHY/CODING/crc_byte.c index 604c316093..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 short crc16Table[256]; -static unsigned short crc12Table[256]; -static unsigned short crc11Table[256]; -static unsigned char crc8Table[256]; -static unsigned char 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) = { @@ -131,11 +129,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, @@ -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/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; /** 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 0addfdf14c..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] |= (7<<((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] |= (0xf<<((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_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/LTE_UE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c index 9e646bd793..54633fbc18 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c @@ -4706,7 +4706,8 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF, } if (rb_alloc_ind==1) { - *pmi_ext = (pmi>>((rb>>2)<<1))&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 bf2466d2f2..a26a1d0574 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c +++ b/openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c @@ -146,7 +146,19 @@ 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, + 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, + 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; @@ -166,7 +178,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 +194,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); @@ -218,30 +230,31 @@ 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; 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++){ - ulsch_measurements->rx_spatial_power[aatx][aarx] = + 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 (ulsch_measurements->rx_spatial_power[aatx][aarx] < 0) { - ulsch_measurements->rx_spatial_power[aatx][aarx] = 0; + if (rx_spatial_power[aatx][aarx] < 0) { + rx_spatial_power[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[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_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); + 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 = (__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]; + 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; - }*/ - } //RE loop, second part + /* 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 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 bb213c595b..0b83222732 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c @@ -1905,7 +1905,12 @@ 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, + false); 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 +1923,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_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/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c b/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c index 78dc616d07..be1515072d 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c @@ -88,6 +88,21 @@ 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_antenna_ports_gNB, + frame_parms->nb_antennas_rx, + 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, + false); + // signal measurements for (gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++){ @@ -98,15 +113,14 @@ 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++){ + 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; - 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/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 3079e5029c..e584d9f492 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,79 @@ extern "C" { int64_t i; } c64_t; + typedef struct { + int dim1; + 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) + { + 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_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, 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)->data); + +#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)->data); + +#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)->data); + +#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)->data); + +#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)->data, \ + 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..bfbcbd981f 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; @@ -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) @@ -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/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/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/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/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index a0286ad719..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) @@ -1372,16 +1373,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/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<= 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 df45199006..ddc453de9c 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 @@ -200,7 +200,7 @@ double __attribute__ ((no_sanitize_address)) gaussZiggurat(double mean, double v } 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 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/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/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 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 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