diff --git a/openair1/PHY/CODING/crc_byte.c b/openair1/PHY/CODING/crc_byte.c
index b16850b7fb4a17e4a848db1b00641b6d6804d25c..6176e1f92f06ce6c40b461a579482b7ae91bd5b1 100644
--- a/openair1/PHY/CODING/crc_byte.c
+++ b/openair1/PHY/CODING/crc_byte.c
@@ -255,48 +255,6 @@ unsigned int crcPayload(unsigned char * inptr, int bitlen, uint32_t* crc256Table
         return crc;
 }
 
-void nr_crc_computation(uint8_t* input, uint8_t* output, uint16_t payloadBits, uint16_t crcParityBits, uint32_t* crc256Table)
-{
-        //Create payload in bit
-        uint8_t* input2 = (uint8_t*)malloc(payloadBits); //divided by 8 (in bits) 
-        uint8_t mask = 128; // 10000000
-        
-        for(uint8_t ind=0; ind<(payloadBits/8); ind++)
-        {
-                input2[ind]=0;
-                for(uint8_t ind2=0; ind2<8; ind2++)
-                { 
-                        if(input[8*ind+ind2])
-                        {
-                                input2[ind] = input2[ind] | mask;
-                        }
-                        mask= mask >> 1;
-                }
-                mask=128;
-        }
-
-        //crcTable256Init(poly);
-
-        unsigned int crcBits;   
-        crcBits = crcPayload(input2, payloadBits, crc256Table);
-	
-        //create crc in byte
-        unsigned int mask2=0x80000000; //100...
-        
-        for(uint8_t ind=0; ind<crcParityBits; ind++)
-        {
-                if(crcBits & mask2)
-                        output[ind]=1;
-                else
-                        output[ind]=0;
-
-		mask2 = mask2 >> 1;
-        }
-      
-}
-
-
-
 
 
 #ifdef DEBUG_CRC
diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_crc_byte.c b/openair1/PHY/CODING/nrPolar_tools/nr_crc_byte.c
index 7b5a1c922ae42c034020ff6419c0e75d09ef50e1..ef329b3aaa73cde95d51616cc48a1a2955cb86f5 100644
--- a/openair1/PHY/CODING/nrPolar_tools/nr_crc_byte.c
+++ b/openair1/PHY/CODING/nrPolar_tools/nr_crc_byte.c
@@ -21,132 +21,7 @@
 
 #include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
 
-/*
-// ----- New implementation ----
-uint32_t poly6 = 0x84000000; // 10000100000... -> D^6+D^5+1
-uint32_t poly11 = 0xc4200000; //11000100001000... -> D^11+D^10+D^9+D^5+1
-uint32_t poly16 = 0x10210000; //00100000010000100... - > D^16+D^12+D^5+1
-uint32_t poly24a = 0x864cfb00; //100001100100110011111011 -> 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; //100000000000000001100011 -> D^24+D^23+D^6+D^5+D+1
-uint32_t poly24c = 0xB2B11700; //101100101011000100010111 -> D^24...
-
-//static unsigned int crc256Table[256];
-
-void nr_crc_computation(uint8_t* input, uint8_t* output, uint16_t payloadBits, uint16_t crcParityBits, uint32_t* crc256Table)
-{
-	//Create payload in bit
-	uint8_t* input2 = (uint8_t*)malloc(payloadBits); //divided by 8 (in bits) 
-        uint8_t mask = 128; // 10000000
-	
-        for(uint8_t ind=0; ind<(payloadBits/8); ind++)
-        {
-		input2[ind]=0;
-                for(uint8_t ind2=0; ind2<8; ind2++)
-                { 
-                        if(input[8*ind+ind2])
-                        {
-                                input2[ind] = input2[ind] | mask;
-                        }
-                        mask= mask >> 1;
-	        }
-                mask=128;
-        }
-
-        //crcTable256Init(poly);
-
-	unsigned int crcBits;	
-	crcBits = crcPayload(input2, payloadBits, crc256Table);
-
-	//create crc in byte
-	unsigned int mask2=0x80000000; //100...
-	output = (uint8_t*)malloc(sizeof(uint8_t)*crcParityBits);
-
-	for(uint8_t ind=0; ind<crcParityBits; ind++)
-        {
-		if(crcBits & mask2)
-			output[ind]=1;
-		else
-			output[ind]=0;
-
-		mask2 = mask2 >> 1;
-	}
-      
-}
-
-unsigned int crcbit (unsigned char* inputptr, int octetlen, unsigned int poly)
-{
-	unsigned int i, crc = 0, c;
-
-  	while (octetlen-- > 0) {
-    		c = (*inputptr++) << 24;
-	
-    		for (i = 8; i != 0; i--) {
-      			if ((1 << 31) & (c ^ crc))
-        			crc = (crc << 1) ^ poly;
-      			else
-        			crc <<= 1;
-
-      			c <<= 1;
-    		}
-  	}
-	
-  	return crc;
-}
-
-void crcTableInit (void)
-{	
-	unsigned char c = 0;
-
-	do {
-    	       	crc6Table[c] = crcbit(&c, 1, poly6);
-        	crc11Table[c]= crcbit(&c, 1, poly11);
-		crc16Table[c] =crcbit(&c, 1, poly16);
-		crc24aTable[c]=crcbit(&c, 1, poly24a);
-		crc24bTable[c]=crcbit(&c, 1, poly24b);
-		crc24cTable[c]=crcbit(&c, 1, poly24c);
-
-	} while (++c);
-}
-
-void crcTable256Init (uint32_t poly, uint32_t* crc256Table)
-{
-        unsigned char c = 0;
-//	crc256Table = malloc(sizeof(uint32_t)*256);
-
-        do {
-		crc256Table[c] = crcbit(&c, 1, poly);
-
-//                crc6Table[c] = crcbit(&c, 1, poly6);
-  //              crc11Table[c]= crcbit(&c, 1, poly11);
-//                crc16Table[c] =crcbit(&c, 1, poly16);
-//                crc24aTable[c]=crcbit(&c, 1, poly24a);
-//                crc24bTable[c]=crcbit(&c, 1, poly24b);
-//                crc24cTable[c]=crcbit(&c, 1, poly24c);
 
-        } while (++c);
-
-	//return crc256Table;
-}
-
-unsigned int crcPayload(unsigned char * inptr, int bitlen, uint32_t* crc256Table)
-{
-	int octetlen, resbit;
-        unsigned int crc = 0;
-        octetlen = bitlen/8; // Change in bytes
-        resbit = (bitlen % 8);
-
-        while (octetlen-- > 0)
-        {
-                crc = (crc << 8) ^ crc256Table[(*inptr++) ^ (crc >> 24)];
-        }
-
-        if (resbit > 0)
-        {
-                crc = (crc << resbit) ^ crc256Table[((*inptr) >> (8 - resbit)) ^ (crc >> (32 - resbit))];
-        }
-        return crc;
-}
-*/
 // ----- Old implementation ----
 uint8_t **crc24c_generator_matrix(uint16_t payloadSizeBits){
 
diff --git a/openair1/PHY/INIT/init_top.c b/openair1/PHY/INIT/init_top.c
index e64eda740ca0a9bd8b73335392373e5728c62da4..956e473f673246dd05940a33b8537a642e66a113 100644
--- a/openair1/PHY/INIT/init_top.c
+++ b/openair1/PHY/INIT/init_top.c
@@ -72,6 +72,7 @@ void init_lte_top(LTE_DL_FRAME_PARMS *frame_parms)
 
   init_dfts();
 
+  crcTableInit();
 
   phy_generate_viterbi_tables_lte();
 
diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c
index 2d5ccaedeb1f661c17eb268c1eee7d73f364ea1e..a67645eef422ee7acc1dba19cd4fff772e2b300b 100644
--- a/openair1/PHY/INIT/nr_init.c
+++ b/openair1/PHY/INIT/nr_init.c
@@ -115,6 +115,10 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
         );*/
   LOG_D(PHY,"[MSC_NEW][FRAME 00000][PHY_gNB][MOD %02"PRIu8"][]\n", gNB->Mod_id);
 
+  crcTableInit();
+
+  init_dfts();
+  
   // PBCH DMRS gold sequences generation
   nr_init_pbch_dmrs(gNB);
   // Polar encoder init for PBCH
diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c
index c1d6399e46839adbe35a2343e15a3801b8aba135..dfbbb25d06f065d4c420d321872c5e854a4e4dea 100644
--- a/openair1/PHY/INIT/nr_init_ue.c
+++ b/openair1/PHY/INIT/nr_init_ue.c
@@ -947,6 +947,8 @@ void phy_init_nr_top(PHY_VARS_NR_UE *ue)
 
   crcTableInit();
 
+  init_dfts();
+  
   ccodedot11_init();
   ccodedot11_init_inv();
 
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
deleted file mode 100644
index 4020056e6f68043a591f4792c287202e49a76ab0..0000000000000000000000000000000000000000
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
+++ /dev/null
@@ -1,748 +0,0 @@
-/*
- * 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
- */
-
-/*! \file PHY/LTE_TRANSPORT/dlsch_decoding.c
-* \brief Top-level routines for decoding  Turbo-coded (DLSCH) transport channels from 36-212, V8.6 2009-03
-* \author R. Knopp
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr
-* \note
-* \warning
-*/
-
-//#include "defs.h"
-#include "PHY/defs.h"
-#include "PHY/extern.h"
-#include "PHY/CODING/extern.h"
-#include "SCHED/extern.h"
-#include "SIMULATION/TOOLS/defs.h"
-//#define DEBUG_DLSCH_DECODING
-//#define UE_DEBUG_TRACE 1
-
-
-void free_ue_dlsch(LTE_UE_DLSCH_t *dlsch)
-{
-
-  int i,r;
-
-  if (dlsch) {
-    for (i=0; i<dlsch->Mdlharq; i++) {
-      if (dlsch->harq_processes[i]) {
-        if (dlsch->harq_processes[i]->b) {
-          free16(dlsch->harq_processes[i]->b,MAX_DLSCH_PAYLOAD_BYTES);
-          dlsch->harq_processes[i]->b = NULL;
-        }
-
-        for (r=0; r<MAX_NUM_DLSCH_SEGMENTS; r++) {
-          free16(dlsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+768);
-          dlsch->harq_processes[i]->c[r] = NULL;
-        }
-
-        for (r=0; r<MAX_NUM_DLSCH_SEGMENTS; r++)
-          if (dlsch->harq_processes[i]->d[r]) {
-            free16(dlsch->harq_processes[i]->d[r],((3*8*6144)+12+96)*sizeof(short));
-            dlsch->harq_processes[i]->d[r] = NULL;
-          }
-
-        free16(dlsch->harq_processes[i],sizeof(LTE_DL_UE_HARQ_t));
-        dlsch->harq_processes[i] = NULL;
-      }
-    }
-
-    free16(dlsch,sizeof(LTE_UE_DLSCH_t));
-    dlsch = NULL;
-  }
-}
-
-LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_t max_turbo_iterations,uint8_t N_RB_DL, uint8_t abstraction_flag)
-{
-
-  LTE_UE_DLSCH_t *dlsch;
-  uint8_t exit_flag = 0,i,r;
-
-  unsigned char bw_scaling =1;
-
-  switch (N_RB_DL) {
-  case 6:
-    bw_scaling =16;
-    break;
-
-  case 25:
-    bw_scaling =4;
-    break;
-
-  case 50:
-    bw_scaling =2;
-    break;
-
-  default:
-    bw_scaling =1;
-    break;
-  }
-
-  dlsch = (LTE_UE_DLSCH_t *)malloc16(sizeof(LTE_UE_DLSCH_t));
-
-  if (dlsch) {
-    memset(dlsch,0,sizeof(LTE_UE_DLSCH_t));
-    dlsch->Kmimo = Kmimo;
-    dlsch->Mdlharq = Mdlharq;
-    dlsch->Nsoft = Nsoft;
-    dlsch->max_turbo_iterations = max_turbo_iterations;
-
-    for (i=0; i<Mdlharq; i++) {
-      //      printf("new_ue_dlsch: Harq process %d\n",i);
-      dlsch->harq_processes[i] = (LTE_DL_UE_HARQ_t *)malloc16(sizeof(LTE_DL_UE_HARQ_t));
-
-      if (dlsch->harq_processes[i]) {
-        memset(dlsch->harq_processes[i],0,sizeof(LTE_DL_UE_HARQ_t));
-        dlsch->harq_processes[i]->first_tx=1;
-        dlsch->harq_processes[i]->b = (uint8_t*)malloc16(MAX_DLSCH_PAYLOAD_BYTES/bw_scaling);
-
-        if (dlsch->harq_processes[i]->b)
-          memset(dlsch->harq_processes[i]->b,0,MAX_DLSCH_PAYLOAD_BYTES/bw_scaling);
-        else
-          exit_flag=3;
-
-        if (abstraction_flag == 0) {
-          for (r=0; r<MAX_NUM_DLSCH_SEGMENTS/bw_scaling; r++) {
-            dlsch->harq_processes[i]->c[r] = (uint8_t*)malloc16(((r==0)?8:0) + 3+ 768);
-
-            if (dlsch->harq_processes[i]->c[r])
-              memset(dlsch->harq_processes[i]->c[r],0,((r==0)?8:0) + 3+ 768);
-            else
-              exit_flag=2;
-
-            dlsch->harq_processes[i]->d[r] = (short*)malloc16(((3*8*6144)+12+96)*sizeof(short));
-
-            if (dlsch->harq_processes[i]->d[r])
-              memset(dlsch->harq_processes[i]->d[r],0,((3*8*6144)+12+96)*sizeof(short));
-            else
-              exit_flag=2;
-          }
-        }
-      } else {
-        exit_flag=1;
-      }
-    }
-
-    if (exit_flag==0)
-      return(dlsch);
-  }
-
-  printf("new_ue_dlsch with size %zu: exit_flag = %u\n",sizeof(LTE_DL_UE_HARQ_t), exit_flag);
-  free_ue_dlsch(dlsch);
-
-  return(NULL);
-}
-
-uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
-                         short *dlsch_llr,
-                         LTE_DL_FRAME_PARMS *frame_parms,
-                         LTE_UE_DLSCH_t *dlsch,
-                         LTE_DL_UE_HARQ_t *harq_process,
-                         uint32_t frame,
-                         uint8_t subframe,
-                         uint8_t harq_pid,
-                         uint8_t is_crnti,
-                         uint8_t llr8_flag)
-{
-
-#if UE_TIMING_TRACE
-  time_stats_t *dlsch_rate_unmatching_stats=&phy_vars_ue->dlsch_rate_unmatching_stats;
-  time_stats_t *dlsch_turbo_decoding_stats=&phy_vars_ue->dlsch_turbo_decoding_stats;
-  time_stats_t *dlsch_deinterleaving_stats=&phy_vars_ue->dlsch_deinterleaving_stats;
-#endif
-  uint32_t A,E;
-  uint32_t G;
-  uint32_t ret,offset;
-  uint16_t iind;
-  //  uint8_t dummy_channel_output[(3*8*block_length)+12];
-  short dummy_w[MAX_NUM_DLSCH_SEGMENTS][3*(6144+64)];
-  uint32_t r,r_offset=0,Kr,Kr_bytes,err_flag=0;
-  uint8_t crc_type;
-#ifdef DEBUG_DLSCH_DECODING
-  uint16_t i;
-#endif
-  //#ifdef __AVX2__
-#if 0
-  int Kr_last,skipped_last=0;
-  uint8_t (*tc_2cw)(int16_t *y,
-		    int16_t *y2,
-		    uint8_t *,
-		    uint8_t *,
-		    uint16_t,
-		    uint16_t,
-		    uint16_t,
-		    uint8_t,
-		    uint8_t,
-		    uint8_t,
-		    time_stats_t *,
-		    time_stats_t *,
-		    time_stats_t *,
-		    time_stats_t *,
-		    time_stats_t *,
-		    time_stats_t *,
-		    time_stats_t *);
-
-#endif
-decoder_if_t tc;
-
-
-
-
-  if (!dlsch_llr) {
-    printf("dlsch_decoding.c: NULL dlsch_llr pointer\n");
-    return(dlsch->max_turbo_iterations);
-  }
-
-  if (!harq_process) {
-    printf("dlsch_decoding.c: NULL harq_process pointer\n");
-    return(dlsch->max_turbo_iterations);
-  }
-
-  if (!frame_parms) {
-    printf("dlsch_decoding.c: NULL frame_parms pointer\n");
-    return(dlsch->max_turbo_iterations);
-  }
-
-  if (subframe>9) {
-    printf("dlsch_decoding.c: Illegal subframe index %d\n",subframe);
-    return(dlsch->max_turbo_iterations);
-  }
-
-  if (dlsch->harq_ack[subframe].ack != 2) {
-    LOG_D(PHY, "[UE %d] DLSCH @ SF%d : ACK bit is %d instead of DTX even before PDSCH is decoded!\n",
-        phy_vars_ue->Mod_id, subframe, dlsch->harq_ack[subframe].ack);
-  }
-
-  if (llr8_flag == 0) {
-    //#ifdef __AVX2__
-#if 0
-    tc_2cw = phy_threegpplte_turbo_decoder16avx2;
-#endif
-    tc = decoder16;
-  }
-  else
-  {
-	  AssertFatal (harq_process->TBS >= 256 , "Mismatch flag nbRB=%d TBS=%d mcs=%d Qm=%d RIV=%d round=%d \n",
-			  harq_process->nb_rb, harq_process->TBS,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round);
-	    tc = decoder8;
-  }
-
-
-  //  nb_rb = dlsch->nb_rb;
-
-  /*
-  if (nb_rb > frame_parms->N_RB_DL) {
-    printf("dlsch_decoding.c: Illegal nb_rb %d\n",nb_rb);
-    return(max_turbo_iterations);
-    }*/
-
-  /*harq_pid = dlsch->current_harq_pid[phy_vars_ue->current_thread_id[subframe]];
-  if (harq_pid >= 8) {
-    printf("dlsch_decoding.c: Illegal harq_pid %d\n",harq_pid);
-    return(max_turbo_iterations);
-  }
-  */
-
-  harq_process->trials[harq_process->round]++;
-
-  A = harq_process->TBS; //2072 for QPSK 1/3
-
-  ret = dlsch->max_turbo_iterations;
-
-
-  G = harq_process->G;
-  //get_G(frame_parms,nb_rb,dlsch->rb_alloc,mod_order,num_pdcch_symbols,phy_vars_ue->frame,subframe);
-
-  //  printf("DLSCH Decoding, harq_pid %d Ndi %d\n",harq_pid,harq_process->Ndi);
-
-  if (harq_process->round == 0) {
-    // This is a new packet, so compute quantities regarding segmentation
-    harq_process->B = A+24;
-    lte_segmentation(NULL,
-                     NULL,
-                     harq_process->B,
-                     &harq_process->C,
-                     &harq_process->Cplus,
-                     &harq_process->Cminus,
-                     &harq_process->Kplus,
-                     &harq_process->Kminus,
-                     &harq_process->F);
-    //  CLEAR LLR's HERE for first packet in process
-  }
-
-  /*
-  else {
-    printf("dlsch_decoding.c: Ndi>0 not checked yet!!\n");
-    return(max_turbo_iterations);
-  }
-  */
-  err_flag = 0;
-  r_offset = 0;
-
-  unsigned char bw_scaling =1;
-
-  switch (frame_parms->N_RB_DL) {
-  case 6:
-    bw_scaling =16;
-    break;
-
-  case 25:
-    bw_scaling =4;
-    break;
-
-  case 50:
-    bw_scaling =2;
-    break;
-
-  default:
-    bw_scaling =1;
-    break;
-  }
-
-  if (harq_process->C > MAX_NUM_DLSCH_SEGMENTS/bw_scaling) {
-    LOG_E(PHY,"Illegal harq_process->C %d > %d\n",harq_process->C,MAX_NUM_DLSCH_SEGMENTS/bw_scaling);
-    return((1+dlsch->max_turbo_iterations));
-  }
-#ifdef DEBUG_DLSCH_DECODING
-  printf("Segmentation: C %d, Cminus %d, Kminus %d, Kplus %d\n",harq_process->C,harq_process->Cminus,harq_process->Kminus,harq_process->Kplus);
-#endif
-
-  opp_enabled=1;
-
-  for (r=0; r<harq_process->C; r++) {
-
-
-    // Get Turbo interleaver parameters
-    if (r<harq_process->Cminus)
-      Kr = harq_process->Kminus;
-    else
-      Kr = harq_process->Kplus;
-
-    Kr_bytes = Kr>>3;
-
-    if (Kr_bytes<=64)
-      iind = (Kr_bytes-5);
-    else if (Kr_bytes <=128)
-      iind = 59 + ((Kr_bytes-64)>>1);
-    else if (Kr_bytes <= 256)
-      iind = 91 + ((Kr_bytes-128)>>2);
-    else if (Kr_bytes <= 768)
-      iind = 123 + ((Kr_bytes-256)>>3);
-    else {
-      printf("dlsch_decoding: Illegal codeword size %d!!!\n",Kr_bytes);
-      return(dlsch->max_turbo_iterations);
-    }
-
-#ifdef DEBUG_DLSCH_DECODING
-    printf("f1 %d, f2 %d, F %d\n",f1f2mat_old[2*iind],f1f2mat_old[1+(2*iind)],(r==0) ? harq_process->F : 0);
-#endif
-
-#if UE_TIMING_TRACE
-    start_meas(dlsch_rate_unmatching_stats);
-#endif
-    memset(&dummy_w[r][0],0,3*(6144+64)*sizeof(short));
-    harq_process->RTC[r] = generate_dummy_w(4+(Kr_bytes*8),
-                                            (uint8_t*) &dummy_w[r][0],
-                                            (r==0) ? harq_process->F : 0);
-
-#ifdef DEBUG_DLSCH_DECODING
-    LOG_D(PHY,"HARQ_PID %d Rate Matching Segment %d (coded bits %d,unpunctured/repeated bits %d, TBS %d, mod_order %d, nb_rb %d, Nl %d, rv %d, round %d)...\n",
-          harq_pid,r, G,
-          Kr*3,
-          harq_process->TBS,
-          harq_process->Qm,
-          harq_process->nb_rb,
-          harq_process->Nl,
-          harq_process->rvidx,
-          harq_process->round);
-#endif
-
-#ifdef DEBUG_DLSCH_DECODING
-    printf(" in decoding dlsch->harq_processes[harq_pid]->rvidx = %d\n", dlsch->harq_processes[harq_pid]->rvidx);
-#endif
-    if (lte_rate_matching_turbo_rx(harq_process->RTC[r],
-                                   G,
-                                   harq_process->w[r],
-                                   (uint8_t*)&dummy_w[r][0],
-                                   dlsch_llr+r_offset,
-                                   harq_process->C,
-                                   dlsch->Nsoft,
-                                   dlsch->Mdlharq,
-                                   dlsch->Kmimo,
-                                   harq_process->rvidx,
-                                   (harq_process->round==0)?1:0,
-                                   harq_process->Qm,
-                                   harq_process->Nl,
-                                   r,
-                                   &E)==-1) {
-#if UE_TIMING_TRACE
-      stop_meas(dlsch_rate_unmatching_stats);
-#endif
-      LOG_E(PHY,"dlsch_decoding.c: Problem in rate_matching\n");
-      return(dlsch->max_turbo_iterations);
-    } else
-    {
-#if UE_TIMING_TRACE
-      stop_meas(dlsch_rate_unmatching_stats);
-#endif
-    }
-    r_offset += E;
-
-    /*
-    printf("Subblock deinterleaving, d %p w %p\n",
-     harq_process->d[r],
-     harq_process->w);
-    */
-#if UE_TIMING_TRACE
-    start_meas(dlsch_deinterleaving_stats);
-#endif
-    sub_block_deinterleaving_turbo(4+Kr,
-                                   &harq_process->d[r][96],
-
-                                   harq_process->w[r]);
-#if UE_TIMING_TRACE
-    stop_meas(dlsch_deinterleaving_stats);
-#endif
-#ifdef DEBUG_DLSCH_DECODING
-    /*
-    if (r==0) {
-              write_output("decoder_llr.m","decllr",dlsch_llr,G,1,0);
-              write_output("decoder_in.m","dec",&harq_process->d[0][96],(3*8*Kr_bytes)+12,1,0);
-    }
-
-    printf("decoder input(segment %d) :",r);
-    int i; for (i=0;i<(3*8*Kr_bytes)+12;i++)
-      printf("%d : %d\n",i,harq_process->d[r][96+i]);
-      printf("\n");*/
-#endif
-
-
-    //    printf("Clearing c, %p\n",harq_process->c[r]);
-    memset(harq_process->c[r],0,Kr_bytes);
-
-    //    printf("done\n");
-    if (harq_process->C == 1)
-      crc_type = CRC24_A;
-    else
-      crc_type = CRC24_B;
-
-    /*
-    printf("decoder input(segment %d)\n",r);
-    for (i=0;i<(3*8*Kr_bytes)+12;i++)
-      if ((harq_process->d[r][96+i]>7) ||
-    (harq_process->d[r][96+i] < -8))
-    printf("%d : %d\n",i,harq_process->d[r][96+i]);
-    printf("\n");
-    */
-
-    //#ifndef __AVX2__
-#if 1
-    if (err_flag == 0) {
-/*
-        LOG_I(PHY, "turbo algo Kr=%d cb_cnt=%d C=%d nbRB=%d crc_type %d TBSInput=%d TBSHarq=%d TBSplus24=%d mcs=%d Qm=%d RIV=%d round=%d maxIter %d\n",
-                            Kr,r,harq_process->C,harq_process->nb_rb,crc_type,A,harq_process->TBS,
-                            harq_process->B,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round,dlsch->max_turbo_iterations);
-*/
-    	if (llr8_flag) {
-    		AssertFatal (Kr >= 256, "turbo algo issue Kr=%d cb_cnt=%d C=%d nbRB=%d TBSInput=%d TBSHarq=%d TBSplus24=%d mcs=%d Qm=%d RIV=%d round=%d\n",
-    				Kr,r,harq_process->C,harq_process->nb_rb,A,harq_process->TBS,harq_process->B,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round);
-    	}
-#if UE_TIMING_TRACE
-        start_meas(dlsch_turbo_decoding_stats);
-#endif
-      LOG_D(PHY,"AbsSubframe %d.%d Start turbo segment %d/%d \n",frame%1024,subframe,r,harq_process->C-1);
-      ret = tc
-            (&harq_process->d[r][96],
-             NULL,
-             harq_process->c[r],
-             NULL,
-             Kr,
-             f1f2mat_old[iind*2],
-             f1f2mat_old[(iind*2)+1],
-             dlsch->max_turbo_iterations,
-             crc_type,
-             (r==0) ? harq_process->F : 0,
-             &phy_vars_ue->dlsch_tc_init_stats,
-             &phy_vars_ue->dlsch_tc_alpha_stats,
-             &phy_vars_ue->dlsch_tc_beta_stats,
-             &phy_vars_ue->dlsch_tc_gamma_stats,
-             &phy_vars_ue->dlsch_tc_ext_stats,
-             &phy_vars_ue->dlsch_tc_intl1_stats,
-             &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
-
-#if UE_TIMING_TRACE
-      stop_meas(dlsch_turbo_decoding_stats);
-#endif
-    }
-#else
-    if ((harq_process->C == 1) ||
-	((r==harq_process->C-1) && (skipped_last==0))) { // last segment with odd number of segments
-
-#if UE_TIMING_TRACE
-        start_meas(dlsch_turbo_decoding_stats);
-#endif
-      ret = tc
-            (&harq_process->d[r][96],
-             harq_process->c[r],
-             Kr,
-             f1f2mat_old[iind*2],
-             f1f2mat_old[(iind*2)+1],
-             dlsch->max_turbo_iterations,
-             crc_type,
-             (r==0) ? harq_process->F : 0,
-             &phy_vars_ue->dlsch_tc_init_stats,
-             &phy_vars_ue->dlsch_tc_alpha_stats,
-             &phy_vars_ue->dlsch_tc_beta_stats,
-             &phy_vars_ue->dlsch_tc_gamma_stats,
-             &phy_vars_ue->dlsch_tc_ext_stats,
-             &phy_vars_ue->dlsch_tc_intl1_stats,
-             &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
- #if UE_TIMING_TRACE
-      stop_meas(dlsch_turbo_decoding_stats);
-#endif
-      //      printf("single decode, exit\n");
-      //      exit(-1);
-    }
-    else {
-    // we can merge code segments
-      if ((skipped_last == 0) && (r<harq_process->C-1)) {
-	skipped_last = 1;
-	Kr_last = Kr;
-      }
-      else {
-	skipped_last=0;
-
-	if (Kr_last == Kr) { // decode 2 code segments with AVX2 version
-#ifdef DEBUG_DLSCH_DECODING
-	  printf("single decoding segment %d (%p)\n",r-1,&harq_process->d[r-1][96]);
-#endif
-#if UE_TIMING_TRACE
-	  start_meas(dlsch_turbo_decoding_stats);
-#endif
-#ifdef DEBUG_DLSCH_DECODING
-	  printf("double decoding segments %d,%d (%p,%p)\n",r-1,r,&harq_process->d[r-1][96],&harq_process->d[r][96]);
-#endif
-	  ret = tc_2cw
-            (&harq_process->d[r-1][96],
-	     &harq_process->d[r][96],
-             harq_process->c[r-1],
-             harq_process->c[r],
-             Kr,
-             f1f2mat_old[iind*2],
-             f1f2mat_old[(iind*2)+1],
-             dlsch->max_turbo_iterations,
-             crc_type,
-             (r==0) ? harq_process->F : 0,
-             &phy_vars_ue->dlsch_tc_init_stats,
-             &phy_vars_ue->dlsch_tc_alpha_stats,
-             &phy_vars_ue->dlsch_tc_beta_stats,
-             &phy_vars_ue->dlsch_tc_gamma_stats,
-             &phy_vars_ue->dlsch_tc_ext_stats,
-             &phy_vars_ue->dlsch_tc_intl1_stats,
-             &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
-	  /*
-	  ret = tc
-            (&harq_process->d[r-1][96],
-             harq_process->c[r-1],
-             Kr_last,
-             f1f2mat_old[iind*2],
-             f1f2mat_old[(iind*2)+1],
-             dlsch->max_turbo_iterations,
-             crc_type,
-             (r==0) ? harq_process->F : 0,
-             &phy_vars_ue->dlsch_tc_init_stats,
-             &phy_vars_ue->dlsch_tc_alpha_stats,
-             &phy_vars_ue->dlsch_tc_beta_stats,
-             &phy_vars_ue->dlsch_tc_gamma_stats,
-             &phy_vars_ue->dlsch_tc_ext_stats,
-             &phy_vars_ue->dlsch_tc_intl1_stats,
-             &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
-
-	     exit(-1);*/
-#if UE_TIMING_TRACE
-      stop_meas(dlsch_turbo_decoding_stats);
-#endif
-	}
-	else { // Kr_last != Kr
-#if UE_TIMING_TRACE
-	  start_meas(dlsch_turbo_decoding_stats);
-#endif
-	  ret = tc
-            (&harq_process->d[r-1][96],
-             harq_process->c[r-1],
-             Kr_last,
-             f1f2mat_old[iind*2],
-             f1f2mat_old[(iind*2)+1],
-             dlsch->max_turbo_iterations,
-             crc_type,
-             (r==0) ? harq_process->F : 0,
-             &phy_vars_ue->dlsch_tc_init_stats,
-             &phy_vars_ue->dlsch_tc_alpha_stats,
-             &phy_vars_ue->dlsch_tc_beta_stats,
-             &phy_vars_ue->dlsch_tc_gamma_stats,
-             &phy_vars_ue->dlsch_tc_ext_stats,
-             &phy_vars_ue->dlsch_tc_intl1_stats,
-             &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
-#if UE_TIMING_TRACE
-      stop_meas(dlsch_turbo_decoding_stats);
-
-	  start_meas(dlsch_turbo_decoding_stats);
-#endif
-
-	  ret = tc
-            (&harq_process->d[r][96],
-             harq_process->c[r],
-             Kr,
-             f1f2mat_old[iind*2],
-             f1f2mat_old[(iind*2)+1],
-             dlsch->max_turbo_iterations,
-             crc_type,
-             (r==0) ? harq_process->F : 0,
-             &phy_vars_ue->dlsch_tc_init_stats,
-             &phy_vars_ue->dlsch_tc_alpha_stats,
-             &phy_vars_ue->dlsch_tc_beta_stats,
-             &phy_vars_ue->dlsch_tc_gamma_stats,
-             &phy_vars_ue->dlsch_tc_ext_stats,
-             &phy_vars_ue->dlsch_tc_intl1_stats,
-             &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
-
-#if UE_TIMING_TRACE
-
-	  stop_meas(dlsch_turbo_decoding_stats);
-
-	  /*printf("Segmentation: C %d r %d, dlsch_rate_unmatching_stats %5.3f dlsch_deinterleaving_stats %5.3f  dlsch_turbo_decoding_stats %5.3f \n",
-              harq_process->C,
-              r,
-              dlsch_rate_unmatching_stats->p_time/(cpuf*1000.0),
-              dlsch_deinterleaving_stats->p_time/(cpuf*1000.0),
-              dlsch_turbo_decoding_stats->p_time/(cpuf*1000.0));*/
-#endif
-	}
-      }
-    }
-#endif
-
-
-    if ((err_flag == 0) && (ret>=(1+dlsch->max_turbo_iterations))) {// a Code segment is in error so break;
-      LOG_D(PHY,"AbsSubframe %d.%d CRC failed, segment %d/%d \n",frame%1024,subframe,r,harq_process->C-1);
-      err_flag = 1;
-    }
-  }
-
-  int32_t frame_rx_prev = frame;
-  int32_t subframe_rx_prev = subframe - 1;
-  if (subframe_rx_prev < 0) {
-    frame_rx_prev--;
-    subframe_rx_prev += 10;
-  }
-  frame_rx_prev = frame_rx_prev%1024;
-
-  if (err_flag == 1) {
-#if UE_DEBUG_TRACE
-    LOG_I(PHY,"[UE %d] DLSCH: Setting NAK for SFN/SF %d/%d (pid %d, status %d, round %d, TBS %d, mcs %d) Kr %d r %d harq_process->round %d\n",
-        phy_vars_ue->Mod_id, frame, subframe, harq_pid,harq_process->status, harq_process->round,harq_process->TBS,harq_process->mcs,Kr,r,harq_process->round);
-#endif
-    dlsch->harq_ack[subframe].ack = 0;
-    dlsch->harq_ack[subframe].harq_id = harq_pid;
-    dlsch->harq_ack[subframe].send_harq_status = 1;
-    harq_process->errors[harq_process->round]++;
-    harq_process->round++;
-
-
-    //    printf("Rate: [UE %d] DLSCH: Setting NACK for subframe %d (pid %d, round %d)\n",phy_vars_ue->Mod_id,subframe,harq_pid,harq_process->round);
-    if (harq_process->round >= dlsch->Mdlharq) {
-      harq_process->status = SCH_IDLE;
-      harq_process->round  = 0;
-    }
-    if(is_crnti)
-    {
-    LOG_D(PHY,"[UE %d] DLSCH: Setting NACK for subframe %d (pid %d, pid status %d, round %d/Max %d, TBS %d)\n",
-               phy_vars_ue->Mod_id,subframe,harq_pid,harq_process->status,harq_process->round,dlsch->Mdlharq,harq_process->TBS);
-    }
-
-    return((1+dlsch->max_turbo_iterations));
-  } else {
-#if UE_DEBUG_TRACE
-      LOG_I(PHY,"[UE %d] DLSCH: Setting ACK for subframe %d TBS %d mcs %d nb_rb %d\n",
-           phy_vars_ue->Mod_id,subframe,harq_process->TBS,harq_process->mcs,harq_process->nb_rb);
-#endif
-
-    harq_process->status = SCH_IDLE;
-    harq_process->round  = 0;
-    dlsch->harq_ack[subframe].ack = 1;
-    dlsch->harq_ack[subframe].harq_id = harq_pid;
-    dlsch->harq_ack[subframe].send_harq_status = 1;
-    //LOG_I(PHY,"[UE %d] DLSCH: Setting ACK for SFN/SF %d/%d (pid %d, status %d, round %d, TBS %d, mcs %d)\n",
-      //  phy_vars_ue->Mod_id, frame, subframe, harq_pid, harq_process->status, harq_process->round,harq_process->TBS,harq_process->mcs);
-
-    if(is_crnti)
-    {
-    LOG_D(PHY,"[UE %d] DLSCH: Setting ACK for subframe %d (pid %d, round %d, TBS %d)\n",phy_vars_ue->Mod_id,subframe,harq_pid,harq_process->round,harq_process->TBS);
-    }
-    //LOG_D(PHY,"[UE %d] DLSCH: Setting ACK for subframe %d (pid %d, round %d)\n",phy_vars_ue->Mod_id,subframe,harq_pid,harq_process->round);
-
-  }
-
-  // Reassembly of Transport block here
-  offset = 0;
-
-  /*
-  printf("harq_pid %d\n",harq_pid);
-  printf("F %d, Fbytes %d\n",harq_process->F,harq_process->F>>3);
-  printf("C %d\n",harq_process->C);
-  */
-  for (r=0; r<harq_process->C; r++) {
-    if (r<harq_process->Cminus)
-      Kr = harq_process->Kminus;
-    else
-      Kr = harq_process->Kplus;
-
-    Kr_bytes = Kr>>3;
-
-    //    printf("Segment %d : Kr= %d bytes\n",r,Kr_bytes);
-    if (r==0) {
-      memcpy(harq_process->b,
-             &harq_process->c[0][(harq_process->F>>3)],
-             Kr_bytes - (harq_process->F>>3)- ((harq_process->C>1)?3:0));
-      offset = Kr_bytes - (harq_process->F>>3) - ((harq_process->C>1)?3:0);
-      //            printf("copied %d bytes to b sequence (harq_pid %d)\n",
-      //          Kr_bytes - (harq_process->F>>3),harq_pid);
-      //          printf("b[0] = %x,c[%d] = %x\n",
-      //      harq_process->b[0],
-      //      harq_process->F>>3,
-      //      harq_process->c[0][(harq_process->F>>3)]);
-    } else {
-      memcpy(harq_process->b+offset,
-             harq_process->c[r],
-             Kr_bytes- ((harq_process->C>1)?3:0));
-      offset += (Kr_bytes - ((harq_process->C>1)?3:0));
-    }
-  }
-
-  dlsch->last_iteration_cnt = ret;
-
-  return(ret);
-}
-
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
deleted file mode 100644
index 6284f279d895d04590cf44ca3d792c1fcda40f47..0000000000000000000000000000000000000000
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
+++ /dev/null
@@ -1,6155 +0,0 @@
-/*
- * 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
- */
-
-/*! \file PHY/LTE_TRANSPORT/dlsch_demodulation.c
- * \brief Top-level routines for demodulating the PDSCH physical channel from 36-211, V8.6 2009-03
- * \author R. Knopp, F. Kaltenberger,A. Bhamri, S. Aubert, X. Xiang
- * \date 2011
- * \version 0.1
- * \company Eurecom
- * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr,sebastien.aubert@eurecom.fr
- * \note
- * \warning
- */
-//#include "PHY/defs.h"
-#include "PHY/extern.h"
-#include "SCHED/defs.h"
-#include "defs.h"
-#include "extern.h"
-#include "PHY/sse_intrin.h"
-#include "T.h"
-
-#define NOCYGWIN_STATIC
-
-/* dynamic shift for LLR computation for TM3/4
- * set as command line argument, see lte-softmodem.c
- * default value: 0
- */
-int16_t dlsch_demod_shift = 0;
-int16_t interf_unaw_shift = 13;
-
-//#define DEBUG_HARQ
-
-#define DEBUG_PHY 1
-//#define DEBUG_DLSCH_DEMOD 1
-
-//#define DISABLE_LOG_X
-
-// [MCS][i_mod (0,1,2) = (2,4,6)]
-unsigned char offset_mumimo_llr_drange_fix=0;
-//inferference-free case
-unsigned char interf_unaw_shift_tm4_mcs[29]={5, 3, 4, 3, 3, 2, 1, 1, 2, 0, 1, 1, 1, 1, 0, 0,
-                                             1, 1, 1, 1, 0, 2, 1, 0, 1, 0, 1, 0, 0} ;
-unsigned char interf_unaw_shift_tm1_mcs[29]={5, 5, 4, 3, 3, 3, 2, 2, 4, 4, 2, 3, 3, 3, 1, 1,
-                                             0, 1, 1, 2, 5, 4, 4, 6, 5, 1, 0, 5, 6} ; // mcs 21, 26, 28 seem to be errorneous
-
-/*
-//original values from sebastion + same hand tuning
-unsigned char offset_mumimo_llr_drange[29][3]={{8,8,8},{7,7,7},{7,7,7},{7,7,7},{6,6,6},{6,6,6},{6,6,6},{5,5,5},{4,4,4},{1,2,4}, // QPSK
-{5,5,4},{5,5,5},{5,5,5},{3,3,3},{2,2,2},{2,2,2},{2,2,2}, // 16-QAM
-{2,2,1},{3,3,3},{3,3,3},{3,3,1},{2,2,2},{2,2,2},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}; //64-QAM
-*/
- /*
- //first optimization try
- unsigned char offset_mumimo_llr_drange[29][3]={{7, 8, 7},{6, 6, 7},{6, 6, 7},{6, 6, 6},{5, 6, 6},{5, 5, 6},{5, 5, 6},{4, 5, 4},{4, 3, 4},{3, 2, 2},{6, 5, 5},{5, 4, 4},{5, 5, 4},{3, 3, 2},{2, 2, 1},{2, 1, 1},{2, 2, 2},{3, 3, 3},{3, 3, 2},{3, 3, 2},{3, 2, 1},{2, 2, 2},{2, 2, 2},{0, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0}};
- */
- //second optimization try
- /*
-   unsigned char offset_mumimo_llr_drange[29][3]={{5, 8, 7},{4, 6, 8},{3, 6, 7},{7, 7, 6},{4, 7, 8},{4, 7, 4},{6, 6, 6},{3, 6, 6},{3, 6, 6},{1, 3, 4},{1, 1, 0},{3, 3, 2},{3, 4, 1},{4, 0, 1},{4, 2, 2},{3, 1, 2},{2, 1, 0},{2, 1, 1},{1, 0, 1},{1, 0, 1},{0, 0, 0},{1, 0, 0},{0, 0, 0},{0, 1, 0},{1, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0}};  w
- */
-unsigned char offset_mumimo_llr_drange[29][3]= {{0, 6, 5},{0, 4, 5},{0, 4, 5},{0, 5, 4},{0, 5, 6},{0, 5, 3},{0, 4, 4},{0, 4, 4},{0, 3, 3},{0, 1, 2},{1, 1, 0},{1, 3, 2},{3, 4, 1},{2, 0, 0},{2, 2, 2},{1, 1, 1},{2, 1, 0},{2, 1, 1},{1, 0, 1},{1, 0, 1},{0, 0, 0},{1, 0, 0},{0, 0, 0},{0, 1, 0},{1, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0}};
-
-
-extern void print_shorts(char *s,int16_t *x);
-
-
-int rx_pdsch(PHY_VARS_UE *ue,
-             PDSCH_t type,
-             unsigned char eNB_id,
-             unsigned char eNB_id_i, //if this == ue->n_connected_eNB, we assume MU interference
-             uint32_t frame,
-             uint8_t subframe,
-             unsigned char symbol,
-             unsigned char first_symbol_flag,
-             RX_type_t rx_type,
-             unsigned char i_mod,
-             unsigned char harq_pid)
-{
-
-  LTE_UE_COMMON *common_vars  = &ue->common_vars;
-  LTE_UE_PDSCH **pdsch_vars;
-  LTE_DL_FRAME_PARMS *frame_parms    = &ue->frame_parms;
-  PHY_MEASUREMENTS *measurements = &ue->measurements;
-  LTE_UE_DLSCH_t   **dlsch;
-
-  int avg[4];
-  int avg_0[2];
-  int avg_1[2];
-
-#if UE_TIMING_TRACE
-  uint8_t slot = 0;
-#endif
-
-  unsigned char aatx,aarx;
-
-  unsigned short nb_rb = 0, round;
-  int avgs = 0, rb;
-  LTE_DL_UE_HARQ_t *dlsch0_harq,*dlsch1_harq = 0;
-
-  uint8_t beamforming_mode;
-  uint32_t *rballoc;
-
-  int32_t **rxdataF_comp_ptr;
-  int32_t **dl_ch_mag_ptr;
-  int32_t codeword_TB0 = -1;
-  int32_t codeword_TB1 = -1;
-
-
-
-  switch (type) {
-  case SI_PDSCH:
-    pdsch_vars = &ue->pdsch_vars_SI[eNB_id];
-    dlsch = &ue->dlsch_SI[eNB_id];
-    dlsch0_harq = dlsch[0]->harq_processes[harq_pid];
-    beamforming_mode  = 0;
-    break;
-
-  case RA_PDSCH:
-    pdsch_vars = &ue->pdsch_vars_ra[eNB_id];
-    dlsch = &ue->dlsch_ra[eNB_id];
-    dlsch0_harq = dlsch[0]->harq_processes[harq_pid];
-    beamforming_mode  = 0;
-    break;
-
-  case PDSCH:
-    pdsch_vars = ue->pdsch_vars[ue->current_thread_id[subframe]];
-    dlsch = ue->dlsch[ue->current_thread_id[subframe]][eNB_id];
-    //printf("status TB0 = %d, status TB1 = %d \n", dlsch[0]->harq_processes[harq_pid]->status, dlsch[1]->harq_processes[harq_pid]->status);
-    LOG_D(PHY,"AbsSubframe %d.%d / Sym %d harq_pid %d,  harq status %d.%d \n",
-                   frame,subframe,symbol,harq_pid,
-                   dlsch[0]->harq_processes[harq_pid]->status,
-                   dlsch[1]->harq_processes[harq_pid]->status);
-
-    if ((dlsch[0]->harq_processes[harq_pid]->status == ACTIVE) &&
-        (dlsch[1]->harq_processes[harq_pid]->status == ACTIVE)){
-      codeword_TB0 = dlsch[0]->harq_processes[harq_pid]->codeword;
-      codeword_TB1 = dlsch[1]->harq_processes[harq_pid]->codeword;
-      dlsch0_harq = dlsch[codeword_TB0]->harq_processes[harq_pid];
-      dlsch1_harq = dlsch[codeword_TB1]->harq_processes[harq_pid];
-#ifdef DEBUG_HARQ
-      printf("[DEMOD] I am assuming both TBs are active\n");
-#endif
-    }
-     else if ((dlsch[0]->harq_processes[harq_pid]->status == ACTIVE) &&
-              (dlsch[1]->harq_processes[harq_pid]->status != ACTIVE) ) {
-      codeword_TB0 = dlsch[0]->harq_processes[harq_pid]->codeword;
-      dlsch0_harq = dlsch[0]->harq_processes[harq_pid];
-      dlsch1_harq = NULL;
-      codeword_TB1 = -1;
-#ifdef DEBUG_HARQ
-      printf("[DEMOD] I am assuming only TB0 is active\n");
-#endif
-    }
-     else if ((dlsch[0]->harq_processes[harq_pid]->status != ACTIVE) &&
-              (dlsch[1]->harq_processes[harq_pid]->status == ACTIVE) ){
-      codeword_TB1 = dlsch[1]->harq_processes[harq_pid]->codeword;
-      dlsch0_harq  = dlsch[1]->harq_processes[harq_pid];
-      dlsch1_harq  = NULL;
-      codeword_TB0 = -1;
-#ifdef DEBUG_HARQ
-      printf("[DEMOD] I am assuming only TB1 is active, it is in cw %d\n", dlsch0_harq->codeword);
-#endif
-    }
-    else {
-      LOG_E(PHY,"[UE][FATAL] Frame %d subframe %d: no active DLSCH\n",ue->proc.proc_rxtx[0].frame_rx,subframe);
-      return(-1);
-    }
-    beamforming_mode  = ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id];
-    break;
-
-  default:
-    LOG_E(PHY,"[UE][FATAL] Frame %d subframe %d: Unknown PDSCH format %d\n",ue->proc.proc_rxtx[0].frame_rx,subframe,type);
-    return(-1);
-    break;
-  }
-#ifdef DEBUG_HARQ
-  printf("[DEMOD] MIMO mode = %d\n", dlsch0_harq->mimo_mode);
-  printf("[DEMOD] cw for TB0 = %d, cw for TB1 = %d\n", codeword_TB0, codeword_TB1);
-#endif
-
-  DevAssert(dlsch0_harq);
-  round = dlsch0_harq->round;
-  //printf("round = %d\n", round);
-
-  if (eNB_id > 2) {
-    LOG_W(PHY,"dlsch_demodulation.c: Illegal eNB_id %d\n",eNB_id);
-    return(-1);
-  }
-
-  if (!common_vars) {
-    LOG_W(PHY,"dlsch_demodulation.c: Null common_vars\n");
-    return(-1);
-  }
-
-  if (!dlsch[0]) {
-    LOG_W(PHY,"dlsch_demodulation.c: Null dlsch_ue pointer\n");
-    return(-1);
-  }
-
-  if (!pdsch_vars) {
-    LOG_W(PHY,"dlsch_demodulation.c: Null pdsch_vars pointer\n");
-    return(-1);
-  }
-
-  if (!frame_parms) {
-    LOG_W(PHY,"dlsch_demodulation.c: Null frame_parms\n");
-    return(-1);
-  }
-
-  if (((frame_parms->Ncp == NORMAL) && (symbol>=7)) ||
-      ((frame_parms->Ncp == EXTENDED) && (symbol>=6)))
-    rballoc = dlsch0_harq->rb_alloc_odd;
-  else
-    rballoc = dlsch0_harq->rb_alloc_even;
-
-
-  if (dlsch0_harq->mimo_mode>DUALSTREAM_PUSCH_PRECODING) {
-    LOG_E(PHY,"This transmission mode is not yet supported!\n");
-    return(-1);
-  }
-
-
-  if ((dlsch0_harq->mimo_mode==LARGE_CDD) || ((dlsch0_harq->mimo_mode>=DUALSTREAM_UNIFORM_PRECODING1) && (dlsch0_harq->mimo_mode<=DUALSTREAM_PUSCH_PRECODING)))  {
-    DevAssert(dlsch1_harq);
-    if (eNB_id!=eNB_id_i) {
-      LOG_E(PHY,"TM3/TM4 requires to set eNB_id==eNB_id_i!\n");
-      return(-1);
-    }
-  }
-
-#if UE_TIMING_TRACE
-  if(symbol > ue->frame_parms.symbols_per_tti>>1)
-  {
-      slot = 1;
-  }
-#endif
-
-#ifdef DEBUG_HARQ
-  printf("Demod  dlsch0_harq->pmi_alloc %d\n",  dlsch0_harq->pmi_alloc);
-#endif
-
-  if (frame_parms->nb_antenna_ports_eNB>1 && beamforming_mode==0) {
-#ifdef DEBUG_DLSCH_MOD
-    LOG_I(PHY,"dlsch: using pmi %x (%p), rb_alloc %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),dlsch[0],dlsch0_harq->rb_alloc_even[0]);
-#endif
-
-#if UE_TIMING_TRACE
-    start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
-#endif
-    nb_rb = dlsch_extract_rbs_dual(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF,
-                                   common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id],
-                                   pdsch_vars[eNB_id]->rxdataF_ext,
-                                   pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                   dlsch0_harq->pmi_alloc,
-                                   pdsch_vars[eNB_id]->pmi_ext,
-                                   rballoc,
-                                   symbol,
-                                   subframe,
-                                   ue->high_speed_flag,
-                                   frame_parms,
-                                   dlsch0_harq->mimo_mode);
-#ifdef DEBUG_DLSCH_MOD
-      printf("dlsch: using pmi %lx, rb_alloc %x, pmi_ext ",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),*rballoc);
-       for (rb=0;rb<nb_rb;rb++)
-          printf("%d",pdsch_vars[eNB_id]->pmi_ext[rb]);
-       printf("\n");
-#endif
-
-   if (rx_type >= rx_IC_single_stream) {
-      if (eNB_id_i<ue->n_connected_eNB) // we are in TM5
-      nb_rb = dlsch_extract_rbs_dual(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF,
-                                       common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id_i],
-                                       pdsch_vars[eNB_id_i]->rxdataF_ext,
-                                       pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                       dlsch0_harq->pmi_alloc,
-                                       pdsch_vars[eNB_id_i]->pmi_ext,
-                                       rballoc,
-                                       symbol,
-                                       subframe,
-                                       ue->high_speed_flag,
-                                       frame_parms,
-                                       dlsch0_harq->mimo_mode);
-      else
-        nb_rb = dlsch_extract_rbs_dual(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF,
-                                       common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id],
-                                       pdsch_vars[eNB_id_i]->rxdataF_ext,
-                                       pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                       dlsch0_harq->pmi_alloc,
-                                       pdsch_vars[eNB_id_i]->pmi_ext,
-                                       rballoc,
-                                       symbol,
-                                       subframe,
-                                       ue->high_speed_flag,
-                                       frame_parms,
-                                       dlsch0_harq->mimo_mode);
-    }
-  } else if (beamforming_mode==0) { //else if nb_antennas_ports_eNB==1 && beamforming_mode == 0
-    nb_rb = dlsch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF,
-                                     common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id],
-                                     pdsch_vars[eNB_id]->rxdataF_ext,
-                                     pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                     dlsch0_harq->pmi_alloc,
-                                     pdsch_vars[eNB_id]->pmi_ext,
-                                     rballoc,
-                                     symbol,
-                                     subframe,
-                                     ue->high_speed_flag,
-                                     frame_parms);
-
-   if (rx_type==rx_IC_single_stream) {
-     if (eNB_id_i<ue->n_connected_eNB)
-        nb_rb = dlsch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF,
-                                         common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id_i],
-                                         pdsch_vars[eNB_id_i]->rxdataF_ext,
-                                         pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                         dlsch0_harq->pmi_alloc,
-                                         pdsch_vars[eNB_id_i]->pmi_ext,
-                                         rballoc,
-                                         symbol,
-                                         subframe,
-                                         ue->high_speed_flag,
-                                         frame_parms);
-      else
-        nb_rb = dlsch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF,
-                                         common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id],
-                                         pdsch_vars[eNB_id_i]->rxdataF_ext,
-                                         pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                         dlsch0_harq->pmi_alloc,
-                                         pdsch_vars[eNB_id_i]->pmi_ext,
-                                         rballoc,
-                                         symbol,
-                                         subframe,
-                                         ue->high_speed_flag,
-                                         frame_parms);
-    }
-  } else if (beamforming_mode==7) { //else if beamforming_mode == 7
-    nb_rb = dlsch_extract_rbs_TM7(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF,
-                                  pdsch_vars[eNB_id]->dl_bf_ch_estimates,
-                                  pdsch_vars[eNB_id]->rxdataF_ext,
-                                  pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext,
-                                  rballoc,
-                                  symbol,
-                                  subframe,
-                                  ue->high_speed_flag,
-                                  frame_parms);
-
-  } else if(beamforming_mode>7) {
-    LOG_W(PHY,"dlsch_demodulation: beamforming mode not supported yet.\n");
-  }
-
-  //printf("nb_rb = %d, eNB_id %d\n",nb_rb,eNB_id);
-  if (nb_rb==0) {
-    //    LOG_D(PHY,"dlsch_demodulation.c: nb_rb=0\n");
-    return(-1);
-  }
-
-
-#if UE_TIMING_TRACE
-    stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
-#if DISABLE_LOG_X
-    printf("[AbsSFN %d.%d] Slot%d Symbol %d Flag %d type %d: Pilot/Data extraction %5.2f \n",frame,subframe,slot,
-            symbol,ue->high_speed_flag,type,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
-#else
-    LOG_I(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d Flag %d type %d: Pilot/Data extraction  %5.2f \n",frame,subframe,slot,symbol,
-            ue->high_speed_flag,type,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
-#endif
-#endif
-
-
-#if UE_TIMING_TRACE
-    start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
-#endif
-  aatx = frame_parms->nb_antenna_ports_eNB;
-  aarx = frame_parms->nb_antennas_rx;
-
-  dlsch_scale_channel(pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                      frame_parms,
-                      dlsch,
-                      symbol,
-                      nb_rb);
-
-  if ((dlsch0_harq->mimo_mode<DUALSTREAM_UNIFORM_PRECODING1) &&
-      (rx_type==rx_IC_single_stream) &&
-      (eNB_id_i==ue->n_connected_eNB) &&
-      (dlsch0_harq->dl_power_off==0)
-     )  // TM5 two-user
-  {
-    dlsch_scale_channel(pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                        frame_parms,
-                        dlsch,
-                        symbol,
-                        nb_rb);
-  }
-
-#if UE_TIMING_TRACE
-    stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
-#if DISABLE_LOG_X
-    printf("[AbsSFN %d.%d] Slot%d Symbol %d: Channel Scale %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
-#else
-    LOG_I(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: Channel Scale  %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
-#endif
-#endif
-
-#if UE_TIMING_TRACE
-    start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
-#endif
-  if (first_symbol_flag==1) {
-    if (beamforming_mode==0){
-      if (dlsch0_harq->mimo_mode<LARGE_CDD) {
-        dlsch_channel_level(pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                           frame_parms,
-                           avg,
-                           symbol,
-                           nb_rb);
-        avgs = 0;
-        for (aatx=0;aatx<frame_parms->nb_antenna_ports_eNB;aatx++)
-          for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++)
-            avgs = cmax(avgs,avg[(aatx<<1)+aarx]);
-
-        pdsch_vars[eNB_id]->log2_maxh = (log2_approx(avgs)/2)+1;
-     }
-     else if ((dlsch0_harq->mimo_mode == LARGE_CDD) ||
-           ((dlsch0_harq->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) &&
-            (dlsch0_harq->mimo_mode <=DUALSTREAM_PUSCH_PRECODING)))
-     {
-      dlsch_channel_level_TM34(pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                 frame_parms,
-                                 pdsch_vars[eNB_id]->pmi_ext,
-                                 avg_0,
-                                 avg_1,
-                                 symbol,
-                                 nb_rb,
-                                 dlsch0_harq->mimo_mode);
-
-      LOG_D(PHY,"Channel Level TM34  avg_0 %d, avg_1 %d, rx_type %d, rx_standard %d, dlsch_demod_shift %d \n", avg_0[0],
-              avg_1[0], rx_type, rx_standard, dlsch_demod_shift);
-        if (rx_type>rx_standard) {
-          avg_0[0] = (log2_approx(avg_0[0])/2) + dlsch_demod_shift;// + 2 ;//+ 4;
-          avg_1[0] = (log2_approx(avg_1[0])/2) + dlsch_demod_shift;// + 2 ;//+ 4;
-          pdsch_vars[eNB_id]->log2_maxh0 = cmax(avg_0[0],0);
-          pdsch_vars[eNB_id]->log2_maxh1 = cmax(avg_1[0],0);
-         // printf("dlsch_demod_shift  %d\n", dlsch_demod_shift);
-         }
-          else {
-          avg_0[0] = (log2_approx(avg_0[0])/2) - 13 + interf_unaw_shift;
-          avg_1[0] = (log2_approx(avg_1[0])/2) - 13 + interf_unaw_shift;
-          pdsch_vars[eNB_id]->log2_maxh0 = cmax(avg_0[0],0);
-          pdsch_vars[eNB_id]->log2_maxh1 = cmax(avg_1[0],0);
-        }
-      }
-      else if (dlsch0_harq->mimo_mode<DUALSTREAM_UNIFORM_PRECODING1) {// single-layer precoding (TM5, TM6)
-        if ((rx_type==rx_IC_single_stream) && (eNB_id_i==ue->n_connected_eNB) && (dlsch0_harq->dl_power_off==0)) {
-            dlsch_channel_level_TM56(pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                frame_parms,
-                                pdsch_vars[eNB_id]->pmi_ext,
-                                avg,
-                                symbol,
-                                nb_rb);
-            avg[0] = log2_approx(avg[0]) - 13 + offset_mumimo_llr_drange[dlsch0_harq->mcs][(i_mod>>1)-1];
-            pdsch_vars[eNB_id]->log2_maxh = cmax(avg[0],0);
-
-        }
-        else if (dlsch0_harq->dl_power_off==1) { //TM6
-
-          dlsch_channel_level(pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                   frame_parms,
-                                   avg,
-                                   symbol,
-                                   nb_rb);
-
-          avgs = 0;
-          for (aatx=0;aatx<frame_parms->nb_antenna_ports_eNB;aatx++)
-            for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++)
-              avgs = cmax(avgs,avg[(aatx<<1)+aarx]);
-
-          pdsch_vars[eNB_id]->log2_maxh = (log2_approx(avgs)/2) + 1;
-          pdsch_vars[eNB_id]->log2_maxh++;
-
-        }
-      }
-
-    }
-    else if (beamforming_mode==7)
-       dlsch_channel_level_TM7(pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext,
-                              frame_parms,
-                              avg,
-                              symbol,
-                              nb_rb);
-#ifdef UE_DEBUG_TRACE
-    LOG_D(PHY,"[DLSCH] AbsSubframe %d.%d log2_maxh = %d [log2_maxh0 %d log2_maxh1 %d] (%d,%d)\n",
-            frame%1024,subframe, pdsch_vars[eNB_id]->log2_maxh,
-                                                 pdsch_vars[eNB_id]->log2_maxh0,
-                                                 pdsch_vars[eNB_id]->log2_maxh1,
-                                                 avg[0],avgs);
-    //LOG_D(PHY,"[DLSCH] mimo_mode = %d\n", dlsch0_harq->mimo_mode);
-#endif
-
-    //wait until pdcch is decoded
-    //proc->channel_level = 1;
-  }
-
-  /*
-  uint32_t wait = 0;
-  while(proc->channel_level == 0)
-  {
-      usleep(1);
-      wait++;
-  }
-  */
-
-#if T_TRACER
-    if (type == PDSCH)
-    {
-      T(T_UE_PHY_PDSCH_ENERGY, T_INT(eNB_id), T_INT(frame%1024), T_INT(subframe),
-                               T_INT(avg[0]), T_INT(avg[1]),     T_INT(avg[2]),   T_INT(avg[3]));
-    }
-#endif
-
-#if UE_TIMING_TRACE
-    stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
-#if DISABLE_LOG_X
-    printf("[AbsSFN %d.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f \n",frame,subframe,slot,symbol,first_symbol_flag,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
-#else
-    LOG_I(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level  %5.2f \n",frame,subframe,slot,symbol,first_symbol_flag,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
-#endif
-#endif
-
-
-#if UE_TIMING_TRACE
-    start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
-#endif
-// Now channel compensation
-  if (dlsch0_harq->mimo_mode<LARGE_CDD) {
-    dlsch_channel_compensation(pdsch_vars[eNB_id]->rxdataF_ext,
-                               pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                               pdsch_vars[eNB_id]->dl_ch_mag0,
-                               pdsch_vars[eNB_id]->dl_ch_magb0,
-                               pdsch_vars[eNB_id]->rxdataF_comp0,
-                               (aatx>1) ? pdsch_vars[eNB_id]->rho : NULL,
-                               frame_parms,
-                               symbol,
-                               first_symbol_flag,
-                               dlsch0_harq->Qm,
-                               nb_rb,
-                               pdsch_vars[eNB_id]->log2_maxh,
-                               measurements); // log2_maxh+I0_shift
- /*if (symbol == 5) {
-     write_output("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
- } */
-    if ((rx_type==rx_IC_single_stream) &&
-        (eNB_id_i<ue->n_connected_eNB)) {
-         dlsch_channel_compensation(pdsch_vars[eNB_id_i]->rxdataF_ext,
-                                 pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                 pdsch_vars[eNB_id_i]->dl_ch_mag0,
-                                 pdsch_vars[eNB_id_i]->dl_ch_magb0,
-                                 pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                                 (aatx>1) ? pdsch_vars[eNB_id_i]->rho : NULL,
-                                 frame_parms,
-                                 symbol,
-                                 first_symbol_flag,
-                                 i_mod,
-                                 nb_rb,
-                                 pdsch_vars[eNB_id]->log2_maxh,
-                                 measurements); // log2_maxh+I0_shift
-#ifdef DEBUG_PHY
-      if (symbol == 5) {
-        write_output("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
-        write_output("rxF_comp_i.m","rxF_c_i",&pdsch_vars[eNB_id_i]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
-      }
-#endif
-
-      dlsch_dual_stream_correlation(frame_parms,
-                                    symbol,
-                                    nb_rb,
-                                    pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                    pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                    pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round],
-                                    pdsch_vars[eNB_id]->log2_maxh);
-    }
-  } else if ((dlsch0_harq->mimo_mode == LARGE_CDD) || ((dlsch0_harq->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) &&
-            (dlsch0_harq->mimo_mode <=DUALSTREAM_PUSCH_PRECODING))){
-      dlsch_channel_compensation_TM34(frame_parms,
-                                     pdsch_vars[eNB_id],
-                                     measurements,
-                                     eNB_id,
-                                     symbol,
-                                     dlsch0_harq->Qm,
-                                     dlsch1_harq->Qm,
-                                     harq_pid,
-                                     dlsch0_harq->round,
-                                     dlsch0_harq->mimo_mode,
-                                     nb_rb,
-                                     pdsch_vars[eNB_id]->log2_maxh0,
-                                     pdsch_vars[eNB_id]->log2_maxh1);
-  /*   if (symbol == 5) {
-     write_output("rxF_comp_d00.m","rxF_c_d00",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);// should be QAM
-     write_output("rxF_comp_d01.m","rxF_c_d01",&pdsch_vars[eNB_id]->rxdataF_comp0[1][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0
-     write_output("rxF_comp_d10.m","rxF_c_d10",&pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0
-     write_output("rxF_comp_d11.m","rxF_c_d11",&pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][1][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be QAM
-        } */
-      // compute correlation between signal and interference channels (rho12 and rho21)
-        dlsch_dual_stream_correlation(frame_parms, // this is doing h11'*h12 and h21'*h22
-                                    symbol,
-                                    nb_rb,
-                                    pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                    &(pdsch_vars[eNB_id]->dl_ch_estimates_ext[2]),
-                                    pdsch_vars[eNB_id]->dl_ch_rho2_ext,
-                                    pdsch_vars[eNB_id]->log2_maxh0);
-        //printf("rho stream1 =%d\n", &pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round] );
-      //to be optimized (just take complex conjugate)
-      dlsch_dual_stream_correlation(frame_parms, // this is doing h12'*h11 and h22'*h21
-                                    symbol,
-                                    nb_rb,
-                                    &(pdsch_vars[eNB_id]->dl_ch_estimates_ext[2]),
-                                    pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                    pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round],
-                                    pdsch_vars[eNB_id]->log2_maxh1);
-    //  printf("rho stream2 =%d\n",&pdsch_vars[eNB_id]->dl_ch_rho2_ext );
-      //printf("TM3 log2_maxh : %d\n",pdsch_vars[eNB_id]->log2_maxh);
-  /*     if (symbol == 5) {
-     write_output("rho0_0.m","rho0_0",&pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round][0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);// should be QAM
-     write_output("rho2_0.m","rho2_0",&pdsch_vars[eNB_id]->dl_ch_rho2_ext[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0
-     write_output("rho0_1.m.m","rho0_1",&pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round][1][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0
-     write_output("rho2_1.m","rho2_1",&pdsch_vars[eNB_id]->dl_ch_rho2_ext[1][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be QAM
-        } */
-
-    } else if (dlsch0_harq->mimo_mode<DUALSTREAM_UNIFORM_PRECODING1) {// single-layer precoding (TM5, TM6)
-        if ((rx_type==rx_IC_single_stream) && (eNB_id_i==ue->n_connected_eNB) && (dlsch0_harq->dl_power_off==0)) {
-          dlsch_channel_compensation_TM56(pdsch_vars[eNB_id]->rxdataF_ext,
-                                      pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                      pdsch_vars[eNB_id]->dl_ch_mag0,
-                                      pdsch_vars[eNB_id]->dl_ch_magb0,
-                                      pdsch_vars[eNB_id]->rxdataF_comp0,
-                                      pdsch_vars[eNB_id]->pmi_ext,
-                                      frame_parms,
-                                      measurements,
-                                      eNB_id,
-                                      symbol,
-                                      dlsch0_harq->Qm,
-                                      nb_rb,
-                                      pdsch_vars[eNB_id]->log2_maxh,
-                                      dlsch0_harq->dl_power_off);
-
-        for (rb=0; rb<nb_rb; rb++) {
-          switch(pdsch_vars[eNB_id]->pmi_ext[rb]) {
-          case 0:
-            pdsch_vars[eNB_id_i]->pmi_ext[rb]=1;
-            break;
-         case 1:
-            pdsch_vars[eNB_id_i]->pmi_ext[rb]=0;
-            break;
-         case 2:
-            pdsch_vars[eNB_id_i]->pmi_ext[rb]=3;
-            break;
-          case 3:
-            pdsch_vars[eNB_id_i]->pmi_ext[rb]=2;
-            break;
-          }
-       //  if (rb==0)
-        //    printf("pmi %d, pmi_i %d\n",pdsch_vars[eNB_id]->pmi_ext[rb],pdsch_vars[eNB_id_i]->pmi_ext[rb]);
-      }
-      dlsch_channel_compensation_TM56(pdsch_vars[eNB_id_i]->rxdataF_ext,
-                                      pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                      pdsch_vars[eNB_id_i]->dl_ch_mag0,
-                                      pdsch_vars[eNB_id_i]->dl_ch_magb0,
-                                      pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                                      pdsch_vars[eNB_id_i]->pmi_ext,
-                                      frame_parms,
-                                      measurements,
-                                      eNB_id_i,
-                                      symbol,
-                                      i_mod,
-                                      nb_rb,
-                                      pdsch_vars[eNB_id]->log2_maxh,
-                                      dlsch0_harq->dl_power_off);
-#ifdef DEBUG_PHY
-      if (symbol==5) {
-        write_output("rxF_comp_d.m","rxF_c_d",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
-       write_output("rxF_comp_i.m","rxF_c_i",&pdsch_vars[eNB_id_i]->rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);
-      }
-#endif
-      dlsch_dual_stream_correlation(frame_parms,
-                                    symbol,
-                                    nb_rb,
-                                    pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                    pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
-                                    pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round],
-                                    pdsch_vars[eNB_id]->log2_maxh);
-    }  else if (dlsch0_harq->dl_power_off==1)  {
-      dlsch_channel_compensation_TM56(pdsch_vars[eNB_id]->rxdataF_ext,
-                                      pdsch_vars[eNB_id]->dl_ch_estimates_ext,
-                                      pdsch_vars[eNB_id]->dl_ch_mag0,
-                                      pdsch_vars[eNB_id]->dl_ch_magb0,
-                                      pdsch_vars[eNB_id]->rxdataF_comp0,
-                                      pdsch_vars[eNB_id]->pmi_ext,
-                                      frame_parms,
-                                      measurements,
-                                      eNB_id,
-                                      symbol,
-                                      dlsch0_harq->Qm,
-                                      nb_rb,
-                                      pdsch_vars[eNB_id]->log2_maxh,
-                                      1);
-
-      }
-
-
-    } else if (dlsch0_harq->mimo_mode==TM7) { //TM7
-
-      dlsch_channel_compensation(pdsch_vars[eNB_id]->rxdataF_ext,
-                                 pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext,
-                                 pdsch_vars[eNB_id]->dl_ch_mag0,
-                                 pdsch_vars[eNB_id]->dl_ch_magb0,
-                                 pdsch_vars[eNB_id]->rxdataF_comp0,
-                                 (aatx>1) ? pdsch_vars[eNB_id]->rho : NULL,
-                                 frame_parms,
-                                 symbol,
-                                 first_symbol_flag,
-                                 get_Qm(dlsch0_harq->mcs),
-                                 nb_rb,
-                                 //9,
-                                 pdsch_vars[eNB_id]->log2_maxh,
-                                 measurements); // log2_maxh+I0_shift
-  }
-
-#if UE_TIMING_TRACE
-    stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
-#if DISABLE_LOG_X
-    printf("[AbsSFN %d.%d] Slot%d Symbol %d log2_maxh %d channel_level %d: Channel Comp %5.2f \n",frame,subframe,slot,symbol,pdsch_vars[eNB_id]->log2_maxh,proc->channel_level,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
-#else
-    LOG_I(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d log2_maxh %d channel_level %d: Channel Comp  %5.2f \n",frame,subframe,slot,symbol,pdsch_vars[eNB_id]->log2_maxh,proc->channel_level,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
-#endif
-#endif
-// MRC
-#if UE_TIMING_TRACE
-    start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
-#endif
-
-   if (frame_parms->nb_antennas_rx > 1) {
-    if ((dlsch0_harq->mimo_mode == LARGE_CDD) ||
-        ((dlsch0_harq->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) &&
-         (dlsch0_harq->mimo_mode <=DUALSTREAM_PUSCH_PRECODING))){  // TM3 or TM4
-      if (frame_parms->nb_antenna_ports_eNB == 2) {
-        dlsch_detection_mrc_TM34(frame_parms,
-                                 pdsch_vars[eNB_id],
-                                 harq_pid,
-                                 dlsch0_harq->round,
-                                 symbol,
-                                 nb_rb,
-                                 1);
-    /*   if (symbol == 5) {
-     write_output("rho0_mrc.m","rho0_0",&pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round][0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);// should be QAM
-     write_output("rho2_mrc.m","rho2_0",&pdsch_vars[eNB_id]->dl_ch_rho2_ext[0][symbol*frame_parms->N_RB_DL*12],frame_parms->N_RB_DL*12,1,1);//should be almost 0
-        } */
-      }
-    } else {
-      dlsch_detection_mrc(frame_parms,
-                          pdsch_vars[eNB_id]->rxdataF_comp0,
-                          pdsch_vars[eNB_id_i]->rxdataF_comp0,
-                          pdsch_vars[eNB_id]->rho,
-                          pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round],
-                          pdsch_vars[eNB_id]->dl_ch_mag0,
-                          pdsch_vars[eNB_id]->dl_ch_magb0,
-                          pdsch_vars[eNB_id_i]->dl_ch_mag0,
-                          pdsch_vars[eNB_id_i]->dl_ch_magb0,
-                          symbol,
-                          nb_rb,
-                          rx_type==rx_IC_single_stream);
-    }
-  }
-  //  printf("Combining");
-  if ((dlsch0_harq->mimo_mode == SISO) ||
-      ((dlsch0_harq->mimo_mode >= UNIFORM_PRECODING11) &&
-       (dlsch0_harq->mimo_mode <= PUSCH_PRECODING0)) ||
-       (dlsch0_harq->mimo_mode == TM7)) {
-    /*
-      dlsch_siso(frame_parms,
-      pdsch_vars[eNB_id]->rxdataF_comp,
-      pdsch_vars[eNB_id_i]->rxdataF_comp,
-      symbol,
-      nb_rb);
-    */
-  } else if (dlsch0_harq->mimo_mode == ALAMOUTI) {
-    dlsch_alamouti(frame_parms,
-                   pdsch_vars[eNB_id]->rxdataF_comp0,
-                   pdsch_vars[eNB_id]->dl_ch_mag0,
-                   pdsch_vars[eNB_id]->dl_ch_magb0,
-                   symbol,
-                   nb_rb);
-  }
-
-  //    printf("LLR");
-  if ((dlsch0_harq->mimo_mode == LARGE_CDD) ||
-      ((dlsch0_harq->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) &&
-       (dlsch0_harq->mimo_mode <=DUALSTREAM_PUSCH_PRECODING)))  {
-    rxdataF_comp_ptr = pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round];
-    dl_ch_mag_ptr = pdsch_vars[eNB_id]->dl_ch_mag1[harq_pid][round];
-  }
-  else {
-    rxdataF_comp_ptr = pdsch_vars[eNB_id_i]->rxdataF_comp0;
-    dl_ch_mag_ptr = pdsch_vars[eNB_id_i]->dl_ch_mag0;
-    //i_mod should have been passed as a parameter
-  }
-
-#if UE_TIMING_TRACE
-    stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
-#if DISABLE_LOG_X
-    printf("[AbsSFN %d.%d] Slot%d Symbol %d: Channel Combine %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
-#else
-    LOG_I(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: Channel Combine  %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
-#endif
-#endif
-
-#if UE_TIMING_TRACE
-    start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
-#endif
-  //printf("LLR dlsch0_harq->Qm %d rx_type %d cw0 %d cw1 %d symbol %d \n",dlsch0_harq->Qm,rx_type,codeword_TB0,codeword_TB1,symbol);
-  // compute LLRs
-  // -> // compute @pointer where llrs should filled for this ofdm-symbol
-  int8_t  *pllr_symbol_cw0;
-  int8_t  *pllr_symbol_cw1;
-  uint32_t llr_offset_symbol;
-  llr_offset_symbol = pdsch_vars[eNB_id]->llr_offset[symbol];
-  pllr_symbol_cw0  = (int8_t*)pdsch_vars[eNB_id]->llr[0];
-  pllr_symbol_cw1  = (int8_t*)pdsch_vars[eNB_id]->llr[1];
-  pllr_symbol_cw0 += llr_offset_symbol;
-  pllr_symbol_cw1 += llr_offset_symbol;
-
-  LOG_I(PHY,"compute LLRs [AbsSubframe %d.%d-%d] NbRB %d Qm %d LLRs-Length %d LLR-Offset %d @LLR Buff %p @LLR Buff(symb) %p\n",
-             frame, subframe,symbol,
-             nb_rb,dlsch0_harq->Qm,
-             pdsch_vars[eNB_id]->llr_length[symbol],
-             pdsch_vars[eNB_id]->llr_offset[symbol],
-             (int16_t*)pdsch_vars[eNB_id]->llr[0],
-             pllr_symbol_cw0);
-
-  switch (dlsch0_harq->Qm) {
-  case 2 :
-    if ((rx_type==rx_standard) || (codeword_TB1 == -1)) {
-
-
-        dlsch_qpsk_llr(frame_parms,
-                       pdsch_vars[eNB_id]->rxdataF_comp0,
-                       (int16_t*)pllr_symbol_cw0,
-                       symbol,
-                       first_symbol_flag,
-                       nb_rb,
-                       adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                       beamforming_mode);
-
-    } else if (codeword_TB0 == -1){
-
-        dlsch_qpsk_llr(frame_parms,
-                       pdsch_vars[eNB_id]->rxdataF_comp0,
-                       (int16_t*)pllr_symbol_cw1,
-                       symbol,
-                       first_symbol_flag,
-                       nb_rb,
-                       adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                       beamforming_mode);
-    }
-      else if (rx_type >= rx_IC_single_stream) {
-        if (dlsch1_harq->Qm == 2) {
-          dlsch_qpsk_qpsk_llr(frame_parms,
-                              pdsch_vars[eNB_id]->rxdataF_comp0,
-                              rxdataF_comp_ptr,
-                              pdsch_vars[eNB_id]->dl_ch_rho2_ext,
-                              pdsch_vars[eNB_id]->llr[0],
-                              symbol,first_symbol_flag,nb_rb,
-                              adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                              pdsch_vars[eNB_id]->llr128);
-          if (rx_type==rx_IC_dual_stream) {
-            dlsch_qpsk_qpsk_llr(frame_parms,
-                                rxdataF_comp_ptr,
-                                pdsch_vars[eNB_id]->rxdataF_comp0,
-                                pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round],
-                                pdsch_vars[eNB_id]->llr[1],
-                                symbol,first_symbol_flag,nb_rb,
-                                adjust_G2(frame_parms,dlsch1_harq->rb_alloc_even,2,subframe,symbol),
-                                pdsch_vars[eNB_id]->llr128_2ndstream);
-          }
-        }
-        else if (dlsch1_harq->Qm == 4) {
-          dlsch_qpsk_16qam_llr(frame_parms,
-                               pdsch_vars[eNB_id]->rxdataF_comp0,
-                               rxdataF_comp_ptr,//i
-                               dl_ch_mag_ptr,//i
-                               pdsch_vars[eNB_id]->dl_ch_rho2_ext,
-                               pdsch_vars[eNB_id]->llr[0],
-                               symbol,first_symbol_flag,nb_rb,
-                               adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                               pdsch_vars[eNB_id]->llr128);
-          if (rx_type==rx_IC_dual_stream) {
-            dlsch_16qam_qpsk_llr(frame_parms,
-                                 rxdataF_comp_ptr,
-                                 pdsch_vars[eNB_id]->rxdataF_comp0,//i
-                                 dl_ch_mag_ptr,
-                                 pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round],
-                                 pdsch_vars[eNB_id]->llr[1],
-                                 symbol,first_symbol_flag,nb_rb,
-                                 adjust_G2(frame_parms,dlsch1_harq->rb_alloc_even,4,subframe,symbol),
-                                 pdsch_vars[eNB_id]->llr128_2ndstream);
-          }
-        }
-        else {
-          dlsch_qpsk_64qam_llr(frame_parms,
-                               pdsch_vars[eNB_id]->rxdataF_comp0,
-                               rxdataF_comp_ptr,//i
-                               dl_ch_mag_ptr,//i
-                               pdsch_vars[eNB_id]->dl_ch_rho2_ext,
-                               pdsch_vars[eNB_id]->llr[0],
-                               symbol,first_symbol_flag,nb_rb,
-                               adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                               pdsch_vars[eNB_id]->llr128);
-          if (rx_type==rx_IC_dual_stream) {
-            dlsch_64qam_qpsk_llr(frame_parms,
-                                 rxdataF_comp_ptr,
-                                 pdsch_vars[eNB_id]->rxdataF_comp0,//i
-                                 dl_ch_mag_ptr,
-                                 pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round],
-                                 pdsch_vars[eNB_id]->llr[1],
-                                 symbol,first_symbol_flag,nb_rb,
-                                 adjust_G2(frame_parms,dlsch1_harq->rb_alloc_even,6,subframe,symbol),
-                                 pdsch_vars[eNB_id]->llr128_2ndstream);
-          }
-        }
-      }
-    break;
-  case 4 :
-    if ((rx_type==rx_standard ) || (codeword_TB1 == -1)) {
-      dlsch_16qam_llr(frame_parms,
-                      pdsch_vars[eNB_id]->rxdataF_comp0,
-                      pdsch_vars[eNB_id]->llr[0],
-                      pdsch_vars[eNB_id]->dl_ch_mag0,
-                      symbol,first_symbol_flag,nb_rb,
-                      adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,4,subframe,symbol),
-                      pdsch_vars[eNB_id]->llr128,
-                      beamforming_mode);
-    } else if (codeword_TB0 == -1){
-      dlsch_16qam_llr(frame_parms,
-                      pdsch_vars[eNB_id]->rxdataF_comp0,
-                      pdsch_vars[eNB_id]->llr[1],
-                      pdsch_vars[eNB_id]->dl_ch_mag0,
-                      symbol,first_symbol_flag,nb_rb,
-                      adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,4,subframe,symbol),
-                      pdsch_vars[eNB_id]->llr128_2ndstream,
-                      beamforming_mode);
-    }
-    else if (rx_type >= rx_IC_single_stream) {
-      if (dlsch1_harq->Qm == 2) {
-        dlsch_16qam_qpsk_llr(frame_parms,
-                             pdsch_vars[eNB_id]->rxdataF_comp0,
-                             rxdataF_comp_ptr,//i
-                             pdsch_vars[eNB_id]->dl_ch_mag0,
-                             pdsch_vars[eNB_id]->dl_ch_rho2_ext,
-                             pdsch_vars[eNB_id]->llr[0],
-                             symbol,first_symbol_flag,nb_rb,
-                             adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,4,subframe,symbol),
-                             pdsch_vars[eNB_id]->llr128);
-        if (rx_type==rx_IC_dual_stream) {
-          dlsch_qpsk_16qam_llr(frame_parms,
-                               rxdataF_comp_ptr,
-                               pdsch_vars[eNB_id]->rxdataF_comp0,//i
-                               pdsch_vars[eNB_id]->dl_ch_mag0,//i
-                               pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round],
-                               pdsch_vars[eNB_id]->llr[1],
-                               symbol,first_symbol_flag,nb_rb,
-                               adjust_G2(frame_parms,dlsch1_harq->rb_alloc_even,2,subframe,symbol),
-                               pdsch_vars[eNB_id]->llr128_2ndstream);
-        }
-      }
-      else if (dlsch1_harq->Qm == 4) {
-        dlsch_16qam_16qam_llr(frame_parms,
-                              pdsch_vars[eNB_id]->rxdataF_comp0,
-                              rxdataF_comp_ptr,//i
-                              pdsch_vars[eNB_id]->dl_ch_mag0,
-                              dl_ch_mag_ptr,//i
-                              pdsch_vars[eNB_id]->dl_ch_rho2_ext,
-                              pdsch_vars[eNB_id]->llr[0],
-                              symbol,first_symbol_flag,nb_rb,
-                              adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,4,subframe,symbol),
-                              pdsch_vars[eNB_id]->llr128);
-        if (rx_type==rx_IC_dual_stream) {
-          dlsch_16qam_16qam_llr(frame_parms,
-                                rxdataF_comp_ptr,
-                                pdsch_vars[eNB_id]->rxdataF_comp0,//i
-                                dl_ch_mag_ptr,
-                                pdsch_vars[eNB_id]->dl_ch_mag0,//i
-                                pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round],
-                                pdsch_vars[eNB_id]->llr[1],
-                                symbol,first_symbol_flag,nb_rb,
-                                adjust_G2(frame_parms,dlsch1_harq->rb_alloc_even,4,subframe,symbol),
-                                pdsch_vars[eNB_id]->llr128_2ndstream);
-        }
-      }
-      else {
-        dlsch_16qam_64qam_llr(frame_parms,
-                              pdsch_vars[eNB_id]->rxdataF_comp0,
-                              rxdataF_comp_ptr,//i
-                              pdsch_vars[eNB_id]->dl_ch_mag0,
-                              dl_ch_mag_ptr,//i
-                              pdsch_vars[eNB_id]->dl_ch_rho2_ext,
-                              pdsch_vars[eNB_id]->llr[0],
-                              symbol,first_symbol_flag,nb_rb,
-                              adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,4,subframe,symbol),
-                              pdsch_vars[eNB_id]->llr128);
-        if (rx_type==rx_IC_dual_stream) {
-          dlsch_64qam_16qam_llr(frame_parms,
-                                rxdataF_comp_ptr,
-                                pdsch_vars[eNB_id]->rxdataF_comp0,
-                                dl_ch_mag_ptr,
-                                pdsch_vars[eNB_id]->dl_ch_mag0,
-                                pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round],
-                                pdsch_vars[eNB_id]->llr[1],
-                                symbol,first_symbol_flag,nb_rb,
-                                adjust_G2(frame_parms,dlsch1_harq->rb_alloc_even,6,subframe,symbol),
-                                pdsch_vars[eNB_id]->llr128_2ndstream);
-        }
-      }
-    }
-    break;
-  case 6 :
-    if ((rx_type==rx_standard) || (codeword_TB1 == -1))  {
-      dlsch_64qam_llr(frame_parms,
-                      pdsch_vars[eNB_id]->rxdataF_comp0,
-                      (int16_t*)pllr_symbol_cw0,
-                      pdsch_vars[eNB_id]->dl_ch_mag0,
-                      pdsch_vars[eNB_id]->dl_ch_magb0,
-                      symbol,first_symbol_flag,nb_rb,
-                      adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,6,subframe,symbol),
-                      pdsch_vars[eNB_id]->llr_offset[symbol],
-                      beamforming_mode);
-    } else if (codeword_TB0 == -1){
-      dlsch_64qam_llr(frame_parms,
-                      pdsch_vars[eNB_id]->rxdataF_comp0,
-                      (int16_t*)pllr_symbol_cw1,
-                      pdsch_vars[eNB_id]->dl_ch_mag0,
-                      pdsch_vars[eNB_id]->dl_ch_magb0,
-                      symbol,first_symbol_flag,nb_rb,
-                      adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,6,subframe,symbol),
-                      pdsch_vars[eNB_id]->llr_offset[symbol],
-                      beamforming_mode);
-    }
-    else if (rx_type >= rx_IC_single_stream) {
-      if (dlsch1_harq->Qm == 2) {
-        dlsch_64qam_qpsk_llr(frame_parms,
-                             pdsch_vars[eNB_id]->rxdataF_comp0,
-                             rxdataF_comp_ptr,//i
-                             pdsch_vars[eNB_id]->dl_ch_mag0,
-                             pdsch_vars[eNB_id]->dl_ch_rho2_ext,
-                             pdsch_vars[eNB_id]->llr[0],
-                             symbol,first_symbol_flag,nb_rb,
-                             adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,6,subframe,symbol),
-                             pdsch_vars[eNB_id]->llr128);
-        if (rx_type==rx_IC_dual_stream) {
-          dlsch_qpsk_64qam_llr(frame_parms,
-                               rxdataF_comp_ptr,
-                               pdsch_vars[eNB_id]->rxdataF_comp0,//i
-                               pdsch_vars[eNB_id]->dl_ch_mag0,
-                               pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round],
-                               pdsch_vars[eNB_id]->llr[1],
-                               symbol,first_symbol_flag,nb_rb,
-                               adjust_G2(frame_parms,dlsch1_harq->rb_alloc_even,2,subframe,symbol),
-                               pdsch_vars[eNB_id]->llr128_2ndstream);
-        }
-      }
-      else if (dlsch1_harq->Qm == 4) {
-        dlsch_64qam_16qam_llr(frame_parms,
-                              pdsch_vars[eNB_id]->rxdataF_comp0,
-                              rxdataF_comp_ptr,//i
-                              pdsch_vars[eNB_id]->dl_ch_mag0,
-                              dl_ch_mag_ptr,//i
-                              pdsch_vars[eNB_id]->dl_ch_rho2_ext,
-                              pdsch_vars[eNB_id]->llr[0],
-                              symbol,first_symbol_flag,nb_rb,
-                              adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,6,subframe,symbol),
-                              pdsch_vars[eNB_id]->llr128);
-        if (rx_type==rx_IC_dual_stream) {
-          dlsch_16qam_64qam_llr(frame_parms,
-                                rxdataF_comp_ptr,
-                                pdsch_vars[eNB_id]->rxdataF_comp0,//i
-                                dl_ch_mag_ptr,
-                                pdsch_vars[eNB_id]->dl_ch_mag0,//i
-                                pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round],
-                                pdsch_vars[eNB_id]->llr[1],
-                                symbol,first_symbol_flag,nb_rb,
-                                adjust_G2(frame_parms,dlsch1_harq->rb_alloc_even,4,subframe,symbol),
-                                pdsch_vars[eNB_id]->llr128_2ndstream);
-        }
-      }
-      else {
-        dlsch_64qam_64qam_llr(frame_parms,
-                              pdsch_vars[eNB_id]->rxdataF_comp0,
-                              rxdataF_comp_ptr,//i
-                              pdsch_vars[eNB_id]->dl_ch_mag0,
-                              dl_ch_mag_ptr,//i
-                              pdsch_vars[eNB_id]->dl_ch_rho2_ext,
-                              (int16_t*)pllr_symbol_cw0,
-                              symbol,first_symbol_flag,nb_rb,
-                              adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,6,subframe,symbol),
-                              pdsch_vars[eNB_id]->llr_offset[symbol]);
-        if (rx_type==rx_IC_dual_stream) {
-          dlsch_64qam_64qam_llr(frame_parms,
-                                rxdataF_comp_ptr,
-                                pdsch_vars[eNB_id]->rxdataF_comp0,//i
-                                dl_ch_mag_ptr,
-                                pdsch_vars[eNB_id]->dl_ch_mag0,//i
-                                pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round],
-                                (int16_t*)pllr_symbol_cw1,
-                                symbol,first_symbol_flag,nb_rb,
-                                adjust_G2(frame_parms,dlsch1_harq->rb_alloc_even,6,subframe,symbol),
-                                pdsch_vars[eNB_id]->llr_offset[symbol]);
-        }
-      }
-    }
-    break;
-  default:
-    LOG_W(PHY,"rx_dlsch.c : Unknown mod_order!!!!\n");
-    return(-1);
-    break;
-  }
-  if (dlsch1_harq) {
-  switch (get_Qm(dlsch1_harq->mcs)) {
-  case 2 :
-    if (rx_type==rx_standard) {
-        dlsch_qpsk_llr(frame_parms,
-                       pdsch_vars[eNB_id]->rxdataF_comp0,
-                       (int16_t*)pllr_symbol_cw0,
-                       symbol,first_symbol_flag,nb_rb,
-                       adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,2,subframe,symbol),
-                       beamforming_mode);
-    }
-    break;
-  case 4:
-    if (rx_type==rx_standard) {
-      dlsch_16qam_llr(frame_parms,
-                      pdsch_vars[eNB_id]->rxdataF_comp0,
-                      pdsch_vars[eNB_id]->llr[0],
-                      pdsch_vars[eNB_id]->dl_ch_mag0,
-                      symbol,first_symbol_flag,nb_rb,
-                      adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,4,subframe,symbol),
-                      pdsch_vars[eNB_id]->llr128,
-                      beamforming_mode);
-    }
-    break;
-  case 6 :
-    if (rx_type==rx_standard) {
-      dlsch_64qam_llr(frame_parms,
-                      pdsch_vars[eNB_id]->rxdataF_comp0,
-                      (int16_t*)pllr_symbol_cw0,
-                      pdsch_vars[eNB_id]->dl_ch_mag0,
-                      pdsch_vars[eNB_id]->dl_ch_magb0,
-                      symbol,first_symbol_flag,nb_rb,
-                      adjust_G2(frame_parms,dlsch0_harq->rb_alloc_even,6,subframe,symbol),
-                      pdsch_vars[eNB_id]->llr_offset[symbol],
-                      beamforming_mode);
-  }
-    break;
-  default:
-    LOG_W(PHY,"rx_dlsch.c : Unknown mod_order!!!!\n");
-    return(-1);
-    break;
-  }
-  }
-
-#if UE_TIMING_TRACE
-    stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
-#if DISABLE_LOG_X
-    printf("[AbsSFN %d.%d] Slot%d Symbol %d: LLR Computation %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
-#else
-    LOG_I(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: LLR Computation  %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0));
-#endif
-#endif
-// Please keep it: useful for debugging
-#if 0
-  if( (symbol == 13) && (subframe==0) && (dlsch0_harq->Qm == 6) /*&& (nb_rb==25)*/)
-  {
-      LOG_E(PHY,"Dump Phy Chan Est \n");
-      if(1)
-      {
-#if 1
-      write_output("rxdataF0.m"    , "rxdataF0",             &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0][0],14*frame_parms->ofdm_symbol_size,1,1);
-      //write_output("rxdataF1.m"    , "rxdataF1",             &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0][0],14*frame_parms->ofdm_symbol_size,1,1);
-      write_output("dl_ch_estimates00.m", "dl_ch_estimates00",   &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][0][0],14*frame_parms->ofdm_symbol_size,1,1);
-      //write_output("dl_ch_estimates01.m", "dl_ch_estimates01",   &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][1][0],14*frame_parms->ofdm_symbol_size,1,1);
-      //write_output("dl_ch_estimates10.m", "dl_ch_estimates10",   &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][2][0],14*frame_parms->ofdm_symbol_size,1,1);
-      //write_output("dl_ch_estimates11.m", "dl_ch_estimates11",   &common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates[eNB_id][3][0],14*frame_parms->ofdm_symbol_size,1,1);
-
-
-      //write_output("rxdataF_ext00.m"    , "rxdataF_ext00",       &pdsch_vars[eNB_id]->rxdataF_ext[0][0],14*frame_parms->N_RB_DL*12,1,1);
-      //write_output("rxdataF_ext01.m"    , "rxdataF_ext01",       &pdsch_vars[eNB_id]->rxdataF_ext[1][0],14*frame_parms->N_RB_DL*12,1,1);
-      //write_output("rxdataF_ext10.m"    , "rxdataF_ext10",       &pdsch_vars[eNB_id]->rxdataF_ext[2][0],14*frame_parms->N_RB_DL*12,1,1);
-      //write_output("rxdataF_ext11.m"    , "rxdataF_ext11",       &pdsch_vars[eNB_id]->rxdataF_ext[3][0],14*frame_parms->N_RB_DL*12,1,1);
-      write_output("dl_ch_estimates_ext00.m", "dl_ch_estimates_ext00", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[0][0],14*frame_parms->N_RB_DL*12,1,1);
-      //write_output("dl_ch_estimates_ext01.m", "dl_ch_estimates_ext01", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[1][0],14*frame_parms->N_RB_DL*12,1,1);
-      //write_output("dl_ch_estimates_ext10.m", "dl_ch_estimates_ext10", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[2][0],14*frame_parms->N_RB_DL*12,1,1);
-      //write_output("dl_ch_estimates_ext11.m", "dl_ch_estimates_ext11", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[3][0],14*frame_parms->N_RB_DL*12,1,1);
-      write_output("rxdataF_comp00.m","rxdataF_comp00",              &pdsch_vars[eNB_id]->rxdataF_comp0[0][0],14*frame_parms->N_RB_DL*12,1,1);
-      //write_output("rxdataF_comp01.m","rxdataF_comp01",              &pdsch_vars[eNB_id]->rxdataF_comp0[1][0],14*frame_parms->N_RB_DL*12,1,1);
-      //write_output("rxdataF_comp10.m","rxdataF_comp10",              &pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][0][0],14*frame_parms->N_RB_DL*12,1,1);
-      //write_output("rxdataF_comp11.m","rxdataF_comp11",              &pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][1][0],14*frame_parms->N_RB_DL*12,1,1);
-#endif
-      write_output("llr0.m","llr0",  &pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0);
-      //write_output("llr1.m","llr1",  &pdsch_vars[eNB_id]->llr[1][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0);
-
-
-      AssertFatal(0," ");
-      }
-
-  }
-#endif
-
-  T(T_UE_PHY_PDSCH_IQ, T_INT(eNB_id), T_INT(frame%1024),
-    T_INT(subframe), T_INT(nb_rb),
-    T_INT(frame_parms->N_RB_UL), T_INT(frame_parms->symbols_per_tti),
-    T_BUFFER(&pdsch_vars[eNB_id]->rxdataF_comp0[eNB_id][0],
-             2 * /* ulsch[UE_id]->harq_processes[harq_pid]->nb_rb */ frame_parms->N_RB_UL *12*frame_parms->symbols_per_tti*2));
-
-  return 0;
-}
-
-//==============================================================================================
-// Pre-processing for LLR computation
-//==============================================================================================
-
-void dlsch_channel_compensation(int **rxdataF_ext,
-                                int **dl_ch_estimates_ext,
-                                int **dl_ch_mag,
-                                int **dl_ch_magb,
-                                int **rxdataF_comp,
-                                int **rho,
-                                LTE_DL_FRAME_PARMS *frame_parms,
-                                unsigned char symbol,
-                                uint8_t first_symbol_flag,
-                                unsigned char mod_order,
-                                unsigned short nb_rb,
-                                unsigned char output_shift,
-                                PHY_MEASUREMENTS *measurements)
-{
-
-#if defined(__i386) || defined(__x86_64)
-
-  unsigned short rb;
-  unsigned char aatx,aarx,symbol_mod,pilots=0;
-  __m128i *dl_ch128,*dl_ch128_2,*dl_ch_mag128,*dl_ch_mag128b,*rxdataF128,*rxdataF_comp128,*rho128;
-  __m128i mmtmpD0,mmtmpD1,mmtmpD2,mmtmpD3,QAM_amp128,QAM_amp128b;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) {
-
-    if (frame_parms->nb_antenna_ports_eNB==1) // 10 out of 12 so don't reduce size
-      nb_rb=1+(5*nb_rb/6);
-    else
-      pilots=1;
-  }
-
-  for (aatx=0; aatx<frame_parms->nb_antenna_ports_eNB; aatx++) {
-    if (mod_order == 4) {
-      QAM_amp128 = _mm_set1_epi16(QAM16_n1);  // 2/sqrt(10)
-      QAM_amp128b = _mm_setzero_si128();
-    } else if (mod_order == 6) {
-      QAM_amp128  = _mm_set1_epi16(QAM64_n1); //
-      QAM_amp128b = _mm_set1_epi16(QAM64_n2);
-    }
-
-    //    printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol);
-
-    for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-
-      dl_ch128          = (__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128      = (__m128i *)&dl_ch_mag[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128b     = (__m128i *)&dl_ch_magb[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
-      rxdataF128        = (__m128i *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-      rxdataF_comp128   = (__m128i *)&rxdataF_comp[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
-
-
-      for (rb=0; rb<nb_rb; rb++) {
-        if (mod_order>2) {
-          // get channel amplitude if not QPSK
-
-          mmtmpD0 = _mm_madd_epi16(dl_ch128[0],dl_ch128[0]);
-          mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-
-          mmtmpD1 = _mm_madd_epi16(dl_ch128[1],dl_ch128[1]);
-          mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-
-          mmtmpD0 = _mm_packs_epi32(mmtmpD0,mmtmpD1);
-
-          // store channel magnitude here in a new field of dlsch
-
-          dl_ch_mag128[0] = _mm_unpacklo_epi16(mmtmpD0,mmtmpD0);
-          dl_ch_mag128b[0] = dl_ch_mag128[0];
-          dl_ch_mag128[0] = _mm_mulhi_epi16(dl_ch_mag128[0],QAM_amp128);
-          dl_ch_mag128[0] = _mm_slli_epi16(dl_ch_mag128[0],1);
-    //print_ints("Re(ch):",(int16_t*)&mmtmpD0);
-    //print_shorts("QAM_amp:",(int16_t*)&QAM_amp128);
-    //print_shorts("mag:",(int16_t*)&dl_ch_mag128[0]);
-          dl_ch_mag128[1] = _mm_unpackhi_epi16(mmtmpD0,mmtmpD0);
-          dl_ch_mag128b[1] = dl_ch_mag128[1];
-          dl_ch_mag128[1] = _mm_mulhi_epi16(dl_ch_mag128[1],QAM_amp128);
-          dl_ch_mag128[1] = _mm_slli_epi16(dl_ch_mag128[1],1);
-
-          if (pilots==0) {
-            mmtmpD0 = _mm_madd_epi16(dl_ch128[2],dl_ch128[2]);
-            mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-            mmtmpD1 = _mm_packs_epi32(mmtmpD0,mmtmpD0);
-
-            dl_ch_mag128[2] = _mm_unpacklo_epi16(mmtmpD1,mmtmpD1);
-            dl_ch_mag128b[2] = dl_ch_mag128[2];
-
-            dl_ch_mag128[2] = _mm_mulhi_epi16(dl_ch_mag128[2],QAM_amp128);
-            dl_ch_mag128[2] = _mm_slli_epi16(dl_ch_mag128[2],1);
-          }
-
-          dl_ch_mag128b[0] = _mm_mulhi_epi16(dl_ch_mag128b[0],QAM_amp128b);
-          dl_ch_mag128b[0] = _mm_slli_epi16(dl_ch_mag128b[0],1);
-
-
-          dl_ch_mag128b[1] = _mm_mulhi_epi16(dl_ch_mag128b[1],QAM_amp128b);
-          dl_ch_mag128b[1] = _mm_slli_epi16(dl_ch_mag128b[1],1);
-
-          if (pilots==0) {
-            dl_ch_mag128b[2] = _mm_mulhi_epi16(dl_ch_mag128b[2],QAM_amp128b);
-            dl_ch_mag128b[2] = _mm_slli_epi16(dl_ch_mag128b[2],1);
-          }
-        }
-
-        // multiply by conjugated channel
-        mmtmpD0 = _mm_madd_epi16(dl_ch128[0],rxdataF128[0]);
-        //  print_ints("re",&mmtmpD0);
-
-        // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-        mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[0],_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)&conjugate[0]);
-        //  print_ints("im",&mmtmpD1);
-        mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[0]);
-        // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-        mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-        //  print_ints("re(shift)",&mmtmpD0);
-        mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-        //  print_ints("im(shift)",&mmtmpD1);
-        mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-        mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-        //        print_ints("c0",&mmtmpD2);
-        //  print_ints("c1",&mmtmpD3);
-        rxdataF_comp128[0] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-        //  print_shorts("rx:",rxdataF128);
-        //  print_shorts("ch:",dl_ch128);
-        //  print_shorts("pack:",rxdataF_comp128);
-
-        // multiply by conjugated channel
-        mmtmpD0 = _mm_madd_epi16(dl_ch128[1],rxdataF128[1]);
-        // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-        mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[1],_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-        mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[1]);
-        // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-        mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-        mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-        mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-        mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-
-        rxdataF_comp128[1] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-        //  print_shorts("rx:",rxdataF128+1);
-        //  print_shorts("ch:",dl_ch128+1);
-        //  print_shorts("pack:",rxdataF_comp128+1);
-
-        if (pilots==0) {
-          // multiply by conjugated channel
-          mmtmpD0 = _mm_madd_epi16(dl_ch128[2],rxdataF128[2]);
-          // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-          mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[2],_MM_SHUFFLE(2,3,0,1));
-          mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-          mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-          mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[2]);
-          // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-          mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-          mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-          mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-          mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-
-          rxdataF_comp128[2] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-          //  print_shorts("rx:",rxdataF128+2);
-          //  print_shorts("ch:",dl_ch128+2);
-          //        print_shorts("pack:",rxdataF_comp128+2);
-
-          dl_ch128+=3;
-          dl_ch_mag128+=3;
-          dl_ch_mag128b+=3;
-          rxdataF128+=3;
-          rxdataF_comp128+=3;
-        } else { // we have a smaller PDSCH in symbols with pilots so skip last group of 4 REs and increment less
-          dl_ch128+=2;
-          dl_ch_mag128+=2;
-          dl_ch_mag128b+=2;
-          rxdataF128+=2;
-          rxdataF_comp128+=2;
-        }
-
-      }
-    }
-  }
-
-  if (rho) {
-
-
-    for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-      rho128        = (__m128i *)&rho[aarx][symbol*frame_parms->N_RB_DL*12];
-      dl_ch128      = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-      dl_ch128_2    = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
-
-      for (rb=0; rb<nb_rb; rb++) {
-        // multiply by conjugated channel
-        mmtmpD0 = _mm_madd_epi16(dl_ch128[0],dl_ch128_2[0]);
-        //  print_ints("re",&mmtmpD0);
-
-        // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-        mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[0],_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)&conjugate[0]);
-        //  print_ints("im",&mmtmpD1);
-        mmtmpD1 = _mm_madd_epi16(mmtmpD1,dl_ch128_2[0]);
-        // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-        mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-        //  print_ints("re(shift)",&mmtmpD0);
-        mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-        //  print_ints("im(shift)",&mmtmpD1);
-        mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-        mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-        //        print_ints("c0",&mmtmpD2);
-        //  print_ints("c1",&mmtmpD3);
-        rho128[0] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-
-        //print_shorts("rx:",dl_ch128_2);
-        //print_shorts("ch:",dl_ch128);
-        //print_shorts("pack:",rho128);
-
-        // multiply by conjugated channel
-        mmtmpD0 = _mm_madd_epi16(dl_ch128[1],dl_ch128_2[1]);
-        // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-        mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[1],_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-        mmtmpD1 = _mm_madd_epi16(mmtmpD1,dl_ch128_2[1]);
-        // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-        mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-        mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-        mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-        mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-
-
-        rho128[1] =_mm_packs_epi32(mmtmpD2,mmtmpD3);
-        //print_shorts("rx:",dl_ch128_2+1);
-        //print_shorts("ch:",dl_ch128+1);
-        //print_shorts("pack:",rho128+1);
-        // multiply by conjugated channel
-        mmtmpD0 = _mm_madd_epi16(dl_ch128[2],dl_ch128_2[2]);
-        // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-        mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[2],_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-        mmtmpD1 = _mm_madd_epi16(mmtmpD1,dl_ch128_2[2]);
-        // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-        mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-        mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-        mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-        mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-
-        rho128[2] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-        //print_shorts("rx:",dl_ch128_2+2);
-        //print_shorts("ch:",dl_ch128+2);
-        //print_shorts("pack:",rho128+2);
-
-        dl_ch128+=3;
-        dl_ch128_2+=3;
-        rho128+=3;
-
-      }
-
-      if (first_symbol_flag==1) {
-        measurements->rx_correlation[0][aarx] = signal_energy(&rho[aarx][symbol*frame_parms->N_RB_DL*12],rb*12);
-      }
-    }
-  }
-
-  _mm_empty();
-  _m_empty();
-
-#elif defined(__arm__)
-
-
-  unsigned short rb;
-  unsigned char aatx,aarx,symbol_mod,pilots=0;
-
-  int16x4_t *dl_ch128,*dl_ch128_2,*rxdataF128;
-  int32x4_t mmtmpD0,mmtmpD1,mmtmpD0b,mmtmpD1b;
-  int16x8_t *dl_ch_mag128,*dl_ch_mag128b,mmtmpD2,mmtmpD3,mmtmpD4;
-  int16x8_t QAM_amp128,QAM_amp128b;
-  int16x4x2_t *rxdataF_comp128,*rho128;
-
-  int16_t conj[4]__attribute__((aligned(16))) = {1,-1,1,-1};
-  int32x4_t output_shift128 = vmovq_n_s32(-(int32_t)output_shift);
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) {
-    if (frame_parms->nb_antenna_ports_eNB==1) { // 10 out of 12 so don't reduce size
-      nb_rb=1+(5*nb_rb/6);
-    }
-    else {
-      pilots=1;
-    }
-  }
-
-  for (aatx=0; aatx<frame_parms->nb_antenna_ports_eNB; aatx++) {
-    if (mod_order == 4) {
-      QAM_amp128  = vmovq_n_s16(QAM16_n1);  // 2/sqrt(10)
-      QAM_amp128b = vmovq_n_s16(0);
-    } else if (mod_order == 6) {
-      QAM_amp128  = vmovq_n_s16(QAM64_n1); //
-      QAM_amp128b = vmovq_n_s16(QAM64_n2);
-    }
-    //    printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol);
-
-    for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-      dl_ch128          = (int16x4_t*)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128      = (int16x8_t*)&dl_ch_mag[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128b     = (int16x8_t*)&dl_ch_magb[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
-      rxdataF128        = (int16x4_t*)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-      rxdataF_comp128   = (int16x4x2_t*)&rxdataF_comp[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
-
-      for (rb=0; rb<nb_rb; rb++) {
-  if (mod_order>2) {
-    // get channel amplitude if not QPSK
-    mmtmpD0 = vmull_s16(dl_ch128[0], dl_ch128[0]);
-    // mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3];
-    mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128);
-    // mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift128 on 32-bits
-    mmtmpD1 = vmull_s16(dl_ch128[1], dl_ch128[1]);
-    mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128);
-    mmtmpD2 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-    // mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift128 on 16-bits
-    mmtmpD0 = vmull_s16(dl_ch128[2], dl_ch128[2]);
-    mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128);
-    mmtmpD1 = vmull_s16(dl_ch128[3], dl_ch128[3]);
-    mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128);
-    mmtmpD3 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-    if (pilots==0) {
-      mmtmpD0 = vmull_s16(dl_ch128[4], dl_ch128[4]);
-      mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128);
-      mmtmpD1 = vmull_s16(dl_ch128[5], dl_ch128[5]);
-      mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128);
-      mmtmpD4 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-    }
-
-    dl_ch_mag128b[0] = vqdmulhq_s16(mmtmpD2,QAM_amp128b);
-    dl_ch_mag128b[1] = vqdmulhq_s16(mmtmpD3,QAM_amp128b);
-    dl_ch_mag128[0] = vqdmulhq_s16(mmtmpD2,QAM_amp128);
-    dl_ch_mag128[1] = vqdmulhq_s16(mmtmpD3,QAM_amp128);
-
-    if (pilots==0) {
-      dl_ch_mag128b[2] = vqdmulhq_s16(mmtmpD4,QAM_amp128b);
-      dl_ch_mag128[2]  = vqdmulhq_s16(mmtmpD4,QAM_amp128);
-    }
-  }
-
-  mmtmpD0 = vmull_s16(dl_ch128[0], rxdataF128[0]);
-  //mmtmpD0 = [Re(ch[0])Re(rx[0]) Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1]) Im(ch[1])Im(ch[1])]
-  mmtmpD1 = vmull_s16(dl_ch128[1], rxdataF128[1]);
-  //mmtmpD1 = [Re(ch[2])Re(rx[2]) Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3]) Im(ch[3])Im(ch[3])]
-  mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-             vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-  //mmtmpD0 = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])]
-
-  mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[0],*(int16x4_t*)conj)), rxdataF128[0]);
-  //mmtmpD0 = [-Im(ch[0])Re(rx[0]) Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1]) Re(ch[1])Im(rx[1])]
-  mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[1],*(int16x4_t*)conj)), rxdataF128[1]);
-  //mmtmpD0 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])]
-  mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-             vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-  //mmtmpD1 = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])]
-
-  mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-  mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-  rxdataF_comp128[0] = vzip_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-  mmtmpD0 = vmull_s16(dl_ch128[2], rxdataF128[2]);
-  mmtmpD1 = vmull_s16(dl_ch128[3], rxdataF128[3]);
-  mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-             vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-  mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[2],*(int16x4_t*)conj)), rxdataF128[2]);
-  mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[3],*(int16x4_t*)conj)), rxdataF128[3]);
-  mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-             vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-  mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-  mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-  rxdataF_comp128[1] = vzip_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-  if (pilots==0) {
-    mmtmpD0 = vmull_s16(dl_ch128[4], rxdataF128[4]);
-    mmtmpD1 = vmull_s16(dl_ch128[5], rxdataF128[5]);
-    mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-         vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-
-    mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[4],*(int16x4_t*)conj)), rxdataF128[4]);
-    mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[5],*(int16x4_t*)conj)), rxdataF128[5]);
-    mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-         vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-
-
-    mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-    mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-    rxdataF_comp128[2] = vzip_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-
-    dl_ch128+=6;
-    dl_ch_mag128+=3;
-    dl_ch_mag128b+=3;
-    rxdataF128+=6;
-    rxdataF_comp128+=3;
-
-  } else { // we have a smaller PDSCH in symbols with pilots so skip last group of 4 REs and increment less
-    dl_ch128+=4;
-    dl_ch_mag128+=2;
-    dl_ch_mag128b+=2;
-    rxdataF128+=4;
-    rxdataF_comp128+=2;
-  }
-      }
-    }
-  }
-
-  if (rho) {
-    for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-      rho128        = (int16x4x2_t*)&rho[aarx][symbol*frame_parms->N_RB_DL*12];
-      dl_ch128      = (int16x4_t*)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-      dl_ch128_2    = (int16x4_t*)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
-      for (rb=0; rb<nb_rb; rb++) {
-  mmtmpD0 = vmull_s16(dl_ch128[0], dl_ch128_2[0]);
-  mmtmpD1 = vmull_s16(dl_ch128[1], dl_ch128_2[1]);
-  mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-             vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-  mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[0],*(int16x4_t*)conj)), dl_ch128_2[0]);
-  mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[1],*(int16x4_t*)conj)), dl_ch128_2[1]);
-  mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-             vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-
-  mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-  mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-  rho128[0] = vzip_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-  mmtmpD0 = vmull_s16(dl_ch128[2], dl_ch128_2[2]);
-  mmtmpD1 = vmull_s16(dl_ch128[3], dl_ch128_2[3]);
-  mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-             vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-  mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[2],*(int16x4_t*)conj)), dl_ch128_2[2]);
-  mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[3],*(int16x4_t*)conj)), dl_ch128_2[3]);
-  mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-             vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-
-  mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-  mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-  rho128[1] = vzip_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-  mmtmpD0 = vmull_s16(dl_ch128[0], dl_ch128_2[0]);
-  mmtmpD1 = vmull_s16(dl_ch128[1], dl_ch128_2[1]);
-  mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-             vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-  mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[4],*(int16x4_t*)conj)), dl_ch128_2[4]);
-  mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch128[5],*(int16x4_t*)conj)), dl_ch128_2[5]);
-  mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-             vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-
-  mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-  mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-  rho128[2] = vzip_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-
-  dl_ch128+=6;
-  dl_ch128_2+=6;
-  rho128+=3;
-      }
-
-      if (first_symbol_flag==1) {
-  measurements->rx_correlation[0][aarx] = signal_energy(&rho[aarx][symbol*frame_parms->N_RB_DL*12],rb*12);
-      }
-    }
-  }
-#endif
-}
-
-#if defined(__x86_64__) || defined(__i386__)
-
-void prec2A_TM56_128(unsigned char pmi,__m128i *ch0,__m128i *ch1)
-{
-
-  __m128i amp;
-  amp = _mm_set1_epi16(ONE_OVER_SQRT2_Q15);
-
-  switch (pmi) {
-
-  case 0 :   // +1 +1
-    //    print_shorts("phase 0 :ch0",ch0);
-    //    print_shorts("phase 0 :ch1",ch1);
-    ch0[0] = _mm_adds_epi16(ch0[0],ch1[0]);
-    break;
-
-  case 1 :   // +1 -1
-    //    print_shorts("phase 1 :ch0",ch0);
-    //    print_shorts("phase 1 :ch1",ch1);
-    ch0[0] = _mm_subs_epi16(ch0[0],ch1[0]);
-    //    print_shorts("phase 1 :ch0-ch1",ch0);
-    break;
-
-  case 2 :   // +1 +j
-    ch1[0] = _mm_sign_epi16(ch1[0],*(__m128i*)&conjugate[0]);
-    ch1[0] = _mm_shufflelo_epi16(ch1[0],_MM_SHUFFLE(2,3,0,1));
-    ch1[0] = _mm_shufflehi_epi16(ch1[0],_MM_SHUFFLE(2,3,0,1));
-    ch0[0] = _mm_subs_epi16(ch0[0],ch1[0]);
-
-    break;   // +1 -j
-
-  case 3 :
-    ch1[0] = _mm_sign_epi16(ch1[0],*(__m128i*)&conjugate[0]);
-    ch1[0] = _mm_shufflelo_epi16(ch1[0],_MM_SHUFFLE(2,3,0,1));
-    ch1[0] = _mm_shufflehi_epi16(ch1[0],_MM_SHUFFLE(2,3,0,1));
-    ch0[0] = _mm_adds_epi16(ch0[0],ch1[0]);
-    break;
-  }
-
-  ch0[0] = _mm_mulhi_epi16(ch0[0],amp);
-  ch0[0] = _mm_slli_epi16(ch0[0],1);
-
-  _mm_empty();
-  _m_empty();
-}
-#elif defined(__arm__)
-void prec2A_TM56_128(unsigned char pmi,__m128i *ch0,__m128i *ch1) {
-
-  // sqrt(2) is already taken into account in computation sqrt_rho_a, sqrt_rho_b,
-  //so removed it
-
-  //__m128i amp;
-  //amp = _mm_set1_epi16(ONE_OVER_SQRT2_Q15);
-
-  switch (pmi) {
-
-  case 0 :   // +1 +1
-    //    print_shorts("phase 0 :ch0",ch0);
-    //    print_shorts("phase 0 :ch1",ch1);
-    ch0[0] = _mm_adds_epi16(ch0[0],ch1[0]);
-    break;
-  case 1 :   // +1 -1
-    //    print_shorts("phase 1 :ch0",ch0);
-    //    print_shorts("phase 1 :ch1",ch1);
-    ch0[0] = _mm_subs_epi16(ch0[0],ch1[0]);
-    //    print_shorts("phase 1 :ch0-ch1",ch0);
-    break;
-  case 2 :   // +1 +j
-    ch1[0] = _mm_sign_epi16(ch1[0],*(__m128i*)&conjugate[0]);
-    ch1[0] = _mm_shufflelo_epi16(ch1[0],_MM_SHUFFLE(2,3,0,1));
-    ch1[0] = _mm_shufflehi_epi16(ch1[0],_MM_SHUFFLE(2,3,0,1));
-    ch0[0] = _mm_subs_epi16(ch0[0],ch1[0]);
-
-    break;   // +1 -j
-  case 3 :
-    ch1[0] = _mm_sign_epi16(ch1[0],*(__m128i*)&conjugate[0]);
-    ch1[0] = _mm_shufflelo_epi16(ch1[0],_MM_SHUFFLE(2,3,0,1));
-    ch1[0] = _mm_shufflehi_epi16(ch1[0],_MM_SHUFFLE(2,3,0,1));
-    ch0[0] = _mm_adds_epi16(ch0[0],ch1[0]);
-    break;
-  }
-
-  //ch0[0] = _mm_mulhi_epi16(ch0[0],amp);
-  //ch0[0] = _mm_slli_epi16(ch0[0],1);
-
-  _mm_empty();
-  _m_empty();
-}
-#endif
-// precoding is stream 0 .5(1,1)  .5(1,-1) .5(1,1)  .5(1,-1)
-//              stream 1 .5(1,-1) .5(1,1)  .5(1,-1) .5(1,1)
-// store "precoded" channel for stream 0 in ch0, stream 1 in ch1
-
-short TM3_prec[8]__attribute__((aligned(16))) = {1,1,-1,-1,1,1,-1,-1} ;
-
-void prec2A_TM3_128(__m128i *ch0,__m128i *ch1) {
-
-  __m128i amp = _mm_set1_epi16(ONE_OVER_SQRT2_Q15);
-
-  __m128i tmp0,tmp1;
-
-  //_mm_mulhi_epi16
-  //  print_shorts("prec2A_TM3 ch0 (before):",ch0);
-  //  print_shorts("prec2A_TM3 ch1 (before):",ch1);
-
-  tmp0 = ch0[0];
-  tmp1  = _mm_sign_epi16(ch1[0],((__m128i*)&TM3_prec)[0]);
-  //  print_shorts("prec2A_TM3 ch1*s (mid):",(__m128i*)TM3_prec);
-
-  ch0[0] = _mm_adds_epi16(ch0[0],tmp1);
-  ch1[0] = _mm_subs_epi16(tmp0,tmp1);
-
-  ch0[0] = _mm_mulhi_epi16(ch0[0],amp);
-  ch0[0] = _mm_slli_epi16(ch0[0],1);
-
-  ch1[0] = _mm_mulhi_epi16(ch1[0],amp);
-  ch1[0] = _mm_slli_epi16(ch1[0],1);
-
-  //  print_shorts("prec2A_TM3 ch0 (mid):",&tmp0);
-  //  print_shorts("prec2A_TM3 ch1 (mid):",ch1);
-
-  //ch0[0] = _mm_mulhi_epi16(ch0[0],amp);
-  //ch0[0] = _mm_slli_epi16(ch0[0],1);
-  //ch1[0] = _mm_mulhi_epi16(ch1[0],amp);
-  //ch1[0] = _mm_slli_epi16(ch1[0],1);
-
-  //ch0[0] = _mm_srai_epi16(ch0[0],1);
-  //ch1[0] = _mm_srai_epi16(ch1[0],1);
-
-  //  print_shorts("prec2A_TM3 ch0 (after):",ch0);
-  //  print_shorts("prec2A_TM3 ch1 (after):",ch1);
-
-  _mm_empty();
-  _m_empty();
-}
-
-// pmi = 0 => stream 0 (1,1), stream 1 (1,-1)
-// pmi = 1 => stream 0 (1,j), stream 2 (1,-j)
-
-void prec2A_TM4_128(int pmi,__m128i *ch0,__m128i *ch1) {
-
-// sqrt(2) is already taken into account in computation sqrt_rho_a, sqrt_rho_b,
-//so divide by 2 is replaced by divide by sqrt(2).
-
- // printf ("demod pmi=%d\n", pmi);
- __m128i amp;
- amp = _mm_set1_epi16(ONE_OVER_SQRT2_Q15);
-  __m128i tmp0,tmp1;
-
- // print_shorts("prec2A_TM4 ch0 (before):",ch0);
- // print_shorts("prec2A_TM4 ch1 (before):",ch1);
-
-  if (pmi == 0) { //[1 1;1 -1]
-    tmp0 = ch0[0];
-    tmp1 = ch1[0];
-    ch0[0] = _mm_adds_epi16(tmp0,tmp1);
-    ch1[0] = _mm_subs_epi16(tmp0,tmp1);
-  }
-  else { //ch0+j*ch1 ch0-j*ch1
-    tmp0 = ch0[0];
-    tmp1   = _mm_sign_epi16(ch1[0],*(__m128i*)&conjugate[0]);
-    tmp1   = _mm_shufflelo_epi16(tmp1,_MM_SHUFFLE(2,3,0,1));
-    tmp1   = _mm_shufflehi_epi16(tmp1,_MM_SHUFFLE(2,3,0,1));
-    ch0[0] = _mm_subs_epi16(tmp0,tmp1);
-    ch1[0] = _mm_add_epi16(tmp0,tmp1);
-  }
-
-  //print_shorts("prec2A_TM4 ch0 (middle):",ch0);
-  //print_shorts("prec2A_TM4 ch1 (middle):",ch1);
-
-  ch0[0] = _mm_mulhi_epi16(ch0[0],amp);
-  ch0[0] = _mm_slli_epi16(ch0[0],1);
-  ch1[0] = _mm_mulhi_epi16(ch1[0],amp);
-  ch1[0] = _mm_slli_epi16(ch1[0],1);
-
-
- // ch0[0] = _mm_srai_epi16(ch0[0],1); //divide by 2
- // ch1[0] = _mm_srai_epi16(ch1[0],1); //divide by 2
-  //print_shorts("prec2A_TM4 ch0 (end):",ch0);
-  //print_shorts("prec2A_TM4 ch1 (end):",ch1);
-  _mm_empty();
-  _m_empty();
- // print_shorts("prec2A_TM4 ch0 (end):",ch0);
-  //print_shorts("prec2A_TM4 ch1 (end):",ch1);
-}
-
-void dlsch_channel_compensation_TM56(int **rxdataF_ext,
-                                     int **dl_ch_estimates_ext,
-                                     int **dl_ch_mag,
-                                     int **dl_ch_magb,
-                                     int **rxdataF_comp,
-                                     unsigned char *pmi_ext,
-                                     LTE_DL_FRAME_PARMS *frame_parms,
-                                     PHY_MEASUREMENTS *measurements,
-                                     int eNB_id,
-                                     unsigned char symbol,
-                                     unsigned char mod_order,
-                                     unsigned short nb_rb,
-                                     unsigned char output_shift,
-                                     unsigned char dl_power_off)
-{
-
-#if defined(__x86_64__) || defined(__i386__)
-
-  unsigned short rb,Nre;
-  __m128i *dl_ch0_128,*dl_ch1_128,*dl_ch_mag128,*dl_ch_mag128b,*rxdataF128,*rxdataF_comp128;
-  unsigned char aarx=0,symbol_mod,pilots=0;
-  int precoded_signal_strength=0;
-  __m128i mmtmpD0,mmtmpD1,mmtmpD2,mmtmpD3,QAM_amp128,QAM_amp128b;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp)))
-    pilots=1;
-
-
-  //printf("comp prec: symbol %d, pilots %d\n",symbol, pilots);
-
-  if (mod_order == 4) {
-    QAM_amp128 = _mm_set1_epi16(QAM16_n1);
-    QAM_amp128b = _mm_setzero_si128();
-  } else if (mod_order == 6) {
-    QAM_amp128  = _mm_set1_epi16(QAM64_n1);
-    QAM_amp128b = _mm_set1_epi16(QAM64_n2);
-  }
-
-  for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-
-    dl_ch0_128          = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch1_128          = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
-
-
-    dl_ch_mag128      = (__m128i *)&dl_ch_mag[aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch_mag128b     = (__m128i *)&dl_ch_magb[aarx][symbol*frame_parms->N_RB_DL*12];
-    rxdataF128        = (__m128i *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-    rxdataF_comp128   = (__m128i *)&rxdataF_comp[aarx][symbol*frame_parms->N_RB_DL*12];
-
-
-    for (rb=0; rb<nb_rb; rb++) {
-      // combine TX channels using precoder from pmi
-#ifdef DEBUG_DLSCH_DEMOD
-      printf("mode 6 prec: rb %d, pmi->%d\n",rb,pmi_ext[rb]);
-#endif
-      prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128[0],&dl_ch1_128[0]);
-      prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128[1],&dl_ch1_128[1]);
-
-      if (pilots==0) {
-
-        prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128[2],&dl_ch1_128[2]);
-      }
-
-      if (mod_order>2) {
-        // get channel amplitude if not QPSK
-
-        mmtmpD0 = _mm_madd_epi16(dl_ch0_128[0],dl_ch0_128[0]);
-        mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-
-        mmtmpD1 = _mm_madd_epi16(dl_ch0_128[1],dl_ch0_128[1]);
-        mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-
-        mmtmpD0 = _mm_packs_epi32(mmtmpD0,mmtmpD1);
-
-        dl_ch_mag128[0] = _mm_unpacklo_epi16(mmtmpD0,mmtmpD0);
-        dl_ch_mag128b[0] = dl_ch_mag128[0];
-        dl_ch_mag128[0] = _mm_mulhi_epi16(dl_ch_mag128[0],QAM_amp128);
-        dl_ch_mag128[0] = _mm_slli_epi16(dl_ch_mag128[0],1);
-
-
-        //print_shorts("dl_ch_mag128[0]=",&dl_ch_mag128[0]);
-
-        //print_shorts("dl_ch_mag128[0]=",&dl_ch_mag128[0]);
-
-        dl_ch_mag128[1] = _mm_unpackhi_epi16(mmtmpD0,mmtmpD0);
-        dl_ch_mag128b[1] = dl_ch_mag128[1];
-        dl_ch_mag128[1] = _mm_mulhi_epi16(dl_ch_mag128[1],QAM_amp128);
-        dl_ch_mag128[1] = _mm_slli_epi16(dl_ch_mag128[1],1);
-
-        if (pilots==0) {
-          mmtmpD0 = _mm_madd_epi16(dl_ch0_128[2],dl_ch0_128[2]);
-          mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-
-          mmtmpD1 = _mm_packs_epi32(mmtmpD0,mmtmpD0);
-
-          dl_ch_mag128[2] = _mm_unpacklo_epi16(mmtmpD1,mmtmpD1);
-          dl_ch_mag128b[2] = dl_ch_mag128[2];
-
-          dl_ch_mag128[2] = _mm_mulhi_epi16(dl_ch_mag128[2],QAM_amp128);
-          dl_ch_mag128[2] = _mm_slli_epi16(dl_ch_mag128[2],1);
-        }
-
-        dl_ch_mag128b[0] = _mm_mulhi_epi16(dl_ch_mag128b[0],QAM_amp128b);
-        dl_ch_mag128b[0] = _mm_slli_epi16(dl_ch_mag128b[0],1);
-
-        //print_shorts("dl_ch_mag128b[0]=",&dl_ch_mag128b[0]);
-
-        dl_ch_mag128b[1] = _mm_mulhi_epi16(dl_ch_mag128b[1],QAM_amp128b);
-        dl_ch_mag128b[1] = _mm_slli_epi16(dl_ch_mag128b[1],1);
-
-        if (pilots==0) {
-          dl_ch_mag128b[2] = _mm_mulhi_epi16(dl_ch_mag128b[2],QAM_amp128b);
-          dl_ch_mag128b[2] = _mm_slli_epi16(dl_ch_mag128b[2],1);
-
-        }
-      }
-
-      // MF multiply by conjugated channel
-      mmtmpD0 = _mm_madd_epi16(dl_ch0_128[0],rxdataF128[0]);
-      //        print_ints("re",&mmtmpD0);
-
-      // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-      mmtmpD1 = _mm_shufflelo_epi16(dl_ch0_128[0],_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)&conjugate[0]);
-
-      //        print_ints("im",&mmtmpD1);
-      mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[0]);
-      // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-      mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-      //        print_ints("re(shift)",&mmtmpD0);
-      mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-      //        print_ints("im(shift)",&mmtmpD1);
-      mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-      mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-      //        print_ints("c0",&mmtmpD2);
-      //        print_ints("c1",&mmtmpD3);
-      rxdataF_comp128[0] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-      //        print_shorts("rx:",rxdataF128);
-      //        print_shorts("ch:",dl_ch128);
-      //        print_shorts("pack:",rxdataF_comp128);
-
-      // multiply by conjugated channel
-      mmtmpD0 = _mm_madd_epi16(dl_ch0_128[1],rxdataF128[1]);
-      // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-      mmtmpD1 = _mm_shufflelo_epi16(dl_ch0_128[1],_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-      mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[1]);
-      // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-      mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-      mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-      mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-      mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-
-      rxdataF_comp128[1] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-      //  print_shorts("rx:",rxdataF128+1);
-      //  print_shorts("ch:",dl_ch128+1);
-      //  print_shorts("pack:",rxdataF_comp128+1);
-
-      if (pilots==0) {
-        // multiply by conjugated channel
-        mmtmpD0 = _mm_madd_epi16(dl_ch0_128[2],rxdataF128[2]);
-        // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-        mmtmpD1 = _mm_shufflelo_epi16(dl_ch0_128[2],_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-        mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[2]);
-        // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-        mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-        mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-        mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-        mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-
-        rxdataF_comp128[2] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-        //  print_shorts("rx:",rxdataF128+2);
-        //  print_shorts("ch:",dl_ch128+2);
-        //        print_shorts("pack:",rxdataF_comp128+2);
-
-        dl_ch0_128+=3;
-        dl_ch1_128+=3;
-        dl_ch_mag128+=3;
-        dl_ch_mag128b+=3;
-        rxdataF128+=3;
-        rxdataF_comp128+=3;
-      } else {
-        dl_ch0_128+=2;
-        dl_ch1_128+=2;
-        dl_ch_mag128+=2;
-        dl_ch_mag128b+=2;
-        rxdataF128+=2;
-        rxdataF_comp128+=2;
-      }
-    }
-
-    Nre = (pilots==0) ? 12 : 8;
-
-    precoded_signal_strength += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*Nre],
-                                                     (nb_rb*Nre))) - (measurements->n0_power[aarx]));
-  } // rx_antennas
-
-  measurements->precoded_cqi_dB[eNB_id][0] = dB_fixed2(precoded_signal_strength,measurements->n0_power_tot);
-
-  //printf("eNB_id %d, symbol %d: precoded CQI %d dB\n",eNB_id,symbol,
-  //   measurements->precoded_cqi_dB[eNB_id][0]);
-
-#elif defined(__arm__)
-
-  uint32_t rb,Nre;
-  uint32_t aarx,symbol_mod,pilots=0;
-
-  int16x4_t *dl_ch0_128,*dl_ch1_128,*rxdataF128;
-  int16x8_t *dl_ch0_128b,*dl_ch1_128b;
-  int32x4_t mmtmpD0,mmtmpD1,mmtmpD0b,mmtmpD1b;
-  int16x8_t *dl_ch_mag128,*dl_ch_mag128b,mmtmpD2,mmtmpD3,mmtmpD4,*rxdataF_comp128;
-  int16x8_t QAM_amp128,QAM_amp128b;
-
-  int16_t conj[4]__attribute__((aligned(16))) = {1,-1,1,-1};
-  int32x4_t output_shift128 = vmovq_n_s32(-(int32_t)output_shift);
-  int32_t precoded_signal_strength=0;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-  if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) {
-    if (frame_parms->nb_antenna_ports_eNB==1) // 10 out of 12 so don't reduce size
-      { nb_rb=1+(5*nb_rb/6); }
-
-    else
-      { pilots=1; }
-  }
-
-
-  if (mod_order == 4) {
-    QAM_amp128  = vmovq_n_s16(QAM16_n1);  // 2/sqrt(10)
-    QAM_amp128b = vmovq_n_s16(0);
-
-  } else if (mod_order == 6) {
-    QAM_amp128  = vmovq_n_s16(QAM64_n1); //
-    QAM_amp128b = vmovq_n_s16(QAM64_n2);
-  }
-
-  //    printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol);
-
-  for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-
-
-
-    dl_ch0_128          = (int16x4_t*)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch1_128          = (int16x4_t*)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch0_128b         = (int16x8_t*)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch1_128b         = (int16x8_t*)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch_mag128        = (int16x8_t*)&dl_ch_mag[aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch_mag128b       = (int16x8_t*)&dl_ch_magb[aarx][symbol*frame_parms->N_RB_DL*12];
-    rxdataF128          = (int16x4_t*)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-    rxdataF_comp128     = (int16x8_t*)&rxdataF_comp[aarx][symbol*frame_parms->N_RB_DL*12];
-
-    for (rb=0; rb<nb_rb; rb++) {
-#ifdef DEBUG_DLSCH_DEMOD
-      printf("mode 6 prec: rb %d, pmi->%d\n",rb,pmi_ext[rb]);
-#endif
-      prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128b[0],&dl_ch1_128b[0]);
-      prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128b[1],&dl_ch1_128b[1]);
-
-      if (pilots==0) {
-        prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128b[2],&dl_ch1_128b[2]);
-      }
-
-      if (mod_order>2) {
-        // get channel amplitude if not QPSK
-        mmtmpD0 = vmull_s16(dl_ch0_128[0], dl_ch0_128[0]);
-        // mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3];
-        mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128);
-        // mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift128 on 32-bits
-        mmtmpD1 = vmull_s16(dl_ch0_128[1], dl_ch0_128[1]);
-        mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128);
-        mmtmpD2 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-        // mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift128 on 16-bits
-        mmtmpD0 = vmull_s16(dl_ch0_128[2], dl_ch0_128[2]);
-        mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128);
-        mmtmpD1 = vmull_s16(dl_ch0_128[3], dl_ch0_128[3]);
-        mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128);
-        mmtmpD3 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-        if (pilots==0) {
-          mmtmpD0 = vmull_s16(dl_ch0_128[4], dl_ch0_128[4]);
-          mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128);
-          mmtmpD1 = vmull_s16(dl_ch0_128[5], dl_ch0_128[5]);
-          mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128);
-          mmtmpD4 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-
-        }
-
-        dl_ch_mag128b[0] = vqdmulhq_s16(mmtmpD2,QAM_amp128b);
-        dl_ch_mag128b[1] = vqdmulhq_s16(mmtmpD3,QAM_amp128b);
-        dl_ch_mag128[0] = vqdmulhq_s16(mmtmpD2,QAM_amp128);
-        dl_ch_mag128[1] = vqdmulhq_s16(mmtmpD3,QAM_amp128);
-
-
-        if (pilots==0) {
-          dl_ch_mag128b[2] = vqdmulhq_s16(mmtmpD4,QAM_amp128b);
-          dl_ch_mag128[2]  = vqdmulhq_s16(mmtmpD4,QAM_amp128);
-        }
-      }
-      mmtmpD0 = vmull_s16(dl_ch0_128[0], rxdataF128[0]);
-      //mmtmpD0 = [Re(ch[0])Re(rx[0]) Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1]) Im(ch[1])Im(ch[1])]
-      mmtmpD1 = vmull_s16(dl_ch0_128[1], rxdataF128[1]);
-      //mmtmpD1 = [Re(ch[2])Re(rx[2]) Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3]) Im(ch[3])Im(ch[3])]
-      mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-                             vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-      //mmtmpD0 = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])]
-
-      mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[0],*(int16x4_t*)conj)), rxdataF128[0]);
-      //mmtmpD0 = [-Im(ch[0])Re(rx[0]) Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1]) Re(ch[1])Im(rx[1])]
-      mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[1],*(int16x4_t*)conj)), rxdataF128[1]);
-      //mmtmpD0 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])]
-      mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-                             vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-      //mmtmpD1 = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])]
-
-      mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-      mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-      rxdataF_comp128[0] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-      mmtmpD0 = vmull_s16(dl_ch0_128[2], rxdataF128[2]);
-      mmtmpD1 = vmull_s16(dl_ch0_128[3], rxdataF128[3]);
-      mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-                             vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-
-      mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[2],*(int16x4_t*)conj)), rxdataF128[2]);
-      mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[3],*(int16x4_t*)conj)), rxdataF128[3]);
-      mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-                             vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-
-      mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-      mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-      rxdataF_comp128[1] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-      if (pilots==0) {
-        mmtmpD0 = vmull_s16(dl_ch0_128[4], rxdataF128[4]);
-        mmtmpD1 = vmull_s16(dl_ch0_128[5], rxdataF128[5]);
-        mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-                               vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-
-        mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[4],*(int16x4_t*)conj)), rxdataF128[4]);
-        mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[5],*(int16x4_t*)conj)), rxdataF128[5]);
-        mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-                               vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-
-
-        mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-        mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-        rxdataF_comp128[2] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-
-        dl_ch0_128+=6;
-        dl_ch1_128+=6;
-        dl_ch_mag128+=3;
-        dl_ch_mag128b+=3;
-        rxdataF128+=6;
-        rxdataF_comp128+=3;
-
-      } else { // we have a smaller PDSCH in symbols with pilots so skip last group of 4 REs and increment less
-        dl_ch0_128+=4;
-        dl_ch1_128+=4;
-        dl_ch_mag128+=2;
-        dl_ch_mag128b+=2;
-        rxdataF128+=4;
-        rxdataF_comp128+=2;
-      }
-    }
-
-    Nre = (pilots==0) ? 12 : 8;
-
-
-    precoded_signal_strength += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*Nre],
-
-                                                     (nb_rb*Nre))) - (measurements->n0_power[aarx]));
-    // rx_antennas
-  }
-  measurements->precoded_cqi_dB[eNB_id][0] = dB_fixed2(precoded_signal_strength,measurements->n0_power_tot);
-
-  //printf("eNB_id %d, symbol %d: precoded CQI %d dB\n",eNB_id,symbol,
-  //     measurements->precoded_cqi_dB[eNB_id][0]);
-
-#endif
-  _mm_empty();
-  _m_empty();
-}
-
-void dlsch_channel_compensation_TM34(LTE_DL_FRAME_PARMS *frame_parms,
-                                    LTE_UE_PDSCH *pdsch_vars,
-                                    PHY_MEASUREMENTS *measurements,
-                                    int eNB_id,
-                                    unsigned char symbol,
-                                    unsigned char mod_order0,
-                                    unsigned char mod_order1,
-                                    int harq_pid,
-                                    int round,
-                                    MIMO_mode_t mimo_mode,
-                                    unsigned short nb_rb,
-                                    unsigned char output_shift0,
-                                    unsigned char output_shift1) {
-
-#if defined(__x86_64__) || defined(__i386__)
-
-  unsigned short rb,Nre;
-  __m128i *dl_ch0_128,*dl_ch1_128,*dl_ch_mag0_128,*dl_ch_mag1_128,*dl_ch_mag0_128b,*dl_ch_mag1_128b,*rxdataF128,*rxdataF_comp0_128,*rxdataF_comp1_128;
-  unsigned char aarx=0,symbol_mod,pilots=0;
-  int precoded_signal_strength0=0,precoded_signal_strength1=0;
-  int rx_power_correction;
-
-  int **rxdataF_ext           = pdsch_vars->rxdataF_ext;
-  int **dl_ch_estimates_ext   = pdsch_vars->dl_ch_estimates_ext;
-  int **dl_ch_mag0            = pdsch_vars->dl_ch_mag0;
-  int **dl_ch_mag1            = pdsch_vars->dl_ch_mag1[harq_pid][round];
-  int **dl_ch_magb0           = pdsch_vars->dl_ch_magb0;
-  int **dl_ch_magb1           = pdsch_vars->dl_ch_magb1[harq_pid][round];
-  int **rxdataF_comp0         = pdsch_vars->rxdataF_comp0;
-  int **rxdataF_comp1         = pdsch_vars->rxdataF_comp1[harq_pid][round];
-  unsigned char *pmi_ext      = pdsch_vars->pmi_ext;
-  __m128i mmtmpD0,mmtmpD1,mmtmpD2,mmtmpD3,QAM_amp0_128,QAM_amp0_128b,QAM_amp1_128,QAM_amp1_128b;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp)))
-    pilots=1;
-
-  rx_power_correction = 1;
-
- // printf("comp prec: symbol %d, pilots %d\n",symbol, pilots);
-
-  if (mod_order0 == 4) {
-    QAM_amp0_128  = _mm_set1_epi16(QAM16_n1);
-    QAM_amp0_128b = _mm_setzero_si128();
-  } else if (mod_order0 == 6) {
-    QAM_amp0_128  = _mm_set1_epi16(QAM64_n1);
-    QAM_amp0_128b = _mm_set1_epi16(QAM64_n2);
-  }
-
-  if (mod_order1 == 4) {
-    QAM_amp1_128  = _mm_set1_epi16(QAM16_n1);
-    QAM_amp1_128b = _mm_setzero_si128();
-  } else if (mod_order1 == 6) {
-    QAM_amp1_128  = _mm_set1_epi16(QAM64_n1);
-    QAM_amp1_128b = _mm_set1_epi16(QAM64_n2);
-  }
-
-  for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
-
-   /* if (aarx==0) {
-      output_shift=output_shift0;
-    }
-      else {
-        output_shift=output_shift1;
-      } */
-
-     // printf("antenna %d\n", aarx);
-   // printf("symbol %d, rx antenna %d\n", symbol, aarx);
-
-    dl_ch0_128          = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12]; // this is h11
-    dl_ch1_128          = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12]; // this is h12
-
-
-    dl_ch_mag0_128      = (__m128i *)&dl_ch_mag0[aarx][symbol*frame_parms->N_RB_DL*12]; //responsible for x1
-    dl_ch_mag0_128b     = (__m128i *)&dl_ch_magb0[aarx][symbol*frame_parms->N_RB_DL*12];//responsible for x1
-    dl_ch_mag1_128      = (__m128i *)&dl_ch_mag1[aarx][symbol*frame_parms->N_RB_DL*12];   //responsible for x2. always coming from tx2
-    dl_ch_mag1_128b     = (__m128i *)&dl_ch_magb1[aarx][symbol*frame_parms->N_RB_DL*12];  //responsible for x2. always coming from tx2
-    rxdataF128          = (__m128i *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12]; //received signal on antenna of interest h11*x1+h12*x2
-    rxdataF_comp0_128   = (__m128i *)&rxdataF_comp0[aarx][symbol*frame_parms->N_RB_DL*12]; //result of multipl with MF x1 on antenna of interest
-    rxdataF_comp1_128   = (__m128i *)&rxdataF_comp1[aarx][symbol*frame_parms->N_RB_DL*12]; //result of multipl with MF x2 on antenna of interest
-
-    for (rb=0; rb<nb_rb; rb++) {
-
-      // combine TX channels using precoder from pmi
-      if (mimo_mode==LARGE_CDD) {
-        prec2A_TM3_128(&dl_ch0_128[0],&dl_ch1_128[0]);
-        prec2A_TM3_128(&dl_ch0_128[1],&dl_ch1_128[1]);
-
-
-        if (pilots==0) {
-          prec2A_TM3_128(&dl_ch0_128[2],&dl_ch1_128[2]);
-        }
-      }
-      else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODING1) {
-        prec2A_TM4_128(0,&dl_ch0_128[0],&dl_ch1_128[0]);
-        prec2A_TM4_128(0,&dl_ch0_128[1],&dl_ch1_128[1]);
-
-        if (pilots==0) {
-          prec2A_TM4_128(0,&dl_ch0_128[2],&dl_ch1_128[2]);
-        }
-      }
-      else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODINGj) {
-        prec2A_TM4_128(1,&dl_ch0_128[0],&dl_ch1_128[0]);
-        prec2A_TM4_128(1,&dl_ch0_128[1],&dl_ch1_128[1]);
-
-        if (pilots==0) {
-          prec2A_TM4_128(1,&dl_ch0_128[2],&dl_ch1_128[2]);
-        }
-      }
-
-        else if (mimo_mode==DUALSTREAM_PUSCH_PRECODING) {
-        prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128[0],&dl_ch1_128[0]);
-        prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128[1],&dl_ch1_128[1]);
-
-        if (pilots==0) {
-          prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128[2],&dl_ch1_128[2]);
-        }
-      }
-
-
-      else {
-        LOG_E(PHY,"Unknown MIMO mode\n");
-        return;
-      }
-
-
-      if (mod_order0>2) {
-        // get channel amplitude if not QPSK
-
-        mmtmpD0 = _mm_madd_epi16(dl_ch0_128[0],dl_ch0_128[0]);
-        mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift0);
-
-        mmtmpD1 = _mm_madd_epi16(dl_ch0_128[1],dl_ch0_128[1]);
-        mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift0);
-
-        mmtmpD0 = _mm_packs_epi32(mmtmpD0,mmtmpD1);
-
-        dl_ch_mag0_128[0] = _mm_unpacklo_epi16(mmtmpD0,mmtmpD0);
-        dl_ch_mag0_128b[0] = dl_ch_mag0_128[0];
-        dl_ch_mag0_128[0] = _mm_mulhi_epi16(dl_ch_mag0_128[0],QAM_amp0_128);
-        dl_ch_mag0_128[0] = _mm_slli_epi16(dl_ch_mag0_128[0],1);
-
-        //  print_shorts("dl_ch_mag0_128[0]=",&dl_ch_mag0_128[0]);
-
-
-        dl_ch_mag0_128[1] = _mm_unpackhi_epi16(mmtmpD0,mmtmpD0);
-        dl_ch_mag0_128b[1] = dl_ch_mag0_128[1];
-        dl_ch_mag0_128[1] = _mm_mulhi_epi16(dl_ch_mag0_128[1],QAM_amp0_128);
-        dl_ch_mag0_128[1] = _mm_slli_epi16(dl_ch_mag0_128[1],1);
-
-        if (pilots==0) {
-          mmtmpD0 = _mm_madd_epi16(dl_ch0_128[2],dl_ch0_128[2]);
-          mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift0);
-
-          mmtmpD1 = _mm_packs_epi32(mmtmpD0,mmtmpD0);
-
-          dl_ch_mag0_128[2] = _mm_unpacklo_epi16(mmtmpD1,mmtmpD1);
-          dl_ch_mag0_128b[2] = dl_ch_mag0_128[2];
-
-          dl_ch_mag0_128[2] = _mm_mulhi_epi16(dl_ch_mag0_128[2],QAM_amp0_128);
-          dl_ch_mag0_128[2] = _mm_slli_epi16(dl_ch_mag0_128[2],1);
-        }
-
-        dl_ch_mag0_128b[0] = _mm_mulhi_epi16(dl_ch_mag0_128b[0],QAM_amp0_128b);
-        dl_ch_mag0_128b[0] = _mm_slli_epi16(dl_ch_mag0_128b[0],1);
-
-       // print_shorts("dl_ch_mag0_128b[0]=",&dl_ch_mag0_128b[0]);
-
-        dl_ch_mag0_128b[1] = _mm_mulhi_epi16(dl_ch_mag0_128b[1],QAM_amp0_128b);
-        dl_ch_mag0_128b[1] = _mm_slli_epi16(dl_ch_mag0_128b[1],1);
-
-        if (pilots==0) {
-          dl_ch_mag0_128b[2] = _mm_mulhi_epi16(dl_ch_mag0_128b[2],QAM_amp0_128b);
-          dl_ch_mag0_128b[2] = _mm_slli_epi16(dl_ch_mag0_128b[2],1);
-        }
-      }
-
-      if (mod_order1>2) {
-        // get channel amplitude if not QPSK
-
-        mmtmpD0 = _mm_madd_epi16(dl_ch1_128[0],dl_ch1_128[0]);
-        mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift1);
-
-        mmtmpD1 = _mm_madd_epi16(dl_ch1_128[1],dl_ch1_128[1]);
-        mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift1);
-
-        mmtmpD0 = _mm_packs_epi32(mmtmpD0,mmtmpD1);
-
-        dl_ch_mag1_128[0] = _mm_unpacklo_epi16(mmtmpD0,mmtmpD0);
-        dl_ch_mag1_128b[0] = dl_ch_mag1_128[0];
-        dl_ch_mag1_128[0] = _mm_mulhi_epi16(dl_ch_mag1_128[0],QAM_amp1_128);
-        dl_ch_mag1_128[0] = _mm_slli_epi16(dl_ch_mag1_128[0],1);
-
-       // print_shorts("dl_ch_mag1_128[0]=",&dl_ch_mag1_128[0]);
-
-        dl_ch_mag1_128[1] = _mm_unpackhi_epi16(mmtmpD0,mmtmpD0);
-        dl_ch_mag1_128b[1] = dl_ch_mag1_128[1];
-        dl_ch_mag1_128[1] = _mm_mulhi_epi16(dl_ch_mag1_128[1],QAM_amp1_128);
-        dl_ch_mag1_128[1] = _mm_slli_epi16(dl_ch_mag1_128[1],1);
-
-        if (pilots==0) {
-          mmtmpD0 = _mm_madd_epi16(dl_ch1_128[2],dl_ch1_128[2]);
-          mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift1);
-
-          mmtmpD1 = _mm_packs_epi32(mmtmpD0,mmtmpD0);
-
-          dl_ch_mag1_128[2] = _mm_unpacklo_epi16(mmtmpD1,mmtmpD1);
-          dl_ch_mag1_128b[2] = dl_ch_mag1_128[2];
-
-          dl_ch_mag1_128[2] = _mm_mulhi_epi16(dl_ch_mag1_128[2],QAM_amp1_128);
-          dl_ch_mag1_128[2] = _mm_slli_epi16(dl_ch_mag1_128[2],1);
-        }
-
-        dl_ch_mag1_128b[0] = _mm_mulhi_epi16(dl_ch_mag1_128b[0],QAM_amp1_128b);
-        dl_ch_mag1_128b[0] = _mm_slli_epi16(dl_ch_mag1_128b[0],1);
-
-       // print_shorts("dl_ch_mag1_128b[0]=",&dl_ch_mag1_128b[0]);
-
-        dl_ch_mag1_128b[1] = _mm_mulhi_epi16(dl_ch_mag1_128b[1],QAM_amp1_128b);
-        dl_ch_mag1_128b[1] = _mm_slli_epi16(dl_ch_mag1_128b[1],1);
-
-        if (pilots==0) {
-          dl_ch_mag1_128b[2] = _mm_mulhi_epi16(dl_ch_mag1_128b[2],QAM_amp1_128b);
-          dl_ch_mag1_128b[2] = _mm_slli_epi16(dl_ch_mag1_128b[2],1);
-        }
-      }
-
-      // layer 0
-      // MF multiply by conjugated channel
-      mmtmpD0 = _mm_madd_epi16(dl_ch0_128[0],rxdataF128[0]);
-    //  print_ints("re",&mmtmpD0);
-
-      // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-      mmtmpD1 = _mm_shufflelo_epi16(dl_ch0_128[0],_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)&conjugate[0]);
-      mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[0]);
-           // print_ints("im",&mmtmpD1);
-      // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-      mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift0);
-           // printf("Shift: %d\n",output_shift);
-          // print_ints("re(shift)",&mmtmpD0);
-      mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift0);
-           // print_ints("im(shift)",&mmtmpD1);
-      mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-      mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-          //  print_ints("c0",&mmtmpD2);
-          // print_ints("c1",&mmtmpD3);
-      rxdataF_comp0_128[0] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-
-           // print_shorts("rx:",rxdataF128);
-           // print_shorts("ch:",dl_ch0_128);
-        // print_shorts("pack:",rxdataF_comp0_128);
-
-      // multiply by conjugated channel
-      mmtmpD0 = _mm_madd_epi16(dl_ch0_128[1],rxdataF128[1]);
-      // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-      mmtmpD1 = _mm_shufflelo_epi16(dl_ch0_128[1],_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-      mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[1]);
-      // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-      mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift0);
-      mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift0);
-      mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-      mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-
-      rxdataF_comp0_128[1] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-           //  print_shorts("rx:",rxdataF128+1);
-            //  print_shorts("ch:",dl_ch0_128+1);
-            // print_shorts("pack:",rxdataF_comp0_128+1);
-
-      if (pilots==0) {
-        // multiply by conjugated channel
-        mmtmpD0 = _mm_madd_epi16(dl_ch0_128[2],rxdataF128[2]);
-        // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-        mmtmpD1 = _mm_shufflelo_epi16(dl_ch0_128[2],_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-        mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[2]);
-        // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-        mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift0);
-        mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift0);
-        mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-        mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-
-        rxdataF_comp0_128[2] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-           //   print_shorts("rx:",rxdataF128+2);
-           //   print_shorts("ch:",dl_ch0_128+2);
-            //  print_shorts("pack:",rxdataF_comp0_128+2);
-
-      }
-
-
-      // layer 1
-      // MF multiply by conjugated channel
-      mmtmpD0 = _mm_madd_epi16(dl_ch1_128[0],rxdataF128[0]);
-           //  print_ints("re",&mmtmpD0);
-
-     // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-      mmtmpD1 = _mm_shufflelo_epi16(dl_ch1_128[0],_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)&conjugate[0]);
-            //  print_ints("im",&mmtmpD1);
-      mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[0]);
-      // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-      mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift1);
-             // print_ints("re(shift)",&mmtmpD0);
-      mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift1);
-             // print_ints("im(shift)",&mmtmpD1);
-      mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-      mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-             // print_ints("c0",&mmtmpD2);
-             // print_ints("c1",&mmtmpD3);
-      rxdataF_comp1_128[0] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-            // print_shorts("rx:",rxdataF128);
-            //  print_shorts("ch:",dl_ch1_128);
-            // print_shorts("pack:",rxdataF_comp1_128);
-
-     // multiply by conjugated channel
-      mmtmpD0 = _mm_madd_epi16(dl_ch1_128[1],rxdataF128[1]);
-      // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-      mmtmpD1 = _mm_shufflelo_epi16(dl_ch1_128[1],_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-      mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[1]);
-      // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-      mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift1);
-      mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift1);
-      mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-      mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-
-      rxdataF_comp1_128[1] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-            //  print_shorts("rx:",rxdataF128+1);
-           // print_shorts("ch:",dl_ch1_128+1);
-            // print_shorts("pack:",rxdataF_comp1_128+1);
-
-      if (pilots==0) {
-        // multiply by conjugated channel
-        mmtmpD0 = _mm_madd_epi16(dl_ch1_128[2],rxdataF128[2]);
-        // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-        mmtmpD1 = _mm_shufflelo_epi16(dl_ch1_128[2],_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-        mmtmpD1 = _mm_madd_epi16(mmtmpD1,rxdataF128[2]);
-        // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-        mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift1);
-        mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift1);
-        mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-        mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-
-        rxdataF_comp1_128[2] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-          //   print_shorts("rx:",rxdataF128+2);
-           //  print_shorts("ch:",dl_ch1_128+2);
-             //         print_shorts("pack:",rxdataF_comp1_128+2);
-
-        dl_ch0_128+=3;
-        dl_ch1_128+=3;
-        dl_ch_mag0_128+=3;
-        dl_ch_mag1_128+=3;
-        dl_ch_mag0_128b+=3;
-        dl_ch_mag1_128b+=3;
-        rxdataF128+=3;
-        rxdataF_comp0_128+=3;
-        rxdataF_comp1_128+=3;
-      }
-      else {
-        dl_ch0_128+=2;
-        dl_ch1_128+=2;
-        dl_ch_mag0_128+=2;
-        dl_ch_mag1_128+=2;
-        dl_ch_mag0_128b+=2;
-        dl_ch_mag1_128b+=2;
-        rxdataF128+=2;
-        rxdataF_comp0_128+=2;
-        rxdataF_comp1_128+=2;
-      }
-
-    } // rb loop
-    Nre = (pilots==0) ? 12 : 8;
-
-    precoded_signal_strength0 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*Nre],
-                                                        (nb_rb*Nre))*rx_power_correction) - (measurements->n0_power[aarx]));
-
-    precoded_signal_strength1 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx+2][symbol*frame_parms->N_RB_DL*Nre],
-                                                        (nb_rb*Nre))*rx_power_correction) - (measurements->n0_power[aarx]));
-  } // rx_antennas
-
-  measurements->precoded_cqi_dB[eNB_id][0] = dB_fixed2(precoded_signal_strength0,measurements->n0_power_tot);
-  measurements->precoded_cqi_dB[eNB_id][1] = dB_fixed2(precoded_signal_strength1,measurements->n0_power_tot);
-
- // printf("eNB_id %d, symbol %d: precoded CQI %d dB\n",eNB_id,symbol,
-     //  measurements->precoded_cqi_dB[eNB_id][0]);
-
-  _mm_empty();
-  _m_empty();
-
-  #elif defined(__arm__)
-
-  unsigned short rb,Nre;
-  unsigned char aarx,symbol_mod,pilots=0;
-  int precoded_signal_strength0=0,precoded_signal_strength1=0, rx_power_correction;
-  int16x4_t *dl_ch0_128,*rxdataF128;
-  int16x4_t *dl_ch1_128;
-  int16x8_t *dl_ch0_128b,*dl_ch1_128b;
-
-  int32x4_t mmtmpD0,mmtmpD1,mmtmpD0b,mmtmpD1b;
-  int16x8_t *dl_ch_mag0_128,*dl_ch_mag0_128b,*dl_ch_mag1_128,*dl_ch_mag1_128b,mmtmpD2,mmtmpD3,mmtmpD4,*rxdataF_comp0_128,*rxdataF_comp1_128;
-  int16x8_t QAM_amp0_128,QAM_amp0_128b,QAM_amp1_128,QAM_amp1_128b;
-  int32x4_t output_shift128 = vmovq_n_s32(-(int32_t)output_shift);
-
-  int **rxdataF_ext           = pdsch_vars->rxdataF_ext;
-  int **dl_ch_estimates_ext   = pdsch_vars->dl_ch_estimates_ext;
-  int **dl_ch_mag0            = pdsch_vars->dl_ch_mag0;
-  int **dl_ch_mag1            = pdsch_vars->dl_ch_mag1[harq_pid][round];
-  int **dl_ch_magb0           = pdsch_vars->dl_ch_magb0;
-  int **dl_ch_magb1           = pdsch_vars->dl_ch_magb1[harq_pid][round];
-  int **rxdataF_comp0         = pdsch_vars->rxdataF_comp0;
-  int **rxdataF_comp1         = pdsch_vars->rxdataF_comp1[harq_pid][round];
-
-  int16_t conj[4]__attribute__((aligned(16))) = {1,-1,1,-1};
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) {
-    if (frame_parms->nb_antenna_ports_eNB==1) // 10 out of 12 so don't reduce size
-      { nb_rb=1+(5*nb_rb/6); }
-
-    else
-      { pilots=1; }
-  }
-
-  rx_power_correction=1;
-
-  if (mod_order0 == 4) {
-    QAM_amp0_128  = vmovq_n_s16(QAM16_n1);  // 2/sqrt(10)
-    QAM_amp0_128b = vmovq_n_s16(0);
-
-  } else if (mod_order0 == 6) {
-    QAM_amp0_128  = vmovq_n_s16(QAM64_n1); //
-    QAM_amp0_128b = vmovq_n_s16(QAM64_n2);
-  }
-
-  if (mod_order1 == 4) {
-    QAM_amp1_128  = vmovq_n_s16(QAM16_n1);  // 2/sqrt(10)
-    QAM_amp1_128b = vmovq_n_s16(0);
-
-  } else if (mod_order1 == 6) {
-    QAM_amp1_128  = vmovq_n_s16(QAM64_n1); //
-    QAM_amp1_128b = vmovq_n_s16(QAM64_n2);
-  }
-
-  //    printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol);
-
-  for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-
-
-
-    dl_ch0_128          = (int16x4_t*)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch1_128          = (int16x4_t*)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch0_128b          = (int16x8_t*)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch1_128b          = (int16x8_t*)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch_mag0_128      = (int16x8_t*)&dl_ch_mag0[aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch_mag0_128b     = (int16x8_t*)&dl_ch_magb0[aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch_mag1_128      = (int16x8_t*)&dl_ch_mag1[aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch_mag1_128b     = (int16x8_t*)&dl_ch_magb1[aarx][symbol*frame_parms->N_RB_DL*12];
-    rxdataF128          = (int16x4_t*)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-    rxdataF_comp0_128   = (int16x8_t*)&rxdataF_comp0[aarx][symbol*frame_parms->N_RB_DL*12];
-    rxdataF_comp1_128   = (int16x8_t*)&rxdataF_comp1[aarx][symbol*frame_parms->N_RB_DL*12];
-
-    for (rb=0; rb<nb_rb; rb++) {
-      // combine TX channels using precoder from pmi
-      if (mimo_mode==LARGE_CDD) {
-        prec2A_TM3_128(&dl_ch0_128[0],&dl_ch1_128[0]);
-        prec2A_TM3_128(&dl_ch0_128[1],&dl_ch1_128[1]);
-
-
-        if (pilots==0) {
-          prec2A_TM3_128(&dl_ch0_128[2],&dl_ch1_128[2]);
-        }
-      }
-      else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODING1) {
-        prec2A_TM4_128(0,&dl_ch0_128[0],&dl_ch1_128[0]);
-        prec2A_TM4_128(0,&dl_ch0_128[1],&dl_ch1_128[1]);
-
-        if (pilots==0) {
-          prec2A_TM4_128(0,&dl_ch0_128[2],&dl_ch1_128[2]);
-        }
-      }
-      else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODINGj) {
-        prec2A_TM4_128(1,&dl_ch0_128[0],&dl_ch1_128[0]);
-        prec2A_TM4_128(1,&dl_ch0_128[1],&dl_ch1_128[1]);
-
-        if (pilots==0) {
-          prec2A_TM4_128(1,&dl_ch0_128[2],&dl_ch1_128[2]);
-        }
-      }
-      else {
-        LOG_E(PHY,"Unknown MIMO mode\n");
-        return;
-      }
-
-
-      if (mod_order0>2) {
-        // get channel amplitude if not QPSK
-        mmtmpD0 = vmull_s16(dl_ch0_128[0], dl_ch0_128[0]);
-        // mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3];
-        mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128);
-        // mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift128 on 32-bits
-        mmtmpD1 = vmull_s16(dl_ch0_128[1], dl_ch0_128[1]);
-        mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128);
-        mmtmpD2 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-        // mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift128 on 16-bits
-        mmtmpD0 = vmull_s16(dl_ch0_128[2], dl_ch0_128[2]);
-        mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128);
-        mmtmpD1 = vmull_s16(dl_ch0_128[3], dl_ch0_128[3]);
-        mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128);
-        mmtmpD3 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-        if (pilots==0) {
-          mmtmpD0 = vmull_s16(dl_ch0_128[4], dl_ch0_128[4]);
-          mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128);
-          mmtmpD1 = vmull_s16(dl_ch0_128[5], dl_ch0_128[5]);
-          mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128);
-          mmtmpD4 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-
-        }
-
-        dl_ch_mag0_128b[0] = vqdmulhq_s16(mmtmpD2,QAM_amp0_128b);
-        dl_ch_mag0_128b[1] = vqdmulhq_s16(mmtmpD3,QAM_amp0_128b);
-        dl_ch_mag0_128[0] = vqdmulhq_s16(mmtmpD2,QAM_amp0_128);
-        dl_ch_mag0_128[1] = vqdmulhq_s16(mmtmpD3,QAM_amp0_128);
-
-
-        if (pilots==0) {
-          dl_ch_mag0_128b[2] = vqdmulhq_s16(mmtmpD4,QAM_amp0_128b);
-          dl_ch_mag0_128[2]  = vqdmulhq_s16(mmtmpD4,QAM_amp0_128);
-        }
-      }
-
-      if (mod_order1>2) {
-        // get channel amplitude if not QPSK
-        mmtmpD0 = vmull_s16(dl_ch1_128[0], dl_ch1_128[0]);
-        // mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3];
-        mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128);
-        // mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift128 on 32-bits
-        mmtmpD1 = vmull_s16(dl_ch1_128[1], dl_ch1_128[1]);
-        mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128);
-        mmtmpD2 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-        // mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift128 on 16-bits
-        mmtmpD0 = vmull_s16(dl_ch1_128[2], dl_ch1_128[2]);
-        mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128);
-        mmtmpD1 = vmull_s16(dl_ch1_128[3], dl_ch1_128[3]);
-        mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128);
-        mmtmpD3 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-        if (pilots==0) {
-          mmtmpD0 = vmull_s16(dl_ch1_128[4], dl_ch1_128[4]);
-          mmtmpD0 = vqshlq_s32(vqaddq_s32(mmtmpD0,vrev64q_s32(mmtmpD0)),output_shift128);
-          mmtmpD1 = vmull_s16(dl_ch1_128[5], dl_ch1_128[5]);
-          mmtmpD1 = vqshlq_s32(vqaddq_s32(mmtmpD1,vrev64q_s32(mmtmpD1)),output_shift128);
-          mmtmpD4 = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-
-        }
-
-        dl_ch_mag1_128b[0] = vqdmulhq_s16(mmtmpD2,QAM_amp1_128b);
-        dl_ch_mag1_128b[1] = vqdmulhq_s16(mmtmpD3,QAM_amp1_128b);
-        dl_ch_mag1_128[0] = vqdmulhq_s16(mmtmpD2,QAM_amp1_128);
-        dl_ch_mag1_128[1] = vqdmulhq_s16(mmtmpD3,QAM_amp1_128);
-
-
-        if (pilots==0) {
-          dl_ch_mag1_128b[2] = vqdmulhq_s16(mmtmpD4,QAM_amp1_128b);
-          dl_ch_mag1_128[2]  = vqdmulhq_s16(mmtmpD4,QAM_amp1_128);
-        }
-      }
-
-      mmtmpD0 = vmull_s16(dl_ch0_128[0], rxdataF128[0]);
-      //mmtmpD0 = [Re(ch[0])Re(rx[0]) Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1]) Im(ch[1])Im(ch[1])]
-      mmtmpD1 = vmull_s16(dl_ch0_128[1], rxdataF128[1]);
-      //mmtmpD1 = [Re(ch[2])Re(rx[2]) Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3]) Im(ch[3])Im(ch[3])]
-      mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-                             vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-      //mmtmpD0 = [Re(ch[0])Re(rx[0])+Im(ch[0])Im(ch[0]) Re(ch[1])Re(rx[1])+Im(ch[1])Im(ch[1]) Re(ch[2])Re(rx[2])+Im(ch[2])Im(ch[2]) Re(ch[3])Re(rx[3])+Im(ch[3])Im(ch[3])]
-
-      mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[0],*(int16x4_t*)conj)), rxdataF128[0]);
-      //mmtmpD0 = [-Im(ch[0])Re(rx[0]) Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1]) Re(ch[1])Im(rx[1])]
-      mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[1],*(int16x4_t*)conj)), rxdataF128[1]);
-      //mmtmpD0 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])]
-      mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-                             vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-      //mmtmpD1 = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])]
-
-      mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-      mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-      rxdataF_comp0_128[0] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-      mmtmpD0 = vmull_s16(dl_ch0_128[2], rxdataF128[2]);
-      mmtmpD1 = vmull_s16(dl_ch0_128[3], rxdataF128[3]);
-      mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-                             vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-
-      mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[2],*(int16x4_t*)conj)), rxdataF128[2]);
-      mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[3],*(int16x4_t*)conj)), rxdataF128[3]);
-      mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-                             vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-
-      mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-      mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-      rxdataF_comp0_128[1] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-      // second stream
-      mmtmpD0 = vmull_s16(dl_ch1_128[0], rxdataF128[0]);
-      mmtmpD1 = vmull_s16(dl_ch1_128[1], rxdataF128[1]);
-      mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-                             vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-      mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[0],*(int16x4_t*)conj)), rxdataF128[0]);
-
-      mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[1],*(int16x4_t*)conj)), rxdataF128[1]);
-      //mmtmpD0 = [-Im(ch[2])Re(rx[2]) Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3]) Re(ch[3])Im(rx[3])]
-      mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-                             vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-      //mmtmpD1 = [-Im(ch[0])Re(rx[0])+Re(ch[0])Im(rx[0]) -Im(ch[1])Re(rx[1])+Re(ch[1])Im(rx[1]) -Im(ch[2])Re(rx[2])+Re(ch[2])Im(rx[2]) -Im(ch[3])Re(rx[3])+Re(ch[3])Im(rx[3])]
-
-      mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-      mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-      rxdataF_comp1_128[0] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-      mmtmpD0 = vmull_s16(dl_ch1_128[2], rxdataF128[2]);
-      mmtmpD1 = vmull_s16(dl_ch1_128[3], rxdataF128[3]);
-      mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-                             vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-
-      mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[2],*(int16x4_t*)conj)), rxdataF128[2]);
-      mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[3],*(int16x4_t*)conj)), rxdataF128[3]);
-      mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-                             vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-
-      mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-      mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-      rxdataF_comp1_128[1] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-
-      if (pilots==0) {
-        mmtmpD0 = vmull_s16(dl_ch0_128[4], rxdataF128[4]);
-        mmtmpD1 = vmull_s16(dl_ch0_128[5], rxdataF128[5]);
-        mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-                               vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-
-        mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[4],*(int16x4_t*)conj)), rxdataF128[4]);
-        mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch0_128[5],*(int16x4_t*)conj)), rxdataF128[5]);
-        mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-                               vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-
-
-        mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-        mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-        rxdataF_comp0_128[2] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-        mmtmpD0 = vmull_s16(dl_ch1_128[4], rxdataF128[4]);
-        mmtmpD1 = vmull_s16(dl_ch1_128[5], rxdataF128[5]);
-        mmtmpD0 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0),vget_high_s32(mmtmpD0)),
-                               vpadd_s32(vget_low_s32(mmtmpD1),vget_high_s32(mmtmpD1)));
-
-        mmtmpD0b = vmull_s16(vrev32_s16(vmul_s16(dl_ch1_128[4],*(int16x4_t*)conj)), rxdataF128[4]);
-        mmtmpD1b = vmull_s16(vrev32_s16(vmul_s16(dl_ch1_128[5],*(int16x4_t*)conj)), rxdataF128[5]);
-        mmtmpD1 = vcombine_s32(vpadd_s32(vget_low_s32(mmtmpD0b),vget_high_s32(mmtmpD0b)),
-                               vpadd_s32(vget_low_s32(mmtmpD1b),vget_high_s32(mmtmpD1b)));
-
-
-        mmtmpD0 = vqshlq_s32(mmtmpD0,output_shift128);
-        mmtmpD1 = vqshlq_s32(mmtmpD1,output_shift128);
-        rxdataF_comp1_128[2] = vcombine_s16(vmovn_s32(mmtmpD0),vmovn_s32(mmtmpD1));
-      }
-    }
-
-
-
-    Nre = (pilots==0) ? 12 : 8;
-
-    // rx_antennas
-  }
-
-
-  Nre = (pilots==0) ? 12 : 8;
-
-  precoded_signal_strength0 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*Nre],
-                                                        (nb_rb*Nre))*rx_power_correction) - (measurements->n0_power[aarx]));
-  precoded_signal_strength1 += ((signal_energy_nodc(&dl_ch_estimates_ext[aarx+2][symbol*frame_parms->N_RB_DL*Nre],
-                                                        (nb_rb*Nre))*rx_power_correction) - (measurements->n0_power[aarx]));
-
-  measurements->precoded_cqi_dB[eNB_id][0] = dB_fixed2(precoded_signal_strength0,measurements->n0_power_tot);
-  measurements->precoded_cqi_dB[eNB_id][1] = dB_fixed2(precoded_signal_strength1,measurements->n0_power_tot);
-
-#endif
-}
-
-
-void dlsch_dual_stream_correlation(LTE_DL_FRAME_PARMS *frame_parms,
-                                   unsigned char symbol,
-                                   unsigned short nb_rb,
-                                   int **dl_ch_estimates_ext,
-                                   int **dl_ch_estimates_ext_i,
-                                   int **dl_ch_rho_ext,
-                                   unsigned char output_shift)
-{
-
-#if defined(__x86_64__)||defined(__i386__)
-
-  unsigned short rb;
-  __m128i *dl_ch128,*dl_ch128i,*dl_ch_rho128,mmtmpD0,mmtmpD1,mmtmpD2,mmtmpD3;
-  unsigned char aarx,symbol_mod,pilots=0;
-
-  //    printf("dlsch_dual_stream_correlation: symbol %d\n",symbol);
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) {
-    pilots=1;
-  }
-
-  //  printf("Dual stream correlation (%p)\n",dl_ch_estimates_ext_i);
-
-  for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-
-
-
- //printf ("antenna %d", aarx);
-    dl_ch128          = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-
-    if (dl_ch_estimates_ext_i == NULL) // TM3/4
-      dl_ch128i         = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
-    else
-      dl_ch128i         = (__m128i *)&dl_ch_estimates_ext_i[aarx][symbol*frame_parms->N_RB_DL*12];
-
-    dl_ch_rho128      = (__m128i *)&dl_ch_rho_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-
-
-    for (rb=0; rb<nb_rb; rb++) {
-      // multiply by conjugated channel
-      mmtmpD0 = _mm_madd_epi16(dl_ch128[0],dl_ch128i[0]);
-      //      print_ints("re",&mmtmpD0);
-      // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-      mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[0],_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)&conjugate[0]);
-      mmtmpD1 = _mm_madd_epi16(mmtmpD1,dl_ch128i[0]);
-      //      print_ints("im",&mmtmpD1);
-      // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-      mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-      //      print_ints("re(shift)",&mmtmpD0);
-      mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-      //      print_ints("im(shift)",&mmtmpD1);
-      mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-      mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-      //      print_ints("c0",&mmtmpD2);
-      //      print_ints("c1",&mmtmpD3);
-      dl_ch_rho128[0] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-    // print_shorts("rho 0:",dl_ch_rho128);
-      // multiply by conjugated channel
-      mmtmpD0 = _mm_madd_epi16(dl_ch128[1],dl_ch128i[1]);
-      // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-      mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[1],_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-      mmtmpD1 = _mm_madd_epi16(mmtmpD1,dl_ch128i[1]);
-      // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-      mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-      mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-      mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-      mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-      dl_ch_rho128[1] =_mm_packs_epi32(mmtmpD2,mmtmpD3);
-
-
-      if (pilots==0) {
-
-        // multiply by conjugated channel
-        mmtmpD0 = _mm_madd_epi16(dl_ch128[2],dl_ch128i[2]);
-        // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-        mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[2],_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-        mmtmpD1 = _mm_madd_epi16(mmtmpD1,dl_ch128i[2]);
-        // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-        mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-        mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-        mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-        mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-        dl_ch_rho128[2] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-
-       dl_ch128+=3;
-        dl_ch128i+=3;
-        dl_ch_rho128+=3;
-      } else {
-
-        dl_ch128+=2;
-        dl_ch128i+=2;
-        dl_ch_rho128+=2;
-      }
-    }
-
-  }
-
-  _mm_empty();
-  _m_empty();
-
-#elif defined(__arm__)
-
-#endif
-}
-
-
-/*void dlsch_dual_stream_correlationTM34(LTE_DL_FRAME_PARMS *frame_parms,
-                                   unsigned char symbol,
-                                   unsigned short nb_rb,
-                                   int **dl_ch_estimates_ext,
-                                   int **dl_ch_estimates_ext_i,
-                                   int **dl_ch_rho_ext,
-                                   unsigned char output_shift0,
-                                   unsigned char output_shift1)
-{
-
-#if defined(__x86_64__)||defined(__i386__)
-
-  unsigned short rb;
-  __m128i *dl_ch128,*dl_ch128i,*dl_ch_rho128,mmtmpD0,mmtmpD1,mmtmpD2,mmtmpD3;
-  unsigned char aarx,symbol_mod,pilots=0;
-  int output_shift;
-
-  //    printf("dlsch_dual_stream_correlation: symbol %d\n",symbol);
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) {
-    pilots=1;
-  }
-
-  //  printf("Dual stream correlation (%p)\n",dl_ch_estimates_ext_i);
-
-  for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-
-       if (aarx==0) {
-      output_shift=output_shift0;
-    }
-      else {
-        output_shift=output_shift1;
-      }
-
- //printf ("antenna %d", aarx);
-    dl_ch128          = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-
-    if (dl_ch_estimates_ext_i == NULL) // TM3/4
-      dl_ch128i         = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
-    else
-      dl_ch128i         = (__m128i *)&dl_ch_estimates_ext_i[aarx][symbol*frame_parms->N_RB_DL*12];
-
-    dl_ch_rho128      = (__m128i *)&dl_ch_rho_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-
-
-    for (rb=0; rb<nb_rb; rb++) {
-      // multiply by conjugated channel
-      mmtmpD0 = _mm_madd_epi16(dl_ch128[0],dl_ch128i[0]);
-      //      print_ints("re",&mmtmpD0);
-      // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-      mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[0],_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)&conjugate[0]);
-      mmtmpD1 = _mm_madd_epi16(mmtmpD1,dl_ch128i[0]);
-      //      print_ints("im",&mmtmpD1);
-      // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-      mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-      //      print_ints("re(shift)",&mmtmpD0);
-      mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-      //      print_ints("im(shift)",&mmtmpD1);
-      mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-      mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-      //      print_ints("c0",&mmtmpD2);
-      //      print_ints("c1",&mmtmpD3);
-      dl_ch_rho128[0] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-    // print_shorts("rho 0:",dl_ch_rho128);
-      // multiply by conjugated channel
-      mmtmpD0 = _mm_madd_epi16(dl_ch128[1],dl_ch128i[1]);
-      // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-      mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[1],_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-      mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-      mmtmpD1 = _mm_madd_epi16(mmtmpD1,dl_ch128i[1]);
-      // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-      mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-      mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-      mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-      mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-      dl_ch_rho128[1] =_mm_packs_epi32(mmtmpD2,mmtmpD3);
-
-
-      if (pilots==0) {
-
-        // multiply by conjugated channel
-        mmtmpD0 = _mm_madd_epi16(dl_ch128[2],dl_ch128i[2]);
-        // mmtmpD0 contains real part of 4 consecutive outputs (32-bit)
-        mmtmpD1 = _mm_shufflelo_epi16(dl_ch128[2],_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_shufflehi_epi16(mmtmpD1,_MM_SHUFFLE(2,3,0,1));
-        mmtmpD1 = _mm_sign_epi16(mmtmpD1,*(__m128i*)conjugate);
-        mmtmpD1 = _mm_madd_epi16(mmtmpD1,dl_ch128i[2]);
-        // mmtmpD1 contains imag part of 4 consecutive outputs (32-bit)
-        mmtmpD0 = _mm_srai_epi32(mmtmpD0,output_shift);
-        mmtmpD1 = _mm_srai_epi32(mmtmpD1,output_shift);
-        mmtmpD2 = _mm_unpacklo_epi32(mmtmpD0,mmtmpD1);
-        mmtmpD3 = _mm_unpackhi_epi32(mmtmpD0,mmtmpD1);
-        dl_ch_rho128[2] = _mm_packs_epi32(mmtmpD2,mmtmpD3);
-
-       dl_ch128+=3;
-        dl_ch128i+=3;
-        dl_ch_rho128+=3;
-      } else {
-
-        dl_ch128+=2;
-        dl_ch128i+=2;
-        dl_ch_rho128+=2;
-      }
-    }
-
-  }
-
-  _mm_empty();
-  _m_empty();
-
-#elif defined(__arm__)
-
-#endif
-}
-*/
-
-void dlsch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms,
-                         int **rxdataF_comp,
-                         int **rxdataF_comp_i,
-                         int **rho,
-                         int **rho_i,
-                         int **dl_ch_mag,
-                         int **dl_ch_magb,
-                         int **dl_ch_mag_i,
-                         int **dl_ch_magb_i,
-                         unsigned char symbol,
-                         unsigned short nb_rb,
-                         unsigned char dual_stream_UE)
-{
-
-#if defined(__x86_64__)||defined(__i386__)
-
-  unsigned char aatx;
-  int i;
-  __m128i *rxdataF_comp128_0,*rxdataF_comp128_1,*rxdataF_comp128_i0,*rxdataF_comp128_i1,*dl_ch_mag128_0,*dl_ch_mag128_1,*dl_ch_mag128_0b,*dl_ch_mag128_1b,*rho128_0,*rho128_1,*rho128_i0,*rho128_i1,
-    *dl_ch_mag128_i0,*dl_ch_mag128_i1,*dl_ch_mag128_i0b,*dl_ch_mag128_i1b;
-
-  if (frame_parms->nb_antennas_rx>1) {
-
-    for (aatx=0; aatx<frame_parms->nb_antenna_ports_eNB; aatx++) {
-
-      rxdataF_comp128_0   = (__m128i *)&rxdataF_comp[(aatx<<1)][symbol*frame_parms->N_RB_DL*12];
-      rxdataF_comp128_1   = (__m128i *)&rxdataF_comp[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_0      = (__m128i *)&dl_ch_mag[(aatx<<1)][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_1      = (__m128i *)&dl_ch_mag[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_0b     = (__m128i *)&dl_ch_magb[(aatx<<1)][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_1b     = (__m128i *)&dl_ch_magb[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12];
-
-      // MRC on each re of rb, both on MF output and magnitude (for 16QAM/64QAM llr computation)
-      for (i=0;i<nb_rb*3;i++) {
-        rxdataF_comp128_0[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_0[i],1),_mm_srai_epi16(rxdataF_comp128_1[i],1));
-        dl_ch_mag128_0[i]    = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_0[i],1),_mm_srai_epi16(dl_ch_mag128_1[i],1));
-        dl_ch_mag128_0b[i]   = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_0b[i],1),_mm_srai_epi16(dl_ch_mag128_1b[i],1));
-          //       print_shorts("mrc comp0:",&rxdataF_comp128_0[i]);
-        //       print_shorts("mrc mag0:",&dl_ch_mag128_0[i]);
-        //       print_shorts("mrc mag0b:",&dl_ch_mag128_0b[i]);
-        //      print_shorts("mrc rho1:",&rho128_1[i]);
-
-      }
-    }
-
-    if (rho) {
-      rho128_0 = (__m128i *) &rho[0][symbol*frame_parms->N_RB_DL*12];
-      rho128_1 = (__m128i *) &rho[1][symbol*frame_parms->N_RB_DL*12];
-      for (i=0;i<nb_rb*3;i++) {
-        //      print_shorts("mrc rho0:",&rho128_0[i]);
-        //      print_shorts("mrc rho1:",&rho128_1[i]);
-        rho128_0[i] = _mm_adds_epi16(_mm_srai_epi16(rho128_0[i],1),_mm_srai_epi16(rho128_1[i],1));
-      }
-    }
-
-
-    if (dual_stream_UE == 1) {
-      rho128_i0 = (__m128i *) &rho_i[0][symbol*frame_parms->N_RB_DL*12];
-      rho128_i1 = (__m128i *) &rho_i[1][symbol*frame_parms->N_RB_DL*12];
-      rxdataF_comp128_i0   = (__m128i *)&rxdataF_comp_i[0][symbol*frame_parms->N_RB_DL*12];
-      rxdataF_comp128_i1   = (__m128i *)&rxdataF_comp_i[1][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_i0      = (__m128i *)&dl_ch_mag_i[0][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_i1      = (__m128i *)&dl_ch_mag_i[1][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_i0b     = (__m128i *)&dl_ch_magb_i[0][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_i1b     = (__m128i *)&dl_ch_magb_i[1][symbol*frame_parms->N_RB_DL*12];
-
-      for (i=0; i<nb_rb*3; i++) {
-        rxdataF_comp128_i0[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_i0[i],1),_mm_srai_epi16(rxdataF_comp128_i1[i],1));
-        rho128_i0[i]           = _mm_adds_epi16(_mm_srai_epi16(rho128_i0[i],1),_mm_srai_epi16(rho128_i1[i],1));
-
-        dl_ch_mag128_i0[i]    = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_i0[i],1),_mm_srai_epi16(dl_ch_mag128_i1[i],1));
-        dl_ch_mag128_i0b[i]    = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_i0b[i],1),_mm_srai_epi16(dl_ch_mag128_i1b[i],1));
-      }
-    }
-  }
-
-  _mm_empty();
-  _m_empty();
-
-#elif defined(__arm__)
-
-  unsigned char aatx;
-  int i;
-  int16x8_t *rxdataF_comp128_0,*rxdataF_comp128_1,*rxdataF_comp128_i0,*rxdataF_comp128_i1,*dl_ch_mag128_0,*dl_ch_mag128_1,*dl_ch_mag128_0b,*dl_ch_mag128_1b,*rho128_0,*rho128_1,*rho128_i0,*rho128_i1,*dl_ch_mag128_i0,*dl_ch_mag128_i1,*dl_ch_mag128_i0b,*dl_ch_mag128_i1b;
-
-  if (frame_parms->nb_antennas_rx>1) {
-
-    for (aatx=0; aatx<frame_parms->nb_antenna_ports_eNB; aatx++) {
-
-      rxdataF_comp128_0   = (int16x8_t *)&rxdataF_comp[(aatx<<1)][symbol*frame_parms->N_RB_DL*12];
-      rxdataF_comp128_1   = (int16x8_t *)&rxdataF_comp[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_0      = (int16x8_t *)&dl_ch_mag[(aatx<<1)][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_1      = (int16x8_t *)&dl_ch_mag[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_0b     = (int16x8_t *)&dl_ch_magb[(aatx<<1)][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_1b     = (int16x8_t *)&dl_ch_magb[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12];
-
-      // MRC on each re of rb, both on MF output and magnitude (for 16QAM/64QAM llr computation)
-      for (i=0; i<nb_rb*3; i++) {
-        rxdataF_comp128_0[i] = vhaddq_s16(rxdataF_comp128_0[i],rxdataF_comp128_1[i]);
-        dl_ch_mag128_0[i]    = vhaddq_s16(dl_ch_mag128_0[i],dl_ch_mag128_1[i]);
-        dl_ch_mag128_0b[i]   = vhaddq_s16(dl_ch_mag128_0b[i],dl_ch_mag128_1b[i]);
-      }
-    }
-
-    if (rho) {
-      rho128_0 = (int16x8_t *) &rho[0][symbol*frame_parms->N_RB_DL*12];
-      rho128_1 = (int16x8_t *) &rho[1][symbol*frame_parms->N_RB_DL*12];
-
-      for (i=0; i<nb_rb*3; i++) {
-        //  print_shorts("mrc rho0:",&rho128_0[i]);
-        //  print_shorts("mrc rho1:",&rho128_1[i]);
-        rho128_0[i] = vhaddq_s16(rho128_0[i],rho128_1[i]);
-      }
-    }
-
-
-    if (dual_stream_UE == 1) {
-      rho128_i0 = (int16x8_t *) &rho_i[0][symbol*frame_parms->N_RB_DL*12];
-      rho128_i1 = (int16x8_t *) &rho_i[1][symbol*frame_parms->N_RB_DL*12];
-      rxdataF_comp128_i0   = (int16x8_t *)&rxdataF_comp_i[0][symbol*frame_parms->N_RB_DL*12];
-      rxdataF_comp128_i1   = (int16x8_t *)&rxdataF_comp_i[1][symbol*frame_parms->N_RB_DL*12];
-
-      dl_ch_mag128_i0      = (int16x8_t *)&dl_ch_mag_i[0][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_i1      = (int16x8_t *)&dl_ch_mag_i[1][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_i0b     = (int16x8_t *)&dl_ch_magb_i[0][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_i1b     = (int16x8_t *)&dl_ch_magb_i[1][symbol*frame_parms->N_RB_DL*12];
-
-      for (i=0; i<nb_rb*3; i++) {
-        rxdataF_comp128_i0[i] = vhaddq_s16(rxdataF_comp128_i0[i],rxdataF_comp128_i1[i]);
-        rho128_i0[i]          = vhaddq_s16(rho128_i0[i],rho128_i1[i]);
-
-        dl_ch_mag128_i0[i]    = vhaddq_s16(dl_ch_mag128_i0[i],dl_ch_mag128_i1[i]);
-        dl_ch_mag128_i0b[i]   = vhaddq_s16(dl_ch_mag128_i0b[i],dl_ch_mag128_i1b[i]);
-      }
-    }
-  }
-
-#endif
-}
-
-
-void dlsch_detection_mrc_TM34(LTE_DL_FRAME_PARMS *frame_parms,
-                              LTE_UE_PDSCH *pdsch_vars,
-                              int harq_pid,
-                              int round,
-                              unsigned char symbol,
-                              unsigned short nb_rb,
-                              unsigned char dual_stream_UE) {
-
-  int i;
-  __m128i *rxdataF_comp128_0,*rxdataF_comp128_1,*rxdataF_comp128_i0,*rxdataF_comp128_i1,*dl_ch_mag128_0,*dl_ch_mag128_1,*dl_ch_mag128_0b,*dl_ch_mag128_1b,*rho128_0,*rho128_1,*rho128_i0,*rho128_i1,*dl_ch_mag128_i0,*dl_ch_mag128_i1,*dl_ch_mag128_i0b,*dl_ch_mag128_i1b;
-
-  int **rxdataF_comp0           = pdsch_vars->rxdataF_comp0;
-  int **rxdataF_comp1           = pdsch_vars->rxdataF_comp1[harq_pid][round];
-  int **dl_ch_rho_ext           = pdsch_vars->dl_ch_rho_ext[harq_pid][round]; //for second stream
-  int **dl_ch_rho2_ext          = pdsch_vars->dl_ch_rho2_ext;
-  int **dl_ch_mag0              = pdsch_vars->dl_ch_mag0;
-  int **dl_ch_mag1              = pdsch_vars->dl_ch_mag1[harq_pid][round];
-  int **dl_ch_magb0             = pdsch_vars->dl_ch_magb0;
-  int **dl_ch_magb1             = pdsch_vars->dl_ch_magb1[harq_pid][round];
-
-  if (frame_parms->nb_antennas_rx>1) {
-
-      rxdataF_comp128_0   = (__m128i *)&rxdataF_comp0[0][symbol*frame_parms->N_RB_DL*12];
-      rxdataF_comp128_1   = (__m128i *)&rxdataF_comp0[1][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_0      = (__m128i *)&dl_ch_mag0[0][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_1      = (__m128i *)&dl_ch_mag0[1][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_0b     = (__m128i *)&dl_ch_magb0[0][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_1b     = (__m128i *)&dl_ch_magb0[1][symbol*frame_parms->N_RB_DL*12];
-
-      // MRC on each re of rb, both on MF output and magnitude (for 16QAM/64QAM llr computation)
-      for (i=0;i<nb_rb*3;i++) {
-        rxdataF_comp128_0[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_0[i],1),_mm_srai_epi16(rxdataF_comp128_1[i],1));
-        dl_ch_mag128_0[i]    = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_0[i],1),_mm_srai_epi16(dl_ch_mag128_1[i],1));
-        dl_ch_mag128_0b[i]   = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_0b[i],1),_mm_srai_epi16(dl_ch_mag128_1b[i],1));
-
-        // print_shorts("mrc compens0:",&rxdataF_comp128_0[i]);
-        // print_shorts("mrc mag128_0:",&dl_ch_mag128_0[i]);
-        // print_shorts("mrc mag128_0b:",&dl_ch_mag128_0b[i]);
-      }    }
-
-   // if (rho) {
-      rho128_0 = (__m128i *) &dl_ch_rho2_ext[0][symbol*frame_parms->N_RB_DL*12];
-      rho128_1 = (__m128i *) &dl_ch_rho2_ext[1][symbol*frame_parms->N_RB_DL*12];
-      for (i=0;i<nb_rb*3;i++) {
-           //  print_shorts("mrc rho0:",&rho128_0[i]);
-            //  print_shorts("mrc rho1:",&rho128_1[i]);
-        rho128_0[i] = _mm_adds_epi16(_mm_srai_epi16(rho128_0[i],1),_mm_srai_epi16(rho128_1[i],1));
-      }
-   //}
-
-
-    if (dual_stream_UE == 1) {
-      rho128_i0 = (__m128i *) &dl_ch_rho_ext[0][symbol*frame_parms->N_RB_DL*12];
-      rho128_i1 = (__m128i *) &dl_ch_rho_ext[1][symbol*frame_parms->N_RB_DL*12];
-      rxdataF_comp128_i0   = (__m128i *)&rxdataF_comp1[0][symbol*frame_parms->N_RB_DL*12];
-      rxdataF_comp128_i1   = (__m128i *)&rxdataF_comp1[1][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_i0      = (__m128i *)&dl_ch_mag1[0][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_i1      = (__m128i *)&dl_ch_mag1[1][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_i0b     = (__m128i *)&dl_ch_magb1[0][symbol*frame_parms->N_RB_DL*12];
-      dl_ch_mag128_i1b     = (__m128i *)&dl_ch_magb1[1][symbol*frame_parms->N_RB_DL*12];
-      for (i=0;i<nb_rb*3;i++) {
-        rxdataF_comp128_i0[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_i0[i],1),_mm_srai_epi16(rxdataF_comp128_i1[i],1));
-        rho128_i0[i]           = _mm_adds_epi16(_mm_srai_epi16(rho128_i0[i],1),_mm_srai_epi16(rho128_i1[i],1));
-
-        dl_ch_mag128_i0[i]    = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_i0[i],1),_mm_srai_epi16(dl_ch_mag128_i1[i],1));
-        dl_ch_mag128_i0b[i]    = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_i0b[i],1),_mm_srai_epi16(dl_ch_mag128_i1b[i],1));
-
-        //print_shorts("mrc compens1:",&rxdataF_comp128_i0[i]);
-        //print_shorts("mrc mag128_i0:",&dl_ch_mag128_i0[i]);
-        //print_shorts("mrc mag128_i0b:",&dl_ch_mag128_i0b[i]);
-      }
-    }
-
-
-  _mm_empty();
-  _m_empty();
-}
-
-
-
-void dlsch_scale_channel(int **dl_ch_estimates_ext,
-                         LTE_DL_FRAME_PARMS *frame_parms,
-                         LTE_UE_DLSCH_t **dlsch_ue,
-                         uint8_t symbol,
-                         unsigned short nb_rb)
-{
-
-#if defined(__x86_64__)||defined(__i386__)
-
-  short rb, ch_amp;
-  unsigned char aatx,aarx,pilots=0,symbol_mod;
-  __m128i *dl_ch128, ch_amp128;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) {
-    if (frame_parms->nb_antenna_ports_eNB==1) // 10 out of 12 so don't reduce size
-      nb_rb=1+(5*nb_rb/6);
-    else
-      pilots=1;
-  }
-
-  // Determine scaling amplitude based the symbol
-
-  ch_amp = ((pilots) ? (dlsch_ue[0]->sqrt_rho_b) : (dlsch_ue[0]->sqrt_rho_a));
-  
-  LOG_D(PHY,"Scaling PDSCH Chest in OFDM symbol %d by %d, pilots %d nb_rb %d NCP %d symbol %d\n",symbol_mod,ch_amp,pilots,nb_rb,frame_parms->Ncp,symbol);
-   // printf("Scaling PDSCH Chest in OFDM symbol %d by %d\n",symbol_mod,ch_amp);
-
-  ch_amp128 = _mm_set1_epi16(ch_amp); // Q3.13
-
-  for (aatx=0; aatx<frame_parms->nb_antenna_ports_eNB; aatx++) {
-    for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-
-      dl_ch128=(__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
-
-      for (rb=0;rb<nb_rb;rb++) {
-
-        dl_ch128[0] = _mm_mulhi_epi16(dl_ch128[0],ch_amp128);
-        dl_ch128[0] = _mm_slli_epi16(dl_ch128[0],3);
-
-        dl_ch128[1] = _mm_mulhi_epi16(dl_ch128[1],ch_amp128);
-        dl_ch128[1] = _mm_slli_epi16(dl_ch128[1],3);
-
-        if (pilots) {
-          dl_ch128+=2;
-        } else {
-          dl_ch128[2] = _mm_mulhi_epi16(dl_ch128[2],ch_amp128);
-          dl_ch128[2] = _mm_slli_epi16(dl_ch128[2],3);
-          dl_ch128+=3;
-
-        }
-      }
-    }
-  }
-
-#elif defined(__arm__)
-
-#endif
-}
-
-
-//compute average channel_level on each (TX,RX) antenna pair
-void dlsch_channel_level(int **dl_ch_estimates_ext,
-                         LTE_DL_FRAME_PARMS *frame_parms,
-                         int32_t *avg,
-                         uint8_t symbol,
-                         unsigned short nb_rb)
-{
-
-#if defined(__x86_64__)||defined(__i386__)
-
-  short rb;
-  unsigned char aatx,aarx,nre=12,symbol_mod;
-  __m128i *dl_ch128, avg128D;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1))
-    nre=8;
-  else if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB==1))
-    nre=10;
-  else
-    nre=12;
-
-  //nb_rb*nre = y * 2^x
-  int16_t x = factor2(nb_rb*nre);
-  int16_t y = (nb_rb*nre)>>x;
-  //printf("nb_rb*nre = %d = %d * 2^(%d)\n",nb_rb*nre,y,x);
-
-  for (aatx=0; aatx<frame_parms->nb_antenna_ports_eNB; aatx++)
-    for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-      //clear average level
-      avg128D = _mm_setzero_si128();
-      // 5 is always a symbol with no pilots for both normal and extended prefix
-
-      dl_ch128=(__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
-
-      for (rb=0;rb<nb_rb;rb++) {
-        //      printf("rb %d : ",rb);
-        //      print_shorts("ch",&dl_ch128[0]);
-	avg128D = _mm_add_epi32(avg128D,_mm_srai_epi16(_mm_madd_epi16(dl_ch128[0],dl_ch128[0]),x));
-	avg128D = _mm_add_epi32(avg128D,_mm_srai_epi16(_mm_madd_epi16(dl_ch128[1],dl_ch128[1]),x));
-
-        //avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch128[0],_mm_srai_epi16(_mm_mulhi_epi16(dl_ch128[0], coeff128),15)));
-        //avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch128[1],_mm_srai_epi16(_mm_mulhi_epi16(dl_ch128[1], coeff128),15)));
-
-        if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) {
-          dl_ch128+=2;
-        }
-        else {
-	  avg128D = _mm_add_epi32(avg128D,_mm_srai_epi16(_mm_madd_epi16(dl_ch128[2],dl_ch128[2]),x));
-          //avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch128[2],_mm_srai_epi16(_mm_mulhi_epi16(dl_ch128[2], coeff128),15)));
-          dl_ch128+=3;
-        }
-        /*
-          if (rb==0) {
-          print_shorts("dl_ch128",&dl_ch128[0]);
-          print_shorts("dl_ch128",&dl_ch128[1]);
-          print_shorts("dl_ch128",&dl_ch128[2]);
-          }
-        */
-      }
-
-      avg[(aatx<<1)+aarx] =(((int32_t*)&avg128D)[0] +
-                            ((int32_t*)&avg128D)[1] +
-                            ((int32_t*)&avg128D)[2] +
-			      ((int32_t*)&avg128D)[3])/y;
-                //  printf("Channel level : %d\n",avg[(aatx<<1)+aarx]);
-    }
-
-  _mm_empty();
-  _m_empty();
-
-#elif defined(__arm__)
-
-  short rb;
-  unsigned char aatx,aarx,nre=12,symbol_mod;
-  int32x4_t avg128D;
-  int16x4_t *dl_ch128;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  for (aatx=0; aatx<frame_parms->nb_antenna_ports_eNB; aatx++)
-    for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-      //clear average level
-      avg128D = vdupq_n_s32(0);
-      // 5 is always a symbol with no pilots for both normal and extended prefix
-
-      dl_ch128=(int16x4_t *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
-
-      for (rb=0; rb<nb_rb; rb++) {
-        //  printf("rb %d : ",rb);
-        //  print_shorts("ch",&dl_ch128[0]);
-        avg128D = vqaddq_s32(avg128D,vmull_s16(dl_ch128[0],dl_ch128[0]));
-        avg128D = vqaddq_s32(avg128D,vmull_s16(dl_ch128[1],dl_ch128[1]));
-        avg128D = vqaddq_s32(avg128D,vmull_s16(dl_ch128[2],dl_ch128[2]));
-        avg128D = vqaddq_s32(avg128D,vmull_s16(dl_ch128[3],dl_ch128[3]));
-
-        if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) {
-          dl_ch128+=4;
-        } else {
-          avg128D = vqaddq_s32(avg128D,vmull_s16(dl_ch128[4],dl_ch128[4]));
-          avg128D = vqaddq_s32(avg128D,vmull_s16(dl_ch128[5],dl_ch128[5]));
-          dl_ch128+=6;
-        }
-
-        /*
-          if (rb==0) {
-          print_shorts("dl_ch128",&dl_ch128[0]);
-          print_shorts("dl_ch128",&dl_ch128[1]);
-          print_shorts("dl_ch128",&dl_ch128[2]);
-          }
-        */
-      }
-
-
-      if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1))
-        nre=8;
-      else if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB==1))
-        nre=10;
-      else
-        nre=12;
-
-      avg[(aatx<<1)+aarx] = (((int32_t*)&avg128D)[0] +
-                             ((int32_t*)&avg128D)[1] +
-                             ((int32_t*)&avg128D)[2] +
-                             ((int32_t*)&avg128D)[3])/(nb_rb*nre);
-
-      //            printf("Channel level : %d\n",avg[(aatx<<1)+aarx]);
-    }
-
-
-#endif
-}
-
-//compute average channel_level of effective (precoded) channel
-
-//compute average channel_level of effective (precoded) channel
-void dlsch_channel_level_TM34(int **dl_ch_estimates_ext,
-                              LTE_DL_FRAME_PARMS *frame_parms,
-                              unsigned char *pmi_ext,
-                              int *avg_0,
-                              int *avg_1,
-                              uint8_t symbol,
-                              unsigned short nb_rb,
-                              MIMO_mode_t mimo_mode){
-
-#if defined(__x86_64__)||defined(__i386__)
-
-
-  short rb;
-  unsigned char aarx,nre=12,symbol_mod;
-  __m128i *dl_ch0_128,*dl_ch1_128, dl_ch0_128_tmp, dl_ch1_128_tmp, avg_0_128D, avg_1_128D;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  //clear average level
- // avg_0_128D = _mm_setzero_si128();
- // avg_1_128D = _mm_setzero_si128();
-  avg_0[0] = 0;
-  avg_0[1] = 0;
-  avg_1[0] = 0;
-  avg_1[1] = 0;
-  // 5 is always a symbol with no pilots for both normal and extended prefix
-
-  if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1))
-    nre=8;
-  else if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB==1))
-    nre=10;
-  else
-    nre=12;
-
-  for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-    dl_ch0_128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch1_128 = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
-
-    avg_0_128D = _mm_setzero_si128();
-    avg_1_128D = _mm_setzero_si128();
-    for (rb=0; rb<nb_rb; rb++) {
-              // printf("rb %d : \n",rb);
-              // print_shorts("ch0\n",&dl_ch0_128[0]);
-               //print_shorts("ch1\n",&dl_ch1_128[0]);
-      dl_ch0_128_tmp = _mm_load_si128(&dl_ch0_128[0]);
-      dl_ch1_128_tmp = _mm_load_si128(&dl_ch1_128[0]);
-
-      if (mimo_mode==LARGE_CDD)
-        prec2A_TM3_128(&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-      else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODING1)
-        prec2A_TM4_128(0,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-      else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODINGj)
-        prec2A_TM4_128(1,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-      else if (mimo_mode==DUALSTREAM_PUSCH_PRECODING)
-        prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-
-      //      mmtmpD0 = _mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp);
-      avg_0_128D = _mm_add_epi32(avg_0_128D,_mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp));
-
-      avg_1_128D = _mm_add_epi32(avg_1_128D,_mm_madd_epi16(dl_ch1_128_tmp,dl_ch1_128_tmp));
-
-      dl_ch0_128_tmp = _mm_load_si128(&dl_ch0_128[1]);
-      dl_ch1_128_tmp = _mm_load_si128(&dl_ch1_128[1]);
-
-      if (mimo_mode==LARGE_CDD)
-        prec2A_TM3_128(&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-      else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODING1)
-        prec2A_TM4_128(0,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-      else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODINGj)
-        prec2A_TM4_128(1,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-      else if (mimo_mode==DUALSTREAM_PUSCH_PRECODING)
-        prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-
-      //      mmtmpD1 = _mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp);
-      avg_0_128D = _mm_add_epi32(avg_0_128D,_mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp));
-
-      avg_1_128D = _mm_add_epi32(avg_1_128D,_mm_madd_epi16(dl_ch1_128_tmp,dl_ch1_128_tmp));
-
-      if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) {
-        dl_ch0_128+=2;
-        dl_ch1_128+=2;
-      }
-      else {
-        dl_ch0_128_tmp = _mm_load_si128(&dl_ch0_128[2]);
-        dl_ch1_128_tmp = _mm_load_si128(&dl_ch1_128[2]);
-
-        if (mimo_mode==LARGE_CDD)
-          prec2A_TM3_128(&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-        else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODING1)
-          prec2A_TM4_128(0,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-        else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODINGj)
-          prec2A_TM4_128(1,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-        else if (mimo_mode==DUALSTREAM_PUSCH_PRECODING)
-          prec2A_TM4_128(pmi_ext[rb],&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-        //      mmtmpD2 = _mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp);
-
-        avg_1_128D = _mm_add_epi32(avg_1_128D,_mm_madd_epi16(dl_ch1_128_tmp,dl_ch1_128_tmp));
-        avg_0_128D = _mm_add_epi32(avg_0_128D,_mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp));
-
-        dl_ch0_128+=3;
-        dl_ch1_128+=3;
-      }
-    }
-
-
-    avg_0[aarx] = (((int*)&avg_0_128D)[0])/(nb_rb*nre) +
-      (((int*)&avg_0_128D)[1])/(nb_rb*nre) +
-      (((int*)&avg_0_128D)[2])/(nb_rb*nre) +
-      (((int*)&avg_0_128D)[3])/(nb_rb*nre);
-    //  printf("From Chan_level aver stream 0 %d =%d\n", aarx, avg_0[aarx]);
-
-    avg_1[aarx] = (((int*)&avg_1_128D)[0])/(nb_rb*nre) +
-      (((int*)&avg_1_128D)[1])/(nb_rb*nre) +
-      (((int*)&avg_1_128D)[2])/(nb_rb*nre) +
-      (((int*)&avg_1_128D)[3])/(nb_rb*nre);
-  //    printf("From Chan_level aver stream 1 %d =%d\n", aarx, avg_1[aarx]);
-  }
-//avg_0[0] = max(avg_0[0],avg_0[1]);
-//avg_1[0] = max(avg_1[0],avg_1[1]);
-//avg_0[0]= max(avg_0[0], avg_1[0]);
-
-  avg_0[0] = avg_0[0] + avg_0[1];
- // printf("From Chan_level aver stream 0 final =%d\n", avg_0[0]);
-  avg_1[0] = avg_1[0] + avg_1[1];
- // printf("From Chan_level aver stream 1 final =%d\n", avg_1[0]);
- avg_0[0] = min (avg_0[0], avg_1[0]);
- avg_1[0] = avg_0[0];
-
-  _mm_empty();
-  _m_empty();
-
-#elif defined(__arm__)
-
-#endif
-}
-
-
-
-/*void dlsch_channel_level_TM34(int **dl_ch_estimates_ext,
-                              LTE_DL_FRAME_PARMS *frame_parms,
-                              int *avg,
-                              uint8_t symbol,
-                              unsigned short nb_rb,
-                              MIMO_mode_t mimo_mode){
-
-#if defined(__x86_64__)||defined(__i386__)
-
-
-  short rb;
-  unsigned char aarx,nre=12,symbol_mod;
-  __m128i *dl_ch0_128,*dl_ch1_128, dl_ch0_128_tmp, dl_ch1_128_tmp,avg128D;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  //clear average level
-  avg128D = _mm_setzero_si128();
-  avg[0] = 0;
-  avg[1] = 0;
-  // 5 is always a symbol with no pilots for both normal and extended prefix
-
-  if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1))
-    nre=8;
-  else if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB==1))
-    nre=10;
-  else
-    nre=12;
-
-  for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-    dl_ch0_128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch1_128 = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
-
-    for (rb=0; rb<nb_rb; rb++) {
-
-      dl_ch0_128_tmp = _mm_load_si128(&dl_ch0_128[0]);
-      dl_ch1_128_tmp = _mm_load_si128(&dl_ch1_128[0]);
-
-      if (mimo_mode==LARGE_CDD)
-        prec2A_TM3_128(&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-      else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODING1)
-        prec2A_TM4_128(0,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-      else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODINGj)
-        prec2A_TM4_128(1,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-
-      //      mmtmpD0 = _mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp);
-      avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp));
-
-      dl_ch0_128_tmp = _mm_load_si128(&dl_ch0_128[1]);
-      dl_ch1_128_tmp = _mm_load_si128(&dl_ch1_128[1]);
-
-      if (mimo_mode==LARGE_CDD)
-        prec2A_TM3_128(&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-      else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODING1)
-        prec2A_TM4_128(0,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-      else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODINGj)
-        prec2A_TM4_128(1,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-
-      //      mmtmpD1 = _mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp);
-      avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp));
-
-      if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) {
-        dl_ch0_128+=2;
-        dl_ch1_128+=2;
-      }
-      else {
-        dl_ch0_128_tmp = _mm_load_si128(&dl_ch0_128[2]);
-        dl_ch1_128_tmp = _mm_load_si128(&dl_ch1_128[2]);
-
-        if (mimo_mode==LARGE_CDD)
-          prec2A_TM3_128(&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-        else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODING1)
-          prec2A_TM4_128(0,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-        else if (mimo_mode==DUALSTREAM_UNIFORM_PRECODINGj)
-          prec2A_TM4_128(1,&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-
-        //      mmtmpD2 = _mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp);
-        avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp));
-
-        dl_ch0_128+=3;
-        dl_ch1_128+=3;
-      }
-    }
-
-    avg[aarx] = (((int*)&avg128D)[0])/(nb_rb*nre) +
-      (((int*)&avg128D)[1])/(nb_rb*nre) +
-      (((int*)&avg128D)[2])/(nb_rb*nre) +
-      (((int*)&avg128D)[3])/(nb_rb*nre);
-  }
-
-  // choose maximum of the 2 effective channels
-  avg[0] = cmax(avg[0],avg[1]);
-
-  _mm_empty();
-  _m_empty();
-
-#elif defined(__arm__)
-
-#endif
-}*/
-
-//compute average channel_level of effective (precoded) channel
-void dlsch_channel_level_TM56(int **dl_ch_estimates_ext,
-                              LTE_DL_FRAME_PARMS *frame_parms,
-                              unsigned char *pmi_ext,
-                              int *avg,
-                              uint8_t symbol,
-                              unsigned short nb_rb)
-{
-
-#if defined(__x86_64__)||defined(__i386__)
-
-  short rb;
-  unsigned char aarx,nre=12,symbol_mod;
-  __m128i *dl_ch0_128,*dl_ch1_128, dl_ch0_128_tmp, dl_ch1_128_tmp,avg128D;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  //clear average level
-  avg128D = _mm_setzero_si128();
-  avg[0] = 0;
-  avg[1] = 0;
-  // 5 is always a symbol with no pilots for both normal and extended prefix
-
-  if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1))
-    nre=8;
-  else if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB==1))
-    nre=10;
-  else
-    nre=12;
-
-  for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-    dl_ch0_128 = (__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
-    dl_ch1_128 = (__m128i *)&dl_ch_estimates_ext[2+aarx][symbol*frame_parms->N_RB_DL*12];
-
-    for (rb=0; rb<nb_rb; rb++) {
-
-      dl_ch0_128_tmp = _mm_load_si128(&dl_ch0_128[0]);
-      dl_ch1_128_tmp = _mm_load_si128(&dl_ch1_128[0]);
-
-      prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-      //      mmtmpD0 = _mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp);
-      avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp));
-
-      dl_ch0_128_tmp = _mm_load_si128(&dl_ch0_128[1]);
-      dl_ch1_128_tmp = _mm_load_si128(&dl_ch1_128[1]);
-
-      prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-      //      mmtmpD1 = _mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp);
-      avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp));
-
-      if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) {
-        dl_ch0_128+=2;
-        dl_ch1_128+=2;
-      }
-      else {
-        dl_ch0_128_tmp = _mm_load_si128(&dl_ch0_128[2]);
-        dl_ch1_128_tmp = _mm_load_si128(&dl_ch1_128[2]);
-
-        prec2A_TM56_128(pmi_ext[rb],&dl_ch0_128_tmp,&dl_ch1_128_tmp);
-        //      mmtmpD2 = _mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp);
-        avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch0_128_tmp,dl_ch0_128_tmp));
-
-        dl_ch0_128+=3;
-        dl_ch1_128+=3;
-      }
-    }
-
-    avg[aarx] = (((int*)&avg128D)[0])/(nb_rb*nre) +
-      (((int*)&avg128D)[1])/(nb_rb*nre) +
-      (((int*)&avg128D)[2])/(nb_rb*nre) +
-      (((int*)&avg128D)[3])/(nb_rb*nre);
-  }
-
-  // choose maximum of the 2 effective channels
-  avg[0] = cmax(avg[0],avg[1]);
-
-  _mm_empty();
-  _m_empty();
-
-#elif defined(__arm__)
-
-
-#endif
-}
-
-//compute average channel_level for TM7
-void dlsch_channel_level_TM7(int **dl_bf_ch_estimates_ext,
-                         LTE_DL_FRAME_PARMS *frame_parms,
-                         int *avg,
-                         uint8_t symbol,
-                         unsigned short nb_rb)
-{
-
-#if defined(__x86_64__)||defined(__i386__)
-
-  short rb;
-  unsigned char aatx,aarx,nre=12,symbol_mod;
-  __m128i *dl_ch128,avg128D;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-  for (aatx=0; aatx<frame_parms->nb_antenna_ports_eNB; aatx++)
-    for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-      //clear average level
-      avg128D = _mm_setzero_si128();
-      // 5 is always a symbol with no pilots for both normal and extended prefix
-
-      dl_ch128=(__m128i *)&dl_bf_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
-
-      for (rb=0; rb<nb_rb; rb++) {
-        //  printf("rb %d : ",rb);
-        //  print_shorts("ch",&dl_ch128[0]);
-        avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch128[0],dl_ch128[0]));
-        avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch128[1],dl_ch128[1]));
-
-        if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->nb_antenna_ports_eNB!=1)) {
-          dl_ch128+=2;
-        } else {
-          avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch128[2],dl_ch128[2]));
-          dl_ch128+=3;
-        }
-
-        /*
-          if (rb==0) {
-          print_shorts("dl_ch128",&dl_ch128[0]);
-          print_shorts("dl_ch128",&dl_ch128[1]);
-          print_shorts("dl_ch128",&dl_ch128[2]);
-          }
-        */
-      }
-
-      if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1))))
-        nre=10;
-      else if ((frame_parms->Ncp==0) && (symbol==3 || symbol==6 || symbol==9 || symbol==12))
-        nre=9;
-      else if ((frame_parms->Ncp==1) && (symbol==4 || symbol==7 || symbol==9))
-        nre=8;
-      else
-        nre=12;
-
-      avg[(aatx<<1)+aarx] = (((int*)&avg128D)[0] +
-                             ((int*)&avg128D)[1] +
-                             ((int*)&avg128D)[2] +
-                             ((int*)&avg128D)[3])/(nb_rb*nre);
-
-      //            printf("Channel level : %d\n",avg[(aatx<<1)+aarx]);
-    }
-
-  _mm_empty();
-  _m_empty();
-
-#elif defined(__arm__)
-
-#endif
-}
-//#define ONE_OVER_2_Q15 16384
-void dlsch_alamouti(LTE_DL_FRAME_PARMS *frame_parms,
-                    int **rxdataF_comp,
-                    int **dl_ch_mag,
-                    int **dl_ch_magb,
-                    unsigned char symbol,
-                    unsigned short nb_rb)
-{
-
-#if defined(__x86_64__)||defined(__i386__)
-
-  short *rxF0,*rxF1;
-  __m128i *ch_mag0,*ch_mag1,*ch_mag0b,*ch_mag1b, *rxF0_128;
-  unsigned char rb,re;
-  int jj = (symbol*frame_parms->N_RB_DL*12);
-  uint8_t symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-  uint8_t pilots = ((symbol_mod==0)||(symbol_mod==(4-frame_parms->Ncp))) ? 1 : 0;
-  rxF0_128 = (__m128i*) &rxdataF_comp[0][jj];
-
-  //amp = _mm_set1_epi16(ONE_OVER_2_Q15);
-
-
-  //    printf("Doing alamouti!\n");
-  rxF0     = (short*)&rxdataF_comp[0][jj];  //tx antenna 0  h0*y
-  rxF1     = (short*)&rxdataF_comp[2][jj];  //tx antenna 1  h1*y
-  ch_mag0 = (__m128i *)&dl_ch_mag[0][jj];
-  ch_mag1 = (__m128i *)&dl_ch_mag[2][jj];
-  ch_mag0b = (__m128i *)&dl_ch_magb[0][jj];
-  ch_mag1b = (__m128i *)&dl_ch_magb[2][jj];
-
-  for (rb=0; rb<nb_rb; rb++) {
-
-    for (re=0; re<((pilots==0)?12:8); re+=2) {
-
-      // Alamouti RX combining
-
-      //      printf("Alamouti: symbol %d, rb %d, re %d: rxF0 (%d,%d,%d,%d), rxF1 (%d,%d,%d,%d)\n",symbol,rb,re,rxF0[0],rxF0[1],rxF0[2],rxF0[3],rxF1[0],rxF1[1],rxF1[2],rxF1[3]);
-      rxF0[0] = rxF0[0] + rxF1[2];
-      rxF0[1] = rxF0[1] - rxF1[3];
-
-      rxF0[2] = rxF0[2] - rxF1[0];
-      rxF0[3] = rxF0[3] + rxF1[1];
-
-      //      printf("Alamouti: rxF0 after (%d,%d,%d,%d)\n",rxF0[0],rxF0[1],rxF0[2],rxF0[3]);
-      rxF0+=4;
-      rxF1+=4;
-
-    }
-
-    // compute levels for 16QAM or 64 QAM llr unit
-    ch_mag0[0] = _mm_adds_epi16(ch_mag0[0],ch_mag1[0]);
-    ch_mag0[1] = _mm_adds_epi16(ch_mag0[1],ch_mag1[1]);
-
-    ch_mag0b[0] = _mm_adds_epi16(ch_mag0b[0],ch_mag1b[0]);
-    ch_mag0b[1] = _mm_adds_epi16(ch_mag0b[1],ch_mag1b[1]);
-
-    // account for 1/sqrt(2) scaling at transmission
-    //ch_mag0[0] = _mm_srai_epi16(ch_mag0[0],1);
-    //ch_mag0[1] = _mm_srai_epi16(ch_mag0[1],1);
-    //ch_mag0b[0] = _mm_srai_epi16(ch_mag0b[0],1);
-    //ch_mag0b[1] = _mm_srai_epi16(ch_mag0b[1],1);
-
-    //rxF0_128[0] = _mm_mulhi_epi16(rxF0_128[0],amp);
-    //rxF0_128[0] = _mm_slli_epi16(rxF0_128[0],1);
-    //rxF0_128[1] = _mm_mulhi_epi16(rxF0_128[1],amp);
-    //rxF0_128[1] = _mm_slli_epi16(rxF0_128[1],1);
-
-    //rxF0_128[0] = _mm_srai_epi16(rxF0_128[0],1);
-    //rxF0_128[1] = _mm_srai_epi16(rxF0_128[1],1);
-
-
-
-    if (pilots==0) {
-      ch_mag0[2] = _mm_adds_epi16(ch_mag0[2],ch_mag1[2]);
-      ch_mag0b[2] = _mm_adds_epi16(ch_mag0b[2],ch_mag1b[2]);
-
-      //ch_mag0[2] = _mm_srai_epi16(ch_mag0[2],1);
-      //ch_mag0b[2] = _mm_srai_epi16(ch_mag0b[2],1);
-
-      //rxF0_128[2] = _mm_mulhi_epi16(rxF0_128[2],amp);
-      //rxF0_128[2] = _mm_slli_epi16(rxF0_128[2],1);
-
-      //rxF0_128[2] = _mm_srai_epi16(rxF0_128[2],1);
-
-
-      ch_mag0+=3;
-      ch_mag1+=3;
-      ch_mag0b+=3;
-      ch_mag1b+=3;
-      rxF0_128+=3;
-    } else {
-      ch_mag0+=2;
-      ch_mag1+=2;
-      ch_mag0b+=2;
-      ch_mag1b+=2;
-      rxF0_128+=2;
-    }
-  }
-
-  _mm_empty();
-  _m_empty();
-
-#elif defined(__arm__)
-
-#endif
-}
-
-
-//==============================================================================================
-// Extraction functions
-//==============================================================================================
-
-unsigned short dlsch_extract_rbs_single(int **rxdataF,
-                                        int **dl_ch_estimates,
-                                        int **rxdataF_ext,
-                                        int **dl_ch_estimates_ext,
-                                        unsigned short pmi,
-                                        unsigned char *pmi_ext,
-                                        unsigned int *rb_alloc,
-                                        unsigned char symbol,
-                                        unsigned char subframe,
-                                        uint32_t high_speed_flag,
-                                        LTE_DL_FRAME_PARMS *frame_parms) {
-
-
-
-  unsigned short rb,nb_rb=0;
-  unsigned char rb_alloc_ind;
-  unsigned char i,aarx,l,nsymb,skip_half=0,sss_symb,pss_symb=0;
-  int *dl_ch0,*dl_ch0_ext,*rxF,*rxF_ext;
-
-
-
-  unsigned char symbol_mod,pilots=0,j=0,poffset=0;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-  pilots = ((symbol_mod==0)||(symbol_mod==(4-frame_parms->Ncp))) ? 1 : 0;
-  l=symbol;
-  nsymb = (frame_parms->Ncp==NORMAL) ? 14:12;
-
-  if (frame_parms->frame_type == TDD) {  // TDD
-    sss_symb = nsymb-1;
-    pss_symb = 2;
-  } else {
-    sss_symb = (nsymb>>1)-2;
-    pss_symb = (nsymb>>1)-1;
-  }
-
-  if (symbol_mod==(4-frame_parms->Ncp))
-    poffset=3;
-
-  for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-
-    if (high_speed_flag == 1)
-      dl_ch0     = &dl_ch_estimates[aarx][5+(symbol*(frame_parms->ofdm_symbol_size))];
-    else
-      dl_ch0     = &dl_ch_estimates[aarx][5];
-
-    dl_ch0_ext = &dl_ch_estimates_ext[aarx][symbol*(frame_parms->N_RB_DL*12)];
-
-    rxF_ext   = &rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)];
-    rxF       = &rxdataF[aarx][(frame_parms->first_carrier_offset + (symbol*(frame_parms->ofdm_symbol_size)))];
-
-    if ((frame_parms->N_RB_DL&1) == 0)  // even number of RBs
-
-      for (rb=0;rb<frame_parms->N_RB_DL;rb++) {
-
-        if (rb < 32)
-          rb_alloc_ind = (rb_alloc[0]>>rb) & 1;
-        else if (rb < 64)
-          rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1;
-        else if (rb < 96)
-          rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1;
-        else if (rb < 100)
-          rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1;
-        else
-          rb_alloc_ind = 0;
-
-        if (rb_alloc_ind == 1)
-          nb_rb++;
-
-        // For second half of RBs skip DC carrier
-        if (rb==(frame_parms->N_RB_DL>>1)) {
-          rxF       = &rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))];
-          //dl_ch0++;
-        }
-
-        // PBCH
-        if ((subframe==0) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=nsymb>>1) && (l<((nsymb>>1) + 4))) {
-          rb_alloc_ind = 0;
-        }
-
-        //SSS
-        if (((subframe==0)||(subframe==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb) ) {
-          rb_alloc_ind = 0;
-        }
-
-
-        if (frame_parms->frame_type == FDD) {
-          //PSS
-          if (((subframe==0)||(subframe==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-        }
-
-        if ((frame_parms->frame_type == TDD) &&
-            (subframe==6)) { //TDD Subframe 6
-          if ((rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-        }
-
-        if (rb_alloc_ind==1) {
-          *pmi_ext = (pmi>>((rb>>2)<<1))&3;
-          memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int));
-
-          /*
-            printf("rb %d\n",rb);
-            for (i=0;i<12;i++)
-            printf("(%d %d)",((short *)dl_ch0)[i<<1],((short*)dl_ch0)[1+(i<<1)]);
-            printf("\n");
-          */
-          if (pilots==0) {
-            for (i=0; i<12; i++) {
-              rxF_ext[i]=rxF[i];
-              /*
-                printf("%d : (%d,%d)\n",(rxF+i-&rxdataF[aarx][( (symbol*(frame_parms->ofdm_symbol_size)))]),
-                ((short*)&rxF[i])[0],((short*)&rxF[i])[1]);*/
-            }
-
-            dl_ch0_ext+=12;
-            rxF_ext+=12;
-          } else {
-            j=0;
-
-            for (i=0; i<12; i++) {
-              if ((i!=(frame_parms->nushift+poffset)) &&
-                  (i!=((frame_parms->nushift+poffset+6)%12))) {
-                rxF_ext[j]=rxF[i];
-                //            printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
-                dl_ch0_ext[j++]=dl_ch0[i];
-
-              }
-            }
-
-            dl_ch0_ext+=10;
-            rxF_ext+=10;
-          }
-
-
-        }
-
-        dl_ch0+=12;
-        rxF+=12;
-
-      }
-    else {  // Odd number of RBs
-      for (rb=0; rb<frame_parms->N_RB_DL>>1; rb++) {
-#ifdef DEBUG_DLSCH_DEMOD
-        printf("dlch_ext %d\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]);
-#endif
-        skip_half=0;
-
-        if (rb < 32)
-          rb_alloc_ind = (rb_alloc[0]>>rb) & 1;
-        else if (rb < 64)
-          rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1;
-        else if (rb < 96)
-          rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1;
-        else if (rb < 100)
-          rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1;
-        else
-          rb_alloc_ind = 0;
-
-        if (rb_alloc_ind == 1)
-          nb_rb++;
-
-
-        // PBCH
-        if ((subframe==0) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) {
-          rb_alloc_ind = 0;
-        }
-
-        //PBCH subframe 0, symbols nsymb>>1 ... nsymb>>1 + 3
-        if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4)))
-          skip_half=1;
-        else if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4)))
-          skip_half=2;
-
-        //SSS
-
-        if (((subframe==0)||(subframe==5)) &&
-            (rb>((frame_parms->N_RB_DL>>1)-3)) &&
-            (rb<((frame_parms->N_RB_DL>>1)+3)) &&
-            (l==sss_symb) ) {
-          rb_alloc_ind = 0;
-        }
-        //SSS
-        if (((subframe==0)||(subframe==5)) &&
-            (rb==((frame_parms->N_RB_DL>>1)-3)) &&
-            (l==sss_symb))
-          skip_half=1;
-        else if (((subframe==0)||(subframe==5)) &&
-                 (rb==((frame_parms->N_RB_DL>>1)+3)) &&
-                 (l==sss_symb))
-          skip_half=2;
-
-        //PSS in subframe 0/5 if FDD
-        if (frame_parms->frame_type == FDD) {  //FDD
-
-          if (((subframe==0)||(subframe==5)) &&
-              (rb>((frame_parms->N_RB_DL>>1)-3)) &&
-              (rb<((frame_parms->N_RB_DL>>1)+3)) &&
-              (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-
-          if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb))
-            skip_half=1;
-          else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb))
-            skip_half=2;
-        }
-
-        if ((frame_parms->frame_type == TDD) &&
-            (subframe==6)){  //TDD Subframe 6
-          if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-          if ((rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb))
-            skip_half=1;
-          else if ((rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb))
-            skip_half=2;
-        }
-
-
-        if (rb_alloc_ind==1) {
-
-#ifdef DEBUG_DLSCH_DEMOD
-          printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half);
-#endif
-          if (pilots==0) {
-            //      printf("Extracting w/o pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half);
-            if (skip_half==1) {
-              memcpy(dl_ch0_ext,dl_ch0,6*sizeof(int));
-
-              for (i=0; i<6; i++) {
-                rxF_ext[i]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-              dl_ch0_ext+=6;
-              rxF_ext+=6;
-            } else if (skip_half==2) {
-              memcpy(dl_ch0_ext,dl_ch0+6,6*sizeof(int));
-
-              for (i=0; i<6; i++) {
-                rxF_ext[i]=rxF[(i+6)];
-#ifdef DEBUG_DLSCH_DEMOD
-                printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-              dl_ch0_ext+=6;
-              rxF_ext+=6;
-            } else {
-              memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int));
-
-              for (i=0; i<12; i++) {
-                rxF_ext[i]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-              dl_ch0_ext+=12;
-              rxF_ext+=12;
-            }
-          } else {
-            //      printf("Extracting with pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half);
-            j=0;
-
-            if (skip_half==1) {
-              for (i=0; i<6; i++) {
-                if (i!=((frame_parms->nushift+poffset)%6)) {
-                  rxF_ext[j]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                  printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
-#endif
-                  dl_ch0_ext[j++]=dl_ch0[i];
-                }
-              }
-              rxF_ext+=5;
-              dl_ch0_ext+=5;
-            } else if (skip_half==2) {
-              for (i=0; i<6; i++) {
-                if (i!=((frame_parms->nushift+poffset)%6)) {
-                  rxF_ext[j]=rxF[(i+6)];
-#ifdef DEBUG_DLSCH_DEMOD
-                  printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
-#endif
-                  dl_ch0_ext[j++]=dl_ch0[i+6];
-                }
-              }
-
-              dl_ch0_ext+=5;
-              rxF_ext+=5;
-            } else {
-              for (i=0; i<12; i++) {
-                if ((i!=(frame_parms->nushift+poffset)) &&
-                    (i!=((frame_parms->nushift+poffset+6)%12))) {
-                  rxF_ext[j]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                  printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
-#endif
-                  dl_ch0_ext[j++]=dl_ch0[i];
-
-                }
-              }
-
-              dl_ch0_ext+=10;
-              rxF_ext+=10;
-            }
-          }
-        }
-        dl_ch0+=12;
-        rxF+=12;
-      } // first half loop
-
-
-      // Do middle RB (around DC)
-      if (rb < 32)
-        rb_alloc_ind = (rb_alloc[0]>>rb) & 1;
-      else if (rb < 64)
-        rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1;
-      else if (rb < 96)
-        rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1;
-      else if (rb < 100)
-        rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1;
-      else
-        rb_alloc_ind = 0;
-
-
-      if (rb_alloc_ind == 1)
-        nb_rb++;
-
-      // PBCH
-
-      if ((subframe==0) &&
-          (l>=(nsymb>>1)) &&
-          (l<((nsymb>>1) + 4))) {
-        rb_alloc_ind = 0;
-      }
-
-      //SSS
-      if (((subframe==0)||(subframe==5)) && (l==sss_symb) ) {
-        rb_alloc_ind = 0;
-      }
-
-      if (frame_parms->frame_type == FDD) {
-        //PSS
-        if (((subframe==0)||(subframe==5)) && (l==pss_symb) ) {
-          rb_alloc_ind = 0;
-        }
-      }
-
-      //PSS
-      if ((frame_parms->frame_type == TDD) &&
-          (subframe==6) &&
-          (l==pss_symb) ) {
-        rb_alloc_ind = 0;
-      }
-
-
-      //  printf("dlch_ext %d\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]);
-      //      printf("DC rb %d (%p)\n",rb,rxF);
-      if (rb_alloc_ind==1) {
-#ifdef DEBUG_DLSCH_DEMOD
-        printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half);
-#endif
-        if (pilots==0) {
-          for (i=0; i<6; i++) {
-            dl_ch0_ext[i]=dl_ch0[i];
-            rxF_ext[i]=rxF[i];
-          }
-
-          rxF       = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))];
-
-          for (; i<12; i++) {
-            dl_ch0_ext[i]=dl_ch0[i];
-            rxF_ext[i]=rxF[(1+i-6)];
-          }
-
-          dl_ch0_ext+=12;
-          rxF_ext+=12;
-        } else { // pilots==1
-          j=0;
-
-          for (i=0; i<6; i++) {
-            if (i!=((frame_parms->nushift+poffset)%6)) {
-              dl_ch0_ext[j]=dl_ch0[i];
-              rxF_ext[j++]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-              printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1]));
-#endif
-            }
-          }
-
-          rxF       = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))];
-
-          for (; i<12; i++) {
-            if (i!=((frame_parms->nushift+6+poffset)%12)) {
-              dl_ch0_ext[j]=dl_ch0[i];
-              rxF_ext[j++]=rxF[(1+i-6)];
-#ifdef DEBUG_DLSCH_DEMOD
-              printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1]));
-#endif
-            }
-          }
-
-          dl_ch0_ext+=10;
-          rxF_ext+=10;
-        } // symbol_mod==0
-      } // rballoc==1
-      else {
-        rxF       = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))];
-      }
-
-      dl_ch0+=12;
-      rxF+=7;
-      rb++;
-
-      for (;rb<frame_parms->N_RB_DL;rb++) {
-        //      printf("dlch_ext %d\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]);
-        //      printf("rb %d (%p)\n",rb,rxF);
-        skip_half=0;
-
-        if (rb < 32)
-          rb_alloc_ind = (rb_alloc[0]>>rb) & 1;
-        else if (rb < 64)
-          rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1;
-        else if (rb < 96)
-          rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1;
-        else if (rb < 100)
-          rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1;
-        else
-          rb_alloc_ind = 0;
-
-        if (rb_alloc_ind == 1)
-          nb_rb++;
-
-        // PBCH
-        if ((subframe==0) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=nsymb>>1) && (l<((nsymb>>1) + 4))) {
-          rb_alloc_ind = 0;
-        }
-        //PBCH subframe 0, symbols nsymb>>1 ... nsymb>>1 + 3
-        if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4)))
-          skip_half=1;
-        else if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4)))
-          skip_half=2;
-
-        //SSS
-        if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb) ) {
-          rb_alloc_ind = 0;
-        }
-        //SSS
-        if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==sss_symb))
-          skip_half=1;
-        else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb))
-          skip_half=2;
-        if (frame_parms->frame_type == FDD) {
-          //PSS
-          if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-
-          //PSS
-
-          if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb))
-            skip_half=1;
-          else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb))
-            skip_half=2;
-        }
-
-        if ((frame_parms->frame_type == TDD) &&
-
-            (subframe==6)) { //TDD Subframe 6
-          if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-
-          if ((rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb))
-            skip_half=1;
-          else if ((rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb))
-            skip_half=2;
-        }
-
-        if (rb_alloc_ind==1) {
-#ifdef DEBUG_DLSCH_DEMOD
-          printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half);
-#endif
-          /*
-            printf("rb %d\n",rb);
-            for (i=0;i<12;i++)
-            printf("(%d %d)",((short *)dl_ch0)[i<<1],((short*)dl_ch0)[1+(i<<1)]);
-            printf("\n");
-          */
-          if (pilots==0) {
-            //      printf("Extracting w/o pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half);
-            if (skip_half==1) {
-              memcpy(dl_ch0_ext,dl_ch0,6*sizeof(int));
-
-              for (i=0; i<6; i++) {
-                rxF_ext[i]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-              dl_ch0_ext+=6;
-              rxF_ext+=6;
-
-            } else if (skip_half==2) {
-              memcpy(dl_ch0_ext,dl_ch0+6,6*sizeof(int));
-
-              for (i=0; i<6; i++) {
-                rxF_ext[i]=rxF[(i+6)];
-#ifdef DEBUG_DLSCH_DEMOD
-                printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-              dl_ch0_ext+=6;
-              rxF_ext+=6;
-
-            } else {
-              memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int));
-
-              for (i=0; i<12; i++) {
-                rxF_ext[i]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-              dl_ch0_ext+=12;
-              rxF_ext+=12;
-            }
-          } else {
-            //      printf("Extracting with pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half);
-            j=0;
-
-            if (skip_half==1) {
-              for (i=0; i<6; i++) {
-                if (i!=((frame_parms->nushift+poffset)%6)) {
-                  rxF_ext[j]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                  printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
-#endif
-                  dl_ch0_ext[j++]=dl_ch0[i];
-                }
-              }
-
-              dl_ch0_ext+=5;
-              rxF_ext+=5;
-            } else if (skip_half==2) {
-              for (i=0; i<6; i++) {
-                if (i!=((frame_parms->nushift+poffset)%6)) {
-                  rxF_ext[j]=rxF[(i+6)];
-#ifdef DEBUG_DLSCH_DEMOD
-                  printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
-#endif
-                  dl_ch0_ext[j++]=dl_ch0[i+6];
-                }
-              }
-
-              dl_ch0_ext+=5;
-              rxF_ext+=5;
-            } else {
-              for (i=0; i<12; i++) {
-                if ((i!=(frame_parms->nushift+poffset)) &&
-                    (i!=((frame_parms->nushift+poffset+6)%12))) {
-                  rxF_ext[j]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                  printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
-#endif
-                  dl_ch0_ext[j++]=dl_ch0[i];
-                }
-              }
-              dl_ch0_ext+=10;
-              rxF_ext+=10;
-            }
-          } // pilots=0
-        }
-
-        dl_ch0+=12;
-        rxF+=12;
-      }
-    }
-  }
-
-
-  return(nb_rb/frame_parms->nb_antennas_rx);
-}
-
-unsigned short dlsch_extract_rbs_dual(int **rxdataF,
-                                      int **dl_ch_estimates,
-                                      int **rxdataF_ext,
-                                      int **dl_ch_estimates_ext,
-                                      unsigned short pmi,
-                                      unsigned char *pmi_ext,
-                                      unsigned int *rb_alloc,
-                                      unsigned char symbol,
-                                      unsigned char subframe,
-                                      uint32_t high_speed_flag,
-                                      LTE_DL_FRAME_PARMS *frame_parms,
-                                      MIMO_mode_t mimo_mode) {
-
-  int prb,nb_rb=0;
-  int prb_off,prb_off2;
-  int rb_alloc_ind,skip_half=0,sss_symb,pss_symb=0,nsymb,l;
-  int i,aarx;
-  int32_t *dl_ch0,*dl_ch0p,*dl_ch0_ext,*dl_ch1,*dl_ch1p,*dl_ch1_ext,*rxF,*rxF_ext;
-  int symbol_mod,pilots=0,j=0;
-  unsigned char *pmi_loc;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-  //  printf("extract_rbs: symbol_mod %d\n",symbol_mod);
-
-  if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp)))
-    pilots=1;
-
-  nsymb = (frame_parms->Ncp==NORMAL) ? 14:12;
-  l=symbol;
-
-  if (frame_parms->frame_type == TDD) {  // TDD
-    sss_symb = nsymb-1;
-    pss_symb = 2;
-  } else {
-    sss_symb = (nsymb>>1)-2;
-    pss_symb = (nsymb>>1)-1;
-  }
-
-  for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-
-    if (high_speed_flag==1) {
-      dl_ch0     = &dl_ch_estimates[aarx][5+(symbol*(frame_parms->ofdm_symbol_size))];
-      dl_ch1     = &dl_ch_estimates[2+aarx][5+(symbol*(frame_parms->ofdm_symbol_size))];
-    } else {
-      dl_ch0     = &dl_ch_estimates[aarx][5];
-      dl_ch1     = &dl_ch_estimates[2+aarx][5];
-    }
-
-    pmi_loc = pmi_ext;
-
-    // pointers to extracted RX signals and channel estimates
-    rxF_ext    = &rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)];
-    dl_ch0_ext = &dl_ch_estimates_ext[aarx][symbol*(frame_parms->N_RB_DL*12)];
-    dl_ch1_ext = &dl_ch_estimates_ext[2+aarx][symbol*(frame_parms->N_RB_DL*12)];
-
-    for (prb=0; prb<frame_parms->N_RB_DL; prb++) {
-      skip_half=0;
-
-      if (prb < 32)
-        rb_alloc_ind = (rb_alloc[0]>>prb) & 1;
-      else if (prb < 64)
-        rb_alloc_ind = (rb_alloc[1]>>(prb-32)) & 1;
-      else if (prb < 96)
-        rb_alloc_ind = (rb_alloc[2]>>(prb-64)) & 1;
-      else if (prb < 100)
-        rb_alloc_ind = (rb_alloc[3]>>(prb-96)) & 1;
-      else
-        rb_alloc_ind = 0;
-
-      if (rb_alloc_ind == 1)
-          nb_rb++;
-
-
-      if ((frame_parms->N_RB_DL&1) == 0) {  // even number of RBs
-
-        // PBCH
-        if ((subframe==0) &&
-            (prb>=((frame_parms->N_RB_DL>>1)-3)) &&
-            (prb<((frame_parms->N_RB_DL>>1)+3)) &&
-            (l>=(nsymb>>1)) &&
-            (l<((nsymb>>1) + 4))) {
-          rb_alloc_ind = 0;
-          //    printf("symbol %d / rb %d: skipping PBCH REs\n",symbol,prb);
-        }
-
-        //SSS
-
-        if (((subframe==0)||(subframe==5)) &&
-            (prb>=((frame_parms->N_RB_DL>>1)-3)) &&
-            (prb<((frame_parms->N_RB_DL>>1)+3)) &&
-            (l==sss_symb) ) {
-          rb_alloc_ind = 0;
-          //    printf("symbol %d / rb %d: skipping SSS REs\n",symbol,prb);
-        }
-
-
-
-        //PSS in subframe 0/5 if FDD
-        if (frame_parms->frame_type == FDD) {  //FDD
-          if (((subframe==0)||(subframe==5)) &&
-              (prb>=((frame_parms->N_RB_DL>>1)-3)) &&
-              (prb<((frame_parms->N_RB_DL>>1)+3)) &&
-              (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-            //    printf("symbol %d / rb %d: skipping PSS REs\n",symbol,prb);
-          }
-        }
-
-        if ((frame_parms->frame_type == TDD) &&
-            (subframe==6)) { //TDD Subframe 6
-          if ((prb>=((frame_parms->N_RB_DL>>1)-3)) &&
-              (prb<((frame_parms->N_RB_DL>>1)+3)) &&
-              (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-        }
-
-        if (rb_alloc_ind==1) {              // PRB is allocated
-
-
-
-          prb_off      = 12*prb;
-          prb_off2     = 1+(12*(prb-(frame_parms->N_RB_DL>>1)));
-          dl_ch0p    = dl_ch0+(12*prb);
-          dl_ch1p    = dl_ch1+(12*prb);
-          if (prb<(frame_parms->N_RB_DL>>1)){
-            rxF      = &rxdataF[aarx][prb_off+
-                                      frame_parms->first_carrier_offset +
-                                      (symbol*(frame_parms->ofdm_symbol_size))];
-          }
-          else {
-            rxF      = &rxdataF[aarx][prb_off2+
-                                      (symbol*(frame_parms->ofdm_symbol_size))];
-          }
-
-         /*
-         if (mimo_mode <= PUSCH_PRECODING1)
-          *pmi_loc = (pmi>>((prb>>2)<<1))&3;
-         else
-          *pmi_loc=(pmi>>prb)&1;*/
-
-         *pmi_loc = get_pmi(frame_parms->N_RB_DL,mimo_mode,pmi,prb);
-          pmi_loc++;
-
-
-          if (pilots == 0) {
-
-            memcpy(dl_ch0_ext,dl_ch0p,12*sizeof(int));
-            memcpy(dl_ch1_ext,dl_ch1p,12*sizeof(int));
-            memcpy(rxF_ext,rxF,12*sizeof(int));
-            dl_ch0_ext +=12;
-            dl_ch1_ext +=12;
-            rxF_ext    +=12;
-          } else { // pilots==1
-            j=0;
-            for (i=0; i<12; i++) {
-              if ((i!=frame_parms->nushift) &&
-                  (i!=frame_parms->nushift+3) &&
-                  (i!=frame_parms->nushift+6) &&
-                  (i!=((frame_parms->nushift+9)%12))) {
-                rxF_ext[j]=rxF[i];
-                //        printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
-                dl_ch0_ext[j]=dl_ch0p[i];
-                dl_ch1_ext[j++]=dl_ch1p[i];
-              }
-            }
-            dl_ch0_ext+=8;
-            dl_ch1_ext+=8;
-            rxF_ext+=8;
-          } // pilots==1
-
-        }
-      } else {  // Odd number of RBs
-
-
-      // PBCH
-        if ((subframe==0) &&
-            (prb>((frame_parms->N_RB_DL>>1)-3)) &&
-            (prb<((frame_parms->N_RB_DL>>1)+3)) &&
-            (l>=(nsymb>>1)) &&
-            (l<((nsymb>>1) + 4))) {
-          rb_alloc_ind = 0;
-          //    printf("symbol %d / rb %d: skipping PBCH REs\n",symbol,prb);
-        }
-
-        //SSS
-
-        if (((subframe==0)||(subframe==5)) &&
-            (prb>((frame_parms->N_RB_DL>>1)-3)) &&
-            (prb<((frame_parms->N_RB_DL>>1)+3)) &&
-            (l==sss_symb) ) {
-          rb_alloc_ind = 0;
-          //    printf("symbol %d / rb %d: skipping SSS REs\n",symbol,prb);
-        }
-
-
-
-        //PSS in subframe 0/5 if FDD
-        if (frame_parms->frame_type == FDD) {  //FDD
-          if (((subframe==0)||(subframe==5)) &&
-              (prb>((frame_parms->N_RB_DL>>1)-3)) &&
-              (prb<((frame_parms->N_RB_DL>>1)+3)) &&
-              (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-            //    printf("symbol %d / rb %d: skipping PSS REs\n",symbol,prb);
-          }
-        }
-
-        if ((frame_parms->frame_type == TDD) &&
-            ((subframe==1) || (subframe==6))) { //TDD Subframe 1-6
-          if ((prb>((frame_parms->N_RB_DL>>1)-3)) &&
-              (prb<((frame_parms->N_RB_DL>>1)+3)) &&
-              (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-        }
-
-        if (rb_alloc_ind == 1) {
-          skip_half=0;
-
-          //Check if we have to drop half a PRB due to PSS/SSS/PBCH
-          // skip_half == 0 means full PRB
-          // skip_half == 1 means first half is used (leftmost half-PRB from PSS/SSS/PBCH)
-          // skip_half == 2 means second half is used (rightmost half-PRB from PSS/SSS/PBCH)
-          //PBCH subframe 0, symbols nsymb>>1 ... nsymb>>1 + 3
-          if ((subframe==0) &&
-              (prb==((frame_parms->N_RB_DL>>1)-3)) &&
-              (l>=(nsymb>>1)) &&
-              (l<((nsymb>>1) + 4)))
-            skip_half=1;
-          else if ((subframe==0) &&
-                   (prb==((frame_parms->N_RB_DL>>1)+3)) &&
-                   (l>=(nsymb>>1)) &&
-                   (l<((nsymb>>1) + 4)))
-            skip_half=2;
-
-          //SSS
-          if (((subframe==0)||(subframe==5)) &&
-              (prb==((frame_parms->N_RB_DL>>1)-3)) &&
-              (l==sss_symb))
-            skip_half=1;
-          else if (((subframe==0)||(subframe==5)) &&
-                   (prb==((frame_parms->N_RB_DL>>1)+3)) &&
-                   (l==sss_symb))
-            skip_half=2;
-
-          //PSS Subframe 0,5
-          if (((frame_parms->frame_type == FDD) &&
-               (((subframe==0)||(subframe==5)))) ||  //FDD Subframes 0,5
-              ((frame_parms->frame_type == TDD) &&
-               (((subframe==1) || (subframe==6))))) { //TDD Subframes 1,6
-
-            if ((prb==((frame_parms->N_RB_DL>>1)-3)) &&
-                (l==pss_symb))
-              skip_half=1;
-            else if ((prb==((frame_parms->N_RB_DL>>1)+3)) &&
-                     (l==pss_symb))
-              skip_half=2;
-          }
-
-
-          prb_off      = 12*prb;
-          prb_off2     = 7+(12*(prb-(frame_parms->N_RB_DL>>1)-1));
-          dl_ch0p      = dl_ch0+(12*prb);
-          dl_ch1p      = dl_ch1+(12*prb);
-
-          if (prb<=(frame_parms->N_RB_DL>>1)){
-            rxF      = &rxdataF[aarx][prb_off+
-                                      frame_parms->first_carrier_offset +
-                                      (symbol*(frame_parms->ofdm_symbol_size))];
-          }
-          else {
-            rxF      = &rxdataF[aarx][prb_off2+
-                                      (symbol*(frame_parms->ofdm_symbol_size))];
-          }
-#ifdef DEBUG_DLSCH_DEMOD
-          printf("symbol %d / rb %d: alloc %d skip_half %d (rxF %p, rxF_ext %p) prb_off (%d,%d)\n",symbol,prb,rb_alloc_ind,skip_half,rxF,rxF_ext,prb_off,prb_off2);
-#endif
-         /* if (mimo_mode <= PUSCH_PRECODING1)
-           *pmi_loc = (pmi>>((prb>>2)<<1))&3;
-          else
-           *pmi_loc=(pmi>>prb)&1;
-         // printf("symbol_mod %d (pilots %d) rb %d, sb %d, pmi %d (pmi_loc %p,rxF %p, ch00 %p, ch01 %p, rxF_ext %p dl_ch0_ext %p dl_ch1_ext %p)\n",symbol_mod,pilots,prb,prb>>2,*pmi_loc,pmi_loc,rxF,dl_ch0, dl_ch1, rxF_ext,dl_ch0_ext,dl_ch1_ext);
-*/
-         *pmi_loc = get_pmi(frame_parms->N_RB_DL,mimo_mode,pmi,prb);
-          pmi_loc++;
-
-          if (prb != (frame_parms->N_RB_DL>>1)) { // This PRB is not around DC
-            if (pilots==0) {
-              if (skip_half==1) {
-                memcpy(dl_ch0_ext,dl_ch0p,6*sizeof(int32_t));
-                memcpy(dl_ch1_ext,dl_ch1p,6*sizeof(int32_t));
-                memcpy(rxF_ext,rxF,6*sizeof(int32_t));
-#ifdef DEBUG_DLSCH_DEMOD
-                for (i=0;i<6;i++)
-                  printf("extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                dl_ch0_ext+=6;
-                dl_ch1_ext+=6;
-                rxF_ext+=6;
-              } else if (skip_half==2) {
-                memcpy(dl_ch0_ext,dl_ch0p+6,6*sizeof(int32_t));
-                memcpy(dl_ch1_ext,dl_ch1p+6,6*sizeof(int32_t));
-                memcpy(rxF_ext,rxF+6,6*sizeof(int32_t));
-#ifdef DEBUG_DLSCH_DEMOD
-                for (i=0;i<6;i++)
-                  printf("extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                dl_ch0_ext+=6;
-                dl_ch1_ext+=6;
-                rxF_ext+=6;
-              } else {  // skip_half==0
-                memcpy(dl_ch0_ext,dl_ch0p,12*sizeof(int32_t));
-                memcpy(dl_ch1_ext,dl_ch1p,12*sizeof(int32_t));
-                memcpy(rxF_ext,rxF,12*sizeof(int32_t));
-#ifdef DEBUG_DLSCH_DEMOD
-                for (i=0;i<12;i++)
-                  printf("extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                dl_ch0_ext+=12;
-                dl_ch1_ext+=12;
-                rxF_ext+=12;
-              }
-            } else { // pilots=1
-              j=0;
-
-              if (skip_half==1) {
-                for (i=0; i<6; i++) {
-                  if ((i!=frame_parms->nushift) &&
-                      (i!=((frame_parms->nushift+3)%6))) {
-                    rxF_ext[j]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                    printf("(pilots,skip1)extract rb %d, re %d (%d)=> (%d,%d)\n",prb,i,j,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
-#endif
-                    dl_ch0_ext[j]=dl_ch0p[i];
-                    dl_ch1_ext[j++]=dl_ch1p[i];
-                  }
-                }
-                dl_ch0_ext+=4;
-                dl_ch1_ext+=4;
-                rxF_ext+=4;
-              } else if (skip_half==2) {
-                for (i=0; i<6; i++) {
-                  if ((i!=frame_parms->nushift) &&
-                      (i!=((frame_parms->nushift+3)%6))) {
-                    rxF_ext[j]=rxF[(i+6)];
-#ifdef DEBUG_DLSCH_DEMOD
-                    printf("(pilots,skip2)extract rb %d, re %d (%d) => (%d,%d)\n",prb,i,j,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
-#endif
-                    dl_ch0_ext[j]=dl_ch0p[i+6];
-                    dl_ch1_ext[j++]=dl_ch1p[i+6];
-                  }
-                }
-                dl_ch0_ext+=4;
-                dl_ch1_ext+=4;
-                rxF_ext+=4;
-
-              } else { //skip_half==0
-                for (i=0; i<12; i++) {
-                  if ((i!=frame_parms->nushift) &&
-                      (i!=frame_parms->nushift+3) &&
-                      (i!=frame_parms->nushift+6) &&
-                      (i!=((frame_parms->nushift+9)%12))) {
-                    rxF_ext[j]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                    printf("(pilots)extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
-#endif
-                    dl_ch0_ext[j]  =dl_ch0p[i];
-                    dl_ch1_ext[j++]=dl_ch1p[i];
-                  }
-                }
-                dl_ch0_ext+=8;
-                dl_ch1_ext+=8;
-                rxF_ext+=8;
-              } //skip_half==0
-            } //pilots==1
-          } else {       // Do middle RB (around DC)
-
-            if (pilots==0) {
-              memcpy(dl_ch0_ext,dl_ch0p,6*sizeof(int32_t));
-              memcpy(dl_ch1_ext,dl_ch1p,6*sizeof(int32_t));
-              memcpy(rxF_ext,rxF,6*sizeof(int32_t));
-#ifdef DEBUG_DLSCH_DEMOD
-              for (i=0; i<6; i++) {
-                printf("extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-              }
-#endif
-              rxF_ext+=6;
-              dl_ch0_ext+=6;
-              dl_ch1_ext+=6;
-              dl_ch0p+=6;
-              dl_ch1p+=6;
-
-              rxF       = &rxdataF[aarx][1+((symbol*(frame_parms->ofdm_symbol_size)))];
-
-              memcpy(dl_ch0_ext,dl_ch0p,6*sizeof(int32_t));
-              memcpy(dl_ch1_ext,dl_ch1p,6*sizeof(int32_t));
-              memcpy(rxF_ext,rxF,6*sizeof(int32_t));
-#ifdef DEBUG_DLSCH_DEMOD
-              for (i=0; i<6; i++) {
-                printf("extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-              }
-#endif
-              rxF_ext+=6;
-              dl_ch0_ext+=6;
-              dl_ch1_ext+=6;
-            } else { // pilots==1
-              j=0;
-
-              for (i=0; i<6; i++) {
-                if ((i!=frame_parms->nushift) &&
-                    (i!=((frame_parms->nushift+3)%6))) {
-                  dl_ch0_ext[j]=dl_ch0p[i];
-                  dl_ch1_ext[j]=dl_ch1p[i];
-                  rxF_ext[j++]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                  printf("(pilots)extract rb %d, re %d (%d) => (%d,%d)\n",prb,i,j,*(short *)&rxF[i],*(1+(short*)&rxF[i]));
-#endif
-                }
-              }
-              rxF       = &rxdataF[aarx][1+symbol*(frame_parms->ofdm_symbol_size)];
-
-              for (; i<12; i++) {
-                if ((i!=((frame_parms->nushift+6)%12)) &&
-                    (i!=((frame_parms->nushift+9)%12))) {
-                  dl_ch0_ext[j]=dl_ch0p[i];
-                  dl_ch1_ext[j]=dl_ch1p[i];
-                  rxF_ext[j++]=rxF[i-6];
-#ifdef DEBUG_DLSCH_DEMOD
-                  printf("(pilots)extract rb %d, re %d (%d) => (%d,%d)\n",prb,i,j,*(short *)&rxF[1+i-6],*(1+(short*)&rxF[1+i-6]));
-#endif
-                }
-              }
-
-              dl_ch0_ext+=8;
-              dl_ch1_ext+=8;
-              rxF_ext+=8;
-            } //pilots==1
-          }  // if Middle PRB
-        } // if odd PRB
-      } // if rballoc==1
-    } // for prb
-  } // for aarx
-  return(nb_rb/frame_parms->nb_antennas_rx);
-}
-
-unsigned short dlsch_extract_rbs_TM7(int **rxdataF,
-                                     int **dl_bf_ch_estimates,
-                                     int **rxdataF_ext,
-                                     int **dl_bf_ch_estimates_ext,
-                                     unsigned int *rb_alloc,
-                                     unsigned char symbol,
-                                     unsigned char subframe,
-                                     uint32_t high_speed_flag,
-                                     LTE_DL_FRAME_PARMS *frame_parms)
-{
-
-  unsigned short rb,nb_rb=0;
-  unsigned char rb_alloc_ind;
-  unsigned char i,aarx,l,nsymb,skip_half=0,sss_symb,pss_symb=0;
-  int *dl_ch0,*dl_ch0_ext,*rxF,*rxF_ext;
-
-  unsigned char symbol_mod,pilots=0,uespec_pilots=0,j=0,poffset=0,uespec_poffset=0;
-  int8_t uespec_nushift = frame_parms->Nid_cell%3;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-  pilots = ((symbol_mod==0)||(symbol_mod==(4-frame_parms->Ncp))) ? 1 : 0;
-  l=symbol;
-  nsymb = (frame_parms->Ncp==NORMAL) ? 14:12;
-
-  if (frame_parms->Ncp==0){
-    if (symbol==3 || symbol==6 || symbol==9 || symbol==12)
-      uespec_pilots = 1;
-  } else{
-    if (symbol==4 || symbol==7 || symbol==10)
-      uespec_pilots = 1;
-  }
-
-  if (frame_parms->frame_type == TDD) {// TDD
-    sss_symb = nsymb-1;
-    pss_symb = 2;
-  } else {
-    sss_symb = (nsymb>>1)-2;
-    pss_symb = (nsymb>>1)-1;
-  }
-
-  if (symbol_mod==(4-frame_parms->Ncp))
-    poffset=3;
-
-  if ((frame_parms->Ncp==0 && (symbol==6 ||symbol ==12)) || (frame_parms->Ncp==1 && symbol==7))
-    uespec_poffset=2;
-
-  for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
-
-    if (high_speed_flag == 1)
-      dl_ch0     = &dl_bf_ch_estimates[aarx][symbol*(frame_parms->ofdm_symbol_size)];
-    else
-      dl_ch0     = &dl_bf_ch_estimates[aarx][0];
-
-    dl_ch0_ext = &dl_bf_ch_estimates_ext[aarx][symbol*(frame_parms->N_RB_DL*12)];
-
-    rxF_ext    = &rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)];
-    rxF        = &rxdataF[aarx][(frame_parms->first_carrier_offset + (symbol*(frame_parms->ofdm_symbol_size)))];
-
-    if ((frame_parms->N_RB_DL&1) == 0)  // even number of RBs
-      for (rb=0; rb<frame_parms->N_RB_DL; rb++) {
-
-        if (rb < 32)
-          rb_alloc_ind = (rb_alloc[0]>>rb) & 1;
-        else if (rb < 64)
-          rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1;
-        else if (rb < 96)
-          rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1;
-        else if (rb < 100)
-          rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1;
-        else
-          rb_alloc_ind = 0;
-
-  if (rb_alloc_ind == 1)
-          nb_rb++;
-
-        // For second half of RBs skip DC carrier
-        if (rb==(frame_parms->N_RB_DL>>1)) {
-          rxF       = &rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))];
-          //dl_ch0++;
-        }
-
-        // PBCH
-        if ((subframe==0) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=nsymb>>1) && (l<((nsymb>>1) + 4))) {
-          rb_alloc_ind = 0;
-        }
-
-        //SSS
-        if (((subframe==0)||(subframe==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb) ) {
-          rb_alloc_ind = 0;
-        }
-
-
-        if (frame_parms->frame_type == FDD) {
-          //PSS
-          if (((subframe==0)||(subframe==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-        }
-
-        if ((frame_parms->frame_type == TDD) &&
-            (subframe==6)) { //TDD Subframe 6
-          if ((rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-        }
-
-        if (rb_alloc_ind==1) {
-
-          /*
-              printf("rb %d\n",rb);
-              for (i=0;i<12;i++)
-              printf("(%d %d)",((short *)dl_ch0)[i<<1],((short*)dl_ch0)[1+(i<<1)]);
-              printf("\n");
-          */
-          if (pilots==0 && uespec_pilots==0) {
-            memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int));
-
-            for (i=0; i<12; i++) {
-              rxF_ext[i]=rxF[i];
-            }
-
-            dl_ch0_ext+=12;
-            rxF_ext+=12;
-          } else if(pilots==1 && uespec_pilots==0) {
-            j=0;
-
-            for (i=0; i<12; i++) {
-              if ((i!=(frame_parms->nushift+poffset)) &&
-                  (i!=((frame_parms->nushift+poffset+6)%12))) {
-                rxF_ext[j]=rxF[i];
-                dl_ch0_ext[j++]=dl_ch0[i];
-              }
-            }
-
-            dl_ch0_ext+=10;
-            rxF_ext+=10;
-
-          } else if (pilots==0 && uespec_pilots==1) {
-            j=0;
-
-
-      for (i=0; i<12; i++){
-              if (frame_parms->Ncp==0){
-                if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){
-      rxF_ext[j] = rxF[i];
-                  dl_ch0_ext[j++]=dl_ch0[i];
-                }
-              } else{
-                if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){
-      rxF_ext[j] = rxF[i];
-                  dl_ch0_ext[j++]=dl_ch0[i];
-                }
-              }
-
-      }
-
-            dl_ch0_ext+=9-frame_parms->Ncp;
-            rxF_ext+=9-frame_parms->Ncp;
-
-          } else {
-            LOG_E(PHY,"dlsch_extract_rbs_TM7(dl_demodulation.c):pilot or ue spec pilot detection error\n");
-            exit(-1);
-          }
-
-        }
-
-        dl_ch0+=12;
-        rxF+=12;
-
-      }
-    else {  // Odd number of RBs
-      for (rb=0; rb<frame_parms->N_RB_DL>>1; rb++) {
-        skip_half=0;
-
-        if (rb < 32)
-          rb_alloc_ind = (rb_alloc[0]>>rb) & 1;
-        else if (rb < 64)
-          rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1;
-        else if (rb < 96)
-          rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1;
-        else if (rb < 100)
-          rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1;
-        else
-          rb_alloc_ind = 0;
-
-        if (rb_alloc_ind == 1)
-          nb_rb++;
-
-        // PBCH
-        if ((subframe==0) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) {
-          rb_alloc_ind = 0;
-        }
-
-        //PBCH subframe 0, symbols nsymb>>1 ... nsymb>>1 + 3
-        if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4)))
-          skip_half=1;
-        else if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4)))
-          skip_half=2;
-
-        //SSS
-
-        if (((subframe==0)||(subframe==5)) &&
-            (rb>((frame_parms->N_RB_DL>>1)-3)) &&
-            (rb<((frame_parms->N_RB_DL>>1)+3)) &&
-            (l==sss_symb) ) {
-          rb_alloc_ind = 0;
-        }
-
-        //SSS
-        if (((subframe==0)||(subframe==5)) &&
-            (rb==((frame_parms->N_RB_DL>>1)-3)) &&
-            (l==sss_symb))
-          skip_half=1;
-        else if (((subframe==0)||(subframe==5)) &&
-                 (rb==((frame_parms->N_RB_DL>>1)+3)) &&
-                 (l==sss_symb))
-          skip_half=2;
-
-        //PSS in subframe 0/5 if FDD
-        if (frame_parms->frame_type == FDD) {  //FDD
-          if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-
-          if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb))
-            skip_half=1;
-          else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb))
-            skip_half=2;
-        }
-
-        if ((frame_parms->frame_type == TDD) && ((subframe==1)||(subframe==6))) { //TDD Subframe 1 and 6
-          if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-
-          if ((rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb))
-            skip_half=1;
-          else if ((rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb))
-            skip_half=2;
-        }
-
-
-        if (rb_alloc_ind==1) {
-#ifdef DEBUG_DLSCH_DEMOD
-          printf("rb %d/symbol %d pilots %d, uespec_pilots %d, (skip_half %d)\n",rb,l,pilots,uespec_pilots,skip_half);
-#endif
-
-          if (pilots==0 && uespec_pilots==0) {
-            //printf("Extracting w/o pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half);
-
-            if (skip_half==1) {
-              memcpy(dl_ch0_ext,dl_ch0,6*sizeof(int));
-
-              for (i=0; i<6; i++) {
-                rxF_ext[i]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-    printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-
-              dl_ch0_ext+=6;
-              rxF_ext+=6;
-            } else if (skip_half==2) {
-              memcpy(dl_ch0_ext,dl_ch0+6,6*sizeof(int));
-
-              for (i=0; i<6; i++) {
-                rxF_ext[i]=rxF[(i+6)];
-#ifdef DEBUG_DLSCH_DEMOD
-    printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-
-              dl_ch0_ext+=6;
-              rxF_ext+=6;
-            } else {
-              memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int));
-
-              for (i=0; i<12; i++){
-                rxF_ext[i]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                printf("extract rb %d, re %d => (%d,%d)\n",symbol,rb,i,*(short *)&rxF[i],*(1+(short*)&rxF[i]));
-#endif
-              }
-              dl_ch0_ext+=12;
-              rxF_ext+=12;
-            }
-          } else if (pilots==1 && uespec_pilots==0) {
-            // printf("Extracting with pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half);
-            j=0;
-
-            if (skip_half==1) {
-              for (i=0; i<6; i++) {
-                if (i!=((frame_parms->nushift+poffset)%6)) {
-                  rxF_ext[j]=rxF[i];
-                  dl_ch0_ext[j++]=dl_ch0[i];
-#ifdef DEBUG_DLSCH_DEMOD
-    printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                }
-              }
-
-              dl_ch0_ext+=5;
-              rxF_ext+=5;
-            } else if (skip_half==2) {
-              for (i=0; i<6; i++) {
-                if (i!=((frame_parms->nushift+poffset)%6)) {
-                  rxF_ext[j]=rxF[(i+6)];
-                  dl_ch0_ext[j++]=dl_ch0[i+6];
-#ifdef DEBUG_DLSCH_DEMOD
-    printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                }
-              }
-
-              dl_ch0_ext+=5;
-              rxF_ext+=5;
-            } else {
-              for (i=0; i<12; i++) {
-                if ((i!=(frame_parms->nushift+poffset)) &&
-                    (i!=((frame_parms->nushift+poffset+6)%12))) {
-                  rxF_ext[j]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                  printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
-#endif
-                  dl_ch0_ext[j++]=dl_ch0[i];
-
-                }
-              }
-
-              dl_ch0_ext+=10;
-              rxF_ext+=10;
-            }
-          } else if(pilots==0 && uespec_pilots==1){
-            //printf("Extracting with uespec pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half);
-            j=0;
-
-            if (skip_half==1) {
-              if (frame_parms->Ncp==0){
-                for (i=0; i<6; i++) {
-                  if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){
-                    rxF_ext[j]=rxF[i];
-                    dl_ch0_ext[j++]=dl_ch0[i];
-#ifdef DEBUG_DLSCH_DEMOD
-              printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                  }
-                }
-                dl_ch0_ext+=6-(uespec_nushift+uespec_poffset<6)-(uespec_nushift+uespec_poffset+4<6)-((uespec_nushift+uespec_poffset+8)%12<6);
-                rxF_ext+=6-(uespec_nushift+uespec_poffset<6)-(uespec_nushift+uespec_poffset+4<6)-((uespec_nushift+uespec_poffset+8)%12<6);
-
-              } else{
-                for (i=0; i<6; i++) {
-                  if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){
-                    rxF_ext[j]=rxF[i];
-                    dl_ch0_ext[j++]=dl_ch0[i];
-#ifdef DEBUG_DLSCH_DEMOD
-        printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                  }
-                }
-                dl_ch0_ext+=4;
-                rxF_ext+=4;
-              }
-
-            } else if (skip_half==2) {
-              if(frame_parms->Ncp==0){
-                for (i=0; i<6; i++) {
-                  if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){
-                    rxF_ext[j]=rxF[(i+6)];
-                    dl_ch0_ext[j++]=dl_ch0[i+6];
-#ifdef DEBUG_DLSCH_DEMOD
-              printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                  }
-                }
-                dl_ch0_ext+=6-(uespec_nushift+uespec_poffset>6)-(uespec_nushift+uespec_poffset+4>6)-((uespec_nushift+uespec_poffset+8)%12>6);
-                rxF_ext+=6-(uespec_nushift+uespec_poffset>6)-(uespec_nushift+uespec_poffset+4>6)-((uespec_nushift+uespec_poffset+8)%12>6);
-
-              } else {
-                for (i=0; i<6; i++) {
-                  if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){
-                    rxF_ext[j]=rxF[(i+6)];
-                    dl_ch0_ext[j++]=dl_ch0[i+6];
-#ifdef DEBUG_DLSCH_DEMOD
-        printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                  }
-                }
-                dl_ch0_ext+=4;
-                rxF_ext+=4;
-              }
-
-            } else {
-
-        for (i=0; i<12; i++){
-                if (frame_parms->Ncp==0){
-                  if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){
-              rxF_ext[j] = rxF[i];
-                    dl_ch0_ext[j++] = dl_ch0[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                    printf("extract rb %d, re %d, j %d => (%d,%d)\n",symbol,rb,i,j-1,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i]));
-#endif
-                  }
-                } else{
-                  if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){
-              rxF_ext[j] = rxF[i];
-                    dl_ch0_ext[j++]=dl_ch0[i];
-#ifdef DEBUG_DLSCH_DEMOD
-        printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                  }
-                }
-
-        }
-
-              dl_ch0_ext+=9-frame_parms->Ncp;
-              rxF_ext+=9-frame_parms->Ncp;
-      }
-
-          } else {
-            LOG_E(PHY,"dlsch_extract_rbs_TM7(dl_demodulation.c):pilot or ue spec pilot detection error\n");
-            exit(-1);
-
-          }
-        }
-
-        dl_ch0+=12;
-        rxF+=12;
-      } // first half loop
-
-
-      // Do middle RB (around DC)
-      if (rb < 32)
-        rb_alloc_ind = (rb_alloc[0]>>rb) & 1;
-      else if (rb < 64)
-        rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1;
-      else if (rb < 96)
-        rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1;
-      else if (rb < 100)
-        rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1;
-      else
-        rb_alloc_ind = 0;
-
-      if (rb_alloc_ind == 1)
-        nb_rb++;
-
-      // PBCH
-      if ((subframe==0) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) {
-        rb_alloc_ind = 0;
-      }
-
-      //SSS
-      if (((subframe==0)||(subframe==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb) ) {
-        rb_alloc_ind = 0;
-      }
-
-      if (frame_parms->frame_type == FDD) {
-        //PSS
-        if (((subframe==0)||(subframe==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) {
-          rb_alloc_ind = 0;
-        }
-      }
-
-      if ((frame_parms->frame_type == TDD) && ((subframe==1)||(subframe==6))) {
-        //PSS
-        if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) {
-          rb_alloc_ind = 0;
-        }
-      }
-
-      //printf("dlch_ext %d\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]);
-      //printf("DC rb %d (%p)\n",rb,rxF);
-      if (rb_alloc_ind==1) {
-        //printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half);
-        if (pilots==0 && uespec_pilots==0) {
-          for (i=0; i<6; i++) {
-            dl_ch0_ext[i]=dl_ch0[i];
-            rxF_ext[i]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-      printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-          }
-
-          rxF       = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))];
-
-          for (; i<12; i++) {
-            dl_ch0_ext[i]=dl_ch0[i];
-            rxF_ext[i]=rxF[(1+i-6)];
-#ifdef DEBUG_DLSCH_DEMOD
-      printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-          }
-
-          dl_ch0_ext+=12;
-          rxF_ext+=12;
-        } else if(pilots==1 && uespec_pilots==0){ // pilots==1
-          j=0;
-
-          for (i=0; i<6; i++) {
-            if (i!=((frame_parms->nushift+poffset)%6)) {
-              dl_ch0_ext[j]=dl_ch0[i];
-              rxF_ext[j++]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-        printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-            }
-          }
-
-          rxF       = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))];
-
-          for (; i<12; i++) {
-            if (i!=((frame_parms->nushift+6+poffset)%12)) {
-              dl_ch0_ext[j]=dl_ch0[i];
-              rxF_ext[j++]=rxF[(1+i-6)];
-#ifdef DEBUG_DLSCH_DEMOD
-        printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-            }
-          }
-
-          dl_ch0_ext+=10;
-          rxF_ext+=10;
-        } else if(pilots==0 && uespec_pilots==1) {
-          j=0;
-
-    for (i=0; i<6; i++) {
-            if (frame_parms->Ncp==0){
-              if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){
-                dl_ch0_ext[j]=dl_ch0[i];
-          rxF_ext[j++] = rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-          printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-            } else {
-              if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){
-                dl_ch0_ext[j]=dl_ch0[i];
-          rxF_ext[j++] = rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-              printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-            }
-    }
-
-          rxF       = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))];
-
-          for (; i<12; i++) {
-            if (frame_parms->Ncp==0){
-              if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){
-                dl_ch0_ext[j]=dl_ch0[i];
-                rxF_ext[j++]=rxF[(1+i-6)];
-#ifdef DEBUG_DLSCH_DEMOD
-          printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-            } else {
-              if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){
-                dl_ch0_ext[j]=dl_ch0[i];
-          rxF_ext[j++] = rxF[(1+i-6)];
-#ifdef DEBUG_DLSCH_DEMOD
-          printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-            }
-          }
-
-          dl_ch0_ext+=9-frame_parms->Ncp;
-          rxF_ext+=9-frame_parms->Ncp;
-
-  }// symbol_mod==0
-
-      } // rballoc==1
-      else {
-        rxF       = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))];
-      }
-
-      dl_ch0+=12;
-      rxF+=7;
-      rb++;
-
-      for (; rb<frame_parms->N_RB_DL; rb++) {
-        //  printf("dlch_ext %d\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]);
-        //  printf("rb %d (%p)\n",rb,rxF);
-        skip_half=0;
-
-        if (rb < 32)
-          rb_alloc_ind = (rb_alloc[0]>>rb) & 1;
-        else if (rb < 64)
-          rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1;
-        else if (rb < 96)
-          rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1;
-        else if (rb < 100)
-          rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1;
-        else
-          rb_alloc_ind = 0;
-
-        if (rb_alloc_ind==1)
-          nb_rb++;
-
-        // PBCH
-        if ((subframe==0) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=nsymb>>1) && (l<((nsymb>>1) + 4))) {
-          rb_alloc_ind = 0;
-        }
-
-        //PBCH subframe 0, symbols nsymb>>1 ... nsymb>>1 + 3
-        if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4)))
-          skip_half=1;
-        else if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4)))
-          skip_half=2;
-
-        //SSS
-        if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb) ) {
-          rb_alloc_ind = 0;
-        }
-
-        //SSS
-        if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==sss_symb))
-          skip_half=1;
-        else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb))
-          skip_half=2;
-
-        //PSS
-        if (frame_parms->frame_type == FDD) {
-          if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-
-          if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb))
-            skip_half=1;
-          else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb))
-            skip_half=2;
-        }
-
-        if ((frame_parms->frame_type == TDD) && ((subframe==1)||(subframe==6))) { //TDD Subframe 1 and 6
-          if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) {
-            rb_alloc_ind = 0;
-          }
-
-          if ((rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb))
-            skip_half=1;
-          else if ((rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb))
-            skip_half=2;
-        }
-
-        if (rb_alloc_ind==1) {
-#ifdef DEBUG_DLSCH_DEMOD
-           printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half);
-#endif
-          /*
-              printf("rb %d\n",rb);
-            for (i=0;i<12;i++)
-            printf("(%d %d)",((short *)dl_ch0)[i<<1],((short*)dl_ch0)[1+(i<<1)]);
-            printf("\n");
-          */
-          if (pilots==0 && uespec_pilots==0) {
-            //printf("Extracting w/o pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half);
-            if (skip_half==1) {
-              memcpy(dl_ch0_ext,dl_ch0,6*sizeof(int));
-
-              for (i=0; i<6; i++) {
-                rxF_ext[i]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-          printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-
-              dl_ch0_ext+=6;
-              rxF_ext+=6;
-
-            } else if (skip_half==2) {
-              memcpy(dl_ch0_ext,dl_ch0+6,6*sizeof(int));
-
-              for (i=0; i<6; i++) {
-                rxF_ext[i]=rxF[i+6];
-#ifdef DEBUG_DLSCH_DEMOD
-          printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-
-              dl_ch0_ext+=6;
-              rxF_ext+=6;
-
-            } else {
-              memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int));
-              //printf("symbol %d, extract rb %d, => (%d,%d)\n",symbol,rb,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i]));
-
-              for (i=0; i<12; i++) {
-                rxF_ext[i]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-          printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-              }
-
-              dl_ch0_ext+=12;
-              rxF_ext+=12;
-            }
-          } else if (pilots==1 && uespec_pilots==0){
-            //printf("Extracting with pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half);
-            j=0;
-
-            if (skip_half==1) {
-              for (i=0; i<6; i++) {
-                if (i!=((frame_parms->nushift+poffset)%6)) {
-                  rxF_ext[j]=rxF[i];
-                  dl_ch0_ext[j++]=dl_ch0[i];
-#ifdef DEBUG_DLSCH_DEMOD
-            printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                }
-              }
-
-              dl_ch0_ext+=5;
-              rxF_ext+=5;
-            } else if (skip_half==2) {
-              for (i=0; i<6; i++) {
-                if (i!=((frame_parms->nushift+poffset)%6)) {
-                  rxF_ext[j]=rxF[(i+6)];
-                  dl_ch0_ext[j++]=dl_ch0[i+6];
-#ifdef DEBUG_DLSCH_DEMOD
-            printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                }
-              }
-
-              dl_ch0_ext+=5;
-              rxF_ext+=5;
-            } else {
-              for (i=0; i<12; i++) {
-                if ((i!=(frame_parms->nushift+poffset)) &&
-                    (i!=((frame_parms->nushift+poffset+6)%12))) {
-                  rxF_ext[j]=rxF[i];
-#ifdef DEBUG_DLSCH_DEMOD
-                  printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
-#endif
-                  dl_ch0_ext[j++]=dl_ch0[i];
-                }
-              }
-
-              dl_ch0_ext+=10;
-              rxF_ext+=10;
-            }
-          } else if(pilots==0 && uespec_pilots==1) {
-            j=0;
-
-            if (skip_half==1) {
-              if (frame_parms->Ncp==0){
-                for (i=0; i<6; i++) {
-                  if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){
-                    rxF_ext[j]=rxF[i];
-                    dl_ch0_ext[j++]=dl_ch0[i];
-#ifdef DEBUG_DLSCH_DEMOD
-              printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                  }
-                }
-                dl_ch0_ext+=6-(uespec_nushift+uespec_poffset<6)-(uespec_nushift+uespec_poffset+4<6)-((uespec_nushift+uespec_poffset+8)%12<6);
-                rxF_ext+=6-(uespec_nushift+uespec_poffset<6)-(uespec_nushift+uespec_poffset+4<6)-((uespec_nushift+uespec_poffset+8)%12<6);
-
-              } else{
-                for (i=0; i<6; i++) {
-                  if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){
-                    rxF_ext[j]=rxF[i];
-                    dl_ch0_ext[j++]=dl_ch0[i];
-#ifdef DEBUG_DLSCH_DEMOD
-              printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                  }
-                }
-                dl_ch0_ext+=4;
-                rxF_ext+=4;
-              }
-
-            } else if (skip_half==2) {
-              if(frame_parms->Ncp==0){
-                for (i=0; i<6; i++) {
-                  if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){
-                    rxF_ext[j]=rxF[i+6];
-                    dl_ch0_ext[j++]=dl_ch0[i+6];
-#ifdef DEBUG_DLSCH_DEMOD
-              printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                  }
-                }
-                dl_ch0_ext+=6-(uespec_nushift+uespec_poffset>6)-(uespec_nushift+uespec_poffset+4>6)-((uespec_nushift+uespec_poffset+8)%12>6);
-                rxF_ext+=6-(uespec_nushift+uespec_poffset>6)-(uespec_nushift+uespec_poffset+4>6)-((uespec_nushift+uespec_poffset+8)%12>6);
-
-              } else {
-                for (i=0; i<6; i++) {
-                  if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){
-                    rxF_ext[j]=rxF[(i+6)];
-                    dl_ch0_ext[j++]=dl_ch0[i+6];
-#ifdef DEBUG_DLSCH_DEMOD
-              printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                  }
-                }
-                dl_ch0_ext+=4;
-                rxF_ext+=4;
-              }
-
-            } else {
-        for (i=0; i<12; i++){
-                if (frame_parms->Ncp==0){
-                  if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){
-              rxF_ext[j] = rxF[i];
-                    dl_ch0_ext[j++]=dl_ch0[i];
-#ifdef DEBUG_DLSCH_DEMOD
-              printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                  }
-                } else{
-                  if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){
-              rxF_ext[j] = rxF[i];
-                    dl_ch0_ext[j++]=dl_ch0[i];
-#ifdef DEBUG_DLSCH_DEMOD
-              printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
-#endif
-                  }
-                }
-        }
-
-              dl_ch0_ext+=9-frame_parms->Ncp;
-              rxF_ext+=9-frame_parms->Ncp;
-
-            }
-
-          }// pilots=0
-        }
-
-        dl_ch0+=12;
-        rxF+=12;
-      }
-    }
-  }
-
-  _mm_empty();
-  _m_empty();
-
-  return(nb_rb/frame_parms->nb_antennas_rx);
-}
-
-//==============================================================================================
-
-void dump_dlsch2(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t subframe,unsigned int *coded_bits_per_codeword,int round,  unsigned char harq_pid)
-{
-  unsigned int nsymb = (ue->frame_parms.Ncp == 0) ? 14 : 12;
-  char fname[32],vname[32];
-  int N_RB_DL=ue->frame_parms.N_RB_DL;
-
-  sprintf(fname,"dlsch%d_rxF_r%d_ext0.m",eNB_id,round);
-  sprintf(vname,"dl%d_rxF_r%d_ext0",eNB_id,round);
-  write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_ext[0],12*N_RB_DL*nsymb,1,1);
-
-  if (ue->frame_parms.nb_antennas_rx >1) {
-    sprintf(fname,"dlsch%d_rxF_r%d_ext1.m",eNB_id,round);
-    sprintf(vname,"dl%d_rxF_r%d_ext1",eNB_id,round);
-    write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_ext[1],12*N_RB_DL*nsymb,1,1);
-  }
-
-  sprintf(fname,"dlsch%d_ch_r%d_ext00.m",eNB_id,round);
-  sprintf(vname,"dl%d_ch_r%d_ext00",eNB_id,round);
-  write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1);
-
-  if (ue->transmission_mode[eNB_id]==7){
-    sprintf(fname,"dlsch%d_bf_ch_r%d.m",eNB_id,round);
-    sprintf(vname,"dl%d_bf_ch_r%d",eNB_id,round);
-    write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_bf_ch_estimates[0],512*nsymb,1,1);
-    //write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates[0],512,1,1);
-
-    sprintf(fname,"dlsch%d_bf_ch_r%d_ext00.m",eNB_id,round);
-    sprintf(vname,"dl%d_bf_ch_r%d_ext00",eNB_id,round);
-    write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_bf_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1);
-  }
-
-  if (ue->frame_parms.nb_antennas_rx == 2) {
-    sprintf(fname,"dlsch%d_ch_r%d_ext01.m",eNB_id,round);
-    sprintf(vname,"dl%d_ch_r%d_ext01",eNB_id,round);
-    write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1);
-  }
-
-  if (ue->frame_parms.nb_antenna_ports_eNB == 2) {
-    sprintf(fname,"dlsch%d_ch_r%d_ext10.m",eNB_id,round);
-    sprintf(vname,"dl%d_ch_r%d_ext10",eNB_id,round);
-    write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1);
-
-    if (ue->frame_parms.nb_antennas_rx == 2) {
-      sprintf(fname,"dlsch%d_ch_r%d_ext11.m",eNB_id,round);
-      sprintf(vname,"dl%d_ch_r%d_ext11",eNB_id,round);
-      write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb,1,1);
-    }
-  }
-
-  sprintf(fname,"dlsch%d_rxF_r%d_uespec0.m",eNB_id,round);
-  sprintf(vname,"dl%d_rxF_r%d_uespec0",eNB_id,round);
-  write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_uespec_pilots[0],12*N_RB_DL,1,1);
-
-  /*
-    write_output("dlsch%d_ch_ext01.m","dl01_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1);
-    write_output("dlsch%d_ch_ext10.m","dl10_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1);
-    write_output("dlsch%d_ch_ext11.m","dl11_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb,1,1);
-  */
-  sprintf(fname,"dlsch%d_r%d_rho.m",eNB_id,round);
-  sprintf(vname,"dl_rho_r%d_%d",eNB_id,round);
-
-  write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_rho_ext[harq_pid][round][0],12*N_RB_DL*nsymb,1,1);
-
-  sprintf(fname,"dlsch%d_r%d_rho2.m",eNB_id,round);
-  sprintf(vname,"dl_rho2_r%d_%d",eNB_id,round);
-
-  write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_rho2_ext[0],12*N_RB_DL*nsymb,1,1);
-
-  sprintf(fname,"dlsch%d_rxF_r%d_comp0.m",eNB_id,round);
-  sprintf(vname,"dl%d_rxF_r%d_comp0",eNB_id,round);
-  write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_comp0[0],12*N_RB_DL*nsymb,1,1);
-  if (ue->frame_parms.nb_antenna_ports_eNB == 2) {
-    sprintf(fname,"dlsch%d_rxF_r%d_comp1.m",eNB_id,round);
-    sprintf(vname,"dl%d_rxF_r%d_comp1",eNB_id,round);
-    write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->rxdataF_comp1[harq_pid][round][0],12*N_RB_DL*nsymb,1,1);
-  }
-
-  sprintf(fname,"dlsch%d_rxF_r%d_llr.m",eNB_id,round);
-  sprintf(vname,"dl%d_r%d_llr",eNB_id,round);
-  write_output(fname,vname, ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->llr[0],coded_bits_per_codeword[0],1,0);
-  sprintf(fname,"dlsch%d_r%d_mag1.m",eNB_id,round);
-  sprintf(vname,"dl%d_r%d_mag1",eNB_id,round);
-  write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_mag0[0],12*N_RB_DL*nsymb,1,1);
-  sprintf(fname,"dlsch%d_r%d_mag2.m",eNB_id,round);
-  sprintf(vname,"dl%d_r%d_mag2",eNB_id,round);
-  write_output(fname,vname,ue->pdsch_vars[ue->current_thread_id[subframe]][eNB_id]->dl_ch_magb0[0],12*N_RB_DL*nsymb,1,1);
-
-  //  printf("log2_maxh = %d\n",ue->pdsch_vars[eNB_id]->log2_maxh);
-}
-
-#ifdef DEBUG_DLSCH_DEMOD
-/*
-void print_bytes(char *s,__m128i *x)
-{
-
-  char *tempb = (char *)x;
-
-  printf("%s  : %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",s,
-         tempb[0],tempb[1],tempb[2],tempb[3],tempb[4],tempb[5],tempb[6],tempb[7],
-         tempb[8],tempb[9],tempb[10],tempb[11],tempb[12],tempb[13],tempb[14],tempb[15]
-         );
-
-}
-
-void print_shorts(char *s,__m128i *x)
-{
-
-  short *tempb = (short *)x;
-  printf("%s  : %d,%d,%d,%d,%d,%d,%d,%d\n",s,
-         tempb[0],tempb[1],tempb[2],tempb[3],tempb[4],tempb[5],tempb[6],tempb[7]);
-
-}
-
-void print_shorts2(char *s,__m64 *x)
-{
-
-  short *tempb = (short *)x;
-  printf("%s  : %d,%d,%d,%d\n",s,
-         tempb[0],tempb[1],tempb[2],tempb[3]);
-
-}
-
-void print_ints(char *s,__m128i *x)
-{
-
-  int *tempb = (int *)x;
-  printf("%s  : %d,%d,%d,%d\n",s,
-         tempb[0],tempb[1],tempb[2],tempb[3]);
-
-}*/
-#endif
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
deleted file mode 100644
index 7682045ae1307ca6a10ee83ef071091f7e28528d..0000000000000000000000000000000000000000
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
+++ /dev/null
@@ -1,8899 +0,0 @@
-/*
- * 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
- */
-
-/*! \file PHY/LTE_TRANSPORT/dlsch_llr_computation.c
- * \brief Top-level routines for LLR computation of the PDSCH physical channel from 36-211, V8.6 2009-03
- * \author R. Knopp, F. Kaltenberger,A. Bhamri, S. Aubert, S. Wagner, X Jiang
- * \date 2011
- * \version 0.1
- * \company Eurecom
- * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr,sebastien.aubert@eurecom.fr, sebastian.wagner@eurecom.fr
- * \note
- * \warning
- */
-
-#include "PHY/defs.h"
-#include "PHY/TOOLS/defs.h"
-#include "PHY/extern.h"
-#include "defs.h"
-#include "extern.h"
-#include "PHY/sse_intrin.h"
-
-//#define DEBUG_LLR_SIC
-
-
-int16_t zeros[8] __attribute__ ((aligned(16))) = {0,0,0,0,0,0,0,0};
-int16_t ones[8] __attribute__ ((aligned(16))) = {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff};
-#if defined(__x86_64__) || defined(__i386__)
-__m128i rho_rpi __attribute__ ((aligned(16)));
-__m128i rho_rmi __attribute__ ((aligned(16)));
-__m128i rho_rpi_1_1 __attribute__ ((aligned(16)));
-__m128i rho_rpi_1_3 __attribute__ ((aligned(16)));
-__m128i rho_rpi_1_5 __attribute__ ((aligned(16)));
-__m128i rho_rpi_1_7 __attribute__ ((aligned(16)));
-__m128i rho_rpi_3_1 __attribute__ ((aligned(16)));
-__m128i rho_rpi_3_3 __attribute__ ((aligned(16)));
-__m128i rho_rpi_3_5 __attribute__ ((aligned(16)));
-__m128i rho_rpi_3_7 __attribute__ ((aligned(16)));
-__m128i rho_rpi_5_1 __attribute__ ((aligned(16)));
-__m128i rho_rpi_5_3 __attribute__ ((aligned(16)));
-__m128i rho_rpi_5_5 __attribute__ ((aligned(16)));
-__m128i rho_rpi_5_7 __attribute__ ((aligned(16)));
-__m128i rho_rpi_7_1 __attribute__ ((aligned(16)));
-__m128i rho_rpi_7_3 __attribute__ ((aligned(16)));
-__m128i rho_rpi_7_5 __attribute__ ((aligned(16)));
-__m128i rho_rpi_7_7 __attribute__ ((aligned(16)));
-__m128i rho_rmi_1_1 __attribute__ ((aligned(16)));
-__m128i rho_rmi_1_3 __attribute__ ((aligned(16)));
-__m128i rho_rmi_1_5 __attribute__ ((aligned(16)));
-__m128i rho_rmi_1_7 __attribute__ ((aligned(16)));
-__m128i rho_rmi_3_1 __attribute__ ((aligned(16)));
-__m128i rho_rmi_3_3 __attribute__ ((aligned(16)));
-__m128i rho_rmi_3_5 __attribute__ ((aligned(16)));
-__m128i rho_rmi_3_7 __attribute__ ((aligned(16)));
-__m128i rho_rmi_5_1 __attribute__ ((aligned(16)));
-__m128i rho_rmi_5_3 __attribute__ ((aligned(16)));
-__m128i rho_rmi_5_5 __attribute__ ((aligned(16)));
-__m128i rho_rmi_5_7 __attribute__ ((aligned(16)));
-__m128i rho_rmi_7_1 __attribute__ ((aligned(16)));
-__m128i rho_rmi_7_3 __attribute__ ((aligned(16)));
-__m128i rho_rmi_7_5 __attribute__ ((aligned(16)));
-__m128i rho_rmi_7_7 __attribute__ ((aligned(16)));
-
-__m128i psi_r_m7_m7 __attribute__ ((aligned(16)));
-__m128i psi_r_m7_m5 __attribute__ ((aligned(16)));
-__m128i psi_r_m7_m3 __attribute__ ((aligned(16)));
-__m128i psi_r_m7_m1 __attribute__ ((aligned(16)));
-__m128i psi_r_m7_p1 __attribute__ ((aligned(16)));
-__m128i psi_r_m7_p3 __attribute__ ((aligned(16)));
-__m128i psi_r_m7_p5 __attribute__ ((aligned(16)));
-__m128i psi_r_m7_p7 __attribute__ ((aligned(16)));
-__m128i psi_r_m5_m7 __attribute__ ((aligned(16)));
-__m128i psi_r_m5_m5 __attribute__ ((aligned(16)));
-__m128i psi_r_m5_m3 __attribute__ ((aligned(16)));
-__m128i psi_r_m5_m1 __attribute__ ((aligned(16)));
-__m128i psi_r_m5_p1 __attribute__ ((aligned(16)));
-__m128i psi_r_m5_p3 __attribute__ ((aligned(16)));
-__m128i psi_r_m5_p5 __attribute__ ((aligned(16)));
-__m128i psi_r_m5_p7 __attribute__ ((aligned(16)));
-__m128i psi_r_m3_m7 __attribute__ ((aligned(16)));
-__m128i psi_r_m3_m5 __attribute__ ((aligned(16)));
-__m128i psi_r_m3_m3 __attribute__ ((aligned(16)));
-__m128i psi_r_m3_m1 __attribute__ ((aligned(16)));
-__m128i psi_r_m3_p1 __attribute__ ((aligned(16)));
-__m128i psi_r_m3_p3 __attribute__ ((aligned(16)));
-__m128i psi_r_m3_p5 __attribute__ ((aligned(16)));
-__m128i psi_r_m3_p7 __attribute__ ((aligned(16)));
-__m128i psi_r_m1_m7 __attribute__ ((aligned(16)));
-__m128i psi_r_m1_m5 __attribute__ ((aligned(16)));
-__m128i psi_r_m1_m3 __attribute__ ((aligned(16)));
-__m128i psi_r_m1_m1 __attribute__ ((aligned(16)));
-__m128i psi_r_m1_p1 __attribute__ ((aligned(16)));
-__m128i psi_r_m1_p3 __attribute__ ((aligned(16)));
-__m128i psi_r_m1_p5 __attribute__ ((aligned(16)));
-__m128i psi_r_m1_p7 __attribute__ ((aligned(16)));
-__m128i psi_r_p1_m7 __attribute__ ((aligned(16)));
-__m128i psi_r_p1_m5 __attribute__ ((aligned(16)));
-__m128i psi_r_p1_m3 __attribute__ ((aligned(16)));
-__m128i psi_r_p1_m1 __attribute__ ((aligned(16)));
-__m128i psi_r_p1_p1 __attribute__ ((aligned(16)));
-__m128i psi_r_p1_p3 __attribute__ ((aligned(16)));
-__m128i psi_r_p1_p5 __attribute__ ((aligned(16)));
-__m128i psi_r_p1_p7 __attribute__ ((aligned(16)));
-__m128i psi_r_p3_m7 __attribute__ ((aligned(16)));
-__m128i psi_r_p3_m5 __attribute__ ((aligned(16)));
-__m128i psi_r_p3_m3 __attribute__ ((aligned(16)));
-__m128i psi_r_p3_m1 __attribute__ ((aligned(16)));
-__m128i psi_r_p3_p1 __attribute__ ((aligned(16)));
-__m128i psi_r_p3_p3 __attribute__ ((aligned(16)));
-__m128i psi_r_p3_p5 __attribute__ ((aligned(16)));
-__m128i psi_r_p3_p7 __attribute__ ((aligned(16)));
-__m128i psi_r_p5_m7 __attribute__ ((aligned(16)));
-__m128i psi_r_p5_m5 __attribute__ ((aligned(16)));
-__m128i psi_r_p5_m3 __attribute__ ((aligned(16)));
-__m128i psi_r_p5_m1 __attribute__ ((aligned(16)));
-__m128i psi_r_p5_p1 __attribute__ ((aligned(16)));
-__m128i psi_r_p5_p3 __attribute__ ((aligned(16)));
-__m128i psi_r_p5_p5 __attribute__ ((aligned(16)));
-__m128i psi_r_p5_p7 __attribute__ ((aligned(16)));
-__m128i psi_r_p7_m7 __attribute__ ((aligned(16)));
-__m128i psi_r_p7_m5 __attribute__ ((aligned(16)));
-__m128i psi_r_p7_m3 __attribute__ ((aligned(16)));
-__m128i psi_r_p7_m1 __attribute__ ((aligned(16)));
-__m128i psi_r_p7_p1 __attribute__ ((aligned(16)));
-__m128i psi_r_p7_p3 __attribute__ ((aligned(16)));
-__m128i psi_r_p7_p5 __attribute__ ((aligned(16)));
-__m128i psi_r_p7_p7 __attribute__ ((aligned(16)));
-
-__m128i psi_i_m7_m7 __attribute__ ((aligned(16)));
-__m128i psi_i_m7_m5 __attribute__ ((aligned(16)));
-__m128i psi_i_m7_m3 __attribute__ ((aligned(16)));
-__m128i psi_i_m7_m1 __attribute__ ((aligned(16)));
-__m128i psi_i_m7_p1 __attribute__ ((aligned(16)));
-__m128i psi_i_m7_p3 __attribute__ ((aligned(16)));
-__m128i psi_i_m7_p5 __attribute__ ((aligned(16)));
-__m128i psi_i_m7_p7 __attribute__ ((aligned(16)));
-__m128i psi_i_m5_m7 __attribute__ ((aligned(16)));
-__m128i psi_i_m5_m5 __attribute__ ((aligned(16)));
-__m128i psi_i_m5_m3 __attribute__ ((aligned(16)));
-__m128i psi_i_m5_m1 __attribute__ ((aligned(16)));
-__m128i psi_i_m5_p1 __attribute__ ((aligned(16)));
-__m128i psi_i_m5_p3 __attribute__ ((aligned(16)));
-__m128i psi_i_m5_p5 __attribute__ ((aligned(16)));
-__m128i psi_i_m5_p7 __attribute__ ((aligned(16)));
-__m128i psi_i_m3_m7 __attribute__ ((aligned(16)));
-__m128i psi_i_m3_m5 __attribute__ ((aligned(16)));
-__m128i psi_i_m3_m3 __attribute__ ((aligned(16)));
-__m128i psi_i_m3_m1 __attribute__ ((aligned(16)));
-__m128i psi_i_m3_p1 __attribute__ ((aligned(16)));
-__m128i psi_i_m3_p3 __attribute__ ((aligned(16)));
-__m128i psi_i_m3_p5 __attribute__ ((aligned(16)));
-__m128i psi_i_m3_p7 __attribute__ ((aligned(16)));
-__m128i psi_i_m1_m7 __attribute__ ((aligned(16)));
-__m128i psi_i_m1_m5 __attribute__ ((aligned(16)));
-__m128i psi_i_m1_m3 __attribute__ ((aligned(16)));
-__m128i psi_i_m1_m1 __attribute__ ((aligned(16)));
-__m128i psi_i_m1_p1 __attribute__ ((aligned(16)));
-__m128i psi_i_m1_p3 __attribute__ ((aligned(16)));
-__m128i psi_i_m1_p5 __attribute__ ((aligned(16)));
-__m128i psi_i_m1_p7 __attribute__ ((aligned(16)));
-__m128i psi_i_p1_m7 __attribute__ ((aligned(16)));
-__m128i psi_i_p1_m5 __attribute__ ((aligned(16)));
-__m128i psi_i_p1_m3 __attribute__ ((aligned(16)));
-__m128i psi_i_p1_m1 __attribute__ ((aligned(16)));
-__m128i psi_i_p1_p1 __attribute__ ((aligned(16)));
-__m128i psi_i_p1_p3 __attribute__ ((aligned(16)));
-__m128i psi_i_p1_p5 __attribute__ ((aligned(16)));
-__m128i psi_i_p1_p7 __attribute__ ((aligned(16)));
-__m128i psi_i_p3_m7 __attribute__ ((aligned(16)));
-__m128i psi_i_p3_m5 __attribute__ ((aligned(16)));
-__m128i psi_i_p3_m3 __attribute__ ((aligned(16)));
-__m128i psi_i_p3_m1 __attribute__ ((aligned(16)));
-__m128i psi_i_p3_p1 __attribute__ ((aligned(16)));
-__m128i psi_i_p3_p3 __attribute__ ((aligned(16)));
-__m128i psi_i_p3_p5 __attribute__ ((aligned(16)));
-__m128i psi_i_p3_p7 __attribute__ ((aligned(16)));
-__m128i psi_i_p5_m7 __attribute__ ((aligned(16)));
-__m128i psi_i_p5_m5 __attribute__ ((aligned(16)));
-__m128i psi_i_p5_m3 __attribute__ ((aligned(16)));
-__m128i psi_i_p5_m1 __attribute__ ((aligned(16)));
-__m128i psi_i_p5_p1 __attribute__ ((aligned(16)));
-__m128i psi_i_p5_p3 __attribute__ ((aligned(16)));
-__m128i psi_i_p5_p5 __attribute__ ((aligned(16)));
-__m128i psi_i_p5_p7 __attribute__ ((aligned(16)));
-__m128i psi_i_p7_m7 __attribute__ ((aligned(16)));
-__m128i psi_i_p7_m5 __attribute__ ((aligned(16)));
-__m128i psi_i_p7_m3 __attribute__ ((aligned(16)));
-__m128i psi_i_p7_m1 __attribute__ ((aligned(16)));
-__m128i psi_i_p7_p1 __attribute__ ((aligned(16)));
-__m128i psi_i_p7_p3 __attribute__ ((aligned(16)));
-__m128i psi_i_p7_p5 __attribute__ ((aligned(16)));
-__m128i psi_i_p7_p7 __attribute__ ((aligned(16)));
-
-__m128i a_r_m7_m7 __attribute__ ((aligned(16)));
-__m128i a_r_m7_m5 __attribute__ ((aligned(16)));
-__m128i a_r_m7_m3 __attribute__ ((aligned(16)));
-__m128i a_r_m7_m1 __attribute__ ((aligned(16)));
-__m128i a_r_m7_p1 __attribute__ ((aligned(16)));
-__m128i a_r_m7_p3 __attribute__ ((aligned(16)));
-__m128i a_r_m7_p5 __attribute__ ((aligned(16)));
-__m128i a_r_m7_p7 __attribute__ ((aligned(16)));
-__m128i a_r_m5_m7 __attribute__ ((aligned(16)));
-__m128i a_r_m5_m5 __attribute__ ((aligned(16)));
-__m128i a_r_m5_m3 __attribute__ ((aligned(16)));
-__m128i a_r_m5_m1 __attribute__ ((aligned(16)));
-__m128i a_r_m5_p1 __attribute__ ((aligned(16)));
-__m128i a_r_m5_p3 __attribute__ ((aligned(16)));
-__m128i a_r_m5_p5 __attribute__ ((aligned(16)));
-__m128i a_r_m5_p7 __attribute__ ((aligned(16)));
-__m128i a_r_m3_m7 __attribute__ ((aligned(16)));
-__m128i a_r_m3_m5 __attribute__ ((aligned(16)));
-__m128i a_r_m3_m3 __attribute__ ((aligned(16)));
-__m128i a_r_m3_m1 __attribute__ ((aligned(16)));
-__m128i a_r_m3_p1 __attribute__ ((aligned(16)));
-__m128i a_r_m3_p3 __attribute__ ((aligned(16)));
-__m128i a_r_m3_p5 __attribute__ ((aligned(16)));
-__m128i a_r_m3_p7 __attribute__ ((aligned(16)));
-__m128i a_r_m1_m7 __attribute__ ((aligned(16)));
-__m128i a_r_m1_m5 __attribute__ ((aligned(16)));
-__m128i a_r_m1_m3 __attribute__ ((aligned(16)));
-__m128i a_r_m1_m1 __attribute__ ((aligned(16)));
-__m128i a_r_m1_p1 __attribute__ ((aligned(16)));
-__m128i a_r_m1_p3 __attribute__ ((aligned(16)));
-__m128i a_r_m1_p5 __attribute__ ((aligned(16)));
-__m128i a_r_m1_p7 __attribute__ ((aligned(16)));
-__m128i a_r_p1_m7 __attribute__ ((aligned(16)));
-__m128i a_r_p1_m5 __attribute__ ((aligned(16)));
-__m128i a_r_p1_m3 __attribute__ ((aligned(16)));
-__m128i a_r_p1_m1 __attribute__ ((aligned(16)));
-__m128i a_r_p1_p1 __attribute__ ((aligned(16)));
-__m128i a_r_p1_p3 __attribute__ ((aligned(16)));
-__m128i a_r_p1_p5 __attribute__ ((aligned(16)));
-__m128i a_r_p1_p7 __attribute__ ((aligned(16)));
-__m128i a_r_p3_m7 __attribute__ ((aligned(16)));
-__m128i a_r_p3_m5 __attribute__ ((aligned(16)));
-__m128i a_r_p3_m3 __attribute__ ((aligned(16)));
-__m128i a_r_p3_m1 __attribute__ ((aligned(16)));
-__m128i a_r_p3_p1 __attribute__ ((aligned(16)));
-__m128i a_r_p3_p3 __attribute__ ((aligned(16)));
-__m128i a_r_p3_p5 __attribute__ ((aligned(16)));
-__m128i a_r_p3_p7 __attribute__ ((aligned(16)));
-__m128i a_r_p5_m7 __attribute__ ((aligned(16)));
-__m128i a_r_p5_m5 __attribute__ ((aligned(16)));
-__m128i a_r_p5_m3 __attribute__ ((aligned(16)));
-__m128i a_r_p5_m1 __attribute__ ((aligned(16)));
-__m128i a_r_p5_p1 __attribute__ ((aligned(16)));
-__m128i a_r_p5_p3 __attribute__ ((aligned(16)));
-__m128i a_r_p5_p5 __attribute__ ((aligned(16)));
-__m128i a_r_p5_p7 __attribute__ ((aligned(16)));
-__m128i a_r_p7_m7 __attribute__ ((aligned(16)));
-__m128i a_r_p7_m5 __attribute__ ((aligned(16)));
-__m128i a_r_p7_m3 __attribute__ ((aligned(16)));
-__m128i a_r_p7_m1 __attribute__ ((aligned(16)));
-__m128i a_r_p7_p1 __attribute__ ((aligned(16)));
-__m128i a_r_p7_p3 __attribute__ ((aligned(16)));
-__m128i a_r_p7_p5 __attribute__ ((aligned(16)));
-__m128i a_r_p7_p7 __attribute__ ((aligned(16)));
-
-__m128i a_i_m7_m7 __attribute__ ((aligned(16)));
-__m128i a_i_m7_m5 __attribute__ ((aligned(16)));
-__m128i a_i_m7_m3 __attribute__ ((aligned(16)));
-__m128i a_i_m7_m1 __attribute__ ((aligned(16)));
-__m128i a_i_m7_p1 __attribute__ ((aligned(16)));
-__m128i a_i_m7_p3 __attribute__ ((aligned(16)));
-__m128i a_i_m7_p5 __attribute__ ((aligned(16)));
-__m128i a_i_m7_p7 __attribute__ ((aligned(16)));
-__m128i a_i_m5_m7 __attribute__ ((aligned(16)));
-__m128i a_i_m5_m5 __attribute__ ((aligned(16)));
-__m128i a_i_m5_m3 __attribute__ ((aligned(16)));
-__m128i a_i_m5_m1 __attribute__ ((aligned(16)));
-__m128i a_i_m5_p1 __attribute__ ((aligned(16)));
-__m128i a_i_m5_p3 __attribute__ ((aligned(16)));
-__m128i a_i_m5_p5 __attribute__ ((aligned(16)));
-__m128i a_i_m5_p7 __attribute__ ((aligned(16)));
-__m128i a_i_m3_m7 __attribute__ ((aligned(16)));
-__m128i a_i_m3_m5 __attribute__ ((aligned(16)));
-__m128i a_i_m3_m3 __attribute__ ((aligned(16)));
-__m128i a_i_m3_m1 __attribute__ ((aligned(16)));
-__m128i a_i_m3_p1 __attribute__ ((aligned(16)));
-__m128i a_i_m3_p3 __attribute__ ((aligned(16)));
-__m128i a_i_m3_p5 __attribute__ ((aligned(16)));
-__m128i a_i_m3_p7 __attribute__ ((aligned(16)));
-__m128i a_i_m1_m7 __attribute__ ((aligned(16)));
-__m128i a_i_m1_m5 __attribute__ ((aligned(16)));
-__m128i a_i_m1_m3 __attribute__ ((aligned(16)));
-__m128i a_i_m1_m1 __attribute__ ((aligned(16)));
-__m128i a_i_m1_p1 __attribute__ ((aligned(16)));
-__m128i a_i_m1_p3 __attribute__ ((aligned(16)));
-__m128i a_i_m1_p5 __attribute__ ((aligned(16)));
-__m128i a_i_m1_p7 __attribute__ ((aligned(16)));
-__m128i a_i_p1_m7 __attribute__ ((aligned(16)));
-__m128i a_i_p1_m5 __attribute__ ((aligned(16)));
-__m128i a_i_p1_m3 __attribute__ ((aligned(16)));
-__m128i a_i_p1_m1 __attribute__ ((aligned(16)));
-__m128i a_i_p1_p1 __attribute__ ((aligned(16)));
-__m128i a_i_p1_p3 __attribute__ ((aligned(16)));
-__m128i a_i_p1_p5 __attribute__ ((aligned(16)));
-__m128i a_i_p1_p7 __attribute__ ((aligned(16)));
-__m128i a_i_p3_m7 __attribute__ ((aligned(16)));
-__m128i a_i_p3_m5 __attribute__ ((aligned(16)));
-__m128i a_i_p3_m3 __attribute__ ((aligned(16)));
-__m128i a_i_p3_m1 __attribute__ ((aligned(16)));
-__m128i a_i_p3_p1 __attribute__ ((aligned(16)));
-__m128i a_i_p3_p3 __attribute__ ((aligned(16)));
-__m128i a_i_p3_p5 __attribute__ ((aligned(16)));
-__m128i a_i_p3_p7 __attribute__ ((aligned(16)));
-__m128i a_i_p5_m7 __attribute__ ((aligned(16)));
-__m128i a_i_p5_m5 __attribute__ ((aligned(16)));
-__m128i a_i_p5_m3 __attribute__ ((aligned(16)));
-__m128i a_i_p5_m1 __attribute__ ((aligned(16)));
-__m128i a_i_p5_p1 __attribute__ ((aligned(16)));
-__m128i a_i_p5_p3 __attribute__ ((aligned(16)));
-__m128i a_i_p5_p5 __attribute__ ((aligned(16)));
-__m128i a_i_p5_p7 __attribute__ ((aligned(16)));
-__m128i a_i_p7_m7 __attribute__ ((aligned(16)));
-__m128i a_i_p7_m5 __attribute__ ((aligned(16)));
-__m128i a_i_p7_m3 __attribute__ ((aligned(16)));
-__m128i a_i_p7_m1 __attribute__ ((aligned(16)));
-__m128i a_i_p7_p1 __attribute__ ((aligned(16)));
-__m128i a_i_p7_p3 __attribute__ ((aligned(16)));
-__m128i a_i_p7_p5 __attribute__ ((aligned(16)));
-__m128i a_i_p7_p7 __attribute__ ((aligned(16)));
-
-__m128i psi_a_m7_m7 __attribute__ ((aligned(16)));
-__m128i psi_a_m7_m5 __attribute__ ((aligned(16)));
-__m128i psi_a_m7_m3 __attribute__ ((aligned(16)));
-__m128i psi_a_m7_m1 __attribute__ ((aligned(16)));
-__m128i psi_a_m7_p1 __attribute__ ((aligned(16)));
-__m128i psi_a_m7_p3 __attribute__ ((aligned(16)));
-__m128i psi_a_m7_p5 __attribute__ ((aligned(16)));
-__m128i psi_a_m7_p7 __attribute__ ((aligned(16)));
-__m128i psi_a_m5_m7 __attribute__ ((aligned(16)));
-__m128i psi_a_m5_m5 __attribute__ ((aligned(16)));
-__m128i psi_a_m5_m3 __attribute__ ((aligned(16)));
-__m128i psi_a_m5_m1 __attribute__ ((aligned(16)));
-__m128i psi_a_m5_p1 __attribute__ ((aligned(16)));
-__m128i psi_a_m5_p3 __attribute__ ((aligned(16)));
-__m128i psi_a_m5_p5 __attribute__ ((aligned(16)));
-__m128i psi_a_m5_p7 __attribute__ ((aligned(16)));
-__m128i psi_a_m3_m7 __attribute__ ((aligned(16)));
-__m128i psi_a_m3_m5 __attribute__ ((aligned(16)));
-__m128i psi_a_m3_m3 __attribute__ ((aligned(16)));
-__m128i psi_a_m3_m1 __attribute__ ((aligned(16)));
-__m128i psi_a_m3_p1 __attribute__ ((aligned(16)));
-__m128i psi_a_m3_p3 __attribute__ ((aligned(16)));
-__m128i psi_a_m3_p5 __attribute__ ((aligned(16)));
-__m128i psi_a_m3_p7 __attribute__ ((aligned(16)));
-__m128i psi_a_m1_m7 __attribute__ ((aligned(16)));
-__m128i psi_a_m1_m5 __attribute__ ((aligned(16)));
-__m128i psi_a_m1_m3 __attribute__ ((aligned(16)));
-__m128i psi_a_m1_m1 __attribute__ ((aligned(16)));
-__m128i psi_a_m1_p1 __attribute__ ((aligned(16)));
-__m128i psi_a_m1_p3 __attribute__ ((aligned(16)));
-__m128i psi_a_m1_p5 __attribute__ ((aligned(16)));
-__m128i psi_a_m1_p7 __attribute__ ((aligned(16)));
-__m128i psi_a_p1_m7 __attribute__ ((aligned(16)));
-__m128i psi_a_p1_m5 __attribute__ ((aligned(16)));
-__m128i psi_a_p1_m3 __attribute__ ((aligned(16)));
-__m128i psi_a_p1_m1 __attribute__ ((aligned(16)));
-__m128i psi_a_p1_p1 __attribute__ ((aligned(16)));
-__m128i psi_a_p1_p3 __attribute__ ((aligned(16)));
-__m128i psi_a_p1_p5 __attribute__ ((aligned(16)));
-__m128i psi_a_p1_p7 __attribute__ ((aligned(16)));
-__m128i psi_a_p3_m7 __attribute__ ((aligned(16)));
-__m128i psi_a_p3_m5 __attribute__ ((aligned(16)));
-__m128i psi_a_p3_m3 __attribute__ ((aligned(16)));
-__m128i psi_a_p3_m1 __attribute__ ((aligned(16)));
-__m128i psi_a_p3_p1 __attribute__ ((aligned(16)));
-__m128i psi_a_p3_p3 __attribute__ ((aligned(16)));
-__m128i psi_a_p3_p5 __attribute__ ((aligned(16)));
-__m128i psi_a_p3_p7 __attribute__ ((aligned(16)));
-__m128i psi_a_p5_m7 __attribute__ ((aligned(16)));
-__m128i psi_a_p5_m5 __attribute__ ((aligned(16)));
-__m128i psi_a_p5_m3 __attribute__ ((aligned(16)));
-__m128i psi_a_p5_m1 __attribute__ ((aligned(16)));
-__m128i psi_a_p5_p1 __attribute__ ((aligned(16)));
-__m128i psi_a_p5_p3 __attribute__ ((aligned(16)));
-__m128i psi_a_p5_p5 __attribute__ ((aligned(16)));
-__m128i psi_a_p5_p7 __attribute__ ((aligned(16)));
-__m128i psi_a_p7_m7 __attribute__ ((aligned(16)));
-__m128i psi_a_p7_m5 __attribute__ ((aligned(16)));
-__m128i psi_a_p7_m3 __attribute__ ((aligned(16)));
-__m128i psi_a_p7_m1 __attribute__ ((aligned(16)));
-__m128i psi_a_p7_p1 __attribute__ ((aligned(16)));
-__m128i psi_a_p7_p3 __attribute__ ((aligned(16)));
-__m128i psi_a_p7_p5 __attribute__ ((aligned(16)));
-__m128i psi_a_p7_p7 __attribute__ ((aligned(16)));
-
-__m128i a_sq_m7_m7 __attribute__ ((aligned(16)));
-__m128i a_sq_m7_m5 __attribute__ ((aligned(16)));
-__m128i a_sq_m7_m3 __attribute__ ((aligned(16)));
-__m128i a_sq_m7_m1 __attribute__ ((aligned(16)));
-__m128i a_sq_m7_p1 __attribute__ ((aligned(16)));
-__m128i a_sq_m7_p3 __attribute__ ((aligned(16)));
-__m128i a_sq_m7_p5 __attribute__ ((aligned(16)));
-__m128i a_sq_m7_p7 __attribute__ ((aligned(16)));
-__m128i a_sq_m5_m7 __attribute__ ((aligned(16)));
-__m128i a_sq_m5_m5 __attribute__ ((aligned(16)));
-__m128i a_sq_m5_m3 __attribute__ ((aligned(16)));
-__m128i a_sq_m5_m1 __attribute__ ((aligned(16)));
-__m128i a_sq_m5_p1 __attribute__ ((aligned(16)));
-__m128i a_sq_m5_p3 __attribute__ ((aligned(16)));
-__m128i a_sq_m5_p5 __attribute__ ((aligned(16)));
-__m128i a_sq_m5_p7 __attribute__ ((aligned(16)));
-__m128i a_sq_m3_m7 __attribute__ ((aligned(16)));
-__m128i a_sq_m3_m5 __attribute__ ((aligned(16)));
-__m128i a_sq_m3_m3 __attribute__ ((aligned(16)));
-__m128i a_sq_m3_m1 __attribute__ ((aligned(16)));
-__m128i a_sq_m3_p1 __attribute__ ((aligned(16)));
-__m128i a_sq_m3_p3 __attribute__ ((aligned(16)));
-__m128i a_sq_m3_p5 __attribute__ ((aligned(16)));
-__m128i a_sq_m3_p7 __attribute__ ((aligned(16)));
-__m128i a_sq_m1_m7 __attribute__ ((aligned(16)));
-__m128i a_sq_m1_m5 __attribute__ ((aligned(16)));
-__m128i a_sq_m1_m3 __attribute__ ((aligned(16)));
-__m128i a_sq_m1_m1 __attribute__ ((aligned(16)));
-__m128i a_sq_m1_p1 __attribute__ ((aligned(16)));
-__m128i a_sq_m1_p3 __attribute__ ((aligned(16)));
-__m128i a_sq_m1_p5 __attribute__ ((aligned(16)));
-__m128i a_sq_m1_p7 __attribute__ ((aligned(16)));
-__m128i a_sq_p1_m7 __attribute__ ((aligned(16)));
-__m128i a_sq_p1_m5 __attribute__ ((aligned(16)));
-__m128i a_sq_p1_m3 __attribute__ ((aligned(16)));
-__m128i a_sq_p1_m1 __attribute__ ((aligned(16)));
-__m128i a_sq_p1_p1 __attribute__ ((aligned(16)));
-__m128i a_sq_p1_p3 __attribute__ ((aligned(16)));
-__m128i a_sq_p1_p5 __attribute__ ((aligned(16)));
-__m128i a_sq_p1_p7 __attribute__ ((aligned(16)));
-__m128i a_sq_p3_m7 __attribute__ ((aligned(16)));
-__m128i a_sq_p3_m5 __attribute__ ((aligned(16)));
-__m128i a_sq_p3_m3 __attribute__ ((aligned(16)));
-__m128i a_sq_p3_m1 __attribute__ ((aligned(16)));
-__m128i a_sq_p3_p1 __attribute__ ((aligned(16)));
-__m128i a_sq_p3_p3 __attribute__ ((aligned(16)));
-__m128i a_sq_p3_p5 __attribute__ ((aligned(16)));
-__m128i a_sq_p3_p7 __attribute__ ((aligned(16)));
-__m128i a_sq_p5_m7 __attribute__ ((aligned(16)));
-__m128i a_sq_p5_m5 __attribute__ ((aligned(16)));
-__m128i a_sq_p5_m3 __attribute__ ((aligned(16)));
-__m128i a_sq_p5_m1 __attribute__ ((aligned(16)));
-__m128i a_sq_p5_p1 __attribute__ ((aligned(16)));
-__m128i a_sq_p5_p3 __attribute__ ((aligned(16)));
-__m128i a_sq_p5_p5 __attribute__ ((aligned(16)));
-__m128i a_sq_p5_p7 __attribute__ ((aligned(16)));
-__m128i a_sq_p7_m7 __attribute__ ((aligned(16)));
-__m128i a_sq_p7_m5 __attribute__ ((aligned(16)));
-__m128i a_sq_p7_m3 __attribute__ ((aligned(16)));
-__m128i a_sq_p7_m1 __attribute__ ((aligned(16)));
-__m128i a_sq_p7_p1 __attribute__ ((aligned(16)));
-__m128i a_sq_p7_p3 __attribute__ ((aligned(16)));
-__m128i a_sq_p7_p5 __attribute__ ((aligned(16)));
-__m128i a_sq_p7_p7 __attribute__ ((aligned(16)));
-
-__m128i bit_met_m7_m7 __attribute__ ((aligned(16)));
-__m128i bit_met_m7_m5 __attribute__ ((aligned(16)));
-__m128i bit_met_m7_m3 __attribute__ ((aligned(16)));
-__m128i bit_met_m7_m1 __attribute__ ((aligned(16)));
-__m128i bit_met_m7_p1 __attribute__ ((aligned(16)));
-__m128i bit_met_m7_p3 __attribute__ ((aligned(16)));
-__m128i bit_met_m7_p5 __attribute__ ((aligned(16)));
-__m128i bit_met_m7_p7 __attribute__ ((aligned(16)));
-__m128i bit_met_m5_m7 __attribute__ ((aligned(16)));
-__m128i bit_met_m5_m5 __attribute__ ((aligned(16)));
-__m128i bit_met_m5_m3 __attribute__ ((aligned(16)));
-__m128i bit_met_m5_m1 __attribute__ ((aligned(16)));
-__m128i bit_met_m5_p1 __attribute__ ((aligned(16)));
-__m128i bit_met_m5_p3 __attribute__ ((aligned(16)));
-__m128i bit_met_m5_p5 __attribute__ ((aligned(16)));
-__m128i bit_met_m5_p7 __attribute__ ((aligned(16)));
-__m128i bit_met_m3_m7 __attribute__ ((aligned(16)));
-__m128i bit_met_m3_m5 __attribute__ ((aligned(16)));
-__m128i bit_met_m3_m3 __attribute__ ((aligned(16)));
-__m128i bit_met_m3_m1 __attribute__ ((aligned(16)));
-__m128i bit_met_m3_p1 __attribute__ ((aligned(16)));
-__m128i bit_met_m3_p3 __attribute__ ((aligned(16)));
-__m128i bit_met_m3_p5 __attribute__ ((aligned(16)));
-__m128i bit_met_m3_p7 __attribute__ ((aligned(16)));
-__m128i bit_met_m1_m7 __attribute__ ((aligned(16)));
-__m128i bit_met_m1_m5 __attribute__ ((aligned(16)));
-__m128i bit_met_m1_m3 __attribute__ ((aligned(16)));
-__m128i bit_met_m1_m1 __attribute__ ((aligned(16)));
-__m128i bit_met_m1_p1 __attribute__ ((aligned(16)));
-__m128i bit_met_m1_p3 __attribute__ ((aligned(16)));
-__m128i bit_met_m1_p5 __attribute__ ((aligned(16)));
-__m128i bit_met_m1_p7 __attribute__ ((aligned(16)));
-__m128i bit_met_p1_m7 __attribute__ ((aligned(16)));
-__m128i bit_met_p1_m5 __attribute__ ((aligned(16)));
-__m128i bit_met_p1_m3 __attribute__ ((aligned(16)));
-__m128i bit_met_p1_m1 __attribute__ ((aligned(16)));
-__m128i bit_met_p1_p1 __attribute__ ((aligned(16)));
-__m128i bit_met_p1_p3 __attribute__ ((aligned(16)));
-__m128i bit_met_p1_p5 __attribute__ ((aligned(16)));
-__m128i bit_met_p1_p7 __attribute__ ((aligned(16)));
-__m128i bit_met_p3_m7 __attribute__ ((aligned(16)));
-__m128i bit_met_p3_m5 __attribute__ ((aligned(16)));
-__m128i bit_met_p3_m3 __attribute__ ((aligned(16)));
-__m128i bit_met_p3_m1 __attribute__ ((aligned(16)));
-__m128i bit_met_p3_p1 __attribute__ ((aligned(16)));
-__m128i bit_met_p3_p3 __attribute__ ((aligned(16)));
-__m128i bit_met_p3_p5 __attribute__ ((aligned(16)));
-__m128i bit_met_p3_p7 __attribute__ ((aligned(16)));
-__m128i bit_met_p5_m7 __attribute__ ((aligned(16)));
-__m128i bit_met_p5_m5 __attribute__ ((aligned(16)));
-__m128i bit_met_p5_m3 __attribute__ ((aligned(16)));
-__m128i bit_met_p5_m1 __attribute__ ((aligned(16)));
-__m128i bit_met_p5_p1 __attribute__ ((aligned(16)));
-__m128i bit_met_p5_p3 __attribute__ ((aligned(16)));
-__m128i bit_met_p5_p5 __attribute__ ((aligned(16)));
-__m128i bit_met_p5_p7 __attribute__ ((aligned(16)));
-__m128i bit_met_p7_m7 __attribute__ ((aligned(16)));
-__m128i bit_met_p7_m5 __attribute__ ((aligned(16)));
-__m128i bit_met_p7_m3 __attribute__ ((aligned(16)));
-__m128i bit_met_p7_m1 __attribute__ ((aligned(16)));
-__m128i bit_met_p7_p1 __attribute__ ((aligned(16)));
-__m128i bit_met_p7_p3 __attribute__ ((aligned(16)));
-__m128i bit_met_p7_p5 __attribute__ ((aligned(16)));
-__m128i bit_met_p7_p7 __attribute__ ((aligned(16)));
-
-__m128i  y0_p_1_1 __attribute__ ((aligned(16)));
-__m128i  y0_p_1_3 __attribute__ ((aligned(16)));
-__m128i  y0_p_1_5 __attribute__ ((aligned(16)));
-__m128i  y0_p_1_7 __attribute__ ((aligned(16)));
-__m128i  y0_p_3_1 __attribute__ ((aligned(16)));
-__m128i  y0_p_3_3 __attribute__ ((aligned(16)));
-__m128i  y0_p_3_5 __attribute__ ((aligned(16)));
-__m128i  y0_p_3_7 __attribute__ ((aligned(16)));
-__m128i  y0_p_5_1 __attribute__ ((aligned(16)));
-__m128i  y0_p_5_3 __attribute__ ((aligned(16)));
-__m128i  y0_p_5_5 __attribute__ ((aligned(16)));
-__m128i  y0_p_5_7 __attribute__ ((aligned(16)));
-__m128i  y0_p_7_1 __attribute__ ((aligned(16)));
-__m128i  y0_p_7_3 __attribute__ ((aligned(16)));
-__m128i  y0_p_7_5 __attribute__ ((aligned(16)));
-__m128i  y0_p_7_7 __attribute__ ((aligned(16)));
-__m128i  y0_m_1_1 __attribute__ ((aligned(16)));
-__m128i  y0_m_1_3 __attribute__ ((aligned(16)));
-__m128i  y0_m_1_5 __attribute__ ((aligned(16)));
-__m128i  y0_m_1_7 __attribute__ ((aligned(16)));
-__m128i  y0_m_3_1 __attribute__ ((aligned(16)));
-__m128i  y0_m_3_3 __attribute__ ((aligned(16)));
-__m128i  y0_m_3_5 __attribute__ ((aligned(16)));
-__m128i  y0_m_3_7 __attribute__ ((aligned(16)));
-__m128i  y0_m_5_1 __attribute__ ((aligned(16)));
-__m128i  y0_m_5_3 __attribute__ ((aligned(16)));
-__m128i  y0_m_5_5 __attribute__ ((aligned(16)));
-__m128i  y0_m_5_7 __attribute__ ((aligned(16)));
-__m128i  y0_m_7_1 __attribute__ ((aligned(16)));
-__m128i  y0_m_7_3 __attribute__ ((aligned(16)));
-__m128i  y0_m_7_5 __attribute__ ((aligned(16)));
-__m128i  y0_m_7_7 __attribute__ ((aligned(16)));
-
-__m128i  xmm0 __attribute__ ((aligned(16)));
-__m128i  xmm1 __attribute__ ((aligned(16)));
-__m128i  xmm2 __attribute__ ((aligned(16)));
-__m128i  xmm3 __attribute__ ((aligned(16)));
-__m128i  xmm4 __attribute__ ((aligned(16)));
-__m128i  xmm5 __attribute__ ((aligned(16)));
-__m128i  xmm6 __attribute__ ((aligned(16)));
-__m128i  xmm7 __attribute__ ((aligned(16)));
-__m128i  xmm8 __attribute__ ((aligned(16)));
-
-__m128i  y0r __attribute__ ((aligned(16)));
-__m128i  y0i __attribute__ ((aligned(16)));
-__m128i  y1r __attribute__ ((aligned(16)));
-__m128i  y1i __attribute__ ((aligned(16)));
-__m128i  y2r __attribute__ ((aligned(16)));
-__m128i  y2i __attribute__ ((aligned(16)));
-
-__m128i  logmax_num_re0 __attribute__ ((aligned(16)));
-__m128i  logmax_num_im0 __attribute__ ((aligned(16)));
-__m128i  logmax_den_re0 __attribute__ ((aligned(16)));
-__m128i  logmax_den_im0 __attribute__ ((aligned(16)));
-__m128i  logmax_num_re1 __attribute__ ((aligned(16)));
-__m128i  logmax_num_im1 __attribute__ ((aligned(16)));
-__m128i  logmax_den_re1 __attribute__ ((aligned(16)));
-__m128i  logmax_den_im1 __attribute__ ((aligned(16)));
-
-__m128i tmp_result  __attribute__ ((aligned(16)));
-__m128i tmp_result2 __attribute__ ((aligned(16)));
-__m128i tmp_result3 __attribute__ ((aligned(16)));
-__m128i tmp_result4 __attribute__ ((aligned(16)));
-
-
-//==============================================================================================
-// Auxiliary Makros
-
-// calculates psi_a = psi_r*a_r + psi_i*a_i
-#define prodsum_psi_a_epi16(psi_r,a_r,psi_i,a_i,psi_a) tmp_result = _mm_mulhi_epi16(psi_r,a_r); tmp_result = _mm_slli_epi16(tmp_result,1); tmp_result2 = _mm_mulhi_epi16(psi_i,a_i); tmp_result2 = _mm_slli_epi16(tmp_result2,1); psi_a = _mm_adds_epi16(tmp_result,tmp_result2);
-
-// calculate interference magnitude
-#define interference_abs_epi16(psi,int_ch_mag,int_mag,c1,c2) tmp_result = _mm_cmplt_epi16(psi,int_ch_mag); tmp_result2 = _mm_xor_si128(tmp_result,(*(__m128i*)&ones[0])); tmp_result = _mm_and_si128(tmp_result,c1); tmp_result2 = _mm_and_si128(tmp_result2,c2); int_mag = _mm_or_si128(tmp_result,tmp_result2);
-
-// calculate interference magnitude
-// tmp_result = ones in shorts corr. to interval 2<=x<=4, tmp_result2 interval < 2, tmp_result3 interval 4<x<6 and tmp_result4 interval x>6
-#define interference_abs_64qam_epi16(psi,int_ch_mag,int_two_ch_mag,int_three_ch_mag,a,c1,c3,c5,c7) tmp_result = _mm_cmplt_epi16(psi,int_two_ch_mag); tmp_result3 = _mm_xor_si128(tmp_result,(*(__m128i*)&ones[0])); tmp_result2 = _mm_cmplt_epi16(psi,int_ch_mag); tmp_result = _mm_xor_si128(tmp_result,tmp_result2); tmp_result4 = _mm_cmpgt_epi16(psi,int_three_ch_mag); tmp_result3 = _mm_xor_si128(tmp_result3,tmp_result4); tmp_result = _mm_and_si128(tmp_result,c3); tmp_result2 = _mm_and_si128(tmp_result2,c1); tmp_result3 = _mm_and_si128(tmp_result3,c5); tmp_result4 = _mm_and_si128(tmp_result4,c7); tmp_result = _mm_or_si128(tmp_result,tmp_result2); tmp_result3 = _mm_or_si128(tmp_result3,tmp_result4); a = _mm_or_si128(tmp_result,tmp_result3);
-
-// calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor
-#define square_a_epi16(a_r,a_i,int_ch_mag,scale_factor,a_sq) tmp_result = _mm_mulhi_epi16(a_r,a_r); tmp_result = _mm_slli_epi16(tmp_result,1); tmp_result = _mm_mulhi_epi16(tmp_result,scale_factor); tmp_result = _mm_slli_epi16(tmp_result,1); tmp_result = _mm_mulhi_epi16(tmp_result,int_ch_mag); tmp_result = _mm_slli_epi16(tmp_result,1); tmp_result2 = _mm_mulhi_epi16(a_i,a_i); tmp_result2 = _mm_slli_epi16(tmp_result2,1); tmp_result2 = _mm_mulhi_epi16(tmp_result2,scale_factor); tmp_result2 = _mm_slli_epi16(tmp_result2,1); tmp_result2 = _mm_mulhi_epi16(tmp_result2,int_ch_mag); tmp_result2 = _mm_slli_epi16(tmp_result2,1); a_sq = _mm_adds_epi16(tmp_result,tmp_result2);
-
-// calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor for 64-QAM
-#define square_a_64qam_epi16(a_r,a_i,int_ch_mag,scale_factor,a_sq)  tmp_result = _mm_mulhi_epi16(a_r,a_r); tmp_result = _mm_slli_epi16(tmp_result,1); tmp_result = _mm_mulhi_epi16(tmp_result,scale_factor); tmp_result = _mm_slli_epi16(tmp_result,3); tmp_result = _mm_mulhi_epi16(tmp_result,int_ch_mag); tmp_result = _mm_slli_epi16(tmp_result,1); tmp_result2 = _mm_mulhi_epi16(a_i,a_i); tmp_result2 = _mm_slli_epi16(tmp_result2,1); tmp_result2 = _mm_mulhi_epi16(tmp_result2,scale_factor); tmp_result2 = _mm_slli_epi16(tmp_result2,3); tmp_result2 = _mm_mulhi_epi16(tmp_result2,int_ch_mag); tmp_result2 = _mm_slli_epi16(tmp_result2,1); a_sq = _mm_adds_epi16(tmp_result,tmp_result2);
-
-#elif defined(__arm__)
-
-#endif
-
-//==============================================================================================
-// SINGLE-STREAM
-//==============================================================================================
-
-//----------------------------------------------------------------------------------------------
-// QPSK
-//----------------------------------------------------------------------------------------------
-
-int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
-                   int32_t **rxdataF_comp,
-                   int16_t *dlsch_llr,
-                   uint8_t symbol,
-                   uint8_t first_symbol_flag,
-                   uint16_t nb_rb,
-                   uint16_t pbch_pss_sss_adjust,
-                   uint8_t beamforming_mode)
-{
-
-  uint32_t *rxF = (uint32_t*)&rxdataF_comp[0][((int32_t)symbol*frame_parms->N_RB_DL*12)];
-  uint32_t *llr32;
-  int i,len;
-  uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
-
-  /*
-  if (first_symbol_flag==1) {
-    llr32 = (uint32_t*)dlsch_llr;
-  } else {
-    llr32 = (uint32_t*)(*llr32p);
-  }*/
-
-  llr32 = (uint32_t*)dlsch_llr;
-  if (!llr32) {
-    LOG_E(PHY,"dlsch_qpsk_llr: llr is null, symbol %d, llr32=%p\n",symbol, llr32);
-    return(-1);
-  }
-
-
-  if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-    if (frame_parms->nb_antenna_ports_eNB!=1)
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-    else
-      len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
-  } else if((beamforming_mode==7) && (frame_parms->Ncp==0) && (symbol==3 || symbol==6 || symbol==9 || symbol==12)){
-      len = (nb_rb*9) - (3*pbch_pss_sss_adjust/4);
-  } else if((beamforming_mode==7) && (frame_parms->Ncp==1) && (symbol==4 || symbol==7 || symbol==10)){
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-  } else {
-    len = (nb_rb*12) - pbch_pss_sss_adjust;
-  }
-
-
-  /*
-  LOG_I(PHY,"dlsch_qpsk_llr: [symb %d / FirstSym %d / Length %d]: @LLR Buff %x, @LLR Buff(symb) %x \n",
-             symbol,
-             first_symbol_flag,
-             len,
-             dlsch_llr,
-             llr32);
-  */
-  //printf("ll32p=%p , dlsch_llr=%p, symbol=%d, flag=%d \n", llr32, dlsch_llr, symbol, first_symbol_flag);
-  for (i=0; i<len; i++) {
-    *llr32 = *rxF;
-     //printf("llr %d : (%d,%d)\n",i,((int16_t*)llr32)[0],((int16_t*)llr32)[1]);
-    rxF++;
-    llr32++;
-  }
-
-  //*llr32p = (int16_t *)llr32;
-
-  return(0);
-}
-
-int32_t dlsch_qpsk_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms,
-                           int32_t **rxdataF_comp,
-                           int32_t **sic_buffer,  //Q15
-                           int32_t **rho_i,
-                           short *dlsch_llr,
-                           uint8_t num_pdcch_symbols,
-                           uint16_t nb_rb,
-                           uint8_t subframe,
-                           uint16_t mod_order_0,
-                           uint32_t rb_alloc)
-{
-
-  int16_t rho_amp_x0[2*frame_parms->N_RB_DL*12];
-  int16_t rho_rho_amp_x0[2*frame_parms->N_RB_DL*12];
-  uint16_t amp_tmp;
-  uint16_t *llr16=(uint16_t*)dlsch_llr;
-  int i, len,  nsymb;
-  uint8_t symbol, symbol_mod;
-  int len_acc=0;
-  uint16_t *sic_data;
-  uint16_t pbch_pss_sss_adjust;
-
-  nsymb = (frame_parms->Ncp==0) ? 14:12;
-
-  for (symbol=num_pdcch_symbols; symbol<nsymb; symbol++) {
-    uint16_t *rxF = (uint16_t*)(&rxdataF_comp[0][((int16_t)symbol*frame_parms->N_RB_DL*12)]);
-    int16_t *rho_1=(int16_t*)(&rho_i[0][((int16_t)symbol*frame_parms->N_RB_DL*12)]);
-    sic_data = (uint16_t*)&sic_buffer[0][((int16_t)len_acc)];
-
-    symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-
-
-
-    if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) //pilots=1
-      amp_tmp=0x1fff;//dlsch0->sqrt_rho_b; already taken into account
-    else //pilots=0
-      amp_tmp=0x1fff;//1.5*dlsch0->sqrt_rho_a; already taken into account
-
-    if (mod_order_0==6)
-      amp_tmp=amp_tmp<<1; // to compensate for >> 1 shift in modulation
-
-
-    pbch_pss_sss_adjust=adjust_G2(frame_parms,&rb_alloc,2,subframe,symbol);
-
-    if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-      if (frame_parms->nb_antenna_ports_eNB!=1)
-        len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-      else
-        len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
-    } else {
-      len = (nb_rb*12) - pbch_pss_sss_adjust;
-    }
-
-   //  printf("dlsch_qpsk_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust);
-
-    len_acc+=len; //accumulated length; this is done because in sic_buffer we have only data symbols
-
-    multadd_complex_vector_real_scalar((int16_t *)sic_data,
-                                       amp_tmp,
-                                       (int16_t *)rho_amp_x0, //this is in Q13
-                                       1,
-                                       len);
-
-    mult_cpx_vector((int16_t *)rho_1, //Q15
-                    (int16_t *)rho_amp_x0, //Q13
-                    (int16_t*)rho_rho_amp_x0,
-                    len,
-                    13);
-
-#ifdef DEBUG_LLR_SIC
-    write_output("rho_for_multipl.m","rho_for_m", rho_1,len,1,
-     symbol==num_pdcch_symbols ? 15 :
-     symbol==nsymb-1 ? 14 : 13);
-
-    write_output("rho_rho_in_llr.m","rho2", rho_rho_amp_x0,len,1,
-     symbol==num_pdcch_symbols ? 15 :
-     symbol==nsymb-1 ? 14 : 13);
-#endif
-
-    sub_cpx_vector16((int16_t *)rxF,
-                     (int16_t *)rho_rho_amp_x0,
-                     //(int16_t *)clean_x1,
-                     (int16_t *)rxF,
-                     len*2);
-
-#ifdef DEBUG_LLR_SIC
-    write_output("rxFdata_comp1_after.m","rxF_a", rxF,len,1,1);
-    write_output("rxF_comp1.m","rxF_1_comp", rxF,len,1,
-                 symbol==num_pdcch_symbols ? 15 :
-                 symbol==nsymb-1 ? 14 : 13);
-#endif
-
-    //this is for QPSK only!!!
-    for (i=0; i<len*2; i++) {
-      *llr16 =rxF[i];
-      //printf("llr %d : (%d,%d)\n",i,((int16_t*)llr32)[0],((int16_t*)llr32)[1]);
-      llr16++;
-    }
-
-  }
-
- // printf("dlsch_qpsk_llr_SIC: acc_len=%d\n",len_acc);
-
-  return(0);
-}
-
-
-//----------------------------------------------------------------------------------------------
-// 16-QAM
-//----------------------------------------------------------------------------------------------
-
-void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
-                     int32_t **rxdataF_comp,
-                     int16_t *dlsch_llr,
-                     int32_t **dl_ch_mag,
-                     uint8_t symbol,
-                     uint8_t first_symbol_flag,
-                     uint16_t nb_rb,
-                     uint16_t pbch_pss_sss_adjust,
-                     int16_t **llr32p,
-                     uint8_t beamforming_mode)
-{
-
-#if defined(__x86_64__) || defined(__i386__)
-  __m128i *rxF = (__m128i*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
-  __m128i *ch_mag;
-  __m128i llr128[2];
-  uint32_t *llr32;
-#elif defined(__arm__)
-  int16x8_t *rxF = (int16x8_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16x8_t *ch_mag;
-  int16x8_t xmm0;
-  int16_t *llr16;
-#endif
-
-
-  int i,len;
-  unsigned char symbol_mod,len_mod4=0;
-
-
-#if defined(__x86_64__) || defined(__i386__)
-  if (first_symbol_flag==1) {
-    llr32 = (uint32_t*)dlsch_llr;
-  } else {
-    llr32 = (uint32_t*)*llr32p;
-  }
-#elif defined(__arm__)
-  if (first_symbol_flag==1) {
-    llr16 = (int16_t*)dlsch_llr;
-  } else {
-    llr16 = (int16_t*)*llr32p;
-  }
-#endif
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-#if defined(__x86_64__) || defined(__i386__)
-  ch_mag = (__m128i*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
-#elif defined(__arm__)
-  ch_mag = (int16x8_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
-#endif
-  if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-    if (frame_parms->nb_antenna_ports_eNB!=1)
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-    else
-      len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
-  } else if((beamforming_mode==7) && (frame_parms->Ncp==0) && (symbol==3 || symbol==6 || symbol==9 || symbol==12)){
-      len = (nb_rb*9) - (3*pbch_pss_sss_adjust/4);
-  } else if((beamforming_mode==7) && (frame_parms->Ncp==1) && (symbol==4 || symbol==7 || symbol==10)){
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-  } else {
-    len = (nb_rb*12) - pbch_pss_sss_adjust;
-  }
-
-  // update output pointer according to number of REs in this symbol (<<2 because 4 bits per RE)
-  if (first_symbol_flag == 1)
-    *llr32p = dlsch_llr + (len<<2);
-  else
-    *llr32p += (len<<2);
-
- // printf("len=%d\n", len);
-  len_mod4 = len&3;
- // printf("len_mod4=%d\n", len_mod4);
-  len>>=2;  // length in quad words (4 REs)
- // printf("len>>=2=%d\n", len);
-  len+=(len_mod4==0 ? 0 : 1);
- // printf("len+=%d\n", len);
-  for (i=0; i<len; i++) {
-
-#if defined(__x86_64__) || defined(__i386)
-    xmm0 = _mm_abs_epi16(rxF[i]);
-    xmm0 = _mm_subs_epi16(ch_mag[i],xmm0);
-
-    // lambda_1=y_R, lambda_2=|y_R|-|h|^2, lamda_3=y_I, lambda_4=|y_I|-|h|^2
-    llr128[0] = _mm_unpacklo_epi32(rxF[i],xmm0);
-    llr128[1] = _mm_unpackhi_epi32(rxF[i],xmm0);
-    llr32[0] = _mm_extract_epi32(llr128[0],0); //((uint32_t *)&llr128[0])[0];
-    llr32[1] = _mm_extract_epi32(llr128[0],1); //((uint32_t *)&llr128[0])[1];
-    llr32[2] = _mm_extract_epi32(llr128[0],2); //((uint32_t *)&llr128[0])[2];
-    llr32[3] = _mm_extract_epi32(llr128[0],3); //((uint32_t *)&llr128[0])[3];
-    llr32[4] = _mm_extract_epi32(llr128[1],0); //((uint32_t *)&llr128[1])[0];
-    llr32[5] = _mm_extract_epi32(llr128[1],1); //((uint32_t *)&llr128[1])[1];
-    llr32[6] = _mm_extract_epi32(llr128[1],2); //((uint32_t *)&llr128[1])[2];
-    llr32[7] = _mm_extract_epi32(llr128[1],3); //((uint32_t *)&llr128[1])[3];
-    llr32+=8;
-#elif defined(__arm__)
-    xmm0 = vabsq_s16(rxF[i]);
-    xmm0 = vqsubq_s16(ch_mag[i],xmm0);
-    // lambda_1=y_R, lambda_2=|y_R|-|h|^2, lamda_3=y_I, lambda_4=|y_I|-|h|^2
-
-    llr16[0] = vgetq_lane_s16(rxF[i],0);
-    llr16[1] = vgetq_lane_s16(rxF[i],1);
-    llr16[2] = vgetq_lane_s16(xmm0,0);
-    llr16[3] = vgetq_lane_s16(xmm0,1);
-    llr16[4] = vgetq_lane_s16(rxF[i],2);
-    llr16[5] = vgetq_lane_s16(rxF[i],3);
-    llr16[6] = vgetq_lane_s16(xmm0,2);
-    llr16[7] = vgetq_lane_s16(xmm0,3);
-    llr16[8] = vgetq_lane_s16(rxF[i],4);
-    llr16[9] = vgetq_lane_s16(rxF[i],5);
-    llr16[10] = vgetq_lane_s16(xmm0,4);
-    llr16[11] = vgetq_lane_s16(xmm0,5);
-    llr16[12] = vgetq_lane_s16(rxF[i],6);
-    llr16[13] = vgetq_lane_s16(rxF[i],6);
-    llr16[14] = vgetq_lane_s16(xmm0,7);
-    llr16[15] = vgetq_lane_s16(xmm0,7);
-    llr16+=16;
-#endif
-
-  }
-
-#if defined(__x86_64__) || defined(__i386__)
-  _mm_empty();
-  _m_empty();
-#endif
-}
-
-void dlsch_16qam_llr_SIC (LTE_DL_FRAME_PARMS *frame_parms,
-                          int32_t **rxdataF_comp,
-                          int32_t **sic_buffer,  //Q15
-                          int32_t **rho_i,
-                          int16_t *dlsch_llr,
-                          uint8_t num_pdcch_symbols,
-                          int32_t **dl_ch_mag,
-                          uint16_t nb_rb,
-                          uint8_t subframe,
-                          uint16_t mod_order_0,
-                          uint32_t rb_alloc)
-{
-  int16_t rho_amp_x0[2*frame_parms->N_RB_DL*12];
-  int16_t rho_rho_amp_x0[2*frame_parms->N_RB_DL*12];
-  uint16_t amp_tmp;
-  uint32_t *llr32=(uint32_t*)dlsch_llr;
-  int i, len,  nsymb;
-  uint8_t symbol, symbol_mod;
-  int len_acc=0;
-  uint16_t *sic_data;
-  uint16_t pbch_pss_sss_adjust;
-  unsigned char len_mod4=0;
-  __m128i llr128[2];
-  __m128i *ch_mag;
-  nsymb = (frame_parms->Ncp==0) ? 14:12;
-
-    for (symbol=num_pdcch_symbols; symbol<nsymb; symbol++) {
-    uint16_t *rxF = (uint16_t*)(&rxdataF_comp[0][((int16_t)symbol*frame_parms->N_RB_DL*12)]);
-    int16_t *rho_1=(int16_t*)(&rho_i[0][((int16_t)symbol*frame_parms->N_RB_DL*12)]);
-    ch_mag = (__m128i*)(&dl_ch_mag[0][((int16_t)symbol*frame_parms->N_RB_DL*12)]);
-    sic_data = (uint16_t*)(&sic_buffer[0][((int16_t)len_acc)]);
-
-    symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-    pbch_pss_sss_adjust=adjust_G2(frame_parms,&rb_alloc,4,subframe,symbol);
-
-    if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-      amp_tmp=0x1fff;//dlsch0->sqrt_rho_b; already taken into account
-      if (frame_parms->nb_antenna_ports_eNB!=1)
-        len = nb_rb*8 - (2*pbch_pss_sss_adjust/3);
-      else
-        len = nb_rb*10 - (5*pbch_pss_sss_adjust/6);
-    } else {
-      amp_tmp=0x1fff;;//dlsch0->sqrt_rho_a; already taken into account
-      len = nb_rb*12 - pbch_pss_sss_adjust;
-    }
-
-    if (mod_order_0==6)
-      amp_tmp=amp_tmp<<1; // to compensate for >> 1 shift in modulation
-
-    len_acc+=len;
-
-    multadd_complex_vector_real_scalar((int16_t *)sic_data,
-                                       amp_tmp,
-                                       (int16_t *)rho_amp_x0, //this is in Q13
-                                       1,
-                                       len);
-
-     mult_cpx_vector((int16_t *)rho_1, //Q15
-                    (int16_t *)rho_amp_x0, //Q13
-                    (int16_t*)rho_rho_amp_x0,
-                    len,
-                    13);
-
-     sub_cpx_vector16((int16_t *)rxF,
-                      (int16_t *)rho_rho_amp_x0,
-                      //(int16_t *)clean_x1,
-                      (int16_t *)rxF,
-                      len*2);
-
-    len_mod4 = len&3;
-    len>>=2;  // length in quad words (4 REs)
-    len+=(len_mod4==0 ? 0 : 1);
-
-    for (i=0; i<len; i++) {
-
-
-    __m128i *x1 = (__m128i*)rxF;//clean_x1;
-//printf("%p %p %p\n", clean_x1, &clean_x1, &clean_x1[0]);
-//int *a = malloc(10*sizeof(int));
-//printf("%p %p\n", a, &a);
-//exit(0);
-    xmm0 = _mm_abs_epi16(x1[i]);
-    xmm0 = _mm_subs_epi16(ch_mag[i],xmm0);
-
-    // lambda_1=y_R, lambda_2=|y_R|-|h|^2, lamda_3=y_I, lambda_4=|y_I|-|h|^2
-    llr128[0] = _mm_unpacklo_epi32(x1[i],xmm0);
-    llr128[1] = _mm_unpackhi_epi32(x1[i],xmm0);
-    llr32[0] = _mm_extract_epi32(llr128[0],0); //((uint32_t *)&llr128[0])[0];
-    llr32[1] = _mm_extract_epi32(llr128[0],1); //((uint32_t *)&llr128[0])[1];
-    llr32[2] = _mm_extract_epi32(llr128[0],2); //((uint32_t *)&llr128[0])[2];
-    llr32[3] = _mm_extract_epi32(llr128[0],3); //((uint32_t *)&llr128[0])[3];
-    llr32[4] = _mm_extract_epi32(llr128[1],0); //((uint32_t *)&llr128[1])[0];
-    llr32[5] = _mm_extract_epi32(llr128[1],1); //((uint32_t *)&llr128[1])[1];
-    llr32[6] = _mm_extract_epi32(llr128[1],2); //((uint32_t *)&llr128[1])[2];
-    llr32[7] = _mm_extract_epi32(llr128[1],3); //((uint32_t *)&llr128[1])[3];
-    llr32+=8;
-
-  }
-  _mm_empty();
-  _m_empty();
-}
-}
-
-//----------------------------------------------------------------------------------------------
-// 64-QAM
-//----------------------------------------------------------------------------------------------
-
-void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
-                     int32_t **rxdataF_comp,
-                     int16_t *dlsch_llr,
-                     int32_t **dl_ch_mag,
-                     int32_t **dl_ch_magb,
-                     uint8_t symbol,
-                     uint8_t first_symbol_flag,
-                     uint16_t nb_rb,
-                     uint16_t pbch_pss_sss_adjust,
-                     //int16_t **llr_save,
-                     uint32_t llr_offset,
-                     uint8_t beamforming_mode)
-{
-#if defined(__x86_64__) || defined(__i386__)
-  __m128i *rxF = (__m128i*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
-  __m128i *ch_mag,*ch_magb;
-#elif defined(__arm__)
-  int16x8_t *rxF = (int16x8_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16x8_t *ch_mag,*ch_magb,xmm1,xmm2;
-#endif
-  int i,len,len2;
-  unsigned char symbol_mod,len_mod4;
-  short *llr;
-  int16_t *llr2;
-  int8_t *pllr_symbol;
-
-  /*
-  if (first_symbol_flag==1)
-    llr = dlsch_llr;
-  else
-    llr = *llr_save;
-  */
-  llr = dlsch_llr;
-
-  pllr_symbol = (int8_t*)dlsch_llr;
-  pllr_symbol += llr_offset;
-
-  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-#if defined(__x86_64__) || defined(__i386__)
-  ch_mag = (__m128i*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
-  ch_magb = (__m128i*)&dl_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)];
-#elif defined(__arm__)
-  ch_mag = (int16x8_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
-  ch_magb = (int16x8_t*)&dl_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)];
-#endif
-  if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-    if (frame_parms->nb_antenna_ports_eNB!=1)
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-    else
-      len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
-  } else if((beamforming_mode==7) && (frame_parms->Ncp==0) && (symbol==3 || symbol==6 || symbol==9 || symbol==12)){
-      len = (nb_rb*9) - (3*pbch_pss_sss_adjust/4);
-  } else if((beamforming_mode==7) && (frame_parms->Ncp==1) && (symbol==4 || symbol==7 || symbol==10)){
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-  } else {
-    len = (nb_rb*12) - pbch_pss_sss_adjust;
-  }
-
-//  printf("dlsch_64qam_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust);
-
-/*  LOG_I(PHY,"dlsch_64qam_llr [symb %d / FirstSym %d / Length %d]: @LLR Buff %x \n",
-             symbol,
-             first_symbol_flag,
-             len,
-             dlsch_llr,
-             pllr_symbol);*/
-
-  llr2 = llr;
-  llr += (len*6);
-
-  len_mod4 =len&3;
-  len2=len>>2;  // length in quad words (4 REs)
-  len2+=((len_mod4==0)?0:1);
-
-  for (i=0; i<len2; i++) {
-
-#if defined(__x86_64__) || defined(__i386__)
-    xmm1 = _mm_abs_epi16(rxF[i]);
-    xmm1 = _mm_subs_epi16(ch_mag[i],xmm1);
-    xmm2 = _mm_abs_epi16(xmm1);
-    xmm2 = _mm_subs_epi16(ch_magb[i],xmm2);
-#elif defined(__arm__)
-    xmm1 = vabsq_s16(rxF[i]);
-    xmm1 = vsubq_s16(ch_mag[i],xmm1);
-    xmm2 = vabsq_s16(xmm1);
-    xmm2 = vsubq_s16(ch_magb[i],xmm2);
-#endif
-    // loop over all LLRs in quad word (24 coded bits)
-    /*
-      for (j=0;j<8;j+=2) {
-      llr2[0] = ((short *)&rxF[i])[j];
-      llr2[1] = ((short *)&rxF[i])[j+1];
-      llr2[2] = ((short *)&xmm1)[j];
-      llr2[3] = ((short *)&xmm1)[j+1];
-      llr2[4] = ((short *)&xmm2)[j];
-      llr2[5] = ((short *)&xmm2)[j+1];
-
-     llr2+=6;
-      }
-    */
-    llr2[0] = ((short *)&rxF[i])[0];
-    llr2[1] = ((short *)&rxF[i])[1];
-#if defined(__x86_64__) || defined(__i386__)
-    llr2[2] = _mm_extract_epi16(xmm1,0);
-    llr2[3] = _mm_extract_epi16(xmm1,1);//((short *)&xmm1)[j+1];
-    llr2[4] = _mm_extract_epi16(xmm2,0);//((short *)&xmm2)[j];
-    llr2[5] = _mm_extract_epi16(xmm2,1);//((short *)&xmm2)[j+1];
-#elif defined(__arm__)
-    llr2[2] = vgetq_lane_s16(xmm1,0);
-    llr2[3] = vgetq_lane_s16(xmm1,1);//((short *)&xmm1)[j+1];
-    llr2[4] = vgetq_lane_s16(xmm2,0);//((short *)&xmm2)[j];
-    llr2[5] = vgetq_lane_s16(xmm2,1);//((short *)&xmm2)[j+1];
-#endif
-
-    llr2+=6;
-    llr2[0] = ((short *)&rxF[i])[2];
-    llr2[1] = ((short *)&rxF[i])[3];
-#if defined(__x86_64__) || defined(__i386__)
-    llr2[2] = _mm_extract_epi16(xmm1,2);
-    llr2[3] = _mm_extract_epi16(xmm1,3);//((short *)&xmm1)[j+1];
-    llr2[4] = _mm_extract_epi16(xmm2,2);//((short *)&xmm2)[j];
-    llr2[5] = _mm_extract_epi16(xmm2,3);//((short *)&xmm2)[j+1];
-#elif defined(__arm__)
-    llr2[2] = vgetq_lane_s16(xmm1,2);
-    llr2[3] = vgetq_lane_s16(xmm1,3);//((short *)&xmm1)[j+1];
-    llr2[4] = vgetq_lane_s16(xmm2,2);//((short *)&xmm2)[j];
-    llr2[5] = vgetq_lane_s16(xmm2,3);//((short *)&xmm2)[j+1];
-#endif
-
-    llr2+=6;
-    llr2[0] = ((short *)&rxF[i])[4];
-    llr2[1] = ((short *)&rxF[i])[5];
-#if defined(__x86_64__) || defined(__i386__)
-    llr2[2] = _mm_extract_epi16(xmm1,4);
-    llr2[3] = _mm_extract_epi16(xmm1,5);//((short *)&xmm1)[j+1];
-    llr2[4] = _mm_extract_epi16(xmm2,4);//((short *)&xmm2)[j];
-    llr2[5] = _mm_extract_epi16(xmm2,5);//((short *)&xmm2)[j+1];
-#elif defined(__arm__)
-    llr2[2] = vgetq_lane_s16(xmm1,4);
-    llr2[3] = vgetq_lane_s16(xmm1,5);//((short *)&xmm1)[j+1];
-    llr2[4] = vgetq_lane_s16(xmm2,4);//((short *)&xmm2)[j];
-    llr2[5] = vgetq_lane_s16(xmm2,5);//((short *)&xmm2)[j+1];
-#endif
-    llr2+=6;
-    llr2[0] = ((short *)&rxF[i])[6];
-    llr2[1] = ((short *)&rxF[i])[7];
-#if defined(__x86_64__) || defined(__i386__)
-    llr2[2] = _mm_extract_epi16(xmm1,6);
-    llr2[3] = _mm_extract_epi16(xmm1,7);//((short *)&xmm1)[j+1];
-    llr2[4] = _mm_extract_epi16(xmm2,6);//((short *)&xmm2)[j];
-    llr2[5] = _mm_extract_epi16(xmm2,7);//((short *)&xmm2)[j+1];
-#elif defined(__arm__)
-    llr2[2] = vgetq_lane_s16(xmm1,6);
-    llr2[3] = vgetq_lane_s16(xmm1,7);//((short *)&xmm1)[j+1];
-    llr2[4] = vgetq_lane_s16(xmm2,6);//((short *)&xmm2)[j];
-    llr2[5] = vgetq_lane_s16(xmm2,7);//((short *)&xmm2)[j+1];
-#endif
-    llr2+=6;
-
-  }
-
-#if defined(__x86_64__) || defined(__i386__)
-  _mm_empty();
-  _m_empty();
-#endif
-}
-
-//#if 0
-void dlsch_64qam_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms,
-                         int32_t **rxdataF_comp,
-                         int32_t **sic_buffer,  //Q15
-                         int32_t **rho_i,
-                         int16_t *dlsch_llr,
-                         uint8_t num_pdcch_symbols,
-                         int32_t **dl_ch_mag,
-                         int32_t **dl_ch_magb,
-                         uint16_t nb_rb,
-                         uint8_t subframe,
-                         uint16_t mod_order_0,
-                         uint32_t rb_alloc)
-{
-  int16_t rho_amp_x0[2*frame_parms->N_RB_DL*12];
-  int16_t rho_rho_amp_x0[2*frame_parms->N_RB_DL*12];
-  uint16_t amp_tmp;
-  uint16_t *llr32=(uint16_t*)dlsch_llr;
-  int i, len,  nsymb, len2;
-  uint8_t symbol, symbol_mod;
-  int len_acc=0;
-  uint16_t *sic_data;
-  uint16_t pbch_pss_sss_adjust;
-  unsigned char len_mod4=0;
-  uint16_t *llr2;
-  __m128i *ch_mag,*ch_magb;
-
-  nsymb = (frame_parms->Ncp==0) ? 14:12;
-
-  for (symbol=num_pdcch_symbols; symbol<nsymb; symbol++) {
-    uint16_t *rxF = (uint16_t*)(&rxdataF_comp[0][((int16_t)symbol*frame_parms->N_RB_DL*12)]);
-    int16_t *rho_1=(int16_t*)(&rho_i[0][((int16_t)symbol*frame_parms->N_RB_DL*12)]);
-    ch_mag = (__m128i*)(&dl_ch_mag[0][((int16_t)symbol*frame_parms->N_RB_DL*12)]);
-    ch_magb = (__m128i*)(&dl_ch_magb[0][((int16_t)symbol*frame_parms->N_RB_DL*12)]);
-    sic_data = (uint16_t*)(&sic_buffer[0][((int16_t)len_acc)]);
-
-    symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
-
-    pbch_pss_sss_adjust=adjust_G2(frame_parms,&rb_alloc,6,subframe,symbol);
-
-    if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-      amp_tmp = 0x1fff;//dlsch0->sqrt_rho_b; already taken into account
-      if (frame_parms->nb_antenna_ports_eNB!=1)
-        len = nb_rb*8 - (2*pbch_pss_sss_adjust/3);
-      else
-        len = nb_rb*10 - (5*pbch_pss_sss_adjust/6);
-      } else {
-        amp_tmp = 0x1fff; //dlsch0->sqrt_rho_a; already taken into account
-        len = nb_rb*12 - pbch_pss_sss_adjust;
-      }
-
-    if (mod_order_0==6)
-      amp_tmp=amp_tmp<<1; // to compensate for >> 1 shift in modulation
-
-    len_acc+=len;
-
-    multadd_complex_vector_real_scalar((int16_t *)sic_data,
-                                        amp_tmp,
-                                        (int16_t *)rho_amp_x0, //this is in Q13
-                                        1,
-                                        len);
-
-    mult_cpx_vector((int16_t *)rho_1, //Q15
-                    (int16_t *)rho_amp_x0, //Q13
-                    (int16_t*)rho_rho_amp_x0,
-                    len,
-                    13);
-
-    sub_cpx_vector16((int16_t *)rxF,
-                      (int16_t *)rho_rho_amp_x0,
-                      //(int16_t *)clean_x1,
-                      (int16_t *)rxF,
-                      len*2);
-
-    llr2 = llr32;
-    llr32 += (len*6);
-
-    len_mod4 =len&3;
-    len2=len>>2;  // length in quad words (4 REs)
-    len2+=(len_mod4?0:1);
-
-
-
-    for (i=0; i<len2; i++) {
-
-      __m128i *x1 = (__m128i*)rxF;
-      xmm1 = _mm_abs_epi16(x1[i]);
-      xmm1 = _mm_subs_epi16(ch_mag[i],xmm1);
-      xmm2 = _mm_abs_epi16(xmm1);
-      xmm2 = _mm_subs_epi16(ch_magb[i],xmm2);
-
-      // loop over all LLRs in quad word (24 coded bits)
-      /*
-        for (j=0;j<8;j+=2) {
-        llr2[0] = ((short *)&rxF[i])[j];
-        llr2[1] = ((short *)&rxF[i])[j+1];
-        llr2[2] = ((short *)&xmm1)[j];
-        llr2[3] = ((short *)&xmm1)[j+1];
-        llr2[4] = ((short *)&xmm2)[j];
-        llr2[5] = ((short *)&xmm2)[j+1];
-
-       llr2+=6;
-        }
-      */
-      llr2[0] = ((short *)&x1[i])[0];
-      llr2[1] = ((short *)&x1[i])[1];
-      llr2[2] = _mm_extract_epi16(xmm1,0);
-      llr2[3] = _mm_extract_epi16(xmm1,1);//((short *)&xmm1)[j+1];
-      llr2[4] = _mm_extract_epi16(xmm2,0);//((short *)&xmm2)[j];
-      llr2[5] = _mm_extract_epi16(xmm2,1);//((short *)&xmm2)[j+1];
-
-
-      llr2+=6;
-      llr2[0] = ((short *)&x1[i])[2];
-      llr2[1] = ((short *)&x1[i])[3];
-
-      llr2[2] = _mm_extract_epi16(xmm1,2);
-      llr2[3] = _mm_extract_epi16(xmm1,3);//((short *)&xmm1)[j+1];
-      llr2[4] = _mm_extract_epi16(xmm2,2);//((short *)&xmm2)[j];
-      llr2[5] = _mm_extract_epi16(xmm2,3);//((short *)&xmm2)[j+1];
-
-      llr2+=6;
-      llr2[0] = ((short *)&x1[i])[4];
-      llr2[1] = ((short *)&x1[i])[5];
-
-      llr2[2] = _mm_extract_epi16(xmm1,4);
-      llr2[3] = _mm_extract_epi16(xmm1,5);//((short *)&xmm1)[j+1];
-      llr2[4] = _mm_extract_epi16(xmm2,4);//((short *)&xmm2)[j];
-      llr2[5] = _mm_extract_epi16(xmm2,5);//((short *)&xmm2)[j+1];
-
-      llr2+=6;
-      llr2[0] = ((short *)&x1[i])[6];
-      llr2[1] = ((short *)&x1[i])[7];
-
-      llr2[2] = _mm_extract_epi16(xmm1,6);
-      llr2[3] = _mm_extract_epi16(xmm1,7);//((short *)&xmm1)[j+1];
-      llr2[4] = _mm_extract_epi16(xmm2,6);//((short *)&xmm2)[j];
-      llr2[5] = _mm_extract_epi16(xmm2,7);//((short *)&xmm2)[j+1];
-
-      llr2+=6;
-
-    }
-
- // *llr_save = llr;
-
-  _mm_empty();
-  _m_empty();
-
-  }
-}
-//#endif
-//==============================================================================================
-// DUAL-STREAM
-//==============================================================================================
-
-//----------------------------------------------------------------------------------------------
-// QPSK
-//----------------------------------------------------------------------------------------------
-
-#if defined(__x86_64__) || defined(__i386)
-__m128i  y0r_over2 __attribute__ ((aligned(16)));
-__m128i  y0i_over2 __attribute__ ((aligned(16)));
-__m128i  y1r_over2 __attribute__ ((aligned(16)));
-__m128i  y1i_over2 __attribute__ ((aligned(16)));
-
-__m128i  A __attribute__ ((aligned(16)));
-__m128i  B __attribute__ ((aligned(16)));
-__m128i  C __attribute__ ((aligned(16)));
-__m128i  D __attribute__ ((aligned(16)));
-__m128i  E __attribute__ ((aligned(16)));
-__m128i  F __attribute__ ((aligned(16)));
-__m128i  G __attribute__ ((aligned(16)));
-__m128i  H __attribute__ ((aligned(16)));
-
-#endif
-
-int dlsch_qpsk_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
-                        int **rxdataF_comp,
-                        int **rxdataF_comp_i,
-                        int **rho_i,
-                        short *dlsch_llr,
-                        unsigned char symbol,
-                        unsigned char first_symbol_flag,
-                        unsigned short nb_rb,
-                        uint16_t pbch_pss_sss_adjust,
-                        short **llr16p)
-{
-
-  int16_t *rxF=(int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rxF_i=(int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rho=(int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *llr16;
-  int len;
-  uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
-
-  if (first_symbol_flag == 1) {
-    llr16 = (int16_t*)dlsch_llr;
-  } else {
-    llr16 = (int16_t*)(*llr16p);
-  }
-
-  AssertFatal(llr16!=NULL,"dlsch_qpsk_qpsk_llr: llr is null, symbol %d\n",symbol);
-
-  if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-    // if symbol has pilots
-    if (frame_parms->nb_antenna_ports_eNB!=1)
-      // in 2 antenna ports we have 8 REs per symbol per RB
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-    else
-      // for 1 antenna port we have 10 REs per symbol per RB
-      len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
-  } else {
-    // symbol has no pilots
-    len = (nb_rb*12) - pbch_pss_sss_adjust;
-  }
-
-  // printf("dlsch_qpsk_qpsk_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust);
-  //    printf("qpsk_qpsk: len %d, llr16 %p\n",len,llr16);
-  qpsk_qpsk((short *)rxF,
-            (short *)rxF_i,
-            (short *)llr16,
-            (short *)rho,
-            len);
-
-  llr16 += (len<<1);
-  *llr16p = (short *)llr16;
-
-  return(0);
-}
-
-//__m128i ONE_OVER_SQRT_8 __attribute__((aligned(16)));
-
-void qpsk_qpsk(short *stream0_in,
-               short *stream1_in,
-               short *stream0_out,
-               short *rho01,
-               int length
-         )
-{
-
-  /*
-    This function computes the LLRs of stream 0 (s_0) in presence of the interfering stream 1 (s_1) assuming that both symbols are QPSK. It can be used for both MU-MIMO interference-aware receiver or for SU-MIMO receivers.
-
-    Parameters:
-    stream0_in = Matched filter output y0' = (h0*g0)*y0
-    stream1_in = Matched filter output y1' = (h0*g1)*y0
-    stream0_out = LLRs
-    rho01 = Correlation between the two effective channels \rho_{10} = (h1*g1)*(h0*g0)
-    length = number of resource elements
-  */
-
-#if defined(__x86_64__) || defined(__i386__)
-  __m128i *rho01_128i = (__m128i *)rho01;
-  __m128i *stream0_128i_in = (__m128i *)stream0_in;
-  __m128i *stream1_128i_in = (__m128i *)stream1_in;
-  __m128i *stream0_128i_out = (__m128i *)stream0_out;
-  __m128i ONE_OVER_SQRT_8 = _mm_set1_epi16(23170); //round(2^16/sqrt(8))
-#elif defined(__arm__)
-  int16x8_t *rho01_128i = (int16x8_t *)rho01;
-  int16x8_t *stream0_128i_in = (int16x8_t *)stream0_in;
-  int16x8_t *stream1_128i_in = (int16x8_t *)stream1_in;
-  int16x8_t *stream0_128i_out = (int16x8_t *)stream0_out;
-  int16x8_t ONE_OVER_SQRT_8 = vdupq_n_s16(23170); //round(2^16/sqrt(8))
-#endif
-
-  int i;
-
-
-  for (i=0; i<length>>2; i+=2) {
-    // in each iteration, we take 8 complex samples
-#if defined(__x86_64__) || defined(__i386__)
-    xmm0 = rho01_128i[i]; // 4 symbols
-    xmm1 = rho01_128i[i+1];
-
-    // put (rho_r + rho_i)/2sqrt2 in rho_rpi
-    // put (rho_r - rho_i)/2sqrt2 in rho_rmi
-
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    xmm2 = _mm_unpacklo_epi64(xmm0,xmm1); // Re(rho)
-    xmm3 = _mm_unpackhi_epi64(xmm0,xmm1); // Im(rho)
-    rho_rpi = _mm_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho)
-    rho_rmi = _mm_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho)
-
-    // divide by sqrt(8), no shift needed ONE_OVER_SQRT_8 = Q1.16
-    rho_rpi = _mm_mulhi_epi16(rho_rpi,ONE_OVER_SQRT_8);
-    rho_rmi = _mm_mulhi_epi16(rho_rmi,ONE_OVER_SQRT_8);
-#elif defined(__arm__)
-
-
-#endif
-    // Compute LLR for first bit of stream 0
-
-    // Compute real and imaginary parts of MF output for stream 0
-#if defined(__x86_64__) || defined(__i386__)
-    xmm0 = stream0_128i_in[i];
-    xmm1 = stream0_128i_in[i+1];
-
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y0r = _mm_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)]
-    y0i = _mm_unpackhi_epi64(xmm0,xmm1);
-
-    y0r_over2  = _mm_srai_epi16(y0r,1);   // divide by 2
-    y0i_over2  = _mm_srai_epi16(y0i,1);   // divide by 2
-#elif defined(__arm__)
-
-
-#endif
-    // Compute real and imaginary parts of MF output for stream 1
-#if defined(__x86_64__) || defined(__i386__)
-    xmm0 = stream1_128i_in[i];
-    xmm1 = stream1_128i_in[i+1];
-
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
-    y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
-
-    y1r_over2  = _mm_srai_epi16(y1r,1);   // divide by 2
-    y1i_over2  = _mm_srai_epi16(y1i,1);   // divide by 2
-
-    // Compute the terms for the LLR of first bit
-
-    xmm0 = _mm_setzero_si128(); // ZERO
-
-    // 1 term for numerator of LLR
-    xmm3 = _mm_subs_epi16(y1r_over2,rho_rpi);
-    A = _mm_abs_epi16(xmm3); // A = |y1r/2 - rho/sqrt(8)|
-    xmm2 = _mm_adds_epi16(A,y0i_over2); // = |y1r/2 - rho/sqrt(8)| + y0i/2
-    xmm3 = _mm_subs_epi16(y1i_over2,rho_rmi);
-    B = _mm_abs_epi16(xmm3); // B = |y1i/2 - rho*/sqrt(8)|
-    logmax_num_re0 = _mm_adds_epi16(B,xmm2); // = |y1r/2 - rho/sqrt(8)|+|y1i/2 - rho*/sqrt(8)| + y0i/2
-
-    // 2 term for numerator of LLR
-    xmm3 = _mm_subs_epi16(y1r_over2,rho_rmi);
-    C = _mm_abs_epi16(xmm3); // C = |y1r/2 - rho*/4|
-    xmm2 = _mm_subs_epi16(C,y0i_over2); // = |y1r/2 - rho*/4| - y0i/2
-    xmm3 = _mm_adds_epi16(y1i_over2,rho_rpi);
-    D = _mm_abs_epi16(xmm3); // D = |y1i/2 + rho/4|
-    xmm2 = _mm_adds_epi16(xmm2,D); // |y1r/2 - rho*/4| + |y1i/2 + rho/4| - y0i/2
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0,xmm2); // max, numerator done
-
-    // 1 term for denominator of LLR
-    xmm3 = _mm_adds_epi16(y1r_over2,rho_rmi);
-    E = _mm_abs_epi16(xmm3); // E = |y1r/2 + rho*/4|
-    xmm2 = _mm_adds_epi16(E,y0i_over2); // = |y1r/2 + rho*/4| + y0i/2
-    xmm3 = _mm_subs_epi16(y1i_over2,rho_rpi);
-    F = _mm_abs_epi16(xmm3); // F = |y1i/2 - rho/4|
-    logmax_den_re0 = _mm_adds_epi16(F,xmm2); // = |y1r/2 + rho*/4| + |y1i/2 - rho/4| + y0i/2
-
-    // 2 term for denominator of LLR
-    xmm3 = _mm_adds_epi16(y1r_over2,rho_rpi);
-    G = _mm_abs_epi16(xmm3); // G = |y1r/2 + rho/4|
-    xmm2 = _mm_subs_epi16(G,y0i_over2); // = |y1r/2 + rho/4| - y0i/2
-    xmm3 = _mm_adds_epi16(y1i_over2,rho_rmi);
-    H = _mm_abs_epi16(xmm3); // H = |y1i/2 + rho*/4|
-    xmm2 = _mm_adds_epi16(xmm2,H); // = |y1r/2 + rho/4| + |y1i/2 + rho*/4| - y0i/2
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0,xmm2); // max, denominator done
-
-    // Compute the terms for the LLR of first bit
-
-    // 1 term for nominator of LLR
-    xmm2 = _mm_adds_epi16(A,y0r_over2);
-    logmax_num_im0 = _mm_adds_epi16(B,xmm2); // = |y1r/2 - rho/4| + |y1i/2 - rho*/4| + y0r/2
-
-    // 2 term for nominator of LLR
-    xmm2 = _mm_subs_epi16(E,y0r_over2);
-    xmm2 = _mm_adds_epi16(xmm2,F); // = |y1r/2 + rho*/4| + |y1i/2 - rho/4| - y0r/2
-
-    logmax_num_im0 = _mm_max_epi16(logmax_num_im0,xmm2); // max, nominator done
-
-    // 1 term for denominator of LLR
-    xmm2 = _mm_adds_epi16(C,y0r_over2);
-    logmax_den_im0 = _mm_adds_epi16(D,xmm2); // = |y1r/2 - rho*/4| + |y1i/2 + rho/4| - y0r/2
-
-    xmm2 = _mm_subs_epi16(G,y0r_over2);
-    xmm2 = _mm_adds_epi16(xmm2,H); // = |y1r/2 + rho/4| + |y1i/2 + rho*/4| - y0r/2
-
-    logmax_den_im0 = _mm_max_epi16(logmax_den_im0,xmm2); // max, denominator done
-
-    // LLR of first bit [L1(1), L1(2), L1(3), L1(4)]
-    y0r = _mm_adds_epi16(y0r,logmax_num_re0);
-    y0r = _mm_subs_epi16(y0r,logmax_den_re0);
-
-    // LLR of second bit [L2(1), L2(2), L2(3), L2(4)]
-    y0i = _mm_adds_epi16(y0i,logmax_num_im0);
-    y0i = _mm_subs_epi16(y0i,logmax_den_im0);
-
-    _mm_storeu_si128(&stream0_128i_out[i],_mm_unpacklo_epi16(y0r,y0i)); // = [L1(1), L2(1), L1(2), L2(2)]
-
-    if (i<((length>>1) - 1)) // false if only 2 REs remain
-      _mm_storeu_si128(&stream0_128i_out[i+1],_mm_unpackhi_epi16(y0r,y0i));
-
-#elif defined(__x86_64__)
-
-#endif
-  }
-
-#if defined(__x86_64__) || defined(__i386__)
-  _mm_empty();
-  _m_empty();
-#endif
-}
-
-int dlsch_qpsk_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
-                         int32_t **rxdataF_comp,
-                         int32_t **rxdataF_comp_i,
-                         int32_t **dl_ch_mag_i, //|h_1|^2*(2/sqrt{10})
-                         int32_t **rho_i,
-                         int16_t *dlsch_llr,
-                         uint8_t symbol,
-                         uint8_t first_symbol_flag,
-                         uint16_t nb_rb,
-                         uint16_t pbch_pss_sss_adjust,
-                         int16_t **llr16p)
-{
-
-  int16_t *rxF=(int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rxF_i=(int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rho=(int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *llr16;
-  int len;
-  uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
-
-  if (first_symbol_flag == 1) {
-    llr16 = (int16_t*)dlsch_llr;
-  } else {
-    llr16 = (int16_t*)(*llr16p);
-  }
-
-  AssertFatal(llr16!=NULL,"dlsch_qpsk_qpsk_llr: llr is null, symbol %d\n",symbol);
-
-
-  if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-    // if symbol has pilots
-    if (frame_parms->nb_antenna_ports_eNB!=1)
-      // in 2 antenna ports we have 8 REs per symbol per RB
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-    else
-      // for 1 antenna port we have 10 REs per symbol per RB
-      len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
-  } else {
-    // symbol has no pilots
-    len = (nb_rb*12) - pbch_pss_sss_adjust;
-  }
-
-  qpsk_qam16((short *)rxF,
-             (short *)rxF_i,
-             (short *)ch_mag_i,
-             (short *)llr16,
-             (short *)rho,
-             len);
-
-  llr16 += (len<<1);
-  *llr16p = (short *)llr16;
-
-  return(0);
-}
-
-/*
-#if defined(__x86_64__) || defined(__i386__)
-__m128i ONE_OVER_SQRT_2 __attribute__((aligned(16)));
-__m128i ONE_OVER_SQRT_10 __attribute__((aligned(16)));
-__m128i THREE_OVER_SQRT_10 __attribute__((aligned(16)));
-__m128i ONE_OVER_SQRT_10_Q15 __attribute__((aligned(16)));
-__m128i SQRT_10_OVER_FOUR __attribute__((aligned(16)));
-__m128i ch_mag_int;
-#endif
-*/
-void qpsk_qam16(int16_t *stream0_in,
-                int16_t *stream1_in,
-                int16_t *ch_mag_i,
-                int16_t *stream0_out,
-                int16_t *rho01,
-                int32_t length
-    )
-{
-  /*
-    This function computes the LLRs of stream 0 (s_0) in presence of the interfering stream 1 (s_1) assuming that both symbols are QPSK. It can be used for both MU-MIMO interference-aware receiver or for SU-MIMO receivers.
-
-    Parameters:
-    stream0_in = Matched filter output y0' = (h0*g0)*y0
-    stream1_in = Matched filter output y1' = (h0*g1)*y0
-    stream0_out = LLRs
-    rho01 = Correlation between the two effective channels \rho_{10} = (h1*g1)*(h0*g0)
-    length = number of resource elements
-  */
-
-#if defined(__x86_64__) || defined(__i386__)
-  __m128i *rho01_128i = (__m128i *)rho01;
-  __m128i *stream0_128i_in = (__m128i *)stream0_in;
-  __m128i *stream1_128i_in = (__m128i *)stream1_in;
-  __m128i *stream0_128i_out = (__m128i *)stream0_out;
-  __m128i *ch_mag_128i_i    = (__m128i *)ch_mag_i;
-  __m128i ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15)
-  __m128i ONE_OVER_SQRT_10_Q15 = _mm_set1_epi16(10362); // round(1/sqrt(10)*2^15)
-  __m128i THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15)
-  __m128i SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15)
-  __m128i ch_mag_int __attribute__((aligned(16)));
-#elif defined(__arm__)
-  int16x8_t *rho01_128i = (int16x8_t *)rho01;
-  int16x8_t *stream0_128i_in = (int16x8_t *)stream0_in;
-  int16x8_t *stream1_128i_in = (int16x8_t *)stream1_in;
-  int16x8_t *stream0_128i_out = (int16x8_t *)stream0_out;
-  int16x8_t *ch_mag_128i_i    = (int16x8_t *)ch_mag_i;
-  int16x8_t ONE_OVER_SQRT_2 = vdupq_n_s16(23170); // round(1/sqrt(2)*2^15)
-  int16x8_t ONE_OVER_SQRT_10_Q15 = vdupq_n_s16(10362); // round(1/sqrt(10)*2^15)
-  int16x8_t THREE_OVER_SQRT_10 = vdupq_n_s16(31086); // round(3/sqrt(10)*2^15)
-  int16x8_t SQRT_10_OVER_FOUR = vdupq_n_s16(25905); // round(sqrt(10)/4*2^15)
-  int16x8_t ch_mag_int __attribute__((aligned(16)));
-#endif
-
-#ifdef DEBUG_LLR
-  print_shorts2("rho01_128i:\n",rho01_128i);
-#endif
-
-  int i;
-
-
-  for (i=0; i<length>>2; i+=2) {
-    // in each iteration, we take 8 complex samples
-
-#if defined(__x86_64__) || defined(__i386__)
-
-    xmm0 = rho01_128i[i]; // 4 symbols
-    xmm1 = rho01_128i[i+1];
-
-    // put (rho_r + rho_i)/2sqrt2 in rho_rpi
-    // put (rho_r - rho_i)/2sqrt2 in rho_rmi
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    xmm2 = _mm_unpacklo_epi64(xmm0,xmm1); // Re(rho)
-    xmm3 = _mm_unpackhi_epi64(xmm0,xmm1); // Im(rho)
-    rho_rpi = _mm_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho)
-    rho_rmi = _mm_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho)
-
-    // divide by sqrt(2)
-    rho_rpi = _mm_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_2);
-    rho_rmi = _mm_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_2);
-    rho_rpi = _mm_slli_epi16(rho_rpi,1);
-    rho_rmi = _mm_slli_epi16(rho_rmi,1);
-
-    // Compute LLR for first bit of stream 0
-
-    // Compute real and imaginary parts of MF output for stream 0
-    xmm0 = stream0_128i_in[i];
-    xmm1 = stream0_128i_in[i+1];
-
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y0r = _mm_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)]
-    y0i = _mm_unpackhi_epi64(xmm0,xmm1);
-
-    // divide by sqrt(2)
-    y0r_over2 = _mm_mulhi_epi16(y0r, ONE_OVER_SQRT_2);
-    y0i_over2 = _mm_mulhi_epi16(y0i, ONE_OVER_SQRT_2);
-    y0r_over2  = _mm_slli_epi16(y0r,1);
-    y0i_over2  = _mm_slli_epi16(y0i,1);
-
-    y0_p_1_1 = _mm_adds_epi16(y0r_over2, y0i_over2);
-    y0_m_1_1 = _mm_subs_epi16(y0r_over2, y0i_over2);
-
-    // Compute real and imaginary parts of MF output for stream 1
-    xmm0 = stream1_128i_in[i];
-    xmm1 = stream1_128i_in[i+1];
-
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
-    y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
-
-    xmm0 = _mm_setzero_si128(); // ZERO
-
-    // compute psi
-    xmm3 = _mm_subs_epi16(y1r,rho_rpi);
-    psi_r_p1_p1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_subs_epi16(y1i,rho_rmi);
-    psi_i_p1_p1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_subs_epi16(y1r,rho_rmi);
-    psi_r_p1_m1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_adds_epi16(y1i,rho_rpi);
-    psi_i_p1_m1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_adds_epi16(y1r,rho_rmi);
-    psi_r_m1_p1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_subs_epi16(y1i,rho_rpi);
-    psi_i_m1_p1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_adds_epi16(y1r,rho_rpi);
-    psi_r_m1_m1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_adds_epi16(y1i,rho_rmi);
-    psi_i_m1_m1 = _mm_abs_epi16(xmm3);
-
-    // Rearrange interfering channel magnitudes
-    xmm2 = ch_mag_128i_i[i];
-    xmm3 = ch_mag_128i_i[i+1];
-
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-
-    ch_mag_int = _mm_unpacklo_epi64(xmm2,xmm3);
-
-    // calculate optimal interference amplitudes
-    interference_abs_epi16(psi_r_p1_p1 , ch_mag_int, a_r_p1_p1 , ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_p1 , ch_mag_int, a_i_p1_p1 , ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_m1 , ch_mag_int, a_r_p1_m1 , ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_m1 , ch_mag_int, a_i_p1_m1 , ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_p1 , ch_mag_int, a_r_m1_p1 , ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_p1 , ch_mag_int, a_i_m1_p1 , ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_m1 , ch_mag_int, a_r_m1_m1 , ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_m1 , ch_mag_int, a_i_m1_m1 , ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-
-    // prodsum
-    prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1);
-    prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1);
-    prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1);
-    prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1);
-
-    // squares
-    square_a_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p1);
-    square_a_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m1);
-    square_a_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p1);
-    square_a_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m1);
-
-    // Computing Metrics
-    xmm0 = _mm_subs_epi16(psi_a_p1_p1, a_sq_p1_p1);
-    bit_met_p1_p1 = _mm_adds_epi16(xmm0, y0_p_1_1);
-
-    xmm0 = _mm_subs_epi16(psi_a_p1_m1, a_sq_p1_m1);
-    bit_met_p1_m1 = _mm_adds_epi16(xmm0, y0_m_1_1);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_p1, a_sq_m1_p1);
-    bit_met_m1_p1 = _mm_subs_epi16(xmm0, y0_m_1_1);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_m1, a_sq_m1_m1);
-    bit_met_m1_m1 = _mm_subs_epi16(xmm0, y0_p_1_1);
-
-    // MSB
-    logmax_num_re0 = _mm_max_epi16(bit_met_p1_p1,bit_met_p1_m1); // bit=0
-    logmax_den_re0 = _mm_max_epi16(bit_met_m1_p1,bit_met_m1_m1); // bit=1
-
-    y0r = _mm_subs_epi16(logmax_num_re0,logmax_den_re0);
-
-    // LSB
-    logmax_num_im0 = _mm_max_epi16(bit_met_p1_p1,bit_met_m1_p1); // bit=0
-    logmax_den_im0 = _mm_max_epi16(bit_met_p1_m1,bit_met_m1_m1); // bit=1
-
-    y0i = _mm_subs_epi16(logmax_num_im0,logmax_den_im0);
-
-    stream0_128i_out[i] = _mm_unpacklo_epi16(y0r,y0i); // = [L1(1), L2(1), L1(2), L2(2)]
-
-    if (i<((length>>1) - 1)) // false if only 2 REs remain
-      stream0_128i_out[i+1] = _mm_unpackhi_epi16(y0r,y0i);
-
-#elif defined(__arm__)
-
-#endif
-  }
-
-#if defined(__x86_64__) || defined(__i386__)
-  _mm_empty();
-  _m_empty();
-#endif
-}
-
-int dlsch_qpsk_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
-                         int32_t **rxdataF_comp,
-                         int32_t **rxdataF_comp_i,
-                         int32_t **dl_ch_mag_i, //|h_1|^2*(2/sqrt{10})
-                         int32_t **rho_i,
-                         int16_t *dlsch_llr,
-                         uint8_t symbol,
-                         uint8_t first_symbol_flag,
-                         uint16_t nb_rb,
-                         uint16_t pbch_pss_sss_adjust,
-                         int16_t **llr16p)
-{
-
-  int16_t *rxF=(int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rxF_i=(int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rho=(int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *llr16;
-  int len;
-  uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
-
-
-  if (first_symbol_flag == 1) {
-    llr16 = (int16_t*)dlsch_llr;
-  } else {
-    llr16 = (int16_t*)(*llr16p);
-  }
-
-  AssertFatal(llr16!=NULL,"dlsch_qpsk_qam64_llr: llr is null, symbol %d\n",symbol);
-
-  if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-    // if symbol has pilots
-    if (frame_parms->nb_antenna_ports_eNB!=1)
-      // in 2 antenna ports we have 8 REs per symbol per RB
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-    else
-      // for 1 antenna port we have 10 REs per symbol per RB
-      len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
-  } else {
-    // symbol has no pilots
-    len = (nb_rb*12) - pbch_pss_sss_adjust;
-  }
-
-  qpsk_qam64((short *)rxF,
-             (short *)rxF_i,
-             (short *)ch_mag_i,
-             (short *)llr16,
-             (short *)rho,
-             len);
-
-  llr16 += (len<<1);
-  *llr16p = (short *)llr16;
-
-  return(0);
-}
-/*
-__m128i ONE_OVER_SQRT_2_42 __attribute__((aligned(16)));
-__m128i THREE_OVER_SQRT_2_42 __attribute__((aligned(16)));
-__m128i FIVE_OVER_SQRT_2_42 __attribute__((aligned(16)));
-__m128i SEVEN_OVER_SQRT_2_42 __attribute__((aligned(16)));
-
-__m128i ch_mag_int_with_sigma2 __attribute__((aligned(16)));
-__m128i two_ch_mag_int_with_sigma2 __attribute__((aligned(16)));
-__m128i three_ch_mag_int_with_sigma2 __attribute__((aligned(16)));
-__m128i SQRT_42_OVER_FOUR __attribute__((aligned(16)));
-*/
-void qpsk_qam64(short *stream0_in,
-                short *stream1_in,
-                short *ch_mag_i,
-                short *stream0_out,
-                short *rho01,
-                int length
-    )
-{
-
-  /*
-    This function computes the LLRs of stream 0 (s_0) in presence of the interfering stream 1 (s_1) assuming that both symbols are QPSK. It can be used for both MU-MIMO interference-aware receiver or for SU-MIMO receivers.
-
-    Parameters:
-    stream0_in = Matched filter output y0' = (h0*g0)*y0
-    stream1_in = Matched filter output y1' = (h0*g1)*y0
-    stream0_out = LLRs
-    rho01 = Correlation between the two effective channels \rho_{10} = (h1*g1)*(h0*g0)
-    length = number of resource elements
-  */
-
-#if defined(__x86_64__) || defined(__i386__)
-  __m128i *rho01_128i = (__m128i *)rho01;
-  __m128i *stream0_128i_in = (__m128i *)stream0_in;
-  __m128i *stream1_128i_in = (__m128i *)stream1_in;
-  __m128i *stream0_128i_out = (__m128i *)stream0_out;
-  __m128i *ch_mag_128i_i    = (__m128i *)ch_mag_i;
-  __m128i ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15)
-  __m128i ONE_OVER_SQRT_2_42 = _mm_set1_epi16(3575); // round(1/sqrt(2*42)*2^15)
-  __m128i THREE_OVER_SQRT_2_42 = _mm_set1_epi16(10726); // round(3/sqrt(2*42)*2^15)
-  __m128i FIVE_OVER_SQRT_2_42 = _mm_set1_epi16(17876); // round(5/sqrt(2*42)*2^15)
-  __m128i SEVEN_OVER_SQRT_2_42 = _mm_set1_epi16(25027); // round(7/sqrt(2*42)*2^15)
-  __m128i SQRT_42_OVER_FOUR = _mm_set1_epi16(13272); // round(sqrt(42)/4*2^13), Q3.1
-  __m128i ch_mag_int;
-  __m128i ch_mag_int_with_sigma2;
-  __m128i two_ch_mag_int_with_sigma2;
-  __m128i three_ch_mag_int_with_sigma2;
-#elif defined(__arm__)
-
-#endif
-
-#ifdef DEBUG_LLR
-  print_shorts2("rho01_128i:\n",rho01_128i);
-#endif
-
-  int i;
-
-
-  for (i=0; i<length>>2; i+=2) {
-    // in each iteration, we take 8 complex samples
-
-#if defined(__x86_64__) || defined(__i386__)
-
-    xmm0 = rho01_128i[i]; // 4 symbols
-    xmm1 = rho01_128i[i+1];
-
-    // put (rho_r + rho_i)/sqrt2 in rho_rpi
-    // put (rho_r - rho_i)/sqrt2 in rho_rmi
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    xmm2 = _mm_unpacklo_epi64(xmm0,xmm1); // Re(rho)
-    xmm3 = _mm_unpackhi_epi64(xmm0,xmm1); // Im(rho)
-    rho_rpi = _mm_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho)
-    rho_rmi = _mm_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho)
-
-    // divide by sqrt(2)
-    rho_rpi = _mm_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_2);
-    rho_rmi = _mm_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_2);
-    rho_rpi = _mm_slli_epi16(rho_rpi,1);
-    rho_rmi = _mm_slli_epi16(rho_rmi,1);
-
-    // Compute LLR for first bit of stream 0
-
-    // Compute real and imaginary parts of MF output for stream 0
-    xmm0 = stream0_128i_in[i];
-    xmm1 = stream0_128i_in[i+1];
-
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y0r = _mm_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)]
-    y0i = _mm_unpackhi_epi64(xmm0,xmm1);
-
-    // divide by sqrt(2)
-    y0r_over2 = _mm_mulhi_epi16(y0r, ONE_OVER_SQRT_2);
-    y0i_over2 = _mm_mulhi_epi16(y0i, ONE_OVER_SQRT_2);
-    y0r_over2  = _mm_slli_epi16(y0r,1);
-    y0i_over2  = _mm_slli_epi16(y0i,1);
-
-    y0_p_1_1 = _mm_adds_epi16(y0r_over2, y0i_over2);
-    y0_m_1_1 = _mm_subs_epi16(y0r_over2, y0i_over2);
-
-    // Compute real and imaginary parts of MF output for stream 1
-    xmm0 = stream1_128i_in[i];
-    xmm1 = stream1_128i_in[i+1];
-
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
-    y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
-
-    xmm0 = _mm_setzero_si128(); // ZERO
-
-    // compute psi
-    xmm3 = _mm_subs_epi16(y1r,rho_rpi);
-    psi_r_p1_p1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_subs_epi16(y1i,rho_rmi);
-    psi_i_p1_p1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_subs_epi16(y1r,rho_rmi);
-    psi_r_p1_m1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_adds_epi16(y1i,rho_rpi);
-    psi_i_p1_m1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_adds_epi16(y1r,rho_rmi);
-    psi_r_m1_p1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_subs_epi16(y1i,rho_rpi);
-    psi_i_m1_p1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_adds_epi16(y1r,rho_rpi);
-    psi_r_m1_m1 = _mm_abs_epi16(xmm3);
-    xmm3 = _mm_adds_epi16(y1i,rho_rmi);
-    psi_i_m1_m1 = _mm_abs_epi16(xmm3);
-
-    // Rearrange interfering channel magnitudes
-    xmm2 = ch_mag_128i_i[i];
-    xmm3 = ch_mag_128i_i[i+1];
-
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-
-    ch_mag_int = _mm_unpacklo_epi64(xmm2,xmm3);
-    ch_mag_int_with_sigma2       = _mm_srai_epi16(ch_mag_int, 1); // *2
-    two_ch_mag_int_with_sigma2   = ch_mag_int; // *4
-    three_ch_mag_int_with_sigma2 = _mm_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6
-
-    interference_abs_64qam_epi16(psi_r_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-
-    // prodsum
-    prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1);
-    prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1);
-    prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1);
-    prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1);
-
-    // Multiply by sqrt(2)
-    psi_a_p1_p1 = _mm_mulhi_epi16(psi_a_p1_p1, ONE_OVER_SQRT_2);
-    psi_a_p1_p1 = _mm_slli_epi16(psi_a_p1_p1, 2);
-    psi_a_p1_m1 = _mm_mulhi_epi16(psi_a_p1_m1, ONE_OVER_SQRT_2);
-    psi_a_p1_m1 = _mm_slli_epi16(psi_a_p1_m1, 2);
-    psi_a_m1_p1 = _mm_mulhi_epi16(psi_a_m1_p1, ONE_OVER_SQRT_2);
-    psi_a_m1_p1 = _mm_slli_epi16(psi_a_m1_p1, 2);
-    psi_a_m1_m1 = _mm_mulhi_epi16(psi_a_m1_m1, ONE_OVER_SQRT_2);
-    psi_a_m1_m1 = _mm_slli_epi16(psi_a_m1_m1, 2);
-
-    square_a_64qam_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p1);
-    square_a_64qam_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m1);
-    square_a_64qam_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p1);
-    square_a_64qam_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m1);
-
-    // Computing Metrics
-    xmm0 = _mm_subs_epi16(psi_a_p1_p1, a_sq_p1_p1);
-    bit_met_p1_p1 = _mm_adds_epi16(xmm0, y0_p_1_1);
-
-    xmm0 = _mm_subs_epi16(psi_a_p1_m1, a_sq_p1_m1);
-    bit_met_p1_m1 = _mm_adds_epi16(xmm0, y0_m_1_1);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_p1, a_sq_m1_p1);
-    bit_met_m1_p1 = _mm_subs_epi16(xmm0, y0_m_1_1);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_m1, a_sq_m1_m1);
-    bit_met_m1_m1 = _mm_subs_epi16(xmm0, y0_p_1_1);
-
-    // MSB
-    logmax_num_re0 = _mm_max_epi16(bit_met_p1_p1,bit_met_p1_m1); // bit=0
-    logmax_den_re0 = _mm_max_epi16(bit_met_m1_p1,bit_met_m1_m1); // bit=1
-
-    y0r = _mm_subs_epi16(logmax_num_re0,logmax_den_re0);
-
-    // LSB
-    logmax_num_im0 = _mm_max_epi16(bit_met_p1_p1,bit_met_m1_p1); // bit=0
-    logmax_den_im0 = _mm_max_epi16(bit_met_p1_m1,bit_met_m1_m1); // bit=1
-
-    y0i = _mm_subs_epi16(logmax_num_im0,logmax_den_im0);
-
-    stream0_128i_out[i] = _mm_unpacklo_epi16(y0r,y0i); // = [L1(1), L2(1), L1(2), L2(2)]
-
-    if (i<((length>>1) - 1)) // false if only 2 REs remain
-      stream0_128i_out[i+1] = _mm_unpackhi_epi16(y0r,y0i);
-
-#elif defined(__arm__)
-
-#endif
-  }
-
-#if defined(__x86_64__) || defined(__i386__)
-  _mm_empty();
-  _m_empty();
-#endif
-}
-
-
-//----------------------------------------------------------------------------------------------
-// 16-QAM
-//----------------------------------------------------------------------------------------------
-
-/*
-__m128i ONE_OVER_TWO_SQRT_10 __attribute__((aligned(16)));
-__m128i NINE_OVER_TWO_SQRT_10 __attribute__((aligned(16)));
-
-__m128i  y0r_over_sqrt10 __attribute__ ((aligned(16)));
-__m128i  y0i_over_sqrt10 __attribute__ ((aligned(16)));
-__m128i  y0r_three_over_sqrt10 __attribute__ ((aligned(16)));
-__m128i  y0i_three_over_sqrt10 __attribute__ ((aligned(16)));
-
-__m128i ch_mag_des __attribute__((aligned(16)));
-__m128i ch_mag_over_10 __attribute__ ((aligned(16)));
-__m128i ch_mag_over_2 __attribute__ ((aligned(16)));
-__m128i ch_mag_9_over_10 __attribute__ ((aligned(16)));
-*/
-
-void qam16_qpsk(short *stream0_in,
-                short *stream1_in,
-                short *ch_mag,
-                short *stream0_out,
-                short *rho01,
-                int length
-    )
-{
-
-  /*
-    Author: Sebastian Wagner
-    Date: 2012-06-04
-
-    Input:
-    stream0_in:  MF filter for 1st stream, i.e., y0=h0'*y
-    stream!_in:  MF filter for 2nd stream, i.e., y1=h1'*y
-    ch_mag:      2*h0/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    ch_mag_i:    2*h1/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    rho01:       Channel cross correlation, i.e., h1'*h0
-
-    Output:
-    stream0_out: output LLRs for 1st stream
-  */
-
-#if defined(__x86_64__) || defined(__i386__)
-  __m128i *rho01_128i       = (__m128i *)rho01;
-  __m128i *stream0_128i_in  = (__m128i *)stream0_in;
-  __m128i *stream1_128i_in  = (__m128i *)stream1_in;
-  __m128i *stream0_128i_out = (__m128i *)stream0_out;
-  __m128i *ch_mag_128i      = (__m128i *)ch_mag;
-  __m128i ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15)
-  __m128i ONE_OVER_SQRT_10 = _mm_set1_epi16(20724); // round(1/sqrt(10)*2^16)
-  __m128i THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15)
-  __m128i SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15)
-  __m128i ONE_OVER_TWO_SQRT_10 = _mm_set1_epi16(10362); // round(1/2/sqrt(10)*2^16)
-  __m128i NINE_OVER_TWO_SQRT_10 = _mm_set1_epi16(23315); // round(9/2/sqrt(10)*2^14)
-  __m128i  y0r_over_sqrt10;
-  __m128i  y0i_over_sqrt10;
-  __m128i  y0r_three_over_sqrt10;
-  __m128i  y0i_three_over_sqrt10;
-
-  __m128i ch_mag_des;
-  __m128i ch_mag_over_10;
-  __m128i ch_mag_over_2;
-  __m128i ch_mag_9_over_10;
-#elif defined(__arm__)
-
-#endif
-
-  int i;
-
-
-  for (i=0; i<length>>2; i+=2) {
-    // In one iteration, we deal with 8 REs
-
-#if defined(__x86_64__) || defined(__i386__)
-    // Get rho
-    xmm0 = rho01_128i[i];
-    xmm1 = rho01_128i[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    xmm2 = _mm_unpacklo_epi64(xmm0,xmm1); // Re(rho)
-    xmm3 = _mm_unpackhi_epi64(xmm0,xmm1); // Im(rho)
-    rho_rpi = _mm_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho)
-    rho_rmi = _mm_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho)
-
-    // Compute the different rhos
-    rho_rpi_1_1 = _mm_mulhi_epi16(rho_rpi,ONE_OVER_SQRT_10);
-    rho_rmi_1_1 = _mm_mulhi_epi16(rho_rmi,ONE_OVER_SQRT_10);
-    rho_rpi_3_3 = _mm_mulhi_epi16(rho_rpi,THREE_OVER_SQRT_10);
-    rho_rmi_3_3 = _mm_mulhi_epi16(rho_rmi,THREE_OVER_SQRT_10);
-    rho_rpi_3_3 = _mm_slli_epi16(rho_rpi_3_3,1);
-    rho_rmi_3_3 = _mm_slli_epi16(rho_rmi_3_3,1);
-
-    xmm4 = _mm_mulhi_epi16(xmm2,ONE_OVER_SQRT_10); // Re(rho)
-    xmm5 = _mm_mulhi_epi16(xmm3,THREE_OVER_SQRT_10); // Im(rho)
-    xmm5 = _mm_slli_epi16(xmm5,1);
-
-    rho_rpi_1_3 = _mm_adds_epi16(xmm4,xmm5);
-    rho_rmi_1_3 = _mm_subs_epi16(xmm4,xmm5);
-
-    xmm6 = _mm_mulhi_epi16(xmm2,THREE_OVER_SQRT_10); // Re(rho)
-    xmm7 = _mm_mulhi_epi16(xmm3,ONE_OVER_SQRT_10); // Im(rho)
-    xmm6 = _mm_slli_epi16(xmm6,1);
-
-    rho_rpi_3_1 = _mm_adds_epi16(xmm6,xmm7);
-    rho_rmi_3_1 = _mm_subs_epi16(xmm6,xmm7);
-
-    // Rearrange interfering MF output
-    xmm0 = stream1_128i_in[i];
-    xmm1 = stream1_128i_in[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
-    y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
-
-    xmm0 = _mm_setzero_si128(); // ZERO
-    xmm2 = _mm_subs_epi16(rho_rpi_1_1,y1r); // = [Re(rho)+ Im(rho)]/sqrt(10) - y1r
-    psi_r_p1_p1 = _mm_abs_epi16(xmm2); // = |[Re(rho)+ Im(rho)]/sqrt(10) - y1r|
-
-    xmm2= _mm_subs_epi16(rho_rmi_1_1,y1r);
-    psi_r_p1_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_1_1,y1i);
-    psi_i_p1_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_1_3,y1r);
-    psi_r_p1_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_1_3,y1r);
-    psi_r_p1_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_3_1,y1i);
-    psi_i_p1_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_3_1,y1r);
-    psi_r_p3_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_3_1,y1r);
-    psi_r_p3_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_1_3,y1i);
-    psi_i_p3_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_3_3,y1r);
-    psi_r_p3_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_3_3,y1r);
-    psi_r_p3_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_3_3,y1i);
-    psi_i_p3_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_1_1,y1i);
-    psi_i_m1_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_3_1,y1i);
-    psi_i_m1_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_1_3,y1i);
-    psi_i_m3_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_3_3,y1i);
-    psi_i_m3_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_1_1,y1i);
-    psi_i_p1_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_3_1,y1i);
-    psi_i_p1_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_1_3,y1i);
-    psi_i_p3_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_3_3,y1i);
-    psi_i_p3_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_1_1,y1r);
-    psi_r_m1_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_1_3,y1r);
-    psi_r_m1_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_3_1,y1r);
-    psi_r_m3_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_3_3,y1r);
-    psi_r_m3_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1r,rho_rmi_1_1);
-    psi_r_m1_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1r,rho_rmi_1_3);
-    psi_r_m1_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1i,rho_rmi_1_1);
-    psi_i_m1_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1i,rho_rmi_3_1);
-    psi_i_m1_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1r,rho_rmi_3_1);
-    psi_r_m3_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1r,rho_rmi_3_3);
-    psi_r_m3_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1i,rho_rmi_1_3);
-    psi_i_m3_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1i,rho_rmi_3_3);
-    psi_i_m3_m3 = _mm_abs_epi16(xmm2);
-
-    // Rearrange desired MF output
-    xmm0 = stream0_128i_in[i];
-    xmm1 = stream0_128i_in[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y0r = _mm_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)]
-    y0i = _mm_unpackhi_epi64(xmm0,xmm1);
-
-    // Rearrange desired channel magnitudes
-    xmm2 = ch_mag_128i[i]; // = [|h|^2(1),|h|^2(1),|h|^2(2),|h|^2(2)]*(2/sqrt(10))
-    xmm3 = ch_mag_128i[i+1]; // = [|h|^2(3),|h|^2(3),|h|^2(4),|h|^2(4)]*(2/sqrt(10))
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-
-    ch_mag_des = _mm_unpacklo_epi64(xmm2,xmm3); // = [|h|^2(1),|h|^2(2),|h|^2(3),|h|^2(4)]*(2/sqrt(10))
-
-    // Scale MF output of desired signal
-    y0r_over_sqrt10 = _mm_mulhi_epi16(y0r,ONE_OVER_SQRT_10);
-    y0i_over_sqrt10 = _mm_mulhi_epi16(y0i,ONE_OVER_SQRT_10);
-    y0r_three_over_sqrt10 = _mm_mulhi_epi16(y0r,THREE_OVER_SQRT_10);
-    y0i_three_over_sqrt10 = _mm_mulhi_epi16(y0i,THREE_OVER_SQRT_10);
-    y0r_three_over_sqrt10 = _mm_slli_epi16(y0r_three_over_sqrt10,1);
-    y0i_three_over_sqrt10 = _mm_slli_epi16(y0i_three_over_sqrt10,1);
-
-    // Compute necessary combination of required terms
-    y0_p_1_1 = _mm_adds_epi16(y0r_over_sqrt10,y0i_over_sqrt10);
-    y0_m_1_1 = _mm_subs_epi16(y0r_over_sqrt10,y0i_over_sqrt10);
-
-    y0_p_1_3 = _mm_adds_epi16(y0r_over_sqrt10,y0i_three_over_sqrt10);
-    y0_m_1_3 = _mm_subs_epi16(y0r_over_sqrt10,y0i_three_over_sqrt10);
-
-    y0_p_3_1 = _mm_adds_epi16(y0r_three_over_sqrt10,y0i_over_sqrt10);
-    y0_m_3_1 = _mm_subs_epi16(y0r_three_over_sqrt10,y0i_over_sqrt10);
-
-    y0_p_3_3 = _mm_adds_epi16(y0r_three_over_sqrt10,y0i_three_over_sqrt10);
-    y0_m_3_3 = _mm_subs_epi16(y0r_three_over_sqrt10,y0i_three_over_sqrt10);
-
-    // Add psi
-    psi_a_p1_p1 = _mm_adds_epi16(psi_r_p1_p1 ,psi_i_p1_p1);
-    psi_a_p1_p3 = _mm_adds_epi16(psi_r_p1_p3 ,psi_i_p1_p3);
-    psi_a_p3_p1 = _mm_adds_epi16(psi_r_p3_p1 ,psi_i_p3_p1);
-    psi_a_p3_p3 = _mm_adds_epi16(psi_r_p3_p3 ,psi_i_p3_p3);
-    psi_a_p1_m1 = _mm_adds_epi16(psi_r_p1_m1 ,psi_i_p1_m1);
-    psi_a_p1_m3 = _mm_adds_epi16(psi_r_p1_m3 ,psi_i_p1_m3);
-    psi_a_p3_m1 = _mm_adds_epi16(psi_r_p3_m1 ,psi_i_p3_m1);
-    psi_a_p3_m3 = _mm_adds_epi16(psi_r_p3_m3 ,psi_i_p3_m3);
-    psi_a_m1_p1 = _mm_adds_epi16(psi_r_m1_p1 ,psi_i_m1_p1);
-    psi_a_m1_p3 = _mm_adds_epi16(psi_r_m1_p3 ,psi_i_m1_p3);
-    psi_a_m3_p1 = _mm_adds_epi16(psi_r_m3_p1 ,psi_i_m3_p1);
-    psi_a_m3_p3 = _mm_adds_epi16(psi_r_m3_p3 ,psi_i_m3_p3);
-    psi_a_m1_m1 = _mm_adds_epi16(psi_r_m1_m1 ,psi_i_m1_m1);
-    psi_a_m1_m3 = _mm_adds_epi16(psi_r_m1_m3 ,psi_i_m1_m3);
-    psi_a_m3_m1 = _mm_adds_epi16(psi_r_m3_m1 ,psi_i_m3_m1);
-    psi_a_m3_m3 = _mm_adds_epi16(psi_r_m3_m3 ,psi_i_m3_m3);
-
-    // scale by sqrt(2)
-    psi_a_p1_p1 = _mm_mulhi_epi16(psi_a_p1_p1,ONE_OVER_SQRT_2);
-    psi_a_p1_p1 = _mm_slli_epi16(psi_a_p1_p1,1);
-    psi_a_p1_p3 = _mm_mulhi_epi16(psi_a_p1_p3,ONE_OVER_SQRT_2);
-    psi_a_p1_p3 = _mm_slli_epi16(psi_a_p1_p3,1);
-    psi_a_p3_p1 = _mm_mulhi_epi16(psi_a_p3_p1,ONE_OVER_SQRT_2);
-    psi_a_p3_p1 = _mm_slli_epi16(psi_a_p3_p1,1);
-    psi_a_p3_p3 = _mm_mulhi_epi16(psi_a_p3_p3,ONE_OVER_SQRT_2);
-    psi_a_p3_p3 = _mm_slli_epi16(psi_a_p3_p3,1);
-
-    psi_a_p1_m1 = _mm_mulhi_epi16(psi_a_p1_m1,ONE_OVER_SQRT_2);
-    psi_a_p1_m1 = _mm_slli_epi16(psi_a_p1_m1,1);
-    psi_a_p1_m3 = _mm_mulhi_epi16(psi_a_p1_m3,ONE_OVER_SQRT_2);
-    psi_a_p1_m3 = _mm_slli_epi16(psi_a_p1_m3,1);
-    psi_a_p3_m1 = _mm_mulhi_epi16(psi_a_p3_m1,ONE_OVER_SQRT_2);
-    psi_a_p3_m1 = _mm_slli_epi16(psi_a_p3_m1,1);
-    psi_a_p3_m3 = _mm_mulhi_epi16(psi_a_p3_m3,ONE_OVER_SQRT_2);
-    psi_a_p3_m3 = _mm_slli_epi16(psi_a_p3_m3,1);
-
-    psi_a_m1_p1 = _mm_mulhi_epi16(psi_a_m1_p1,ONE_OVER_SQRT_2);
-    psi_a_m1_p1 = _mm_slli_epi16(psi_a_m1_p1,1);
-    psi_a_m1_p3 = _mm_mulhi_epi16(psi_a_m1_p3,ONE_OVER_SQRT_2);
-    psi_a_m1_p3 = _mm_slli_epi16(psi_a_m1_p3,1);
-    psi_a_m3_p1 = _mm_mulhi_epi16(psi_a_m3_p1,ONE_OVER_SQRT_2);
-    psi_a_m3_p1 = _mm_slli_epi16(psi_a_m3_p1,1);
-    psi_a_m3_p3 = _mm_mulhi_epi16(psi_a_m3_p3,ONE_OVER_SQRT_2);
-    psi_a_m3_p3 = _mm_slli_epi16(psi_a_m3_p3,1);
-
-    psi_a_m1_m1 = _mm_mulhi_epi16(psi_a_m1_m1,ONE_OVER_SQRT_2);
-    psi_a_m1_m1 = _mm_slli_epi16(psi_a_m1_m1,1);
-    psi_a_m1_m3 = _mm_mulhi_epi16(psi_a_m1_m3,ONE_OVER_SQRT_2);
-    psi_a_m1_m3 = _mm_slli_epi16(psi_a_m1_m3,1);
-    psi_a_m3_m1 = _mm_mulhi_epi16(psi_a_m3_m1,ONE_OVER_SQRT_2);
-    psi_a_m3_m1 = _mm_slli_epi16(psi_a_m3_m1,1);
-    psi_a_m3_m3 = _mm_mulhi_epi16(psi_a_m3_m3,ONE_OVER_SQRT_2);
-    psi_a_m3_m3 = _mm_slli_epi16(psi_a_m3_m3,1);
-
-    // Computing different multiples of channel norms
-    ch_mag_over_10=_mm_mulhi_epi16(ch_mag_des, ONE_OVER_TWO_SQRT_10);
-    ch_mag_over_2=_mm_mulhi_epi16(ch_mag_des, SQRT_10_OVER_FOUR);
-    ch_mag_over_2=_mm_slli_epi16(ch_mag_over_2, 1);
-    ch_mag_9_over_10=_mm_mulhi_epi16(ch_mag_des, NINE_OVER_TWO_SQRT_10);
-    ch_mag_9_over_10=_mm_slli_epi16(ch_mag_9_over_10, 2);
-
-    // Computing Metrics
-    xmm1 = _mm_adds_epi16(psi_a_p1_p1, y0_p_1_1);
-    bit_met_p1_p1= _mm_subs_epi16(xmm1, ch_mag_over_10);
-
-    xmm1 = _mm_adds_epi16(psi_a_p1_p3, y0_p_1_3);
-    bit_met_p1_p3= _mm_subs_epi16(xmm1, ch_mag_over_2);
-
-    xmm1 = _mm_adds_epi16(psi_a_p1_m1, y0_m_1_1);
-    bit_met_p1_m1= _mm_subs_epi16(xmm1, ch_mag_over_10);
-
-    xmm1 = _mm_adds_epi16(psi_a_p1_m3, y0_m_1_3);
-    bit_met_p1_m3= _mm_subs_epi16(xmm1, ch_mag_over_2);
-
-    xmm1 = _mm_adds_epi16(psi_a_p3_p1, y0_p_3_1);
-    bit_met_p3_p1= _mm_subs_epi16(xmm1, ch_mag_over_2);
-
-    xmm1 = _mm_adds_epi16(psi_a_p3_p3, y0_p_3_3);
-    bit_met_p3_p3= _mm_subs_epi16(xmm1, ch_mag_9_over_10);
-
-    xmm1 = _mm_adds_epi16(psi_a_p3_m1, y0_m_3_1);
-    bit_met_p3_m1= _mm_subs_epi16(xmm1, ch_mag_over_2);
-
-    xmm1 = _mm_adds_epi16(psi_a_p3_m3, y0_m_3_3);
-    bit_met_p3_m3= _mm_subs_epi16(xmm1, ch_mag_9_over_10);
-
-    xmm1 = _mm_subs_epi16(psi_a_m1_p1, y0_m_1_1);
-    bit_met_m1_p1= _mm_subs_epi16(xmm1, ch_mag_over_10);
-
-    xmm1 = _mm_subs_epi16(psi_a_m1_p3, y0_m_1_3);
-    bit_met_m1_p3= _mm_subs_epi16(xmm1, ch_mag_over_2);
-
-    xmm1 = _mm_subs_epi16(psi_a_m1_m1, y0_p_1_1);
-    bit_met_m1_m1= _mm_subs_epi16(xmm1, ch_mag_over_10);
-
-    xmm1 = _mm_subs_epi16(psi_a_m1_m3, y0_p_1_3);
-    bit_met_m1_m3= _mm_subs_epi16(xmm1, ch_mag_over_2);
-
-    xmm1 = _mm_subs_epi16(psi_a_m3_p1, y0_m_3_1);
-    bit_met_m3_p1= _mm_subs_epi16(xmm1, ch_mag_over_2);
-
-    xmm1 = _mm_subs_epi16(psi_a_m3_p3, y0_m_3_3);
-    bit_met_m3_p3= _mm_subs_epi16(xmm1, ch_mag_9_over_10);
-
-    xmm1 = _mm_subs_epi16(psi_a_m3_m1, y0_p_3_1);
-    bit_met_m3_m1= _mm_subs_epi16(xmm1, ch_mag_over_2);
-
-    xmm1 = _mm_subs_epi16(psi_a_m3_m3, y0_p_3_3);
-    bit_met_m3_m3= _mm_subs_epi16(xmm1, ch_mag_9_over_10);
-
-    // LLR of the first bit
-    // Bit = 1
-    xmm0 = _mm_max_epi16(bit_met_m1_p1,bit_met_m1_p3);
-    xmm1 = _mm_max_epi16(bit_met_m1_m1,bit_met_m1_m3);
-    xmm2 = _mm_max_epi16(bit_met_m3_p1,bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m3_m1,bit_met_m3_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_num_re0= _mm_max_epi16(xmm4,xmm5);
-
-    // Bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p1_p1,bit_met_p1_p3);
-    xmm1 = _mm_max_epi16(bit_met_p1_m1,bit_met_p1_m3);
-    xmm2 = _mm_max_epi16(bit_met_p3_p1,bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_p3_m1,bit_met_p3_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4,xmm5);
-
-    // LLR of first bit [L1(1), L1(2), L1(3), L1(4), L1(5), L1(6), L1(7), L1(8)]
-    y0r = _mm_subs_epi16(logmax_den_re0,logmax_num_re0);
-
-    // LLR of the second bit
-    // Bit = 1
-    xmm0 = _mm_max_epi16(bit_met_p1_m1,bit_met_p3_m1);
-    xmm1 = _mm_max_epi16(bit_met_m1_m1,bit_met_m3_m1);
-    xmm2 = _mm_max_epi16(bit_met_p1_m3,bit_met_p3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m1_m3,bit_met_m3_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_num_re1 = _mm_max_epi16(xmm4,xmm5);
-
-    // Bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p1_p1,bit_met_p3_p1);
-    xmm1 = _mm_max_epi16(bit_met_m1_p1,bit_met_m3_p1);
-    xmm2 = _mm_max_epi16(bit_met_p1_p3,bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m1_p3,bit_met_m3_p3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_den_re1 = _mm_max_epi16(xmm4,xmm5);
-
-    // LLR of second bit [L2(1), L2(2), L2(3), L2(4)]
-    y1r = _mm_subs_epi16(logmax_den_re1,logmax_num_re1);
-
-    // LLR of the third bit
-    // Bit = 1
-    xmm0 = _mm_max_epi16(bit_met_m3_p1,bit_met_m3_p3);
-    xmm1 = _mm_max_epi16(bit_met_m3_m1,bit_met_m3_m3);
-    xmm2 = _mm_max_epi16(bit_met_p3_p1,bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_p3_m1,bit_met_p3_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_num_im0 = _mm_max_epi16(xmm4,xmm5);
-
-    // Bit = 0
-    xmm0 = _mm_max_epi16(bit_met_m1_p1,bit_met_m1_p3);
-    xmm1 = _mm_max_epi16(bit_met_m1_m1,bit_met_m1_m3);
-    xmm2 = _mm_max_epi16(bit_met_p1_p1,bit_met_p1_p3);
-    xmm3 = _mm_max_epi16(bit_met_p1_m1,bit_met_p1_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_den_im0 = _mm_max_epi16(xmm4,xmm5);
-
-    // LLR of third bit [L3(1), L3(2), L3(3), L3(4)]
-    y0i = _mm_subs_epi16(logmax_den_im0,logmax_num_im0);
-
-    // LLR of the fourth bit
-    // Bit = 1
-    xmm0 = _mm_max_epi16(bit_met_p1_m3,bit_met_p3_m3);
-    xmm1 = _mm_max_epi16(bit_met_m1_m3,bit_met_m3_m3);
-    xmm2 = _mm_max_epi16(bit_met_p1_p3,bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m1_p3,bit_met_m3_p3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_num_im1 = _mm_max_epi16(xmm4,xmm5);
-
-    // Bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p1_m1,bit_met_p3_m1);
-    xmm1 = _mm_max_epi16(bit_met_m1_m1,bit_met_m3_m1);
-    xmm2 = _mm_max_epi16(bit_met_p1_p1,bit_met_p3_p1);
-    xmm3 = _mm_max_epi16(bit_met_m1_p1,bit_met_m3_p1);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_den_im1 = _mm_max_epi16(xmm4,xmm5);
-
-    // LLR of fourth bit [L4(1), L4(2), L4(3), L4(4)]
-    y1i = _mm_subs_epi16(logmax_den_im1,logmax_num_im1);
-
-    // Pack LLRs in output
-    // [L1(1), L2(1), L1(2), L2(2), L1(3), L2(3), L1(4), L2(4)]
-    xmm0 = _mm_unpacklo_epi16(y0r,y1r);
-    // [L1(5), L2(5), L1(6), L2(6), L1(7), L2(7), L1(8), L2(8)]
-    xmm1 = _mm_unpackhi_epi16(y0r,y1r);
-    // [L3(1), L4(1), L3(2), L4(2), L3(3), L4(3), L3(4), L4(4)]
-    xmm2 = _mm_unpacklo_epi16(y0i,y1i);
-    // [L3(5), L4(5), L3(6), L4(6), L3(7), L4(7), L3(8), L4(8)]
-    xmm3 = _mm_unpackhi_epi16(y0i,y1i);
-
-    stream0_128i_out[2*i+0] = _mm_unpacklo_epi32(xmm0,xmm2); // 8LLRs, 2REs
-    stream0_128i_out[2*i+1] = _mm_unpackhi_epi32(xmm0,xmm2);
-    stream0_128i_out[2*i+2] = _mm_unpacklo_epi32(xmm1,xmm3);
-    stream0_128i_out[2*i+3] = _mm_unpackhi_epi32(xmm1,xmm3);
-
-#elif defined(__arm__)
-
-#endif
-  }
-
-#if defined(__x86_64__) || defined(__i386__)
-  _mm_empty();
-  _m_empty();
-#endif
-
-}
-
-int dlsch_16qam_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
-                         int32_t **rxdataF_comp,
-                         int32_t **rxdataF_comp_i,
-                         int32_t **dl_ch_mag,   //|h_0|^2*(2/sqrt{10})
-                         int32_t **rho_i,
-                         int16_t *dlsch_llr,
-                         uint8_t symbol,
-                         uint8_t first_symbol_flag,
-                         uint16_t nb_rb,
-                         uint16_t pbch_pss_sss_adjust,
-                         int16_t **llr16p)
-{
-
-  int16_t *rxF      = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rxF_i    = (int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *ch_mag   = (int16_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rho      = (int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *llr16;
-  int len;
-  uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
-
-  // first symbol has different structure due to more pilots
-  if (first_symbol_flag == 1) {
-    llr16 = (int16_t*)dlsch_llr;
-  } else {
-    llr16 = (int16_t*)(*llr16p);
-  }
-
-  AssertFatal(llr16!=NULL,"dlsch_16qam_qpsk_llr: llr is null, symbol %d\n",symbol);
-
-  if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-    // if symbol has pilots
-    if (frame_parms->nb_antenna_ports_eNB!=1)
-      // in 2 antenna ports we have 8 REs per symbol per RB
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-    else
-      // for 1 antenna port we have 10 REs per symbol per RB
-      len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
-  } else {
-    // symbol has no pilots
-    len = (nb_rb*12) - pbch_pss_sss_adjust;
-  }
-
-  // printf("symbol %d: qam16_llr, len %d (llr16 %p)\n",symbol,len,llr16);
-
-  qam16_qpsk((short *)rxF,
-             (short *)rxF_i,
-             (short *)ch_mag,
-             (short *)llr16,
-             (short *)rho,
-             len);
-
-  llr16 += (len<<2);
-  *llr16p = (short *)llr16;
-
-  return(0);
-}
-
-void qam16_qam16(short *stream0_in,
-                 short *stream1_in,
-                 short *ch_mag,
-                 short *ch_mag_i,
-                 short *stream0_out,
-                 short *rho01,
-                 int length
-     )
-{
-
-  /*
-    Author: Sebastian Wagner
-    Date: 2012-06-04
-
-    Input:
-    stream0_in:  MF filter for 1st stream, i.e., y0=h0'*y
-    stream!_in:  MF filter for 2nd stream, i.e., y1=h1'*y
-    ch_mag:      2*h0/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    ch_mag_i:    2*h1/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    rho01:       Channel cross correlation, i.e., h1'*h0
-
-    Output:
-    stream0_out: output LLRs for 1st stream
-  */
-#if defined(__x86_64__) || defined(__i386__)
-  __m128i *rho01_128i       = (__m128i *)rho01;
-  __m128i *stream0_128i_in  = (__m128i *)stream0_in;
-  __m128i *stream1_128i_in  = (__m128i *)stream1_in;
-  __m128i *stream0_128i_out = (__m128i *)stream0_out;
-  __m128i *ch_mag_128i      = (__m128i *)ch_mag;
-  __m128i *ch_mag_128i_i    = (__m128i *)ch_mag_i;
-
-
-
-  __m128i ONE_OVER_SQRT_10 = _mm_set1_epi16(20724); // round(1/sqrt(10)*2^16)
-  __m128i ONE_OVER_SQRT_10_Q15 = _mm_set1_epi16(10362); // round(1/sqrt(10)*2^15)
-  __m128i THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15)
-  __m128i SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15)
-  __m128i ONE_OVER_TWO_SQRT_10 = _mm_set1_epi16(10362); // round(1/2/sqrt(10)*2^16)
-  __m128i NINE_OVER_TWO_SQRT_10 = _mm_set1_epi16(23315); // round(9/2/sqrt(10)*2^14)
-  __m128i ch_mag_des,ch_mag_int;
-  __m128i  y0r_over_sqrt10;
-  __m128i  y0i_over_sqrt10;
-  __m128i  y0r_three_over_sqrt10;
-  __m128i  y0i_three_over_sqrt10;
-  __m128i ch_mag_over_10;
-  __m128i ch_mag_over_2;
-  __m128i ch_mag_9_over_10;
-#elif defined(__arm__)
-
-#endif
-
-  int i;
-
-  for (i=0; i<length>>2; i+=2) {
-    // In one iteration, we deal with 8 REs
-
-#if defined(__x86_64__) || defined(__i386__)
-    // Get rho
-    xmm0 = rho01_128i[i];
-    xmm1 = rho01_128i[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    xmm2 = _mm_unpacklo_epi64(xmm0,xmm1); // Re(rho)
-    xmm3 = _mm_unpackhi_epi64(xmm0,xmm1); // Im(rho)
-    rho_rpi = _mm_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho)
-    rho_rmi = _mm_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho)
-
-    // Compute the different rhos
-    rho_rpi_1_1 = _mm_mulhi_epi16(rho_rpi,ONE_OVER_SQRT_10);
-    rho_rmi_1_1 = _mm_mulhi_epi16(rho_rmi,ONE_OVER_SQRT_10);
-    rho_rpi_3_3 = _mm_mulhi_epi16(rho_rpi,THREE_OVER_SQRT_10);
-    rho_rmi_3_3 = _mm_mulhi_epi16(rho_rmi,THREE_OVER_SQRT_10);
-    rho_rpi_3_3 = _mm_slli_epi16(rho_rpi_3_3,1);
-    rho_rmi_3_3 = _mm_slli_epi16(rho_rmi_3_3,1);
-
-    xmm4 = _mm_mulhi_epi16(xmm2,ONE_OVER_SQRT_10); // Re(rho)
-    xmm5 = _mm_mulhi_epi16(xmm3,THREE_OVER_SQRT_10); // Im(rho)
-    xmm5 = _mm_slli_epi16(xmm5,1);
-
-    rho_rpi_1_3 = _mm_adds_epi16(xmm4,xmm5);
-    rho_rmi_1_3 = _mm_subs_epi16(xmm4,xmm5);
-
-    xmm6 = _mm_mulhi_epi16(xmm2,THREE_OVER_SQRT_10); // Re(rho)
-    xmm7 = _mm_mulhi_epi16(xmm3,ONE_OVER_SQRT_10); // Im(rho)
-    xmm6 = _mm_slli_epi16(xmm6,1);
-
-    rho_rpi_3_1 = _mm_adds_epi16(xmm6,xmm7);
-    rho_rmi_3_1 = _mm_subs_epi16(xmm6,xmm7);
-
-    // Rearrange interfering MF output
-    xmm0 = stream1_128i_in[i];
-    xmm1 = stream1_128i_in[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
-    y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
-
-    xmm0 = _mm_setzero_si128(); // ZERO
-    xmm2 = _mm_subs_epi16(rho_rpi_1_1,y1r); // = [Re(rho)+ Im(rho)]/sqrt(10) - y1r
-    psi_r_p1_p1 = _mm_abs_epi16(xmm2); // = |[Re(rho)+ Im(rho)]/sqrt(10) - y1r|
-
-    xmm2= _mm_subs_epi16(rho_rmi_1_1,y1r);
-    psi_r_p1_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_1_1,y1i);
-    psi_i_p1_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_1_3,y1r);
-    psi_r_p1_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_1_3,y1r);
-    psi_r_p1_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_3_1,y1i);
-    psi_i_p1_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_3_1,y1r);
-    psi_r_p3_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_3_1,y1r);
-    psi_r_p3_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_1_3,y1i);
-    psi_i_p3_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_3_3,y1r);
-    psi_r_p3_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_3_3,y1r);
-    psi_r_p3_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_3_3,y1i);
-    psi_i_p3_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_1_1,y1i);
-    psi_i_m1_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_3_1,y1i);
-    psi_i_m1_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_1_3,y1i);
-    psi_i_m3_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_3_3,y1i);
-    psi_i_m3_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_1_1,y1i);
-    psi_i_p1_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_3_1,y1i);
-    psi_i_p1_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_1_3,y1i);
-    psi_i_p3_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_3_3,y1i);
-    psi_i_p3_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_1_1,y1r);
-    psi_r_m1_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_1_3,y1r);
-    psi_r_m1_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_3_1,y1r);
-    psi_r_m3_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_3_3,y1r);
-    psi_r_m3_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1r,rho_rmi_1_1);
-    psi_r_m1_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1r,rho_rmi_1_3);
-    psi_r_m1_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1i,rho_rmi_1_1);
-    psi_i_m1_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1i,rho_rmi_3_1);
-    psi_i_m1_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1r,rho_rmi_3_1);
-    psi_r_m3_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1r,rho_rmi_3_3);
-    psi_r_m3_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1i,rho_rmi_1_3);
-    psi_i_m3_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1i,rho_rmi_3_3);
-    psi_i_m3_m3 = _mm_abs_epi16(xmm2);
-
-    // Rearrange desired MF output
-    xmm0 = stream0_128i_in[i];
-    xmm1 = stream0_128i_in[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y0r = _mm_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)]
-    y0i = _mm_unpackhi_epi64(xmm0,xmm1);
-
-    // Rearrange desired channel magnitudes
-    xmm2 = ch_mag_128i[i]; // = [|h|^2(1),|h|^2(1),|h|^2(2),|h|^2(2)]*(2/sqrt(10))
-    xmm3 = ch_mag_128i[i+1]; // = [|h|^2(3),|h|^2(3),|h|^2(4),|h|^2(4)]*(2/sqrt(10))
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-
-    ch_mag_des = _mm_unpacklo_epi64(xmm2,xmm3); // = [|h|^2(1),|h|^2(2),|h|^2(3),|h|^2(4)]*(2/sqrt(10))
-
-    // Rearrange interfering channel magnitudes
-    xmm2 = ch_mag_128i_i[i];
-    xmm3 = ch_mag_128i_i[i+1];
-
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-
-    ch_mag_int  = _mm_unpacklo_epi64(xmm2,xmm3);
-
-    // Scale MF output of desired signal
-    y0r_over_sqrt10 = _mm_mulhi_epi16(y0r,ONE_OVER_SQRT_10);
-    y0i_over_sqrt10 = _mm_mulhi_epi16(y0i,ONE_OVER_SQRT_10);
-    y0r_three_over_sqrt10 = _mm_mulhi_epi16(y0r,THREE_OVER_SQRT_10);
-    y0i_three_over_sqrt10 = _mm_mulhi_epi16(y0i,THREE_OVER_SQRT_10);
-    y0r_three_over_sqrt10 = _mm_slli_epi16(y0r_three_over_sqrt10,1);
-    y0i_three_over_sqrt10 = _mm_slli_epi16(y0i_three_over_sqrt10,1);
-
-    // Compute necessary combination of required terms
-    y0_p_1_1 = _mm_adds_epi16(y0r_over_sqrt10,y0i_over_sqrt10);
-    y0_m_1_1 = _mm_subs_epi16(y0r_over_sqrt10,y0i_over_sqrt10);
-
-    y0_p_1_3 = _mm_adds_epi16(y0r_over_sqrt10,y0i_three_over_sqrt10);
-    y0_m_1_3 = _mm_subs_epi16(y0r_over_sqrt10,y0i_three_over_sqrt10);
-
-    y0_p_3_1 = _mm_adds_epi16(y0r_three_over_sqrt10,y0i_over_sqrt10);
-    y0_m_3_1 = _mm_subs_epi16(y0r_three_over_sqrt10,y0i_over_sqrt10);
-
-    y0_p_3_3 = _mm_adds_epi16(y0r_three_over_sqrt10,y0i_three_over_sqrt10);
-    y0_m_3_3 = _mm_subs_epi16(y0r_three_over_sqrt10,y0i_three_over_sqrt10);
-
-    // Compute optimal interfering symbol magnitude
-    interference_abs_epi16(psi_r_p1_p1 ,ch_mag_int,a_r_p1_p1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_p1 ,ch_mag_int,a_i_p1_p1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_p3 ,ch_mag_int,a_r_p1_p3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_p3 ,ch_mag_int,a_i_p1_p3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_m1 ,ch_mag_int,a_r_p1_m1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_m1 ,ch_mag_int,a_i_p1_m1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_m3 ,ch_mag_int,a_r_p1_m3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_m3 ,ch_mag_int,a_i_p1_m3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_p1 ,ch_mag_int,a_r_p3_p1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_p1 ,ch_mag_int,a_i_p3_p1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_p3 ,ch_mag_int,a_r_p3_p3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_p3 ,ch_mag_int,a_i_p3_p3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_m1 ,ch_mag_int,a_r_p3_m1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_m1 ,ch_mag_int,a_i_p3_m1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_m3 ,ch_mag_int,a_r_p3_m3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_m3 ,ch_mag_int,a_i_p3_m3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_p1 ,ch_mag_int,a_r_m1_p1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_p1 ,ch_mag_int,a_i_m1_p1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_p3 ,ch_mag_int,a_r_m1_p3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_p3 ,ch_mag_int,a_i_m1_p3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_m1 ,ch_mag_int,a_r_m1_m1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_m1 ,ch_mag_int,a_i_m1_m1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_m3 ,ch_mag_int,a_r_m1_m3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_m3 ,ch_mag_int,a_i_m1_m3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_p1 ,ch_mag_int,a_r_m3_p1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_p1 ,ch_mag_int,a_i_m3_p1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_p3 ,ch_mag_int,a_r_m3_p3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_p3 ,ch_mag_int,a_i_m3_p3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_m1 ,ch_mag_int,a_r_m3_m1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_m1 ,ch_mag_int,a_i_m3_m1,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_m3 ,ch_mag_int,a_r_m3_m3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_m3 ,ch_mag_int,a_i_m3_m3,ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-
-    // Calculation of groups of two terms in the bit metric involving product of psi and interference magnitude
-    prodsum_psi_a_epi16(psi_r_p1_p1,a_r_p1_p1,psi_i_p1_p1,a_i_p1_p1,psi_a_p1_p1);
-    prodsum_psi_a_epi16(psi_r_p1_p3,a_r_p1_p3,psi_i_p1_p3,a_i_p1_p3,psi_a_p1_p3);
-    prodsum_psi_a_epi16(psi_r_p3_p1,a_r_p3_p1,psi_i_p3_p1,a_i_p3_p1,psi_a_p3_p1);
-    prodsum_psi_a_epi16(psi_r_p3_p3,a_r_p3_p3,psi_i_p3_p3,a_i_p3_p3,psi_a_p3_p3);
-    prodsum_psi_a_epi16(psi_r_p1_m1,a_r_p1_m1,psi_i_p1_m1,a_i_p1_m1,psi_a_p1_m1);
-    prodsum_psi_a_epi16(psi_r_p1_m3,a_r_p1_m3,psi_i_p1_m3,a_i_p1_m3,psi_a_p1_m3);
-    prodsum_psi_a_epi16(psi_r_p3_m1,a_r_p3_m1,psi_i_p3_m1,a_i_p3_m1,psi_a_p3_m1);
-    prodsum_psi_a_epi16(psi_r_p3_m3,a_r_p3_m3,psi_i_p3_m3,a_i_p3_m3,psi_a_p3_m3);
-    prodsum_psi_a_epi16(psi_r_m1_p1,a_r_m1_p1,psi_i_m1_p1,a_i_m1_p1,psi_a_m1_p1);
-    prodsum_psi_a_epi16(psi_r_m1_p3,a_r_m1_p3,psi_i_m1_p3,a_i_m1_p3,psi_a_m1_p3);
-    prodsum_psi_a_epi16(psi_r_m3_p1,a_r_m3_p1,psi_i_m3_p1,a_i_m3_p1,psi_a_m3_p1);
-    prodsum_psi_a_epi16(psi_r_m3_p3,a_r_m3_p3,psi_i_m3_p3,a_i_m3_p3,psi_a_m3_p3);
-    prodsum_psi_a_epi16(psi_r_m1_m1,a_r_m1_m1,psi_i_m1_m1,a_i_m1_m1,psi_a_m1_m1);
-    prodsum_psi_a_epi16(psi_r_m1_m3,a_r_m1_m3,psi_i_m1_m3,a_i_m1_m3,psi_a_m1_m3);
-    prodsum_psi_a_epi16(psi_r_m3_m1,a_r_m3_m1,psi_i_m3_m1,a_i_m3_m1,psi_a_m3_m1);
-    prodsum_psi_a_epi16(psi_r_m3_m3,a_r_m3_m3,psi_i_m3_m3,a_i_m3_m3,psi_a_m3_m3);
-
-
-    // squared interference magnitude times int. ch. power
-    square_a_epi16(a_r_p1_p1,a_i_p1_p1,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_p1_p1);
-    square_a_epi16(a_r_p1_p3,a_i_p1_p3,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_p1_p3);
-    square_a_epi16(a_r_p3_p1,a_i_p3_p1,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_p3_p1);
-    square_a_epi16(a_r_p3_p3,a_i_p3_p3,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_p3_p3);
-    square_a_epi16(a_r_p1_m1,a_i_p1_m1,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_p1_m1);
-    square_a_epi16(a_r_p1_m3,a_i_p1_m3,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_p1_m3);
-    square_a_epi16(a_r_p3_m1,a_i_p3_m1,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_p3_m1);
-    square_a_epi16(a_r_p3_m3,a_i_p3_m3,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_p3_m3);
-    square_a_epi16(a_r_m1_p1,a_i_m1_p1,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_m1_p1);
-    square_a_epi16(a_r_m1_p3,a_i_m1_p3,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_m1_p3);
-    square_a_epi16(a_r_m3_p1,a_i_m3_p1,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_m3_p1);
-    square_a_epi16(a_r_m3_p3,a_i_m3_p3,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_m3_p3);
-    square_a_epi16(a_r_m1_m1,a_i_m1_m1,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_m1_m1);
-    square_a_epi16(a_r_m1_m3,a_i_m1_m3,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_m1_m3);
-    square_a_epi16(a_r_m3_m1,a_i_m3_m1,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_m3_m1);
-    square_a_epi16(a_r_m3_m3,a_i_m3_m3,ch_mag_int,SQRT_10_OVER_FOUR,a_sq_m3_m3);
-
-    // Computing different multiples of channel norms
-    ch_mag_over_10=_mm_mulhi_epi16(ch_mag_des, ONE_OVER_TWO_SQRT_10);
-    ch_mag_over_2=_mm_mulhi_epi16(ch_mag_des, SQRT_10_OVER_FOUR);
-    ch_mag_over_2=_mm_slli_epi16(ch_mag_over_2, 1);
-    ch_mag_9_over_10=_mm_mulhi_epi16(ch_mag_des, NINE_OVER_TWO_SQRT_10);
-    ch_mag_9_over_10=_mm_slli_epi16(ch_mag_9_over_10, 2);
-
-    // Computing Metrics
-    xmm0 = _mm_subs_epi16(psi_a_p1_p1,a_sq_p1_p1);
-    xmm1 = _mm_adds_epi16(xmm0,y0_p_1_1);
-    bit_met_p1_p1= _mm_subs_epi16(xmm1,ch_mag_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_p1_p3,a_sq_p1_p3);
-    xmm1 = _mm_adds_epi16(xmm0,y0_p_1_3);
-    bit_met_p1_p3= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_p1_m1,a_sq_p1_m1);
-    xmm1 = _mm_adds_epi16(xmm0,y0_m_1_1);
-    bit_met_p1_m1= _mm_subs_epi16(xmm1,ch_mag_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_p1_m3,a_sq_p1_m3);
-    xmm1 = _mm_adds_epi16(xmm0,y0_m_1_3);
-    bit_met_p1_m3= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_p3_p1,a_sq_p3_p1);
-    xmm1 = _mm_adds_epi16(xmm0,y0_p_3_1);
-    bit_met_p3_p1= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_p3_p3,a_sq_p3_p3);
-    xmm1 = _mm_adds_epi16(xmm0,y0_p_3_3);
-    bit_met_p3_p3= _mm_subs_epi16(xmm1,ch_mag_9_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_p3_m1,a_sq_p3_m1);
-    xmm1 = _mm_adds_epi16(xmm0,y0_m_3_1);
-    bit_met_p3_m1= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_p3_m3,a_sq_p3_m3);
-    xmm1 = _mm_adds_epi16(xmm0,y0_m_3_3);
-    bit_met_p3_m3= _mm_subs_epi16(xmm1,ch_mag_9_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_p1,a_sq_m1_p1);
-    xmm1 = _mm_subs_epi16(xmm0,y0_m_1_1);
-    bit_met_m1_p1= _mm_subs_epi16(xmm1,ch_mag_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_p3,a_sq_m1_p3);
-    xmm1 = _mm_subs_epi16(xmm0,y0_m_1_3);
-    bit_met_m1_p3= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_m1,a_sq_m1_m1);
-    xmm1 = _mm_subs_epi16(xmm0,y0_p_1_1);
-    bit_met_m1_m1= _mm_subs_epi16(xmm1,ch_mag_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_m3,a_sq_m1_m3);
-    xmm1 = _mm_subs_epi16(xmm0,y0_p_1_3);
-    bit_met_m1_m3= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_m3_p1,a_sq_m3_p1);
-    xmm1 = _mm_subs_epi16(xmm0,y0_m_3_1);
-    bit_met_m3_p1= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_m3_p3,a_sq_m3_p3);
-    xmm1 = _mm_subs_epi16(xmm0,y0_m_3_3);
-    bit_met_m3_p3= _mm_subs_epi16(xmm1,ch_mag_9_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_m3_m1,a_sq_m3_m1);
-    xmm1 = _mm_subs_epi16(xmm0,y0_p_3_1);
-    bit_met_m3_m1= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_m3_m3,a_sq_m3_m3);
-    xmm1 = _mm_subs_epi16(xmm0,y0_p_3_3);
-    bit_met_m3_m3= _mm_subs_epi16(xmm1,ch_mag_9_over_10);
-
-    // LLR of the first bit
-    // Bit = 1
-    xmm0 = _mm_max_epi16(bit_met_m1_p1,bit_met_m1_p3);
-    xmm1 = _mm_max_epi16(bit_met_m1_m1,bit_met_m1_m3);
-    xmm2 = _mm_max_epi16(bit_met_m3_p1,bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m3_m1,bit_met_m3_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_num_re0= _mm_max_epi16(xmm4,xmm5);
-
-    // Bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p1_p1,bit_met_p1_p3);
-    xmm1 = _mm_max_epi16(bit_met_p1_m1,bit_met_p1_m3);
-    xmm2 = _mm_max_epi16(bit_met_p3_p1,bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_p3_m1,bit_met_p3_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4,xmm5);
-
-    // LLR of first bit [L1(1), L1(2), L1(3), L1(4), L1(5), L1(6), L1(7), L1(8)]
-    y0r = _mm_subs_epi16(logmax_den_re0,logmax_num_re0);
-
-    // LLR of the second bit
-    // Bit = 1
-    xmm0 = _mm_max_epi16(bit_met_p1_m1,bit_met_p3_m1);
-    xmm1 = _mm_max_epi16(bit_met_m1_m1,bit_met_m3_m1);
-    xmm2 = _mm_max_epi16(bit_met_p1_m3,bit_met_p3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m1_m3,bit_met_m3_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_num_re1 = _mm_max_epi16(xmm4,xmm5);
-
-    // Bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p1_p1,bit_met_p3_p1);
-    xmm1 = _mm_max_epi16(bit_met_m1_p1,bit_met_m3_p1);
-    xmm2 = _mm_max_epi16(bit_met_p1_p3,bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m1_p3,bit_met_m3_p3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_den_re1 = _mm_max_epi16(xmm4,xmm5);
-
-    // LLR of second bit [L2(1), L2(2), L2(3), L2(4)]
-    y1r = _mm_subs_epi16(logmax_den_re1,logmax_num_re1);
-
-    // LLR of the third bit
-    // Bit = 1
-    xmm0 = _mm_max_epi16(bit_met_m3_p1,bit_met_m3_p3);
-    xmm1 = _mm_max_epi16(bit_met_m3_m1,bit_met_m3_m3);
-    xmm2 = _mm_max_epi16(bit_met_p3_p1,bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_p3_m1,bit_met_p3_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_num_im0 = _mm_max_epi16(xmm4,xmm5);
-
-    // Bit = 0
-    xmm0 = _mm_max_epi16(bit_met_m1_p1,bit_met_m1_p3);
-    xmm1 = _mm_max_epi16(bit_met_m1_m1,bit_met_m1_m3);
-    xmm2 = _mm_max_epi16(bit_met_p1_p1,bit_met_p1_p3);
-    xmm3 = _mm_max_epi16(bit_met_p1_m1,bit_met_p1_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_den_im0 = _mm_max_epi16(xmm4,xmm5);
-
-    // LLR of third bit [L3(1), L3(2), L3(3), L3(4)]
-    y0i = _mm_subs_epi16(logmax_den_im0,logmax_num_im0);
-
-    // LLR of the fourth bit
-    // Bit = 1
-    xmm0 = _mm_max_epi16(bit_met_p1_m3,bit_met_p3_m3);
-    xmm1 = _mm_max_epi16(bit_met_m1_m3,bit_met_m3_m3);
-    xmm2 = _mm_max_epi16(bit_met_p1_p3,bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m1_p3,bit_met_m3_p3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_num_im1 = _mm_max_epi16(xmm4,xmm5);
-
-    // Bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p1_m1,bit_met_p3_m1);
-    xmm1 = _mm_max_epi16(bit_met_m1_m1,bit_met_m3_m1);
-    xmm2 = _mm_max_epi16(bit_met_p1_p1,bit_met_p3_p1);
-    xmm3 = _mm_max_epi16(bit_met_m1_p1,bit_met_m3_p1);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_den_im1 = _mm_max_epi16(xmm4,xmm5);
-
-    // LLR of fourth bit [L4(1), L4(2), L4(3), L4(4)]
-    y1i = _mm_subs_epi16(logmax_den_im1,logmax_num_im1);
-
-    // Pack LLRs in output
-    // [L1(1), L2(1), L1(2), L2(2), L1(3), L2(3), L1(4), L2(4)]
-    xmm0 = _mm_unpacklo_epi16(y0r,y1r);
-    // [L1(5), L2(5), L1(6), L2(6), L1(7), L2(7), L1(8), L2(8)]
-    xmm1 = _mm_unpackhi_epi16(y0r,y1r);
-    // [L3(1), L4(1), L3(2), L4(2), L3(3), L4(3), L3(4), L4(4)]
-    xmm2 = _mm_unpacklo_epi16(y0i,y1i);
-    // [L3(5), L4(5), L3(6), L4(6), L3(7), L4(7), L3(8), L4(8)]
-    xmm3 = _mm_unpackhi_epi16(y0i,y1i);
-
-    stream0_128i_out[2*i+0] = _mm_unpacklo_epi32(xmm0,xmm2); // 8LLRs, 2REs
-    stream0_128i_out[2*i+1] = _mm_unpackhi_epi32(xmm0,xmm2);
-    stream0_128i_out[2*i+2] = _mm_unpacklo_epi32(xmm1,xmm3);
-    stream0_128i_out[2*i+3] = _mm_unpackhi_epi32(xmm1,xmm3);
-#elif defined(__arm__)
-
-#endif
-
-  }
-
-#if defined(__x86_64__) || defined(__i386__)
-  _mm_empty();
-  _m_empty();
-#endif
-}
-
-int dlsch_16qam_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
-                          int32_t **rxdataF_comp,
-                          int32_t **rxdataF_comp_i,
-                          int32_t **dl_ch_mag,   //|h_0|^2*(2/sqrt{10})
-                          int32_t **dl_ch_mag_i, //|h_1|^2*(2/sqrt{10})
-                          int32_t **rho_i,
-                          int16_t *dlsch_llr,
-                          uint8_t symbol,
-                          uint8_t first_symbol_flag,
-                          uint16_t nb_rb,
-                          uint16_t pbch_pss_sss_adjust,
-                          int16_t **llr16p)
-{
-
-  int16_t *rxF      = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rxF_i    = (int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *ch_mag   = (int16_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rho      = (int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *llr16;
-  int len;
-  uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
-
-  // first symbol has different structure due to more pilots
-  if (first_symbol_flag == 1) {
-    llr16 = (int16_t*)dlsch_llr;
-  } else {
-    llr16 = (int16_t*)(*llr16p);
-  }
-
-
-  AssertFatal(llr16!=NULL,"dlsch_16qam_16qam_llr: llr is null, symbol %d\n",symbol);
-
-  if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-    // if symbol has pilots
-    if (frame_parms->nb_antenna_ports_eNB!=1)
-      // in 2 antenna ports we have 8 REs per symbol per RB
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-    else
-      // for 1 antenna port we have 10 REs per symbol per RB
-      len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
-  } else {
-    // symbol has no pilots
-    len = (nb_rb*12) - pbch_pss_sss_adjust;
-  }
-
-  // printf("symbol %d: qam16_llr, len %d (llr16 %p)\n",symbol,len,llr16);
-
-  qam16_qam16((short *)rxF,
-              (short *)rxF_i,
-              (short *)ch_mag,
-              (short *)ch_mag_i,
-              (short *)llr16,
-              (short *)rho,
-              len);
-
-  llr16 += (len<<2);
-  *llr16p = (short *)llr16;
-
-  return(0);
-}
-
-void qam16_qam64(int16_t *stream0_in,
-                 int16_t *stream1_in,
-                 int16_t *ch_mag,
-                 int16_t *ch_mag_i,
-                 int16_t *stream0_out,
-                 int16_t *rho01,
-                 int32_t length
-     )
-{
-
-  /*
-    Author: Sebastian Wagner
-    Date: 2012-06-04
-
-    Input:
-    stream0_in:  MF filter for 1st stream, i.e., y0=h0'*y
-    stream!_in:  MF filter for 2nd stream, i.e., y1=h1'*y
-    ch_mag:      2*h0/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    ch_mag_i:    2*h1/sqrt(00), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    rho01:       Channel cross correlation, i.e., h1'*h0
-
-    Output:
-    stream0_out: output LLRs for 1st stream
-  */
-
-#if defined(__x86_64__) || defined(__i386__)
-  __m128i *rho01_128i       = (__m128i *)rho01;
-  __m128i *stream0_128i_in  = (__m128i *)stream0_in;
-  __m128i *stream1_128i_in  = (__m128i *)stream1_in;
-  __m128i *stream0_128i_out = (__m128i *)stream0_out;
-  __m128i *ch_mag_128i      = (__m128i *)ch_mag;
-  __m128i *ch_mag_128i_i    = (__m128i *)ch_mag_i;
-
-
-  __m128i ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15)
-  __m128i ONE_OVER_SQRT_10 = _mm_set1_epi16(20724); // round(1/sqrt(10)*2^16)
-  __m128i THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15)
-  __m128i SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15)
-  __m128i ONE_OVER_TWO_SQRT_10 = _mm_set1_epi16(10362); // round(1/2/sqrt(10)*2^16)
-  __m128i NINE_OVER_TWO_SQRT_10 = _mm_set1_epi16(23315); // round(9/2/sqrt(10)*2^14)
-  __m128i ONE_OVER_SQRT_2_42 = _mm_set1_epi16(3575); // round(1/sqrt(2*42)*2^15)
-  __m128i THREE_OVER_SQRT_2_42 = _mm_set1_epi16(10726); // round(3/sqrt(2*42)*2^15)
-  __m128i FIVE_OVER_SQRT_2_42 = _mm_set1_epi16(17876); // round(5/sqrt(2*42)*2^15)
-  __m128i SEVEN_OVER_SQRT_2_42 = _mm_set1_epi16(25027); // round(7/sqrt(2*42)*2^15)
-  __m128i SQRT_42_OVER_FOUR = _mm_set1_epi16(13272); // round(sqrt(42)/4*2^13), Q3.
-  __m128i ch_mag_des,ch_mag_int;
-  __m128i  y0r_over_sqrt10;
-  __m128i  y0i_over_sqrt10;
-  __m128i  y0r_three_over_sqrt10;
-  __m128i  y0i_three_over_sqrt10;
-  __m128i ch_mag_over_10;
-  __m128i ch_mag_over_2;
-  __m128i ch_mag_9_over_10;
-  __m128i ch_mag_int_with_sigma2;
-  __m128i two_ch_mag_int_with_sigma2;
-  __m128i three_ch_mag_int_with_sigma2;
-
-#elif defined(__arm__)
-
-#endif
-  int i;
-
-  for (i=0; i<length>>2; i+=2) {
-    // In one iteration, we deal with 8 REs
-
-#if defined(__x86_64__) || defined(__i386__)
-    // Get rho
-    xmm0 = rho01_128i[i];
-    xmm1 = rho01_128i[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    xmm2 = _mm_unpacklo_epi64(xmm0,xmm1); // Re(rho)
-    xmm3 = _mm_unpackhi_epi64(xmm0,xmm1); // Im(rho)
-    rho_rpi = _mm_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho)
-    rho_rmi = _mm_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho)
-
-    // Compute the different rhos
-    rho_rpi_1_1 = _mm_mulhi_epi16(rho_rpi,ONE_OVER_SQRT_10);
-    rho_rmi_1_1 = _mm_mulhi_epi16(rho_rmi,ONE_OVER_SQRT_10);
-    rho_rpi_3_3 = _mm_mulhi_epi16(rho_rpi,THREE_OVER_SQRT_10);
-    rho_rmi_3_3 = _mm_mulhi_epi16(rho_rmi,THREE_OVER_SQRT_10);
-    rho_rpi_3_3 = _mm_slli_epi16(rho_rpi_3_3,1);
-    rho_rmi_3_3 = _mm_slli_epi16(rho_rmi_3_3,1);
-
-    xmm4 = _mm_mulhi_epi16(xmm2,ONE_OVER_SQRT_10); // Re(rho)
-    xmm5 = _mm_mulhi_epi16(xmm3,THREE_OVER_SQRT_10); // Im(rho)
-    xmm5 = _mm_slli_epi16(xmm5,1);
-
-    rho_rpi_1_3 = _mm_adds_epi16(xmm4,xmm5);
-    rho_rmi_1_3 = _mm_subs_epi16(xmm4,xmm5);
-
-    xmm6 = _mm_mulhi_epi16(xmm2,THREE_OVER_SQRT_10); // Re(rho)
-    xmm7 = _mm_mulhi_epi16(xmm3,ONE_OVER_SQRT_10); // Im(rho)
-    xmm6 = _mm_slli_epi16(xmm6,1);
-
-    rho_rpi_3_1 = _mm_adds_epi16(xmm6,xmm7);
-    rho_rmi_3_1 = _mm_subs_epi16(xmm6,xmm7);
-
-    // Rearrange interfering MF output
-    xmm0 = stream1_128i_in[i];
-    xmm1 = stream1_128i_in[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
-    y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
-
-    xmm0 = _mm_setzero_si128(); // ZERO
-    xmm2 = _mm_subs_epi16(rho_rpi_1_1,y1r); // = [Re(rho)+ Im(rho)]/sqrt(10) - y1r
-    psi_r_p1_p1 = _mm_abs_epi16(xmm2); // = |[Re(rho)+ Im(rho)]/sqrt(10) - y1r|
-
-    xmm2= _mm_subs_epi16(rho_rmi_1_1,y1r);
-    psi_r_p1_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_1_1,y1i);
-    psi_i_p1_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_1_3,y1r);
-    psi_r_p1_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_1_3,y1r);
-    psi_r_p1_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_3_1,y1i);
-    psi_i_p1_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_3_1,y1r);
-    psi_r_p3_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_3_1,y1r);
-    psi_r_p3_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_1_3,y1i);
-    psi_i_p3_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_3_3,y1r);
-    psi_r_p3_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_3_3,y1r);
-    psi_r_p3_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rmi_3_3,y1i);
-    psi_i_p3_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_1_1,y1i);
-    psi_i_m1_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_3_1,y1i);
-    psi_i_m1_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_1_3,y1i);
-    psi_i_m3_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_subs_epi16(rho_rpi_3_3,y1i);
-    psi_i_m3_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_1_1,y1i);
-    psi_i_p1_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_3_1,y1i);
-    psi_i_p1_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_1_3,y1i);
-    psi_i_p3_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_3_3,y1i);
-    psi_i_p3_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_1_1,y1r);
-    psi_r_m1_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_1_3,y1r);
-    psi_r_m1_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_3_1,y1r);
-    psi_r_m3_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(rho_rpi_3_3,y1r);
-    psi_r_m3_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1r,rho_rmi_1_1);
-    psi_r_m1_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1r,rho_rmi_1_3);
-    psi_r_m1_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1i,rho_rmi_1_1);
-    psi_i_m1_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1i,rho_rmi_3_1);
-    psi_i_m1_m3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1r,rho_rmi_3_1);
-    psi_r_m3_p1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1r,rho_rmi_3_3);
-    psi_r_m3_p3 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1i,rho_rmi_1_3);
-    psi_i_m3_m1 = _mm_abs_epi16(xmm2);
-    xmm2= _mm_adds_epi16(y1i,rho_rmi_3_3);
-    psi_i_m3_m3 = _mm_abs_epi16(xmm2);
-
-    // Rearrange desired MF output
-    xmm0 = stream0_128i_in[i];
-    xmm1 = stream0_128i_in[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y0r = _mm_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)]
-    y0i = _mm_unpackhi_epi64(xmm0,xmm1);
-
-    // Rearrange desired channel magnitudes
-    xmm2 = ch_mag_128i[i]; // = [|h|^2(1),|h|^2(1),|h|^2(2),|h|^2(2)]*(2/sqrt(10))
-    xmm3 = ch_mag_128i[i+1]; // = [|h|^2(3),|h|^2(3),|h|^2(4),|h|^2(4)]*(2/sqrt(10))
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-
-    ch_mag_des = _mm_unpacklo_epi64(xmm2,xmm3); // = [|h|^2(1),|h|^2(2),|h|^2(3),|h|^2(4)]*(2/sqrt(10))
-
-    // Rearrange interfering channel magnitudes
-    xmm2 = ch_mag_128i_i[i];
-    xmm3 = ch_mag_128i_i[i+1];
-
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-
-    ch_mag_int  = _mm_unpacklo_epi64(xmm2,xmm3);
-
-    // Scale MF output of desired signal
-    y0r_over_sqrt10 = _mm_mulhi_epi16(y0r,ONE_OVER_SQRT_10);
-    y0i_over_sqrt10 = _mm_mulhi_epi16(y0i,ONE_OVER_SQRT_10);
-    y0r_three_over_sqrt10 = _mm_mulhi_epi16(y0r,THREE_OVER_SQRT_10);
-    y0i_three_over_sqrt10 = _mm_mulhi_epi16(y0i,THREE_OVER_SQRT_10);
-    y0r_three_over_sqrt10 = _mm_slli_epi16(y0r_three_over_sqrt10,1);
-    y0i_three_over_sqrt10 = _mm_slli_epi16(y0i_three_over_sqrt10,1);
-
-    // Compute necessary combination of required terms
-    y0_p_1_1 = _mm_adds_epi16(y0r_over_sqrt10,y0i_over_sqrt10);
-    y0_m_1_1 = _mm_subs_epi16(y0r_over_sqrt10,y0i_over_sqrt10);
-
-    y0_p_1_3 = _mm_adds_epi16(y0r_over_sqrt10,y0i_three_over_sqrt10);
-    y0_m_1_3 = _mm_subs_epi16(y0r_over_sqrt10,y0i_three_over_sqrt10);
-
-    y0_p_3_1 = _mm_adds_epi16(y0r_three_over_sqrt10,y0i_over_sqrt10);
-    y0_m_3_1 = _mm_subs_epi16(y0r_three_over_sqrt10,y0i_over_sqrt10);
-
-    y0_p_3_3 = _mm_adds_epi16(y0r_three_over_sqrt10,y0i_three_over_sqrt10);
-    y0_m_3_3 = _mm_subs_epi16(y0r_three_over_sqrt10,y0i_three_over_sqrt10);
-
-    // Compute optimal interfering symbol magnitude
-    ch_mag_int_with_sigma2       = _mm_srai_epi16(ch_mag_int, 1); // *2
-    two_ch_mag_int_with_sigma2   = ch_mag_int; // *4
-    three_ch_mag_int_with_sigma2 = _mm_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6
-
-    interference_abs_64qam_epi16(psi_r_p1_p1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_p1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_p3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_p3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_m1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_m1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_m3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_m3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_p1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_p1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_p3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_p3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_m1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_m1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_m3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_m3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_p1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_p1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_p3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_p3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_m1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_m1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_m3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_m3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_p1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_p1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_p3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_p3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_m1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_m1 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m1,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_m3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_m3 ,ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m3,ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42,FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-
-    // Calculation of groups of two terms in the bit metric involving product of psi and interference magnitude
-    prodsum_psi_a_epi16(psi_r_p1_p1,a_r_p1_p1,psi_i_p1_p1,a_i_p1_p1,psi_a_p1_p1);
-    prodsum_psi_a_epi16(psi_r_p1_p3,a_r_p1_p3,psi_i_p1_p3,a_i_p1_p3,psi_a_p1_p3);
-    prodsum_psi_a_epi16(psi_r_p3_p1,a_r_p3_p1,psi_i_p3_p1,a_i_p3_p1,psi_a_p3_p1);
-    prodsum_psi_a_epi16(psi_r_p3_p3,a_r_p3_p3,psi_i_p3_p3,a_i_p3_p3,psi_a_p3_p3);
-    prodsum_psi_a_epi16(psi_r_p1_m1,a_r_p1_m1,psi_i_p1_m1,a_i_p1_m1,psi_a_p1_m1);
-    prodsum_psi_a_epi16(psi_r_p1_m3,a_r_p1_m3,psi_i_p1_m3,a_i_p1_m3,psi_a_p1_m3);
-    prodsum_psi_a_epi16(psi_r_p3_m1,a_r_p3_m1,psi_i_p3_m1,a_i_p3_m1,psi_a_p3_m1);
-    prodsum_psi_a_epi16(psi_r_p3_m3,a_r_p3_m3,psi_i_p3_m3,a_i_p3_m3,psi_a_p3_m3);
-    prodsum_psi_a_epi16(psi_r_m1_p1,a_r_m1_p1,psi_i_m1_p1,a_i_m1_p1,psi_a_m1_p1);
-    prodsum_psi_a_epi16(psi_r_m1_p3,a_r_m1_p3,psi_i_m1_p3,a_i_m1_p3,psi_a_m1_p3);
-    prodsum_psi_a_epi16(psi_r_m3_p1,a_r_m3_p1,psi_i_m3_p1,a_i_m3_p1,psi_a_m3_p1);
-    prodsum_psi_a_epi16(psi_r_m3_p3,a_r_m3_p3,psi_i_m3_p3,a_i_m3_p3,psi_a_m3_p3);
-    prodsum_psi_a_epi16(psi_r_m1_m1,a_r_m1_m1,psi_i_m1_m1,a_i_m1_m1,psi_a_m1_m1);
-    prodsum_psi_a_epi16(psi_r_m1_m3,a_r_m1_m3,psi_i_m1_m3,a_i_m1_m3,psi_a_m1_m3);
-    prodsum_psi_a_epi16(psi_r_m3_m1,a_r_m3_m1,psi_i_m3_m1,a_i_m3_m1,psi_a_m3_m1);
-    prodsum_psi_a_epi16(psi_r_m3_m3,a_r_m3_m3,psi_i_m3_m3,a_i_m3_m3,psi_a_m3_m3);
-
-    // Multiply by sqrt(2)
-    psi_a_p1_p1 = _mm_mulhi_epi16(psi_a_p1_p1, ONE_OVER_SQRT_2);
-    psi_a_p1_p1 = _mm_slli_epi16(psi_a_p1_p1, 2);
-    psi_a_p1_p3 = _mm_mulhi_epi16(psi_a_p1_p3, ONE_OVER_SQRT_2);
-    psi_a_p1_p3 = _mm_slli_epi16(psi_a_p1_p3, 2);
-    psi_a_p3_p1 = _mm_mulhi_epi16(psi_a_p3_p1, ONE_OVER_SQRT_2);
-    psi_a_p3_p1 = _mm_slli_epi16(psi_a_p3_p1, 2);
-    psi_a_p3_p3 = _mm_mulhi_epi16(psi_a_p3_p3, ONE_OVER_SQRT_2);
-    psi_a_p3_p3 = _mm_slli_epi16(psi_a_p3_p3, 2);
-    psi_a_p1_m1 = _mm_mulhi_epi16(psi_a_p1_m1, ONE_OVER_SQRT_2);
-    psi_a_p1_m1 = _mm_slli_epi16(psi_a_p1_m1, 2);
-    psi_a_p1_m3 = _mm_mulhi_epi16(psi_a_p1_m3, ONE_OVER_SQRT_2);
-    psi_a_p1_m3 = _mm_slli_epi16(psi_a_p1_m3, 2);
-    psi_a_p3_m1 = _mm_mulhi_epi16(psi_a_p3_m1, ONE_OVER_SQRT_2);
-    psi_a_p3_m1 = _mm_slli_epi16(psi_a_p3_m1, 2);
-    psi_a_p3_m3 = _mm_mulhi_epi16(psi_a_p3_m3, ONE_OVER_SQRT_2);
-    psi_a_p3_m3 = _mm_slli_epi16(psi_a_p3_m3, 2);
-    psi_a_m1_p1 = _mm_mulhi_epi16(psi_a_m1_p1, ONE_OVER_SQRT_2);
-    psi_a_m1_p1 = _mm_slli_epi16(psi_a_m1_p1, 2);
-    psi_a_m1_p3 = _mm_mulhi_epi16(psi_a_m1_p3, ONE_OVER_SQRT_2);
-    psi_a_m1_p3 = _mm_slli_epi16(psi_a_m1_p3, 2);
-    psi_a_m3_p1 = _mm_mulhi_epi16(psi_a_m3_p1, ONE_OVER_SQRT_2);
-    psi_a_m3_p1 = _mm_slli_epi16(psi_a_m3_p1, 2);
-    psi_a_m3_p3 = _mm_mulhi_epi16(psi_a_m3_p3, ONE_OVER_SQRT_2);
-    psi_a_m3_p3 = _mm_slli_epi16(psi_a_m3_p3, 2);
-    psi_a_m1_m1 = _mm_mulhi_epi16(psi_a_m1_m1, ONE_OVER_SQRT_2);
-    psi_a_m1_m1 = _mm_slli_epi16(psi_a_m1_m1, 2);
-    psi_a_m1_m3 = _mm_mulhi_epi16(psi_a_m1_m3, ONE_OVER_SQRT_2);
-    psi_a_m1_m3 = _mm_slli_epi16(psi_a_m1_m3, 2);
-    psi_a_m3_m1 = _mm_mulhi_epi16(psi_a_m3_m1, ONE_OVER_SQRT_2);
-    psi_a_m3_m1 = _mm_slli_epi16(psi_a_m3_m1, 2);
-    psi_a_m3_m3 = _mm_mulhi_epi16(psi_a_m3_m3, ONE_OVER_SQRT_2);
-    psi_a_m3_m3 = _mm_slli_epi16(psi_a_m3_m3, 2);
-
-    // squared interference magnitude times int. ch. power
-    square_a_64qam_epi16(a_r_p1_p1,a_i_p1_p1,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_p1_p1);
-    square_a_64qam_epi16(a_r_p1_p3,a_i_p1_p3,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_p1_p3);
-    square_a_64qam_epi16(a_r_p3_p1,a_i_p3_p1,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_p3_p1);
-    square_a_64qam_epi16(a_r_p3_p3,a_i_p3_p3,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_p3_p3);
-    square_a_64qam_epi16(a_r_p1_m1,a_i_p1_m1,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_p1_m1);
-    square_a_64qam_epi16(a_r_p1_m3,a_i_p1_m3,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_p1_m3);
-    square_a_64qam_epi16(a_r_p3_m1,a_i_p3_m1,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_p3_m1);
-    square_a_64qam_epi16(a_r_p3_m3,a_i_p3_m3,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_p3_m3);
-    square_a_64qam_epi16(a_r_m1_p1,a_i_m1_p1,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_m1_p1);
-    square_a_64qam_epi16(a_r_m1_p3,a_i_m1_p3,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_m1_p3);
-    square_a_64qam_epi16(a_r_m3_p1,a_i_m3_p1,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_m3_p1);
-    square_a_64qam_epi16(a_r_m3_p3,a_i_m3_p3,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_m3_p3);
-    square_a_64qam_epi16(a_r_m1_m1,a_i_m1_m1,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_m1_m1);
-    square_a_64qam_epi16(a_r_m1_m3,a_i_m1_m3,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_m1_m3);
-    square_a_64qam_epi16(a_r_m3_m1,a_i_m3_m1,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_m3_m1);
-    square_a_64qam_epi16(a_r_m3_m3,a_i_m3_m3,ch_mag_int,SQRT_42_OVER_FOUR,a_sq_m3_m3);
-
-    // Computing different multiples of channel norms
-    ch_mag_over_10=_mm_mulhi_epi16(ch_mag_des, ONE_OVER_TWO_SQRT_10);
-    ch_mag_over_2=_mm_mulhi_epi16(ch_mag_des, SQRT_10_OVER_FOUR);
-    ch_mag_over_2=_mm_slli_epi16(ch_mag_over_2, 1);
-    ch_mag_9_over_10=_mm_mulhi_epi16(ch_mag_des, NINE_OVER_TWO_SQRT_10);
-    ch_mag_9_over_10=_mm_slli_epi16(ch_mag_9_over_10, 2);
-
-    // Computing Metrics
-    xmm0 = _mm_subs_epi16(psi_a_p1_p1,a_sq_p1_p1);
-    xmm1 = _mm_adds_epi16(xmm0,y0_p_1_1);
-    bit_met_p1_p1= _mm_subs_epi16(xmm1,ch_mag_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_p1_p3,a_sq_p1_p3);
-    xmm1 = _mm_adds_epi16(xmm0,y0_p_1_3);
-    bit_met_p1_p3= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_p1_m1,a_sq_p1_m1);
-    xmm1 = _mm_adds_epi16(xmm0,y0_m_1_1);
-    bit_met_p1_m1= _mm_subs_epi16(xmm1,ch_mag_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_p1_m3,a_sq_p1_m3);
-    xmm1 = _mm_adds_epi16(xmm0,y0_m_1_3);
-    bit_met_p1_m3= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_p3_p1,a_sq_p3_p1);
-    xmm1 = _mm_adds_epi16(xmm0,y0_p_3_1);
-    bit_met_p3_p1= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_p3_p3,a_sq_p3_p3);
-    xmm1 = _mm_adds_epi16(xmm0,y0_p_3_3);
-    bit_met_p3_p3= _mm_subs_epi16(xmm1,ch_mag_9_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_p3_m1,a_sq_p3_m1);
-    xmm1 = _mm_adds_epi16(xmm0,y0_m_3_1);
-    bit_met_p3_m1= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_p3_m3,a_sq_p3_m3);
-    xmm1 = _mm_adds_epi16(xmm0,y0_m_3_3);
-    bit_met_p3_m3= _mm_subs_epi16(xmm1,ch_mag_9_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_p1,a_sq_m1_p1);
-    xmm1 = _mm_subs_epi16(xmm0,y0_m_1_1);
-    bit_met_m1_p1= _mm_subs_epi16(xmm1,ch_mag_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_p3,a_sq_m1_p3);
-    xmm1 = _mm_subs_epi16(xmm0,y0_m_1_3);
-    bit_met_m1_p3= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_m1,a_sq_m1_m1);
-    xmm1 = _mm_subs_epi16(xmm0,y0_p_1_1);
-    bit_met_m1_m1= _mm_subs_epi16(xmm1,ch_mag_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_m3,a_sq_m1_m3);
-    xmm1 = _mm_subs_epi16(xmm0,y0_p_1_3);
-    bit_met_m1_m3= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_m3_p1,a_sq_m3_p1);
-    xmm1 = _mm_subs_epi16(xmm0,y0_m_3_1);
-    bit_met_m3_p1= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_m3_p3,a_sq_m3_p3);
-    xmm1 = _mm_subs_epi16(xmm0,y0_m_3_3);
-    bit_met_m3_p3= _mm_subs_epi16(xmm1,ch_mag_9_over_10);
-
-    xmm0 = _mm_subs_epi16(psi_a_m3_m1,a_sq_m3_m1);
-    xmm1 = _mm_subs_epi16(xmm0,y0_p_3_1);
-    bit_met_m3_m1= _mm_subs_epi16(xmm1,ch_mag_over_2);
-
-    xmm0 = _mm_subs_epi16(psi_a_m3_m3,a_sq_m3_m3);
-    xmm1 = _mm_subs_epi16(xmm0,y0_p_3_3);
-    bit_met_m3_m3= _mm_subs_epi16(xmm1,ch_mag_9_over_10);
-
-    // LLR of the first bit
-    // Bit = 1
-    xmm0 = _mm_max_epi16(bit_met_m1_p1,bit_met_m1_p3);
-    xmm1 = _mm_max_epi16(bit_met_m1_m1,bit_met_m1_m3);
-    xmm2 = _mm_max_epi16(bit_met_m3_p1,bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m3_m1,bit_met_m3_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_num_re0= _mm_max_epi16(xmm4,xmm5);
-
-    // Bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p1_p1,bit_met_p1_p3);
-    xmm1 = _mm_max_epi16(bit_met_p1_m1,bit_met_p1_m3);
-    xmm2 = _mm_max_epi16(bit_met_p3_p1,bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_p3_m1,bit_met_p3_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4,xmm5);
-
-    // LLR of first bit [L1(1), L1(2), L1(3), L1(4), L1(5), L1(6), L1(7), L1(8)]
-    y0r = _mm_subs_epi16(logmax_den_re0,logmax_num_re0);
-
-    // LLR of the second bit
-    // Bit = 1
-    xmm0 = _mm_max_epi16(bit_met_p1_m1,bit_met_p3_m1);
-    xmm1 = _mm_max_epi16(bit_met_m1_m1,bit_met_m3_m1);
-    xmm2 = _mm_max_epi16(bit_met_p1_m3,bit_met_p3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m1_m3,bit_met_m3_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_num_re1 = _mm_max_epi16(xmm4,xmm5);
-
-    // Bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p1_p1,bit_met_p3_p1);
-    xmm1 = _mm_max_epi16(bit_met_m1_p1,bit_met_m3_p1);
-    xmm2 = _mm_max_epi16(bit_met_p1_p3,bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m1_p3,bit_met_m3_p3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_den_re1 = _mm_max_epi16(xmm4,xmm5);
-
-    // LLR of second bit [L2(1), L2(2), L2(3), L2(4)]
-    y1r = _mm_subs_epi16(logmax_den_re1,logmax_num_re1);
-
-    // LLR of the third bit
-    // Bit = 1
-    xmm0 = _mm_max_epi16(bit_met_m3_p1,bit_met_m3_p3);
-    xmm1 = _mm_max_epi16(bit_met_m3_m1,bit_met_m3_m3);
-    xmm2 = _mm_max_epi16(bit_met_p3_p1,bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_p3_m1,bit_met_p3_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_num_im0 = _mm_max_epi16(xmm4,xmm5);
-
-    // Bit = 0
-    xmm0 = _mm_max_epi16(bit_met_m1_p1,bit_met_m1_p3);
-    xmm1 = _mm_max_epi16(bit_met_m1_m1,bit_met_m1_m3);
-    xmm2 = _mm_max_epi16(bit_met_p1_p1,bit_met_p1_p3);
-    xmm3 = _mm_max_epi16(bit_met_p1_m1,bit_met_p1_m3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_den_im0 = _mm_max_epi16(xmm4,xmm5);
-
-    // LLR of third bit [L3(1), L3(2), L3(3), L3(4)]
-    y0i = _mm_subs_epi16(logmax_den_im0,logmax_num_im0);
-
-    // LLR of the fourth bit
-    // Bit = 1
-    xmm0 = _mm_max_epi16(bit_met_p1_m3,bit_met_p3_m3);
-    xmm1 = _mm_max_epi16(bit_met_m1_m3,bit_met_m3_m3);
-    xmm2 = _mm_max_epi16(bit_met_p1_p3,bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m1_p3,bit_met_m3_p3);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_num_im1 = _mm_max_epi16(xmm4,xmm5);
-
-    // Bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p1_m1,bit_met_p3_m1);
-    xmm1 = _mm_max_epi16(bit_met_m1_m1,bit_met_m3_m1);
-    xmm2 = _mm_max_epi16(bit_met_p1_p1,bit_met_p3_p1);
-    xmm3 = _mm_max_epi16(bit_met_m1_p1,bit_met_m3_p1);
-    xmm4 = _mm_max_epi16(xmm0,xmm1);
-    xmm5 = _mm_max_epi16(xmm2,xmm3);
-    logmax_den_im1 = _mm_max_epi16(xmm4,xmm5);
-
-    // LLR of fourth bit [L4(1), L4(2), L4(3), L4(4)]
-    y1i = _mm_subs_epi16(logmax_den_im1,logmax_num_im1);
-
-    // Pack LLRs in output
-    // [L1(1), L2(1), L1(2), L2(2), L1(3), L2(3), L1(4), L2(4)]
-    xmm0 = _mm_unpacklo_epi16(y0r,y1r);
-    // [L1(5), L2(5), L1(6), L2(6), L1(7), L2(7), L1(8), L2(8)]
-    xmm1 = _mm_unpackhi_epi16(y0r,y1r);
-    // [L3(1), L4(1), L3(2), L4(2), L3(3), L4(3), L3(4), L4(4)]
-    xmm2 = _mm_unpacklo_epi16(y0i,y1i);
-    // [L3(5), L4(5), L3(6), L4(6), L3(7), L4(7), L3(8), L4(8)]
-    xmm3 = _mm_unpackhi_epi16(y0i,y1i);
-
-    stream0_128i_out[2*i+0] = _mm_unpacklo_epi32(xmm0,xmm2); // 8LLRs, 2REs
-    stream0_128i_out[2*i+1] = _mm_unpackhi_epi32(xmm0,xmm2);
-    stream0_128i_out[2*i+2] = _mm_unpacklo_epi32(xmm1,xmm3);
-    stream0_128i_out[2*i+3] = _mm_unpackhi_epi32(xmm1,xmm3);
-#elif defined(__arm__)
-
-#endif
-
-  }
-
-#if defined(__x86_64__) || defined(__i386__)
-  _mm_empty();
-  _m_empty();
-#endif
-}
-
-int dlsch_16qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
-                          int32_t **rxdataF_comp,
-                          int32_t **rxdataF_comp_i,
-                          int32_t **dl_ch_mag,   //|h_0|^2*(2/sqrt{10})
-                          int32_t **dl_ch_mag_i, //|h_1|^2*(2/sqrt{10})
-                          int32_t **rho_i,
-                          int16_t *dlsch_llr,
-                          uint8_t symbol,
-                          uint8_t first_symbol_flag,
-                          uint16_t nb_rb,
-                          uint16_t pbch_pss_sss_adjust,
-                          int16_t **llr16p)
-{
-
-  int16_t *rxF      = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rxF_i    = (int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *ch_mag   = (int16_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rho      = (int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *llr16;
-  int len;
-  uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
-
-  // first symbol has different structure due to more pilots
-  if (first_symbol_flag == 1) {
-    llr16 = (int16_t*)dlsch_llr;
-  } else {
-    llr16 = (int16_t*)(*llr16p);
-  }
-
-
-  AssertFatal(llr16!=NULL,"dlsch_16qam_64qam_llr:llr is null, symbol %d\n",symbol);
-
-
-  if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-    // if symbol has pilots
-    if (frame_parms->nb_antenna_ports_eNB!=1)
-      // in 2 antenna ports we have 8 REs per symbol per RB
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-    else
-      // for 1 antenna port we have 10 REs per symbol per RB
-      len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
-  } else {
-    // symbol has no pilots
-    len = (nb_rb*12) - pbch_pss_sss_adjust;
-  }
-
-  // printf("symbol %d: qam16_llr, len %d (llr16 %p)\n",symbol,len,llr16);
-
-  qam16_qam64((short *)rxF,
-              (short *)rxF_i,
-              (short *)ch_mag,
-              (short *)ch_mag_i,
-              (short *)llr16,
-              (short *)rho,
-              len);
-
-  llr16 += (len<<2);
-  *llr16p = (short *)llr16;
-
-  return(0);
-}
-
-//----------------------------------------------------------------------------------------------
-// 64-QAM
-//----------------------------------------------------------------------------------------------
-
-/*
-__m128i ONE_OVER_SQRT_42 __attribute__((aligned(16)));
-__m128i THREE_OVER_SQRT_42 __attribute__((aligned(16)));
-__m128i FIVE_OVER_SQRT_42 __attribute__((aligned(16)));
-__m128i SEVEN_OVER_SQRT_42 __attribute__((aligned(16)));
-
-__m128i FORTYNINE_OVER_FOUR_SQRT_42 __attribute__((aligned(16)));
-__m128i THIRTYSEVEN_OVER_FOUR_SQRT_42 __attribute__((aligned(16)));
-__m128i TWENTYNINE_OVER_FOUR_SQRT_42 __attribute__((aligned(16)));
-__m128i TWENTYFIVE_OVER_FOUR_SQRT_42 __attribute__((aligned(16)));
-__m128i SEVENTEEN_OVER_FOUR_SQRT_42 __attribute__((aligned(16)));
-__m128i NINE_OVER_FOUR_SQRT_42 __attribute__((aligned(16)));
-__m128i THIRTEEN_OVER_FOUR_SQRT_42 __attribute__((aligned(16)));
-__m128i FIVE_OVER_FOUR_SQRT_42 __attribute__((aligned(16)));
-__m128i ONE_OVER_FOUR_SQRT_42 __attribute__((aligned(16)));
-
-__m128i  y0r_one_over_sqrt_21 __attribute__((aligned(16)));
-__m128i  y0r_three_over_sqrt_21 __attribute__((aligned(16)));
-__m128i  y0r_five_over_sqrt_21 __attribute__((aligned(16)));
-__m128i  y0r_seven_over_sqrt_21 __attribute__((aligned(16)));
-__m128i  y0i_one_over_sqrt_21 __attribute__((aligned(16)));
-__m128i  y0i_three_over_sqrt_21 __attribute__((aligned(16)));
-__m128i  y0i_five_over_sqrt_21 __attribute__((aligned(16)));
-__m128i  y0i_seven_over_sqrt_21 __attribute__((aligned(16)));
-
-__m128i ch_mag_98_over_42_with_sigma2 __attribute__((aligned(16)));
-__m128i ch_mag_74_over_42_with_sigma2 __attribute__((aligned(16)));
-__m128i ch_mag_58_over_42_with_sigma2 __attribute__((aligned(16)));
-__m128i ch_mag_50_over_42_with_sigma2 __attribute__((aligned(16)));
-__m128i ch_mag_34_over_42_with_sigma2 __attribute__((aligned(16)));
-__m128i ch_mag_18_over_42_with_sigma2 __attribute__((aligned(16)));
-__m128i ch_mag_26_over_42_with_sigma2 __attribute__((aligned(16)));
-__m128i ch_mag_10_over_42_with_sigma2 __attribute__((aligned(16)));
-__m128i ch_mag_2_over_42_with_sigma2 __attribute__((aligned(16)));
-
-*/
-
-void qam64_qpsk(int16_t *stream0_in,
-                int16_t *stream1_in,
-                int16_t *ch_mag,
-                int16_t *stream0_out,
-                int16_t *rho01,
-                int32_t length
-    )
-{
-
-  /*
-    Author: S. Wagner
-    Date: 31-07-12
-
-    Input:
-    stream0_in:  MF filter for 1st stream, i.e., y0=h0'*y
-    stream1_in:  MF filter for 2nd stream, i.e., y1=h1'*y
-    ch_mag:      4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    ch_mag_i:    4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    rho01:       Channel cross correlation, i.e., h1'*h0
-
-    Output:
-    stream0_out: output LLRs for 1st stream
-  */
-
-#if defined(__x86_64__) || defined(__i386__)
-  __m128i *rho01_128i      = (__m128i *)rho01;
-  __m128i *stream0_128i_in = (__m128i *)stream0_in;
-  __m128i *stream1_128i_in = (__m128i *)stream1_in;
-  __m128i *ch_mag_128i     = (__m128i *)ch_mag;
-
-
-  __m128i ONE_OVER_SQRT_42 = _mm_set1_epi16(10112); // round(1/sqrt(42)*2^16)
-  __m128i THREE_OVER_SQRT_42 = _mm_set1_epi16(30337); // round(3/sqrt(42)*2^16)
-  __m128i FIVE_OVER_SQRT_42 = _mm_set1_epi16(25281); // round(5/sqrt(42)*2^15)
-  __m128i SEVEN_OVER_SQRT_42 = _mm_set1_epi16(17697); // round(5/sqrt(42)*2^15)
-  __m128i ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15)
-  __m128i FORTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(30969); // round(49/(4*sqrt(42))*2^14), Q2.14
-  __m128i THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(23385); // round(37/(4*sqrt(42))*2^14), Q2.14
-  __m128i TWENTYFIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(31601); // round(25/(4*sqrt(42))*2^15)
-  __m128i TWENTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(18329); // round(29/(4*sqrt(42))*2^15), Q2.14
-  __m128i SEVENTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(21489); // round(17/(4*sqrt(42))*2^15)
-  __m128i NINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(11376); // round(9/(4*sqrt(42))*2^15)
-  __m128i THIRTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(16433); // round(13/(4*sqrt(42))*2^15)
-  __m128i FIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(6320); // round(5/(4*sqrt(42))*2^15)
-  __m128i ONE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(1264); // round(1/(4*sqrt(42))*2^15)
-
-
-  __m128i ch_mag_des;
-  __m128i ch_mag_98_over_42_with_sigma2;
-  __m128i ch_mag_74_over_42_with_sigma2;
-  __m128i ch_mag_58_over_42_with_sigma2;
-  __m128i ch_mag_50_over_42_with_sigma2;
-  __m128i ch_mag_34_over_42_with_sigma2;
-  __m128i ch_mag_18_over_42_with_sigma2;
-  __m128i ch_mag_26_over_42_with_sigma2;
-  __m128i ch_mag_10_over_42_with_sigma2;
-  __m128i ch_mag_2_over_42_with_sigma2;
-  __m128i  y0r_one_over_sqrt_21;
-  __m128i  y0r_three_over_sqrt_21;
-  __m128i  y0r_five_over_sqrt_21;
-  __m128i  y0r_seven_over_sqrt_21;
-  __m128i  y0i_one_over_sqrt_21;
-  __m128i  y0i_three_over_sqrt_21;
-  __m128i  y0i_five_over_sqrt_21;
-  __m128i  y0i_seven_over_sqrt_21;
-#elif defined(__arm__)
-
-#endif
-
-  int i,j;
-
-  for (i=0; i<length>>2; i+=2) {
-
-#if defined(__x86_64) || defined(__i386__)
-    // Get rho
-    xmm0 = rho01_128i[i];
-    xmm1 = rho01_128i[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    xmm2 = _mm_unpacklo_epi64(xmm0,xmm1); // Re(rho)
-    xmm3 = _mm_unpackhi_epi64(xmm0,xmm1); // Im(rho)
-    rho_rpi = _mm_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho)
-    rho_rmi = _mm_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho)
-
-    // Compute the different rhos
-    rho_rpi_1_1 = _mm_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42);
-    rho_rmi_1_1 = _mm_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42);
-    rho_rpi_3_3 = _mm_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42);
-    rho_rmi_3_3 = _mm_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42);
-    rho_rpi_5_5 = _mm_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42);
-    rho_rmi_5_5 = _mm_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42);
-    rho_rpi_7_7 = _mm_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42);
-    rho_rmi_7_7 = _mm_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42);
-
-    rho_rpi_5_5 = _mm_slli_epi16(rho_rpi_5_5, 1);
-    rho_rmi_5_5 = _mm_slli_epi16(rho_rmi_5_5, 1);
-    rho_rpi_7_7 = _mm_slli_epi16(rho_rpi_7_7, 2);
-    rho_rmi_7_7 = _mm_slli_epi16(rho_rmi_7_7, 2);
-
-    xmm4 = _mm_mulhi_epi16(xmm2, ONE_OVER_SQRT_42);
-    xmm5 = _mm_mulhi_epi16(xmm3, ONE_OVER_SQRT_42);
-    xmm6 = _mm_mulhi_epi16(xmm3, THREE_OVER_SQRT_42);
-    xmm7 = _mm_mulhi_epi16(xmm3, FIVE_OVER_SQRT_42);
-    xmm8 = _mm_mulhi_epi16(xmm3, SEVEN_OVER_SQRT_42);
-    xmm7 = _mm_slli_epi16(xmm7, 1);
-    xmm8 = _mm_slli_epi16(xmm8, 2);
-
-    rho_rpi_1_3 = _mm_adds_epi16(xmm4, xmm6);
-    rho_rmi_1_3 = _mm_subs_epi16(xmm4, xmm6);
-    rho_rpi_1_5 = _mm_adds_epi16(xmm4, xmm7);
-    rho_rmi_1_5 = _mm_subs_epi16(xmm4, xmm7);
-    rho_rpi_1_7 = _mm_adds_epi16(xmm4, xmm8);
-    rho_rmi_1_7 = _mm_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm_mulhi_epi16(xmm2, THREE_OVER_SQRT_42);
-    rho_rpi_3_1 = _mm_adds_epi16(xmm4, xmm5);
-    rho_rmi_3_1 = _mm_subs_epi16(xmm4, xmm5);
-    rho_rpi_3_5 = _mm_adds_epi16(xmm4, xmm7);
-    rho_rmi_3_5 = _mm_subs_epi16(xmm4, xmm7);
-    rho_rpi_3_7 = _mm_adds_epi16(xmm4, xmm8);
-    rho_rmi_3_7 = _mm_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm_mulhi_epi16(xmm2, FIVE_OVER_SQRT_42);
-    xmm4 = _mm_slli_epi16(xmm4, 1);
-    rho_rpi_5_1 = _mm_adds_epi16(xmm4, xmm5);
-    rho_rmi_5_1 = _mm_subs_epi16(xmm4, xmm5);
-    rho_rpi_5_3 = _mm_adds_epi16(xmm4, xmm6);
-    rho_rmi_5_3 = _mm_subs_epi16(xmm4, xmm6);
-    rho_rpi_5_7 = _mm_adds_epi16(xmm4, xmm8);
-    rho_rmi_5_7 = _mm_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm_mulhi_epi16(xmm2, SEVEN_OVER_SQRT_42);
-    xmm4 = _mm_slli_epi16(xmm4, 2);
-    rho_rpi_7_1 = _mm_adds_epi16(xmm4, xmm5);
-    rho_rmi_7_1 = _mm_subs_epi16(xmm4, xmm5);
-    rho_rpi_7_3 = _mm_adds_epi16(xmm4, xmm6);
-    rho_rmi_7_3 = _mm_subs_epi16(xmm4, xmm6);
-    rho_rpi_7_5 = _mm_adds_epi16(xmm4, xmm7);
-    rho_rmi_7_5 = _mm_subs_epi16(xmm4, xmm7);
-
-    // Rearrange interfering MF output
-    xmm0 = stream1_128i_in[i];
-    xmm1 = stream1_128i_in[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
-    y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
-
-    // Psi_r calculation from rho_rpi or rho_rmi
-    xmm0 = _mm_setzero_si128(); // ZERO for abs_pi16
-    xmm2 = _mm_subs_epi16(rho_rpi_7_7, y1r);
-    psi_r_p7_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_5, y1r);
-    psi_r_p7_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_3, y1r);
-    psi_r_p7_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_1, y1r);
-    psi_r_p7_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_1, y1r);
-    psi_r_p7_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_3, y1r);
-    psi_r_p7_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_5, y1r);
-    psi_r_p7_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_7, y1r);
-    psi_r_p7_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_7, y1r);
-    psi_r_p5_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_5, y1r);
-    psi_r_p5_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_3, y1r);
-    psi_r_p5_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_1, y1r);
-    psi_r_p5_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_1, y1r);
-    psi_r_p5_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_3, y1r);
-    psi_r_p5_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_5, y1r);
-    psi_r_p5_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_7, y1r);
-    psi_r_p5_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_7, y1r);
-    psi_r_p3_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_5, y1r);
-    psi_r_p3_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_3, y1r);
-    psi_r_p3_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_1, y1r);
-    psi_r_p3_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_1, y1r);
-    psi_r_p3_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_3, y1r);
-    psi_r_p3_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_5, y1r);
-    psi_r_p3_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_7, y1r);
-    psi_r_p3_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_7, y1r);
-    psi_r_p1_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_5, y1r);
-    psi_r_p1_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_3, y1r);
-    psi_r_p1_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_1, y1r);
-    psi_r_p1_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_1, y1r);
-    psi_r_p1_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_3, y1r);
-    psi_r_p1_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_5, y1r);
-    psi_r_p1_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_7, y1r);
-    psi_r_p1_m7 = _mm_abs_epi16(xmm2);
-
-    xmm2 = _mm_adds_epi16(rho_rmi_1_7, y1r);
-    psi_r_m1_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_5, y1r);
-    psi_r_m1_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_3, y1r);
-    psi_r_m1_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_1, y1r);
-    psi_r_m1_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_1, y1r);
-    psi_r_m1_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_3, y1r);
-    psi_r_m1_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_5, y1r);
-    psi_r_m1_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_7, y1r);
-    psi_r_m1_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_7, y1r);
-    psi_r_m3_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_5, y1r);
-    psi_r_m3_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_3, y1r);
-    psi_r_m3_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_1, y1r);
-    psi_r_m3_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_1, y1r);
-    psi_r_m3_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_3, y1r);
-    psi_r_m3_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_5, y1r);
-    psi_r_m3_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_7, y1r);
-    psi_r_m3_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_7, y1r);
-    psi_r_m5_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_5, y1r);
-    psi_r_m5_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_3, y1r);
-    psi_r_m5_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_1, y1r);
-    psi_r_m5_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_1, y1r);
-    psi_r_m5_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_3, y1r);
-    psi_r_m5_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_5, y1r);
-    psi_r_m5_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_7, y1r);
-    psi_r_m5_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_7, y1r);
-    psi_r_m7_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_5, y1r);
-    psi_r_m7_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_3, y1r);
-    psi_r_m7_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_1, y1r);
-    psi_r_m7_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_1, y1r);
-    psi_r_m7_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_3, y1r);
-    psi_r_m7_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_5, y1r);
-    psi_r_m7_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_7, y1r);
-    psi_r_m7_m7 = _mm_abs_epi16(xmm2);
-
-    // Psi_i calculation from rho_rpi or rho_rmi
-    xmm2 = _mm_subs_epi16(rho_rmi_7_7, y1i);
-    psi_i_p7_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_7, y1i);
-    psi_i_p7_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_7, y1i);
-    psi_i_p7_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_7, y1i);
-    psi_i_p7_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_7, y1i);
-    psi_i_p7_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_7, y1i);
-    psi_i_p7_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_7, y1i);
-    psi_i_p7_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_7, y1i);
-    psi_i_p7_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_5, y1i);
-    psi_i_p5_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_5, y1i);
-    psi_i_p5_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_5, y1i);
-    psi_i_p5_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_5, y1i);
-    psi_i_p5_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_5, y1i);
-    psi_i_p5_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_5, y1i);
-    psi_i_p5_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_5, y1i);
-    psi_i_p5_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_5, y1i);
-    psi_i_p5_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_3, y1i);
-    psi_i_p3_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_3, y1i);
-    psi_i_p3_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_3, y1i);
-    psi_i_p3_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_3, y1i);
-    psi_i_p3_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_3, y1i);
-    psi_i_p3_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_3, y1i);
-    psi_i_p3_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_3, y1i);
-    psi_i_p3_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_3, y1i);
-    psi_i_p3_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_1, y1i);
-    psi_i_p1_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_1, y1i);
-    psi_i_p1_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_1, y1i);
-    psi_i_p1_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_1, y1i);
-    psi_i_p1_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_1, y1i);
-    psi_i_p1_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_1, y1i);
-    psi_i_p1_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_1, y1i);
-    psi_i_p1_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_1, y1i);
-    psi_i_p1_m7 = _mm_abs_epi16(xmm2);
-
-    xmm2 = _mm_subs_epi16(rho_rpi_7_1, y1i);
-    psi_i_m1_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_1, y1i);
-    psi_i_m1_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_1, y1i);
-    psi_i_m1_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_1, y1i);
-    psi_i_m1_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_1, y1i);
-    psi_i_m1_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_1, y1i);
-    psi_i_m1_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_1, y1i);
-    psi_i_m1_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_1, y1i);
-    psi_i_m1_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_3, y1i);
-    psi_i_m3_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_3, y1i);
-    psi_i_m3_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_3, y1i);
-    psi_i_m3_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_3, y1i);
-    psi_i_m3_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_3, y1i);
-    psi_i_m3_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_3, y1i);
-    psi_i_m3_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_3, y1i);
-    psi_i_m3_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_3, y1i);
-    psi_i_m3_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_5, y1i);
-    psi_i_m5_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_5, y1i);
-    psi_i_m5_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_5, y1i);
-    psi_i_m5_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_5, y1i);
-    psi_i_m5_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_5, y1i);
-    psi_i_m5_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_5, y1i);
-    psi_i_m5_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_5, y1i);
-    psi_i_m5_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_5, y1i);
-    psi_i_m5_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_7, y1i);
-    psi_i_m7_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_7, y1i);
-    psi_i_m7_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_7, y1i);
-    psi_i_m7_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_7, y1i);
-    psi_i_m7_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_7, y1i);
-    psi_i_m7_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_7, y1i);
-    psi_i_m7_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_7, y1i);
-    psi_i_m7_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_7, y1i);
-    psi_i_m7_m7 = _mm_abs_epi16(xmm2);
-
-
-    // Rearrange desired MF output
-    xmm0 = stream0_128i_in[i];
-    xmm1 = stream0_128i_in[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y0r = _mm_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)]
-    y0i = _mm_unpackhi_epi64(xmm0,xmm1);
-
-    // Rearrange desired channel magnitudes
-    xmm2 = ch_mag_128i[i]; // = [|h|^2(1),|h|^2(1),|h|^2(2),|h|^2(2)]*(2/sqrt(10))
-    xmm3 = ch_mag_128i[i+1]; // = [|h|^2(3),|h|^2(3),|h|^2(4),|h|^2(4)]*(2/sqrt(10))
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    ch_mag_des = _mm_unpacklo_epi64(xmm2,xmm3);
-
-    y0r_one_over_sqrt_21   = _mm_mulhi_epi16(y0r, ONE_OVER_SQRT_42);
-    y0r_three_over_sqrt_21 = _mm_mulhi_epi16(y0r, THREE_OVER_SQRT_42);
-    y0r_five_over_sqrt_21  = _mm_mulhi_epi16(y0r, FIVE_OVER_SQRT_42);
-    y0r_five_over_sqrt_21  = _mm_slli_epi16(y0r_five_over_sqrt_21, 1);
-    y0r_seven_over_sqrt_21 = _mm_mulhi_epi16(y0r, SEVEN_OVER_SQRT_42);
-    y0r_seven_over_sqrt_21 = _mm_slli_epi16(y0r_seven_over_sqrt_21, 2); // Q2.14
-
-    y0i_one_over_sqrt_21   = _mm_mulhi_epi16(y0i, ONE_OVER_SQRT_42);
-    y0i_three_over_sqrt_21 = _mm_mulhi_epi16(y0i, THREE_OVER_SQRT_42);
-    y0i_five_over_sqrt_21  = _mm_mulhi_epi16(y0i, FIVE_OVER_SQRT_42);
-    y0i_five_over_sqrt_21  = _mm_slli_epi16(y0i_five_over_sqrt_21, 1);
-    y0i_seven_over_sqrt_21 = _mm_mulhi_epi16(y0i, SEVEN_OVER_SQRT_42);
-    y0i_seven_over_sqrt_21 = _mm_slli_epi16(y0i_seven_over_sqrt_21, 2); // Q2.14
-
-    y0_p_7_1 = _mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_7_3 = _mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_7_5 = _mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_7_7 = _mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_5_1 = _mm_adds_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_5_3 = _mm_adds_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_5_5 = _mm_adds_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_5_7 = _mm_adds_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_3_1 = _mm_adds_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_3_3 = _mm_adds_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_3_5 = _mm_adds_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_3_7 = _mm_adds_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_1_1 = _mm_adds_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_1_3 = _mm_adds_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_1_5 = _mm_adds_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_1_7 = _mm_adds_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
-
-    y0_m_1_1 = _mm_subs_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_1_3 = _mm_subs_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_1_5 = _mm_subs_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_1_7 = _mm_subs_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_3_1 = _mm_subs_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_3_3 = _mm_subs_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_3_5 = _mm_subs_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_3_7 = _mm_subs_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_5_1 = _mm_subs_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_5_3 = _mm_subs_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_5_5 = _mm_subs_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_5_7 = _mm_subs_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_7_1 = _mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_7_3 = _mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_7_5 = _mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_7_7 = _mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
-
-    // divide by sqrt(2)
-    psi_r_p7_p7 = _mm_mulhi_epi16(psi_r_p7_p7, ONE_OVER_SQRT_2);
-    psi_r_p7_p7 = _mm_slli_epi16(psi_r_p7_p7, 1);
-    psi_r_p7_p5 = _mm_mulhi_epi16(psi_r_p7_p5, ONE_OVER_SQRT_2);
-    psi_r_p7_p5 = _mm_slli_epi16(psi_r_p7_p5, 1);
-    psi_r_p7_p3 = _mm_mulhi_epi16(psi_r_p7_p3, ONE_OVER_SQRT_2);
-    psi_r_p7_p3 = _mm_slli_epi16(psi_r_p7_p3, 1);
-    psi_r_p7_p1 = _mm_mulhi_epi16(psi_r_p7_p1, ONE_OVER_SQRT_2);
-    psi_r_p7_p1 = _mm_slli_epi16(psi_r_p7_p1, 1);
-    psi_r_p7_m1 = _mm_mulhi_epi16(psi_r_p7_m1, ONE_OVER_SQRT_2);
-    psi_r_p7_m1 = _mm_slli_epi16(psi_r_p7_m1, 1);
-    psi_r_p7_m3 = _mm_mulhi_epi16(psi_r_p7_m3, ONE_OVER_SQRT_2);
-    psi_r_p7_m3 = _mm_slli_epi16(psi_r_p7_m3, 1);
-    psi_r_p7_m5 = _mm_mulhi_epi16(psi_r_p7_m5, ONE_OVER_SQRT_2);
-    psi_r_p7_m5 = _mm_slli_epi16(psi_r_p7_m5, 1);
-    psi_r_p7_m7 = _mm_mulhi_epi16(psi_r_p7_m7, ONE_OVER_SQRT_2);
-    psi_r_p7_m7 = _mm_slli_epi16(psi_r_p7_m7, 1);
-    psi_r_p5_p7 = _mm_mulhi_epi16(psi_r_p5_p7, ONE_OVER_SQRT_2);
-    psi_r_p5_p7 = _mm_slli_epi16(psi_r_p5_p7, 1);
-    psi_r_p5_p5 = _mm_mulhi_epi16(psi_r_p5_p5, ONE_OVER_SQRT_2);
-    psi_r_p5_p5 = _mm_slli_epi16(psi_r_p5_p5, 1);
-    psi_r_p5_p3 = _mm_mulhi_epi16(psi_r_p5_p3, ONE_OVER_SQRT_2);
-    psi_r_p5_p3 = _mm_slli_epi16(psi_r_p5_p3, 1);
-    psi_r_p5_p1 = _mm_mulhi_epi16(psi_r_p5_p1, ONE_OVER_SQRT_2);
-    psi_r_p5_p1 = _mm_slli_epi16(psi_r_p5_p1, 1);
-    psi_r_p5_m1 = _mm_mulhi_epi16(psi_r_p5_m1, ONE_OVER_SQRT_2);
-    psi_r_p5_m1 = _mm_slli_epi16(psi_r_p5_m1, 1);
-    psi_r_p5_m3 = _mm_mulhi_epi16(psi_r_p5_m3, ONE_OVER_SQRT_2);
-    psi_r_p5_m3 = _mm_slli_epi16(psi_r_p5_m3, 1);
-    psi_r_p5_m5 = _mm_mulhi_epi16(psi_r_p5_m5, ONE_OVER_SQRT_2);
-    psi_r_p5_m5 = _mm_slli_epi16(psi_r_p5_m5, 1);
-    psi_r_p5_m7 = _mm_mulhi_epi16(psi_r_p5_m7, ONE_OVER_SQRT_2);
-    psi_r_p5_m7 = _mm_slli_epi16(psi_r_p5_m7, 1);
-    psi_r_p3_p7 = _mm_mulhi_epi16(psi_r_p3_p7, ONE_OVER_SQRT_2);
-    psi_r_p3_p7 = _mm_slli_epi16(psi_r_p3_p7, 1);
-    psi_r_p3_p5 = _mm_mulhi_epi16(psi_r_p3_p5, ONE_OVER_SQRT_2);
-    psi_r_p3_p5 = _mm_slli_epi16(psi_r_p3_p5, 1);
-    psi_r_p3_p3 = _mm_mulhi_epi16(psi_r_p3_p3, ONE_OVER_SQRT_2);
-    psi_r_p3_p3 = _mm_slli_epi16(psi_r_p3_p3, 1);
-    psi_r_p3_p1 = _mm_mulhi_epi16(psi_r_p3_p1, ONE_OVER_SQRT_2);
-    psi_r_p3_p1 = _mm_slli_epi16(psi_r_p3_p1, 1);
-    psi_r_p3_m1 = _mm_mulhi_epi16(psi_r_p3_m1, ONE_OVER_SQRT_2);
-    psi_r_p3_m1 = _mm_slli_epi16(psi_r_p3_m1, 1);
-    psi_r_p3_m3 = _mm_mulhi_epi16(psi_r_p3_m3, ONE_OVER_SQRT_2);
-    psi_r_p3_m3 = _mm_slli_epi16(psi_r_p3_m3, 1);
-    psi_r_p3_m5 = _mm_mulhi_epi16(psi_r_p3_m5, ONE_OVER_SQRT_2);
-    psi_r_p3_m5 = _mm_slli_epi16(psi_r_p3_m5, 1);
-    psi_r_p3_m7 = _mm_mulhi_epi16(psi_r_p3_m7, ONE_OVER_SQRT_2);
-    psi_r_p3_m7 = _mm_slli_epi16(psi_r_p3_m7, 1);
-    psi_r_p1_p7 = _mm_mulhi_epi16(psi_r_p1_p7, ONE_OVER_SQRT_2);
-    psi_r_p1_p7 = _mm_slli_epi16(psi_r_p1_p7, 1);
-    psi_r_p1_p5 = _mm_mulhi_epi16(psi_r_p1_p5, ONE_OVER_SQRT_2);
-    psi_r_p1_p5 = _mm_slli_epi16(psi_r_p1_p5, 1);
-    psi_r_p1_p3 = _mm_mulhi_epi16(psi_r_p1_p3, ONE_OVER_SQRT_2);
-    psi_r_p1_p3 = _mm_slli_epi16(psi_r_p1_p3, 1);
-    psi_r_p1_p1 = _mm_mulhi_epi16(psi_r_p1_p1, ONE_OVER_SQRT_2);
-    psi_r_p1_p1 = _mm_slli_epi16(psi_r_p1_p1, 1);
-    psi_r_p1_m1 = _mm_mulhi_epi16(psi_r_p1_m1, ONE_OVER_SQRT_2);
-    psi_r_p1_m1 = _mm_slli_epi16(psi_r_p1_m1, 1);
-    psi_r_p1_m3 = _mm_mulhi_epi16(psi_r_p1_m3, ONE_OVER_SQRT_2);
-    psi_r_p1_m3 = _mm_slli_epi16(psi_r_p1_m3, 1);
-    psi_r_p1_m5 = _mm_mulhi_epi16(psi_r_p1_m5, ONE_OVER_SQRT_2);
-    psi_r_p1_m5 = _mm_slli_epi16(psi_r_p1_m5, 1);
-    psi_r_p1_m7 = _mm_mulhi_epi16(psi_r_p1_m7, ONE_OVER_SQRT_2);
-    psi_r_p1_m7 = _mm_slli_epi16(psi_r_p1_m7, 1);
-    psi_r_m1_p7 = _mm_mulhi_epi16(psi_r_m1_p7, ONE_OVER_SQRT_2);
-    psi_r_m1_p7 = _mm_slli_epi16(psi_r_m1_p7, 1);
-    psi_r_m1_p5 = _mm_mulhi_epi16(psi_r_m1_p5, ONE_OVER_SQRT_2);
-    psi_r_m1_p5 = _mm_slli_epi16(psi_r_m1_p5, 1);
-    psi_r_m1_p3 = _mm_mulhi_epi16(psi_r_m1_p3, ONE_OVER_SQRT_2);
-    psi_r_m1_p3 = _mm_slli_epi16(psi_r_m1_p3, 1);
-    psi_r_m1_p1 = _mm_mulhi_epi16(psi_r_m1_p1, ONE_OVER_SQRT_2);
-    psi_r_m1_p1 = _mm_slli_epi16(psi_r_m1_p1, 1);
-    psi_r_m1_m1 = _mm_mulhi_epi16(psi_r_m1_m1, ONE_OVER_SQRT_2);
-    psi_r_m1_m1 = _mm_slli_epi16(psi_r_m1_m1, 1);
-    psi_r_m1_m3 = _mm_mulhi_epi16(psi_r_m1_m3, ONE_OVER_SQRT_2);
-    psi_r_m1_m3 = _mm_slli_epi16(psi_r_m1_m3, 1);
-    psi_r_m1_m5 = _mm_mulhi_epi16(psi_r_m1_m5, ONE_OVER_SQRT_2);
-    psi_r_m1_m5 = _mm_slli_epi16(psi_r_m1_m5, 1);
-    psi_r_m1_m7 = _mm_mulhi_epi16(psi_r_m1_m7, ONE_OVER_SQRT_2);
-    psi_r_m1_m7 = _mm_slli_epi16(psi_r_m1_m7, 1);
-    psi_r_m3_p7 = _mm_mulhi_epi16(psi_r_m3_p7, ONE_OVER_SQRT_2);
-    psi_r_m3_p7 = _mm_slli_epi16(psi_r_m3_p7, 1);
-    psi_r_m3_p5 = _mm_mulhi_epi16(psi_r_m3_p5, ONE_OVER_SQRT_2);
-    psi_r_m3_p5 = _mm_slli_epi16(psi_r_m3_p5, 1);
-    psi_r_m3_p3 = _mm_mulhi_epi16(psi_r_m3_p3, ONE_OVER_SQRT_2);
-    psi_r_m3_p3 = _mm_slli_epi16(psi_r_m3_p3, 1);
-    psi_r_m3_p1 = _mm_mulhi_epi16(psi_r_m3_p1, ONE_OVER_SQRT_2);
-    psi_r_m3_p1 = _mm_slli_epi16(psi_r_m3_p1, 1);
-    psi_r_m3_m1 = _mm_mulhi_epi16(psi_r_m3_m1, ONE_OVER_SQRT_2);
-    psi_r_m3_m1 = _mm_slli_epi16(psi_r_m3_m1, 1);
-    psi_r_m3_m3 = _mm_mulhi_epi16(psi_r_m3_m3, ONE_OVER_SQRT_2);
-    psi_r_m3_m3 = _mm_slli_epi16(psi_r_m3_m3, 1);
-    psi_r_m3_m5 = _mm_mulhi_epi16(psi_r_m3_m5, ONE_OVER_SQRT_2);
-    psi_r_m3_m5 = _mm_slli_epi16(psi_r_m3_m5, 1);
-    psi_r_m3_m7 = _mm_mulhi_epi16(psi_r_m3_m7, ONE_OVER_SQRT_2);
-    psi_r_m3_m7 = _mm_slli_epi16(psi_r_m3_m7, 1);
-    psi_r_m5_p7 = _mm_mulhi_epi16(psi_r_m5_p7, ONE_OVER_SQRT_2);
-    psi_r_m5_p7 = _mm_slli_epi16(psi_r_m5_p7, 1);
-    psi_r_m5_p5 = _mm_mulhi_epi16(psi_r_m5_p5, ONE_OVER_SQRT_2);
-    psi_r_m5_p5 = _mm_slli_epi16(psi_r_m5_p5, 1);
-    psi_r_m5_p3 = _mm_mulhi_epi16(psi_r_m5_p3, ONE_OVER_SQRT_2);
-    psi_r_m5_p3 = _mm_slli_epi16(psi_r_m5_p3, 1);
-    psi_r_m5_p1 = _mm_mulhi_epi16(psi_r_m5_p1, ONE_OVER_SQRT_2);
-    psi_r_m5_p1 = _mm_slli_epi16(psi_r_m5_p1, 1);
-    psi_r_m5_m1 = _mm_mulhi_epi16(psi_r_m5_m1, ONE_OVER_SQRT_2);
-    psi_r_m5_m1 = _mm_slli_epi16(psi_r_m5_m1, 1);
-    psi_r_m5_m3 = _mm_mulhi_epi16(psi_r_m5_m3, ONE_OVER_SQRT_2);
-    psi_r_m5_m3 = _mm_slli_epi16(psi_r_m5_m3, 1);
-    psi_r_m5_m5 = _mm_mulhi_epi16(psi_r_m5_m5, ONE_OVER_SQRT_2);
-    psi_r_m5_m5 = _mm_slli_epi16(psi_r_m5_m5, 1);
-    psi_r_m5_m7 = _mm_mulhi_epi16(psi_r_m5_m7, ONE_OVER_SQRT_2);
-    psi_r_m5_m7 = _mm_slli_epi16(psi_r_m5_m7, 1);
-    psi_r_m7_p7 = _mm_mulhi_epi16(psi_r_m7_p7, ONE_OVER_SQRT_2);
-    psi_r_m7_p7 = _mm_slli_epi16(psi_r_m7_p7, 1);
-    psi_r_m7_p5 = _mm_mulhi_epi16(psi_r_m7_p5, ONE_OVER_SQRT_2);
-    psi_r_m7_p5 = _mm_slli_epi16(psi_r_m7_p5, 1);
-    psi_r_m7_p3 = _mm_mulhi_epi16(psi_r_m7_p3, ONE_OVER_SQRT_2);
-    psi_r_m7_p3 = _mm_slli_epi16(psi_r_m7_p3, 1);
-    psi_r_m7_p1 = _mm_mulhi_epi16(psi_r_m7_p1, ONE_OVER_SQRT_2);
-    psi_r_m7_p1 = _mm_slli_epi16(psi_r_m7_p1, 1);
-    psi_r_m7_m1 = _mm_mulhi_epi16(psi_r_m7_m1, ONE_OVER_SQRT_2);
-    psi_r_m7_m1 = _mm_slli_epi16(psi_r_m7_m1, 1);
-    psi_r_m7_m3 = _mm_mulhi_epi16(psi_r_m7_m3, ONE_OVER_SQRT_2);
-    psi_r_m7_m3 = _mm_slli_epi16(psi_r_m7_m3, 1);
-    psi_r_m7_m5 = _mm_mulhi_epi16(psi_r_m7_m5, ONE_OVER_SQRT_2);
-    psi_r_m7_m5 = _mm_slli_epi16(psi_r_m7_m5, 1);
-    psi_r_m7_m7 = _mm_mulhi_epi16(psi_r_m7_m7, ONE_OVER_SQRT_2);
-    psi_r_m7_m7 = _mm_slli_epi16(psi_r_m7_m7, 1);
-
-    psi_i_p7_p7 = _mm_mulhi_epi16(psi_i_p7_p7, ONE_OVER_SQRT_2);
-    psi_i_p7_p7 = _mm_slli_epi16(psi_i_p7_p7, 1);
-    psi_i_p7_p5 = _mm_mulhi_epi16(psi_i_p7_p5, ONE_OVER_SQRT_2);
-    psi_i_p7_p5 = _mm_slli_epi16(psi_i_p7_p5, 1);
-    psi_i_p7_p3 = _mm_mulhi_epi16(psi_i_p7_p3, ONE_OVER_SQRT_2);
-    psi_i_p7_p3 = _mm_slli_epi16(psi_i_p7_p3, 1);
-    psi_i_p7_p1 = _mm_mulhi_epi16(psi_i_p7_p1, ONE_OVER_SQRT_2);
-    psi_i_p7_p1 = _mm_slli_epi16(psi_i_p7_p1, 1);
-    psi_i_p7_m1 = _mm_mulhi_epi16(psi_i_p7_m1, ONE_OVER_SQRT_2);
-    psi_i_p7_m1 = _mm_slli_epi16(psi_i_p7_m1, 1);
-    psi_i_p7_m3 = _mm_mulhi_epi16(psi_i_p7_m3, ONE_OVER_SQRT_2);
-    psi_i_p7_m3 = _mm_slli_epi16(psi_i_p7_m3, 1);
-    psi_i_p7_m5 = _mm_mulhi_epi16(psi_i_p7_m5, ONE_OVER_SQRT_2);
-    psi_i_p7_m5 = _mm_slli_epi16(psi_i_p7_m5, 1);
-    psi_i_p7_m7 = _mm_mulhi_epi16(psi_i_p7_m7, ONE_OVER_SQRT_2);
-    psi_i_p7_m7 = _mm_slli_epi16(psi_i_p7_m7, 1);
-    psi_i_p5_p7 = _mm_mulhi_epi16(psi_i_p5_p7, ONE_OVER_SQRT_2);
-    psi_i_p5_p7 = _mm_slli_epi16(psi_i_p5_p7, 1);
-    psi_i_p5_p5 = _mm_mulhi_epi16(psi_i_p5_p5, ONE_OVER_SQRT_2);
-    psi_i_p5_p5 = _mm_slli_epi16(psi_i_p5_p5, 1);
-    psi_i_p5_p3 = _mm_mulhi_epi16(psi_i_p5_p3, ONE_OVER_SQRT_2);
-    psi_i_p5_p3 = _mm_slli_epi16(psi_i_p5_p3, 1);
-    psi_i_p5_p1 = _mm_mulhi_epi16(psi_i_p5_p1, ONE_OVER_SQRT_2);
-    psi_i_p5_p1 = _mm_slli_epi16(psi_i_p5_p1, 1);
-    psi_i_p5_m1 = _mm_mulhi_epi16(psi_i_p5_m1, ONE_OVER_SQRT_2);
-    psi_i_p5_m1 = _mm_slli_epi16(psi_i_p5_m1, 1);
-    psi_i_p5_m3 = _mm_mulhi_epi16(psi_i_p5_m3, ONE_OVER_SQRT_2);
-    psi_i_p5_m3 = _mm_slli_epi16(psi_i_p5_m3, 1);
-    psi_i_p5_m5 = _mm_mulhi_epi16(psi_i_p5_m5, ONE_OVER_SQRT_2);
-    psi_i_p5_m5 = _mm_slli_epi16(psi_i_p5_m5, 1);
-    psi_i_p5_m7 = _mm_mulhi_epi16(psi_i_p5_m7, ONE_OVER_SQRT_2);
-    psi_i_p5_m7 = _mm_slli_epi16(psi_i_p5_m7, 1);
-    psi_i_p3_p7 = _mm_mulhi_epi16(psi_i_p3_p7, ONE_OVER_SQRT_2);
-    psi_i_p3_p7 = _mm_slli_epi16(psi_i_p3_p7, 1);
-    psi_i_p3_p5 = _mm_mulhi_epi16(psi_i_p3_p5, ONE_OVER_SQRT_2);
-    psi_i_p3_p5 = _mm_slli_epi16(psi_i_p3_p5, 1);
-    psi_i_p3_p3 = _mm_mulhi_epi16(psi_i_p3_p3, ONE_OVER_SQRT_2);
-    psi_i_p3_p3 = _mm_slli_epi16(psi_i_p3_p3, 1);
-    psi_i_p3_p1 = _mm_mulhi_epi16(psi_i_p3_p1, ONE_OVER_SQRT_2);
-    psi_i_p3_p1 = _mm_slli_epi16(psi_i_p3_p1, 1);
-    psi_i_p3_m1 = _mm_mulhi_epi16(psi_i_p3_m1, ONE_OVER_SQRT_2);
-    psi_i_p3_m1 = _mm_slli_epi16(psi_i_p3_m1, 1);
-    psi_i_p3_m3 = _mm_mulhi_epi16(psi_i_p3_m3, ONE_OVER_SQRT_2);
-    psi_i_p3_m3 = _mm_slli_epi16(psi_i_p3_m3, 1);
-    psi_i_p3_m5 = _mm_mulhi_epi16(psi_i_p3_m5, ONE_OVER_SQRT_2);
-    psi_i_p3_m5 = _mm_slli_epi16(psi_i_p3_m5, 1);
-    psi_i_p3_m7 = _mm_mulhi_epi16(psi_i_p3_m7, ONE_OVER_SQRT_2);
-    psi_i_p3_m7 = _mm_slli_epi16(psi_i_p3_m7, 1);
-    psi_i_p1_p7 = _mm_mulhi_epi16(psi_i_p1_p7, ONE_OVER_SQRT_2);
-    psi_i_p1_p7 = _mm_slli_epi16(psi_i_p1_p7, 1);
-    psi_i_p1_p5 = _mm_mulhi_epi16(psi_i_p1_p5, ONE_OVER_SQRT_2);
-    psi_i_p1_p5 = _mm_slli_epi16(psi_i_p1_p5, 1);
-    psi_i_p1_p3 = _mm_mulhi_epi16(psi_i_p1_p3, ONE_OVER_SQRT_2);
-    psi_i_p1_p3 = _mm_slli_epi16(psi_i_p1_p3, 1);
-    psi_i_p1_p1 = _mm_mulhi_epi16(psi_i_p1_p1, ONE_OVER_SQRT_2);
-    psi_i_p1_p1 = _mm_slli_epi16(psi_i_p1_p1, 1);
-    psi_i_p1_m1 = _mm_mulhi_epi16(psi_i_p1_m1, ONE_OVER_SQRT_2);
-    psi_i_p1_m1 = _mm_slli_epi16(psi_i_p1_m1, 1);
-    psi_i_p1_m3 = _mm_mulhi_epi16(psi_i_p1_m3, ONE_OVER_SQRT_2);
-    psi_i_p1_m3 = _mm_slli_epi16(psi_i_p1_m3, 1);
-    psi_i_p1_m5 = _mm_mulhi_epi16(psi_i_p1_m5, ONE_OVER_SQRT_2);
-    psi_i_p1_m5 = _mm_slli_epi16(psi_i_p1_m5, 1);
-    psi_i_p1_m7 = _mm_mulhi_epi16(psi_i_p1_m7, ONE_OVER_SQRT_2);
-    psi_i_p1_m7 = _mm_slli_epi16(psi_i_p1_m7, 1);
-    psi_i_m1_p7 = _mm_mulhi_epi16(psi_i_m1_p7, ONE_OVER_SQRT_2);
-    psi_i_m1_p7 = _mm_slli_epi16(psi_i_m1_p7, 1);
-    psi_i_m1_p5 = _mm_mulhi_epi16(psi_i_m1_p5, ONE_OVER_SQRT_2);
-    psi_i_m1_p5 = _mm_slli_epi16(psi_i_m1_p5, 1);
-    psi_i_m1_p3 = _mm_mulhi_epi16(psi_i_m1_p3, ONE_OVER_SQRT_2);
-    psi_i_m1_p3 = _mm_slli_epi16(psi_i_m1_p3, 1);
-    psi_i_m1_p1 = _mm_mulhi_epi16(psi_i_m1_p1, ONE_OVER_SQRT_2);
-    psi_i_m1_p1 = _mm_slli_epi16(psi_i_m1_p1, 1);
-    psi_i_m1_m1 = _mm_mulhi_epi16(psi_i_m1_m1, ONE_OVER_SQRT_2);
-    psi_i_m1_m1 = _mm_slli_epi16(psi_i_m1_m1, 1);
-    psi_i_m1_m3 = _mm_mulhi_epi16(psi_i_m1_m3, ONE_OVER_SQRT_2);
-    psi_i_m1_m3 = _mm_slli_epi16(psi_i_m1_m3, 1);
-    psi_i_m1_m5 = _mm_mulhi_epi16(psi_i_m1_m5, ONE_OVER_SQRT_2);
-    psi_i_m1_m5 = _mm_slli_epi16(psi_i_m1_m5, 1);
-    psi_i_m1_m7 = _mm_mulhi_epi16(psi_i_m1_m7, ONE_OVER_SQRT_2);
-    psi_i_m1_m7 = _mm_slli_epi16(psi_i_m1_m7, 1);
-    psi_i_m3_p7 = _mm_mulhi_epi16(psi_i_m3_p7, ONE_OVER_SQRT_2);
-    psi_i_m3_p7 = _mm_slli_epi16(psi_i_m3_p7, 1);
-    psi_i_m3_p5 = _mm_mulhi_epi16(psi_i_m3_p5, ONE_OVER_SQRT_2);
-    psi_i_m3_p5 = _mm_slli_epi16(psi_i_m3_p5, 1);
-    psi_i_m3_p3 = _mm_mulhi_epi16(psi_i_m3_p3, ONE_OVER_SQRT_2);
-    psi_i_m3_p3 = _mm_slli_epi16(psi_i_m3_p3, 1);
-    psi_i_m3_p1 = _mm_mulhi_epi16(psi_i_m3_p1, ONE_OVER_SQRT_2);
-    psi_i_m3_p1 = _mm_slli_epi16(psi_i_m3_p1, 1);
-    psi_i_m3_m1 = _mm_mulhi_epi16(psi_i_m3_m1, ONE_OVER_SQRT_2);
-    psi_i_m3_m1 = _mm_slli_epi16(psi_i_m3_m1, 1);
-    psi_i_m3_m3 = _mm_mulhi_epi16(psi_i_m3_m3, ONE_OVER_SQRT_2);
-    psi_i_m3_m3 = _mm_slli_epi16(psi_i_m3_m3, 1);
-    psi_i_m3_m5 = _mm_mulhi_epi16(psi_i_m3_m5, ONE_OVER_SQRT_2);
-    psi_i_m3_m5 = _mm_slli_epi16(psi_i_m3_m5, 1);
-    psi_i_m3_m7 = _mm_mulhi_epi16(psi_i_m3_m7, ONE_OVER_SQRT_2);
-    psi_i_m3_m7 = _mm_slli_epi16(psi_i_m3_m7, 1);
-    psi_i_m5_p7 = _mm_mulhi_epi16(psi_i_m5_p7, ONE_OVER_SQRT_2);
-    psi_i_m5_p7 = _mm_slli_epi16(psi_i_m5_p7, 1);
-    psi_i_m5_p5 = _mm_mulhi_epi16(psi_i_m5_p5, ONE_OVER_SQRT_2);
-    psi_i_m5_p5 = _mm_slli_epi16(psi_i_m5_p5, 1);
-    psi_i_m5_p3 = _mm_mulhi_epi16(psi_i_m5_p3, ONE_OVER_SQRT_2);
-    psi_i_m5_p3 = _mm_slli_epi16(psi_i_m5_p3, 1);
-    psi_i_m5_p1 = _mm_mulhi_epi16(psi_i_m5_p1, ONE_OVER_SQRT_2);
-    psi_i_m5_p1 = _mm_slli_epi16(psi_i_m5_p1, 1);
-    psi_i_m5_m1 = _mm_mulhi_epi16(psi_i_m5_m1, ONE_OVER_SQRT_2);
-    psi_i_m5_m1 = _mm_slli_epi16(psi_i_m5_m1, 1);
-    psi_i_m5_m3 = _mm_mulhi_epi16(psi_i_m5_m3, ONE_OVER_SQRT_2);
-    psi_i_m5_m3 = _mm_slli_epi16(psi_i_m5_m3, 1);
-    psi_i_m5_m5 = _mm_mulhi_epi16(psi_i_m5_m5, ONE_OVER_SQRT_2);
-    psi_i_m5_m5 = _mm_slli_epi16(psi_i_m5_m5, 1);
-    psi_i_m5_m7 = _mm_mulhi_epi16(psi_i_m5_m7, ONE_OVER_SQRT_2);
-    psi_i_m5_m7 = _mm_slli_epi16(psi_i_m5_m7, 1);
-    psi_i_m7_p7 = _mm_mulhi_epi16(psi_i_m7_p7, ONE_OVER_SQRT_2);
-    psi_i_m7_p7 = _mm_slli_epi16(psi_i_m7_p7, 1);
-    psi_i_m7_p5 = _mm_mulhi_epi16(psi_i_m7_p5, ONE_OVER_SQRT_2);
-    psi_i_m7_p5 = _mm_slli_epi16(psi_i_m7_p5, 1);
-    psi_i_m7_p3 = _mm_mulhi_epi16(psi_i_m7_p3, ONE_OVER_SQRT_2);
-    psi_i_m7_p3 = _mm_slli_epi16(psi_i_m7_p3, 1);
-    psi_i_m7_p1 = _mm_mulhi_epi16(psi_i_m7_p1, ONE_OVER_SQRT_2);
-    psi_i_m7_p1 = _mm_slli_epi16(psi_i_m7_p1, 1);
-    psi_i_m7_m1 = _mm_mulhi_epi16(psi_i_m7_m1, ONE_OVER_SQRT_2);
-    psi_i_m7_m1 = _mm_slli_epi16(psi_i_m7_m1, 1);
-    psi_i_m7_m3 = _mm_mulhi_epi16(psi_i_m7_m3, ONE_OVER_SQRT_2);
-    psi_i_m7_m3 = _mm_slli_epi16(psi_i_m7_m3, 1);
-    psi_i_m7_m5 = _mm_mulhi_epi16(psi_i_m7_m5, ONE_OVER_SQRT_2);
-    psi_i_m7_m5 = _mm_slli_epi16(psi_i_m7_m5, 1);
-    psi_i_m7_m7 = _mm_mulhi_epi16(psi_i_m7_m7, ONE_OVER_SQRT_2);
-    psi_i_m7_m7 = _mm_slli_epi16(psi_i_m7_m7, 1);
-
-    psi_a_p7_p7 = _mm_adds_epi16(psi_r_p7_p7, psi_i_p7_p7);
-    psi_a_p7_p5 = _mm_adds_epi16(psi_r_p7_p5, psi_i_p7_p5);
-    psi_a_p7_p3 = _mm_adds_epi16(psi_r_p7_p3, psi_i_p7_p3);
-    psi_a_p7_p1 = _mm_adds_epi16(psi_r_p7_p1, psi_i_p7_p1);
-    psi_a_p7_m1 = _mm_adds_epi16(psi_r_p7_m1, psi_i_p7_m1);
-    psi_a_p7_m3 = _mm_adds_epi16(psi_r_p7_m3, psi_i_p7_m3);
-    psi_a_p7_m5 = _mm_adds_epi16(psi_r_p7_m5, psi_i_p7_m5);
-    psi_a_p7_m7 = _mm_adds_epi16(psi_r_p7_m7, psi_i_p7_m7);
-    psi_a_p5_p7 = _mm_adds_epi16(psi_r_p5_p7, psi_i_p5_p7);
-    psi_a_p5_p5 = _mm_adds_epi16(psi_r_p5_p5, psi_i_p5_p5);
-    psi_a_p5_p3 = _mm_adds_epi16(psi_r_p5_p3, psi_i_p5_p3);
-    psi_a_p5_p1 = _mm_adds_epi16(psi_r_p5_p1, psi_i_p5_p1);
-    psi_a_p5_m1 = _mm_adds_epi16(psi_r_p5_m1, psi_i_p5_m1);
-    psi_a_p5_m3 = _mm_adds_epi16(psi_r_p5_m3, psi_i_p5_m3);
-    psi_a_p5_m5 = _mm_adds_epi16(psi_r_p5_m5, psi_i_p5_m5);
-    psi_a_p5_m7 = _mm_adds_epi16(psi_r_p5_m7, psi_i_p5_m7);
-    psi_a_p3_p7 = _mm_adds_epi16(psi_r_p3_p7, psi_i_p3_p7);
-    psi_a_p3_p5 = _mm_adds_epi16(psi_r_p3_p5, psi_i_p3_p5);
-    psi_a_p3_p3 = _mm_adds_epi16(psi_r_p3_p3, psi_i_p3_p3);
-    psi_a_p3_p1 = _mm_adds_epi16(psi_r_p3_p1, psi_i_p3_p1);
-    psi_a_p3_m1 = _mm_adds_epi16(psi_r_p3_m1, psi_i_p3_m1);
-    psi_a_p3_m3 = _mm_adds_epi16(psi_r_p3_m3, psi_i_p3_m3);
-    psi_a_p3_m5 = _mm_adds_epi16(psi_r_p3_m5, psi_i_p3_m5);
-    psi_a_p3_m7 = _mm_adds_epi16(psi_r_p3_m7, psi_i_p3_m7);
-    psi_a_p1_p7 = _mm_adds_epi16(psi_r_p1_p7, psi_i_p1_p7);
-    psi_a_p1_p5 = _mm_adds_epi16(psi_r_p1_p5, psi_i_p1_p5);
-    psi_a_p1_p3 = _mm_adds_epi16(psi_r_p1_p3, psi_i_p1_p3);
-    psi_a_p1_p1 = _mm_adds_epi16(psi_r_p1_p1, psi_i_p1_p1);
-    psi_a_p1_m1 = _mm_adds_epi16(psi_r_p1_m1, psi_i_p1_m1);
-    psi_a_p1_m3 = _mm_adds_epi16(psi_r_p1_m3, psi_i_p1_m3);
-    psi_a_p1_m5 = _mm_adds_epi16(psi_r_p1_m5, psi_i_p1_m5);
-    psi_a_p1_m7 = _mm_adds_epi16(psi_r_p1_m7, psi_i_p1_m7);
-    psi_a_m1_p7 = _mm_adds_epi16(psi_r_m1_p7, psi_i_m1_p7);
-    psi_a_m1_p5 = _mm_adds_epi16(psi_r_m1_p5, psi_i_m1_p5);
-    psi_a_m1_p3 = _mm_adds_epi16(psi_r_m1_p3, psi_i_m1_p3);
-    psi_a_m1_p1 = _mm_adds_epi16(psi_r_m1_p1, psi_i_m1_p1);
-    psi_a_m1_m1 = _mm_adds_epi16(psi_r_m1_m1, psi_i_m1_m1);
-    psi_a_m1_m3 = _mm_adds_epi16(psi_r_m1_m3, psi_i_m1_m3);
-    psi_a_m1_m5 = _mm_adds_epi16(psi_r_m1_m5, psi_i_m1_m5);
-    psi_a_m1_m7 = _mm_adds_epi16(psi_r_m1_m7, psi_i_m1_m7);
-    psi_a_m3_p7 = _mm_adds_epi16(psi_r_m3_p7, psi_i_m3_p7);
-    psi_a_m3_p5 = _mm_adds_epi16(psi_r_m3_p5, psi_i_m3_p5);
-    psi_a_m3_p3 = _mm_adds_epi16(psi_r_m3_p3, psi_i_m3_p3);
-    psi_a_m3_p1 = _mm_adds_epi16(psi_r_m3_p1, psi_i_m3_p1);
-    psi_a_m3_m1 = _mm_adds_epi16(psi_r_m3_m1, psi_i_m3_m1);
-    psi_a_m3_m3 = _mm_adds_epi16(psi_r_m3_m3, psi_i_m3_m3);
-    psi_a_m3_m5 = _mm_adds_epi16(psi_r_m3_m5, psi_i_m3_m5);
-    psi_a_m3_m7 = _mm_adds_epi16(psi_r_m3_m7, psi_i_m3_m7);
-    psi_a_m5_p7 = _mm_adds_epi16(psi_r_m5_p7, psi_i_m5_p7);
-    psi_a_m5_p5 = _mm_adds_epi16(psi_r_m5_p5, psi_i_m5_p5);
-    psi_a_m5_p3 = _mm_adds_epi16(psi_r_m5_p3, psi_i_m5_p3);
-    psi_a_m5_p1 = _mm_adds_epi16(psi_r_m5_p1, psi_i_m5_p1);
-    psi_a_m5_m1 = _mm_adds_epi16(psi_r_m5_m1, psi_i_m5_m1);
-    psi_a_m5_m3 = _mm_adds_epi16(psi_r_m5_m3, psi_i_m5_m3);
-    psi_a_m5_m5 = _mm_adds_epi16(psi_r_m5_m5, psi_i_m5_m5);
-    psi_a_m5_m7 = _mm_adds_epi16(psi_r_m5_m7, psi_i_m5_m7);
-    psi_a_m7_p7 = _mm_adds_epi16(psi_r_m7_p7, psi_i_m7_p7);
-    psi_a_m7_p5 = _mm_adds_epi16(psi_r_m7_p5, psi_i_m7_p5);
-    psi_a_m7_p3 = _mm_adds_epi16(psi_r_m7_p3, psi_i_m7_p3);
-    psi_a_m7_p1 = _mm_adds_epi16(psi_r_m7_p1, psi_i_m7_p1);
-    psi_a_m7_m1 = _mm_adds_epi16(psi_r_m7_m1, psi_i_m7_m1);
-    psi_a_m7_m3 = _mm_adds_epi16(psi_r_m7_m3, psi_i_m7_m3);
-    psi_a_m7_m5 = _mm_adds_epi16(psi_r_m7_m5, psi_i_m7_m5);
-    psi_a_m7_m7 = _mm_adds_epi16(psi_r_m7_m7, psi_i_m7_m7);
-
-    // Computing different multiples of ||h0||^2
-    // x=1, y=1
-    ch_mag_2_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,ONE_OVER_FOUR_SQRT_42);
-    ch_mag_2_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_2_over_42_with_sigma2,1);
-    // x=1, y=3
-    ch_mag_10_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,FIVE_OVER_FOUR_SQRT_42);
-    ch_mag_10_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_10_over_42_with_sigma2,1);
-    // x=1, x=5
-    ch_mag_26_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,THIRTEEN_OVER_FOUR_SQRT_42);
-    ch_mag_26_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_26_over_42_with_sigma2,1);
-    // x=1, y=7
-    ch_mag_50_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
-    ch_mag_50_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
-    // x=3, y=3
-    ch_mag_18_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,NINE_OVER_FOUR_SQRT_42);
-    ch_mag_18_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_18_over_42_with_sigma2,1);
-    // x=3, y=5
-    ch_mag_34_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,SEVENTEEN_OVER_FOUR_SQRT_42);
-    ch_mag_34_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_34_over_42_with_sigma2,1);
-    // x=3, y=7
-    ch_mag_58_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,TWENTYNINE_OVER_FOUR_SQRT_42);
-    ch_mag_58_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_58_over_42_with_sigma2,2);
-    // x=5, y=5
-    ch_mag_50_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
-    ch_mag_50_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
-    // x=5, y=7
-    ch_mag_74_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,THIRTYSEVEN_OVER_FOUR_SQRT_42);
-    ch_mag_74_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_74_over_42_with_sigma2,2);
-    // x=7, y=7
-    ch_mag_98_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,FORTYNINE_OVER_FOUR_SQRT_42);
-    ch_mag_98_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_98_over_42_with_sigma2,2);
-
-    // Computing Metrics
-    xmm1 = _mm_adds_epi16(psi_a_p7_p7, y0_p_7_7);
-    bit_met_p7_p7 = _mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p7_p5, y0_p_7_5);
-    bit_met_p7_p5 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p7_p3, y0_p_7_3);
-    bit_met_p7_p3 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p7_p1, y0_p_7_1);
-    bit_met_p7_p1 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p7_m1, y0_m_7_1);
-    bit_met_p7_m1 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p7_m3, y0_m_7_3);
-    bit_met_p7_m3 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p7_m5, y0_m_7_5);
-    bit_met_p7_m5 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p7_m7, y0_m_7_7);
-    bit_met_p7_m7 = _mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p5_p7, y0_p_5_7);
-    bit_met_p5_p7 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p5_p5, y0_p_5_5);
-    bit_met_p5_p5 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p5_p3, y0_p_5_3);
-    bit_met_p5_p3 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p5_p1, y0_p_5_1);
-    bit_met_p5_p1 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p5_m1, y0_m_5_1);
-    bit_met_p5_m1 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p5_m3, y0_m_5_3);
-    bit_met_p5_m3 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p5_m5, y0_m_5_5);
-    bit_met_p5_m5 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p5_m7, y0_m_5_7);
-    bit_met_p5_m7 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p3_p7, y0_p_3_7);
-    bit_met_p3_p7 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p3_p5, y0_p_3_5);
-    bit_met_p3_p5 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p3_p3, y0_p_3_3);
-    bit_met_p3_p3 = _mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p3_p1, y0_p_3_1);
-    bit_met_p3_p1 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p3_m1, y0_m_3_1);
-    bit_met_p3_m1 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p3_m3, y0_m_3_3);
-    bit_met_p3_m3 = _mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p3_m5, y0_m_3_5);
-    bit_met_p3_m5 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p3_m7, y0_m_3_7);
-    bit_met_p3_m7 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p1_p7, y0_p_1_7);
-    bit_met_p1_p7 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p1_p5, y0_p_1_5);
-    bit_met_p1_p5 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p1_p3, y0_p_1_3);
-    bit_met_p1_p3 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p1_p1, y0_p_1_1);
-    bit_met_p1_p1 = _mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p1_m1, y0_m_1_1);
-    bit_met_p1_m1 = _mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p1_m3, y0_m_1_3);
-    bit_met_p1_m3 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p1_m5, y0_m_1_5);
-    bit_met_p1_m5 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm1 = _mm_adds_epi16(psi_a_p1_m7, y0_m_1_7);
-    bit_met_p1_m7 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-
-    xmm1 = _mm_subs_epi16(psi_a_m1_p7, y0_m_1_7);
-    bit_met_m1_p7 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m1_p5, y0_m_1_5);
-    bit_met_m1_p5 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m1_p3, y0_m_1_3);
-    bit_met_m1_p3 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m1_p1, y0_m_1_1);
-    bit_met_m1_p1 = _mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m1_m1, y0_p_1_1);
-    bit_met_m1_m1 = _mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m1_m3, y0_p_1_3);
-    bit_met_m1_m3 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m1_m5, y0_p_1_5);
-    bit_met_m1_m5 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m1_m7, y0_p_1_7);
-    bit_met_m1_m7 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m3_p7, y0_m_3_7);
-    bit_met_m3_p7 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m3_p5, y0_m_3_5);
-    bit_met_m3_p5 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m3_p3, y0_m_3_3);
-    bit_met_m3_p3 = _mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m3_p1, y0_m_3_1);
-    bit_met_m3_p1 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m3_m1, y0_p_3_1);
-    bit_met_m3_m1 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m3_m3, y0_p_3_3);
-    bit_met_m3_m3 = _mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m3_m5, y0_p_3_5);
-    bit_met_m3_m5 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m3_m7, y0_p_3_7);
-    bit_met_m3_m7 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m5_p7, y0_m_5_7);
-    bit_met_m5_p7 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m5_p5, y0_m_5_5);
-    bit_met_m5_p5 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m5_p3, y0_m_5_3);
-    bit_met_m5_p3 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m5_p1, y0_m_5_1);
-    bit_met_m5_p1 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m5_m1, y0_p_5_1);
-    bit_met_m5_m1 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m5_m3, y0_p_5_3);
-    bit_met_m5_m3 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m5_m5, y0_p_5_5);
-    bit_met_m5_m5 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m5_m7, y0_p_5_7);
-    bit_met_m5_m7 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m7_p7, y0_m_7_7);
-    bit_met_m7_p7 = _mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m7_p5, y0_m_7_5);
-    bit_met_m7_p5 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m7_p3, y0_m_7_3);
-    bit_met_m7_p3 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m7_p1, y0_m_7_1);
-    bit_met_m7_p1 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m7_m1, y0_p_7_1);
-    bit_met_m7_m1 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m7_m3, y0_p_7_3);
-    bit_met_m7_m3 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m7_m5, y0_p_7_5);
-    bit_met_m7_m5 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm1 = _mm_subs_epi16(psi_a_m7_m7, y0_p_7_7);
-    bit_met_m7_m7 = _mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-
-    // Detection for 1st bit (LTE mapping)
-    // bit = 1
-    xmm0 = _mm_max_epi16(bit_met_m7_p7, bit_met_m7_p5);
-    xmm1 = _mm_max_epi16(bit_met_m7_p3, bit_met_m7_p1);
-    xmm2 = _mm_max_epi16(bit_met_m7_m1, bit_met_m7_m3);
-    xmm3 = _mm_max_epi16(bit_met_m7_m5, bit_met_m7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m5_p7, bit_met_m5_p5);
-    xmm1 = _mm_max_epi16(bit_met_m5_p3, bit_met_m5_p1);
-    xmm2 = _mm_max_epi16(bit_met_m5_m1, bit_met_m5_m3);
-    xmm3 = _mm_max_epi16(bit_met_m5_m5, bit_met_m5_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m3_p7, bit_met_m3_p5);
-    xmm1 = _mm_max_epi16(bit_met_m3_p3, bit_met_m3_p1);
-    xmm2 = _mm_max_epi16(bit_met_m3_m1, bit_met_m3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m3_m5, bit_met_m3_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m1_p7, bit_met_m1_p5);
-    xmm1 = _mm_max_epi16(bit_met_m1_p3, bit_met_m1_p1);
-    xmm2 = _mm_max_epi16(bit_met_m1_m1, bit_met_m1_m3);
-    xmm3 = _mm_max_epi16(bit_met_m1_m5, bit_met_m1_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    // bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p7_p7, bit_met_p7_p5);
-    xmm1 = _mm_max_epi16(bit_met_p7_p3, bit_met_p7_p1);
-    xmm2 = _mm_max_epi16(bit_met_p7_m1, bit_met_p7_m3);
-    xmm3 = _mm_max_epi16(bit_met_p7_m5, bit_met_p7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p5_p7, bit_met_p5_p5);
-    xmm1 = _mm_max_epi16(bit_met_p5_p3, bit_met_p5_p1);
-    xmm2 = _mm_max_epi16(bit_met_p5_m1, bit_met_p5_m3);
-    xmm3 = _mm_max_epi16(bit_met_p5_m5, bit_met_p5_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p3_p7, bit_met_p3_p5);
-    xmm1 = _mm_max_epi16(bit_met_p3_p3, bit_met_p3_p1);
-    xmm2 = _mm_max_epi16(bit_met_p3_m1, bit_met_p3_m3);
-    xmm3 = _mm_max_epi16(bit_met_p3_m5, bit_met_p3_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p1_p7, bit_met_p1_p5);
-    xmm1 = _mm_max_epi16(bit_met_p1_p3, bit_met_p1_p1);
-    xmm2 = _mm_max_epi16(bit_met_p1_m1, bit_met_p1_m3);
-    xmm3 = _mm_max_epi16(bit_met_p1_m5, bit_met_p1_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y0r = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 2nd bit (LTE mapping)
-    // bit = 1
-    xmm0 = _mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    // bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y1r = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 3rd bit (LTE mapping)
-    xmm0 = _mm_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
-    xmm1 = _mm_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
-    xmm2 = _mm_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
-    xmm3 = _mm_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
-    xmm1 = _mm_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
-    xmm2 = _mm_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
-    xmm2 = _mm_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
-    xmm3 = _mm_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
-    xmm1 = _mm_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
-    xmm2 = _mm_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
-    xmm3 = _mm_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
-    xmm1 = _mm_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
-    xmm2 = _mm_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
-    xmm1 = _mm_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
-    xmm3 = _mm_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
-    xmm1 = _mm_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
-    xmm3 = _mm_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
-    xmm2 = _mm_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y2r = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 4th bit (LTE mapping)
-    xmm0 = _mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m5_p5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y0i = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-
-    // Detection for 5th bit (LTE mapping)
-    xmm0 = _mm_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
-    xmm1 = _mm_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
-    xmm2 = _mm_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
-    xmm3 = _mm_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
-    xmm1 = _mm_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
-    xmm3 = _mm_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
-    xmm1 = _mm_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
-    xmm3 = _mm_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
-    xmm1 = _mm_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
-    xmm2 = _mm_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
-    xmm3 = _mm_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
-    xmm1 = _mm_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
-    xmm2 = _mm_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
-    xmm1 = _mm_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
-    xmm2 = _mm_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
-    xmm2 = _mm_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
-    xmm2 = _mm_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
-    xmm3 = _mm_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y1i = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 6th bit (LTE mapping)
-    xmm0 = _mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm_max_epi16(bit_met_m5_p1, bit_met_m5_p1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y2i = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-
-    // map to output stream, difficult to do in SIMD since we have 6 16bit LLRs
-    // RE 1
-    j = 24*i;
-    stream0_out[j + 0] = ((short *)&y0r)[0];
-    stream0_out[j + 1] = ((short *)&y1r)[0];
-    stream0_out[j + 2] = ((short *)&y2r)[0];
-    stream0_out[j + 3] = ((short *)&y0i)[0];
-    stream0_out[j + 4] = ((short *)&y1i)[0];
-    stream0_out[j + 5] = ((short *)&y2i)[0];
-    // RE 2
-    stream0_out[j + 6] = ((short *)&y0r)[1];
-    stream0_out[j + 7] = ((short *)&y1r)[1];
-    stream0_out[j + 8] = ((short *)&y2r)[1];
-    stream0_out[j + 9] = ((short *)&y0i)[1];
-    stream0_out[j + 10] = ((short *)&y1i)[1];
-    stream0_out[j + 11] = ((short *)&y2i)[1];
-    // RE 3
-    stream0_out[j + 12] = ((short *)&y0r)[2];
-    stream0_out[j + 13] = ((short *)&y1r)[2];
-    stream0_out[j + 14] = ((short *)&y2r)[2];
-    stream0_out[j + 15] = ((short *)&y0i)[2];
-    stream0_out[j + 16] = ((short *)&y1i)[2];
-    stream0_out[j + 17] = ((short *)&y2i)[2];
-    // RE 4
-    stream0_out[j + 18] = ((short *)&y0r)[3];
-    stream0_out[j + 19] = ((short *)&y1r)[3];
-    stream0_out[j + 20] = ((short *)&y2r)[3];
-    stream0_out[j + 21] = ((short *)&y0i)[3];
-    stream0_out[j + 22] = ((short *)&y1i)[3];
-    stream0_out[j + 23] = ((short *)&y2i)[3];
-    // RE 5
-    stream0_out[j + 24] = ((short *)&y0r)[4];
-    stream0_out[j + 25] = ((short *)&y1r)[4];
-    stream0_out[j + 26] = ((short *)&y2r)[4];
-    stream0_out[j + 27] = ((short *)&y0i)[4];
-    stream0_out[j + 28] = ((short *)&y1i)[4];
-    stream0_out[j + 29] = ((short *)&y2i)[4];
-    // RE 6
-    stream0_out[j + 30] = ((short *)&y0r)[5];
-    stream0_out[j + 31] = ((short *)&y1r)[5];
-    stream0_out[j + 32] = ((short *)&y2r)[5];
-    stream0_out[j + 33] = ((short *)&y0i)[5];
-    stream0_out[j + 34] = ((short *)&y1i)[5];
-    stream0_out[j + 35] = ((short *)&y2i)[5];
-    // RE 7
-    stream0_out[j + 36] = ((short *)&y0r)[6];
-    stream0_out[j + 37] = ((short *)&y1r)[6];
-    stream0_out[j + 38] = ((short *)&y2r)[6];
-    stream0_out[j + 39] = ((short *)&y0i)[6];
-    stream0_out[j + 40] = ((short *)&y1i)[6];
-    stream0_out[j + 41] = ((short *)&y2i)[6];
-    // RE 8
-    stream0_out[j + 42] = ((short *)&y0r)[7];
-    stream0_out[j + 43] = ((short *)&y1r)[7];
-    stream0_out[j + 44] = ((short *)&y2r)[7];
-    stream0_out[j + 45] = ((short *)&y0i)[7];
-    stream0_out[j + 46] = ((short *)&y1i)[7];
-    stream0_out[j + 47] = ((short *)&y2i)[7];
-#elif defined(__arm__)
-
-#endif
-  }
-
-#if defined(__x86_64__) || defined(__i386__)
-  _mm_empty();
-  _m_empty();
-#endif
-}
-
-
-int dlsch_64qam_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
-                         int32_t **rxdataF_comp,
-                         int32_t **rxdataF_comp_i,
-                         int32_t **dl_ch_mag,
-                         int32_t **rho_i,
-                         int16_t *dlsch_llr,
-                         uint8_t symbol,
-                         uint8_t first_symbol_flag,
-                         uint16_t nb_rb,
-                         uint16_t pbch_pss_sss_adjust,
-                         int16_t **llr16p)
-{
-
-  int16_t *rxF      = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rxF_i    = (int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *ch_mag   = (int16_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rho      = (int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *llr16;
-  int len;
-  uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
-
-  //first symbol has different structure due to more pilots
-  if (first_symbol_flag == 1) {
-    llr16 = (int16_t*)dlsch_llr;
-  } else {
-    llr16 = (int16_t*)(*llr16p);
-  }
-
-  AssertFatal(llr16!=NULL,"dlsch_16qam_64qam_llr:llr is null, symbol %d\n",symbol);
-
-  if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-    // if symbol has pilots
-    if (frame_parms->nb_antenna_ports_eNB!=1)
-      // in 2 antenna ports we have 8 REs per symbol per RB
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-    else
-      // for 1 antenna port we have 10 REs per symbol per RB
-      len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
-  } else {
-    // symbol has no pilots
-    len = (nb_rb*12) - pbch_pss_sss_adjust;
-  }
-
-  qam64_qpsk((short *)rxF,
-             (short *)rxF_i,
-             (short *)ch_mag,
-             (short *)llr16,
-             (short *)rho,
-             len);
-
-  llr16 += (6*len);
-  *llr16p = (short *)llr16;
-  return(0);
-}
-
-
-
-void qam64_qam16(short *stream0_in,
-                 short *stream1_in,
-                 short *ch_mag,
-                 short *ch_mag_i,
-                 short *stream0_out,
-                 short *rho01,
-                 int length
-     )
-{
-
-  /*
-    Author: S. Wagner
-    Date: 31-07-12
-
-    Input:
-    stream0_in:  MF filter for 1st stream, i.e., y0=h0'*y
-    stream1_in:  MF filter for 2nd stream, i.e., y1=h1'*y
-    ch_mag:      4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    ch_mag_i:    4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    rho01:       Channel cross correlation, i.e., h1'*h0
-
-    Output:
-    stream0_out: output LLRs for 1st stream
-  */
-
-#if defined(__x86_64__) || defined(__i386__)
-
-  __m128i *rho01_128i      = (__m128i *)rho01;
-  __m128i *stream0_128i_in = (__m128i *)stream0_in;
-  __m128i *stream1_128i_in = (__m128i *)stream1_in;
-  __m128i *ch_mag_128i     = (__m128i *)ch_mag;
-  __m128i *ch_mag_128i_i   = (__m128i *)ch_mag_i;
-
-  __m128i ONE_OVER_SQRT_42 = _mm_set1_epi16(10112); // round(1/sqrt(42)*2^16)
-  __m128i THREE_OVER_SQRT_42 = _mm_set1_epi16(30337); // round(3/sqrt(42)*2^16)
-  __m128i FIVE_OVER_SQRT_42 = _mm_set1_epi16(25281); // round(5/sqrt(42)*2^15)
-  __m128i SEVEN_OVER_SQRT_42 = _mm_set1_epi16(17697); // round(5/sqrt(42)*2^15)
-  __m128i FORTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(30969); // round(49/(4*sqrt(42))*2^14), Q2.14
-  __m128i THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(23385); // round(37/(4*sqrt(42))*2^14), Q2.14
-  __m128i TWENTYFIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(31601); // round(25/(4*sqrt(42))*2^15)
-  __m128i TWENTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(18329); // round(29/(4*sqrt(42))*2^15), Q2.14
-  __m128i SEVENTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(21489); // round(17/(4*sqrt(42))*2^15)
-  __m128i NINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(11376); // round(9/(4*sqrt(42))*2^15)
-  __m128i THIRTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(16433); // round(13/(4*sqrt(42))*2^15)
-  __m128i FIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(6320); // round(5/(4*sqrt(42))*2^15)
-  __m128i ONE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(1264); // round(1/(4*sqrt(42))*2^15)
-  __m128i ONE_OVER_SQRT_10_Q15 = _mm_set1_epi16(10362); // round(1/sqrt(10)*2^15)
-  __m128i THREE_OVER_SQRT_10 = _mm_set1_epi16(31086); // round(3/sqrt(10)*2^15)
-  __m128i SQRT_10_OVER_FOUR = _mm_set1_epi16(25905); // round(sqrt(10)/4*2^15)
-
-
-  __m128i ch_mag_int;
-  __m128i ch_mag_des;
-  __m128i ch_mag_98_over_42_with_sigma2;
-  __m128i ch_mag_74_over_42_with_sigma2;
-  __m128i ch_mag_58_over_42_with_sigma2;
-  __m128i ch_mag_50_over_42_with_sigma2;
-  __m128i ch_mag_34_over_42_with_sigma2;
-  __m128i ch_mag_18_over_42_with_sigma2;
-  __m128i ch_mag_26_over_42_with_sigma2;
-  __m128i ch_mag_10_over_42_with_sigma2;
-  __m128i ch_mag_2_over_42_with_sigma2;
-  __m128i  y0r_one_over_sqrt_21;
-  __m128i  y0r_three_over_sqrt_21;
-  __m128i  y0r_five_over_sqrt_21;
-  __m128i  y0r_seven_over_sqrt_21;
-  __m128i  y0i_one_over_sqrt_21;
-  __m128i  y0i_three_over_sqrt_21;
-  __m128i  y0i_five_over_sqrt_21;
-  __m128i  y0i_seven_over_sqrt_21;
-
-#elif defined(__arm__)
-
-#endif
-  int i,j;
-
-
-
-  for (i=0; i<length>>2; i+=2) {
-
-#if defined(__x86_64__) || defined(__i386__)
-    // Get rho
-    xmm0 = rho01_128i[i];
-    xmm1 = rho01_128i[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    xmm2 = _mm_unpacklo_epi64(xmm0,xmm1); // Re(rho)
-    xmm3 = _mm_unpackhi_epi64(xmm0,xmm1); // Im(rho)
-    rho_rpi = _mm_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho)
-    rho_rmi = _mm_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho)
-
-    // Compute the different rhos
-    rho_rpi_1_1 = _mm_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42);
-    rho_rmi_1_1 = _mm_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42);
-    rho_rpi_3_3 = _mm_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42);
-    rho_rmi_3_3 = _mm_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42);
-    rho_rpi_5_5 = _mm_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42);
-    rho_rmi_5_5 = _mm_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42);
-    rho_rpi_7_7 = _mm_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42);
-    rho_rmi_7_7 = _mm_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42);
-
-    rho_rpi_5_5 = _mm_slli_epi16(rho_rpi_5_5, 1);
-    rho_rmi_5_5 = _mm_slli_epi16(rho_rmi_5_5, 1);
-    rho_rpi_7_7 = _mm_slli_epi16(rho_rpi_7_7, 2);
-    rho_rmi_7_7 = _mm_slli_epi16(rho_rmi_7_7, 2);
-
-    xmm4 = _mm_mulhi_epi16(xmm2, ONE_OVER_SQRT_42);
-    xmm5 = _mm_mulhi_epi16(xmm3, ONE_OVER_SQRT_42);
-    xmm6 = _mm_mulhi_epi16(xmm3, THREE_OVER_SQRT_42);
-    xmm7 = _mm_mulhi_epi16(xmm3, FIVE_OVER_SQRT_42);
-    xmm8 = _mm_mulhi_epi16(xmm3, SEVEN_OVER_SQRT_42);
-    xmm7 = _mm_slli_epi16(xmm7, 1);
-    xmm8 = _mm_slli_epi16(xmm8, 2);
-
-    rho_rpi_1_3 = _mm_adds_epi16(xmm4, xmm6);
-    rho_rmi_1_3 = _mm_subs_epi16(xmm4, xmm6);
-    rho_rpi_1_5 = _mm_adds_epi16(xmm4, xmm7);
-    rho_rmi_1_5 = _mm_subs_epi16(xmm4, xmm7);
-    rho_rpi_1_7 = _mm_adds_epi16(xmm4, xmm8);
-    rho_rmi_1_7 = _mm_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm_mulhi_epi16(xmm2, THREE_OVER_SQRT_42);
-    rho_rpi_3_1 = _mm_adds_epi16(xmm4, xmm5);
-    rho_rmi_3_1 = _mm_subs_epi16(xmm4, xmm5);
-    rho_rpi_3_5 = _mm_adds_epi16(xmm4, xmm7);
-    rho_rmi_3_5 = _mm_subs_epi16(xmm4, xmm7);
-    rho_rpi_3_7 = _mm_adds_epi16(xmm4, xmm8);
-    rho_rmi_3_7 = _mm_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm_mulhi_epi16(xmm2, FIVE_OVER_SQRT_42);
-    xmm4 = _mm_slli_epi16(xmm4, 1);
-    rho_rpi_5_1 = _mm_adds_epi16(xmm4, xmm5);
-    rho_rmi_5_1 = _mm_subs_epi16(xmm4, xmm5);
-    rho_rpi_5_3 = _mm_adds_epi16(xmm4, xmm6);
-    rho_rmi_5_3 = _mm_subs_epi16(xmm4, xmm6);
-    rho_rpi_5_7 = _mm_adds_epi16(xmm4, xmm8);
-    rho_rmi_5_7 = _mm_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm_mulhi_epi16(xmm2, SEVEN_OVER_SQRT_42);
-    xmm4 = _mm_slli_epi16(xmm4, 2);
-    rho_rpi_7_1 = _mm_adds_epi16(xmm4, xmm5);
-    rho_rmi_7_1 = _mm_subs_epi16(xmm4, xmm5);
-    rho_rpi_7_3 = _mm_adds_epi16(xmm4, xmm6);
-    rho_rmi_7_3 = _mm_subs_epi16(xmm4, xmm6);
-    rho_rpi_7_5 = _mm_adds_epi16(xmm4, xmm7);
-    rho_rmi_7_5 = _mm_subs_epi16(xmm4, xmm7);
-
-    // Rearrange interfering MF output
-    xmm0 = stream1_128i_in[i];
-    xmm1 = stream1_128i_in[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
-    y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
-
-    // Psi_r calculation from rho_rpi or rho_rmi
-    xmm0 = _mm_setzero_si128(); // ZERO for abs_pi16
-    xmm2 = _mm_subs_epi16(rho_rpi_7_7, y1r);
-    psi_r_p7_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_5, y1r);
-    psi_r_p7_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_3, y1r);
-    psi_r_p7_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_1, y1r);
-    psi_r_p7_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_1, y1r);
-    psi_r_p7_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_3, y1r);
-    psi_r_p7_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_5, y1r);
-    psi_r_p7_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_7, y1r);
-    psi_r_p7_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_7, y1r);
-    psi_r_p5_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_5, y1r);
-    psi_r_p5_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_3, y1r);
-    psi_r_p5_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_1, y1r);
-    psi_r_p5_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_1, y1r);
-    psi_r_p5_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_3, y1r);
-    psi_r_p5_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_5, y1r);
-    psi_r_p5_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_7, y1r);
-    psi_r_p5_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_7, y1r);
-    psi_r_p3_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_5, y1r);
-    psi_r_p3_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_3, y1r);
-    psi_r_p3_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_1, y1r);
-    psi_r_p3_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_1, y1r);
-    psi_r_p3_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_3, y1r);
-    psi_r_p3_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_5, y1r);
-    psi_r_p3_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_7, y1r);
-    psi_r_p3_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_7, y1r);
-    psi_r_p1_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_5, y1r);
-    psi_r_p1_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_3, y1r);
-    psi_r_p1_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_1, y1r);
-    psi_r_p1_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_1, y1r);
-    psi_r_p1_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_3, y1r);
-    psi_r_p1_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_5, y1r);
-    psi_r_p1_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_7, y1r);
-    psi_r_p1_m7 = _mm_abs_epi16(xmm2);
-
-    xmm2 = _mm_adds_epi16(rho_rmi_1_7, y1r);
-    psi_r_m1_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_5, y1r);
-    psi_r_m1_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_3, y1r);
-    psi_r_m1_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_1, y1r);
-    psi_r_m1_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_1, y1r);
-    psi_r_m1_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_3, y1r);
-    psi_r_m1_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_5, y1r);
-    psi_r_m1_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_7, y1r);
-    psi_r_m1_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_7, y1r);
-    psi_r_m3_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_5, y1r);
-    psi_r_m3_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_3, y1r);
-    psi_r_m3_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_1, y1r);
-    psi_r_m3_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_1, y1r);
-    psi_r_m3_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_3, y1r);
-    psi_r_m3_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_5, y1r);
-    psi_r_m3_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_7, y1r);
-    psi_r_m3_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_7, y1r);
-    psi_r_m5_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_5, y1r);
-    psi_r_m5_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_3, y1r);
-    psi_r_m5_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_1, y1r);
-    psi_r_m5_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_1, y1r);
-    psi_r_m5_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_3, y1r);
-    psi_r_m5_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_5, y1r);
-    psi_r_m5_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_7, y1r);
-    psi_r_m5_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_7, y1r);
-    psi_r_m7_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_5, y1r);
-    psi_r_m7_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_3, y1r);
-    psi_r_m7_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_1, y1r);
-    psi_r_m7_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_1, y1r);
-    psi_r_m7_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_3, y1r);
-    psi_r_m7_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_5, y1r);
-    psi_r_m7_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_7, y1r);
-    psi_r_m7_m7 = _mm_abs_epi16(xmm2);
-
-    // Psi_i calculation from rho_rpi or rho_rmi
-    xmm2 = _mm_subs_epi16(rho_rmi_7_7, y1i);
-    psi_i_p7_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_7, y1i);
-    psi_i_p7_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_7, y1i);
-    psi_i_p7_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_7, y1i);
-    psi_i_p7_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_7, y1i);
-    psi_i_p7_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_7, y1i);
-    psi_i_p7_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_7, y1i);
-    psi_i_p7_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_7, y1i);
-    psi_i_p7_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_5, y1i);
-    psi_i_p5_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_5, y1i);
-    psi_i_p5_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_5, y1i);
-    psi_i_p5_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_5, y1i);
-    psi_i_p5_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_5, y1i);
-    psi_i_p5_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_5, y1i);
-    psi_i_p5_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_5, y1i);
-    psi_i_p5_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_5, y1i);
-    psi_i_p5_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_3, y1i);
-    psi_i_p3_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_3, y1i);
-    psi_i_p3_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_3, y1i);
-    psi_i_p3_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_3, y1i);
-    psi_i_p3_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_3, y1i);
-    psi_i_p3_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_3, y1i);
-    psi_i_p3_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_3, y1i);
-    psi_i_p3_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_3, y1i);
-    psi_i_p3_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_1, y1i);
-    psi_i_p1_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_1, y1i);
-    psi_i_p1_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_1, y1i);
-    psi_i_p1_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_1, y1i);
-    psi_i_p1_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_1, y1i);
-    psi_i_p1_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_1, y1i);
-    psi_i_p1_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_1, y1i);
-    psi_i_p1_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_1, y1i);
-    psi_i_p1_m7 = _mm_abs_epi16(xmm2);
-
-    xmm2 = _mm_subs_epi16(rho_rpi_7_1, y1i);
-    psi_i_m1_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_1, y1i);
-    psi_i_m1_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_1, y1i);
-    psi_i_m1_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_1, y1i);
-    psi_i_m1_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_1, y1i);
-    psi_i_m1_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_1, y1i);
-    psi_i_m1_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_1, y1i);
-    psi_i_m1_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_1, y1i);
-    psi_i_m1_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_3, y1i);
-    psi_i_m3_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_3, y1i);
-    psi_i_m3_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_3, y1i);
-    psi_i_m3_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_3, y1i);
-    psi_i_m3_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_3, y1i);
-    psi_i_m3_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_3, y1i);
-    psi_i_m3_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_3, y1i);
-    psi_i_m3_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_3, y1i);
-    psi_i_m3_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_5, y1i);
-    psi_i_m5_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_5, y1i);
-    psi_i_m5_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_5, y1i);
-    psi_i_m5_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_5, y1i);
-    psi_i_m5_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_5, y1i);
-    psi_i_m5_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_5, y1i);
-    psi_i_m5_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_5, y1i);
-    psi_i_m5_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_5, y1i);
-    psi_i_m5_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_7, y1i);
-    psi_i_m7_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_7, y1i);
-    psi_i_m7_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_7, y1i);
-    psi_i_m7_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_7, y1i);
-    psi_i_m7_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_7, y1i);
-    psi_i_m7_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_7, y1i);
-    psi_i_m7_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_7, y1i);
-    psi_i_m7_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_7, y1i);
-    psi_i_m7_m7 = _mm_abs_epi16(xmm2);
-
-
-    // Rearrange desired MF output
-    xmm0 = stream0_128i_in[i];
-    xmm1 = stream0_128i_in[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y0r = _mm_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)]
-    y0i = _mm_unpackhi_epi64(xmm0,xmm1);
-
-    // Rearrange desired channel magnitudes
-    xmm2 = ch_mag_128i[i]; // = [|h|^2(1),|h|^2(1),|h|^2(2),|h|^2(2)]*(2/sqrt(10))
-    xmm3 = ch_mag_128i[i+1]; // = [|h|^2(3),|h|^2(3),|h|^2(4),|h|^2(4)]*(2/sqrt(10))
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    ch_mag_des = _mm_unpacklo_epi64(xmm2,xmm3);
-
-    // Rearrange interfering channel magnitudes
-    xmm2 = ch_mag_128i_i[i];
-    xmm3 = ch_mag_128i_i[i+1];
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    ch_mag_int  = _mm_unpacklo_epi64(xmm2,xmm3);
-
-    y0r_one_over_sqrt_21   = _mm_mulhi_epi16(y0r, ONE_OVER_SQRT_42);
-    y0r_three_over_sqrt_21 = _mm_mulhi_epi16(y0r, THREE_OVER_SQRT_42);
-    y0r_five_over_sqrt_21  = _mm_mulhi_epi16(y0r, FIVE_OVER_SQRT_42);
-    y0r_five_over_sqrt_21  = _mm_slli_epi16(y0r_five_over_sqrt_21, 1);
-    y0r_seven_over_sqrt_21 = _mm_mulhi_epi16(y0r, SEVEN_OVER_SQRT_42);
-    y0r_seven_over_sqrt_21 = _mm_slli_epi16(y0r_seven_over_sqrt_21, 2); // Q2.14
-
-    y0i_one_over_sqrt_21   = _mm_mulhi_epi16(y0i, ONE_OVER_SQRT_42);
-    y0i_three_over_sqrt_21 = _mm_mulhi_epi16(y0i, THREE_OVER_SQRT_42);
-    y0i_five_over_sqrt_21  = _mm_mulhi_epi16(y0i, FIVE_OVER_SQRT_42);
-    y0i_five_over_sqrt_21  = _mm_slli_epi16(y0i_five_over_sqrt_21, 1);
-    y0i_seven_over_sqrt_21 = _mm_mulhi_epi16(y0i, SEVEN_OVER_SQRT_42);
-    y0i_seven_over_sqrt_21 = _mm_slli_epi16(y0i_seven_over_sqrt_21, 2); // Q2.14
-
-    y0_p_7_1 = _mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_7_3 = _mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_7_5 = _mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_7_7 = _mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_5_1 = _mm_adds_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_5_3 = _mm_adds_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_5_5 = _mm_adds_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_5_7 = _mm_adds_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_3_1 = _mm_adds_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_3_3 = _mm_adds_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_3_5 = _mm_adds_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_3_7 = _mm_adds_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_1_1 = _mm_adds_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_1_3 = _mm_adds_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_1_5 = _mm_adds_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_1_7 = _mm_adds_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
-
-    y0_m_1_1 = _mm_subs_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_1_3 = _mm_subs_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_1_5 = _mm_subs_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_1_7 = _mm_subs_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_3_1 = _mm_subs_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_3_3 = _mm_subs_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_3_5 = _mm_subs_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_3_7 = _mm_subs_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_5_1 = _mm_subs_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_5_3 = _mm_subs_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_5_5 = _mm_subs_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_5_7 = _mm_subs_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_7_1 = _mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_7_3 = _mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_7_5 = _mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_7_7 = _mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
-
-    interference_abs_epi16(psi_r_p7_p7, ch_mag_int, a_r_p7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_p5, ch_mag_int, a_r_p7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_p3, ch_mag_int, a_r_p7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_p1, ch_mag_int, a_r_p7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_m1, ch_mag_int, a_r_p7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_m3, ch_mag_int, a_r_p7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_m5, ch_mag_int, a_r_p7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p7_m7, ch_mag_int, a_r_p7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_p7, ch_mag_int, a_r_p5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_p5, ch_mag_int, a_r_p5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_p3, ch_mag_int, a_r_p5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_p1, ch_mag_int, a_r_p5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_m1, ch_mag_int, a_r_p5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_m3, ch_mag_int, a_r_p5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_m5, ch_mag_int, a_r_p5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p5_m7, ch_mag_int, a_r_p5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_p7, ch_mag_int, a_r_p3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_p5, ch_mag_int, a_r_p3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_p3, ch_mag_int, a_r_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_p1, ch_mag_int, a_r_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_m1, ch_mag_int, a_r_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_m3, ch_mag_int, a_r_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_m5, ch_mag_int, a_r_p3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p3_m7, ch_mag_int, a_r_p3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_p7, ch_mag_int, a_r_p1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_p5, ch_mag_int, a_r_p1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_p3, ch_mag_int, a_r_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_p1, ch_mag_int, a_r_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_m1, ch_mag_int, a_r_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_m3, ch_mag_int, a_r_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_m5, ch_mag_int, a_r_p1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_p1_m7, ch_mag_int, a_r_p1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_p7, ch_mag_int, a_r_m1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_p5, ch_mag_int, a_r_m1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_p3, ch_mag_int, a_r_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_p1, ch_mag_int, a_r_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_m1, ch_mag_int, a_r_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_m3, ch_mag_int, a_r_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_m5, ch_mag_int, a_r_m1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m1_m7, ch_mag_int, a_r_m1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_p7, ch_mag_int, a_r_m3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_p5, ch_mag_int, a_r_m3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_p3, ch_mag_int, a_r_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_p1, ch_mag_int, a_r_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_m1, ch_mag_int, a_r_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_m3, ch_mag_int, a_r_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_m5, ch_mag_int, a_r_m3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m3_m7, ch_mag_int, a_r_m3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_p7, ch_mag_int, a_r_m5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_p5, ch_mag_int, a_r_m5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_p3, ch_mag_int, a_r_m5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_p1, ch_mag_int, a_r_m5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_m1, ch_mag_int, a_r_m5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_m3, ch_mag_int, a_r_m5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_m5, ch_mag_int, a_r_m5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m5_m7, ch_mag_int, a_r_m5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_p7, ch_mag_int, a_r_m7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_p5, ch_mag_int, a_r_m7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_p3, ch_mag_int, a_r_m7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_p1, ch_mag_int, a_r_m7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_m1, ch_mag_int, a_r_m7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_m3, ch_mag_int, a_r_m7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_m5, ch_mag_int, a_r_m7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_r_m7_m7, ch_mag_int, a_r_m7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-
-    interference_abs_epi16(psi_i_p7_p7, ch_mag_int, a_i_p7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_p5, ch_mag_int, a_i_p7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_p3, ch_mag_int, a_i_p7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_p1, ch_mag_int, a_i_p7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_m1, ch_mag_int, a_i_p7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_m3, ch_mag_int, a_i_p7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_m5, ch_mag_int, a_i_p7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p7_m7, ch_mag_int, a_i_p7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_p7, ch_mag_int, a_i_p5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_p5, ch_mag_int, a_i_p5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_p3, ch_mag_int, a_i_p5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_p1, ch_mag_int, a_i_p5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_m1, ch_mag_int, a_i_p5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_m3, ch_mag_int, a_i_p5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_m5, ch_mag_int, a_i_p5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p5_m7, ch_mag_int, a_i_p5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_p7, ch_mag_int, a_i_p3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_p5, ch_mag_int, a_i_p3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_p3, ch_mag_int, a_i_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_p1, ch_mag_int, a_i_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_m1, ch_mag_int, a_i_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_m3, ch_mag_int, a_i_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_m5, ch_mag_int, a_i_p3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p3_m7, ch_mag_int, a_i_p3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_p7, ch_mag_int, a_i_p1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_p5, ch_mag_int, a_i_p1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_p3, ch_mag_int, a_i_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_p1, ch_mag_int, a_i_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_m1, ch_mag_int, a_i_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_m3, ch_mag_int, a_i_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_m5, ch_mag_int, a_i_p1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_p1_m7, ch_mag_int, a_i_p1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_p7, ch_mag_int, a_i_m1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_p5, ch_mag_int, a_i_m1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_p3, ch_mag_int, a_i_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_p1, ch_mag_int, a_i_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_m1, ch_mag_int, a_i_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_m3, ch_mag_int, a_i_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_m5, ch_mag_int, a_i_m1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m1_m7, ch_mag_int, a_i_m1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_p7, ch_mag_int, a_i_m3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_p5, ch_mag_int, a_i_m3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_p3, ch_mag_int, a_i_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_p1, ch_mag_int, a_i_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_m1, ch_mag_int, a_i_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_m3, ch_mag_int, a_i_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_m5, ch_mag_int, a_i_m3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m3_m7, ch_mag_int, a_i_m3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_p7, ch_mag_int, a_i_m5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_p5, ch_mag_int, a_i_m5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_p3, ch_mag_int, a_i_m5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_p1, ch_mag_int, a_i_m5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_m1, ch_mag_int, a_i_m5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_m3, ch_mag_int, a_i_m5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_m5, ch_mag_int, a_i_m5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m5_m7, ch_mag_int, a_i_m5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_p7, ch_mag_int, a_i_m7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_p5, ch_mag_int, a_i_m7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_p3, ch_mag_int, a_i_m7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_p1, ch_mag_int, a_i_m7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_m1, ch_mag_int, a_i_m7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_m3, ch_mag_int, a_i_m7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_m5, ch_mag_int, a_i_m7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-    interference_abs_epi16(psi_i_m7_m7, ch_mag_int, a_i_m7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
-
-    // Calculation of a group of two terms in the bit metric involving product of psi and interference
-    prodsum_psi_a_epi16(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7, psi_a_p7_p7);
-    prodsum_psi_a_epi16(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5, psi_a_p7_p5);
-    prodsum_psi_a_epi16(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3, psi_a_p7_p3);
-    prodsum_psi_a_epi16(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1, psi_a_p7_p1);
-    prodsum_psi_a_epi16(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1, psi_a_p7_m1);
-    prodsum_psi_a_epi16(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3, psi_a_p7_m3);
-    prodsum_psi_a_epi16(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5, psi_a_p7_m5);
-    prodsum_psi_a_epi16(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7, psi_a_p7_m7);
-    prodsum_psi_a_epi16(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7, psi_a_p5_p7);
-    prodsum_psi_a_epi16(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5, psi_a_p5_p5);
-    prodsum_psi_a_epi16(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3, psi_a_p5_p3);
-    prodsum_psi_a_epi16(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1, psi_a_p5_p1);
-    prodsum_psi_a_epi16(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1, psi_a_p5_m1);
-    prodsum_psi_a_epi16(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3, psi_a_p5_m3);
-    prodsum_psi_a_epi16(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5, psi_a_p5_m5);
-    prodsum_psi_a_epi16(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7, psi_a_p5_m7);
-    prodsum_psi_a_epi16(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7, psi_a_p3_p7);
-    prodsum_psi_a_epi16(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5, psi_a_p3_p5);
-    prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3);
-    prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1);
-    prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1);
-    prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3);
-    prodsum_psi_a_epi16(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5, psi_a_p3_m5);
-    prodsum_psi_a_epi16(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7, psi_a_p3_m7);
-    prodsum_psi_a_epi16(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7, psi_a_p1_p7);
-    prodsum_psi_a_epi16(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5, psi_a_p1_p5);
-    prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3);
-    prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1);
-    prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1);
-    prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3);
-    prodsum_psi_a_epi16(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5, psi_a_p1_m5);
-    prodsum_psi_a_epi16(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7, psi_a_p1_m7);
-    prodsum_psi_a_epi16(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7, psi_a_m1_p7);
-    prodsum_psi_a_epi16(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5, psi_a_m1_p5);
-    prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3);
-    prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1);
-    prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1);
-    prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3);
-    prodsum_psi_a_epi16(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5, psi_a_m1_m5);
-    prodsum_psi_a_epi16(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7, psi_a_m1_m7);
-    prodsum_psi_a_epi16(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7, psi_a_m3_p7);
-    prodsum_psi_a_epi16(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5, psi_a_m3_p5);
-    prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3);
-    prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1);
-    prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1);
-    prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3);
-    prodsum_psi_a_epi16(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5, psi_a_m3_m5);
-    prodsum_psi_a_epi16(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7, psi_a_m3_m7);
-    prodsum_psi_a_epi16(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7, psi_a_m5_p7);
-    prodsum_psi_a_epi16(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5, psi_a_m5_p5);
-    prodsum_psi_a_epi16(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3, psi_a_m5_p3);
-    prodsum_psi_a_epi16(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1, psi_a_m5_p1);
-    prodsum_psi_a_epi16(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1, psi_a_m5_m1);
-    prodsum_psi_a_epi16(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3, psi_a_m5_m3);
-    prodsum_psi_a_epi16(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5, psi_a_m5_m5);
-    prodsum_psi_a_epi16(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7, psi_a_m5_m7);
-    prodsum_psi_a_epi16(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7, psi_a_m7_p7);
-    prodsum_psi_a_epi16(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5, psi_a_m7_p5);
-    prodsum_psi_a_epi16(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3, psi_a_m7_p3);
-    prodsum_psi_a_epi16(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1, psi_a_m7_p1);
-    prodsum_psi_a_epi16(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1, psi_a_m7_m1);
-    prodsum_psi_a_epi16(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3, psi_a_m7_m3);
-    prodsum_psi_a_epi16(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5, psi_a_m7_m5);
-    prodsum_psi_a_epi16(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7, psi_a_m7_m7);
-
-    // Calculation of a group of two terms in the bit metric involving squares of interference
-    square_a_epi16(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p7);
-    square_a_epi16(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p5);
-    square_a_epi16(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p3);
-    square_a_epi16(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p1);
-    square_a_epi16(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m1);
-    square_a_epi16(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m3);
-    square_a_epi16(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m5);
-    square_a_epi16(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m7);
-    square_a_epi16(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p7);
-    square_a_epi16(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p5);
-    square_a_epi16(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p3);
-    square_a_epi16(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p1);
-    square_a_epi16(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m1);
-    square_a_epi16(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m3);
-    square_a_epi16(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m5);
-    square_a_epi16(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m7);
-    square_a_epi16(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p7);
-    square_a_epi16(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p5);
-    square_a_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p3);
-    square_a_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p1);
-    square_a_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m1);
-    square_a_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m3);
-    square_a_epi16(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m5);
-    square_a_epi16(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m7);
-    square_a_epi16(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p7);
-    square_a_epi16(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p5);
-    square_a_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p3);
-    square_a_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p1);
-    square_a_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m1);
-    square_a_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m3);
-    square_a_epi16(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m5);
-    square_a_epi16(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m7);
-    square_a_epi16(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p7);
-    square_a_epi16(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p5);
-    square_a_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p3);
-    square_a_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p1);
-    square_a_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m1);
-    square_a_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m3);
-    square_a_epi16(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m5);
-    square_a_epi16(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m7);
-    square_a_epi16(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p7);
-    square_a_epi16(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p5);
-    square_a_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p3);
-    square_a_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p1);
-    square_a_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m1);
-    square_a_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m3);
-    square_a_epi16(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m5);
-    square_a_epi16(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m7);
-    square_a_epi16(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p7);
-    square_a_epi16(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p5);
-    square_a_epi16(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p3);
-    square_a_epi16(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p1);
-    square_a_epi16(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m1);
-    square_a_epi16(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m3);
-    square_a_epi16(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m5);
-    square_a_epi16(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m7);
-    square_a_epi16(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p7);
-    square_a_epi16(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p5);
-    square_a_epi16(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p3);
-    square_a_epi16(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p1);
-    square_a_epi16(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m1);
-    square_a_epi16(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m3);
-    square_a_epi16(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m5);
-    square_a_epi16(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m7);
-
-    // Computing different multiples of ||h0||^2
-    // x=1, y=1
-    ch_mag_2_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,ONE_OVER_FOUR_SQRT_42);
-    ch_mag_2_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_2_over_42_with_sigma2,1);
-    // x=1, y=3
-    ch_mag_10_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,FIVE_OVER_FOUR_SQRT_42);
-    ch_mag_10_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_10_over_42_with_sigma2,1);
-    // x=1, x=5
-    ch_mag_26_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,THIRTEEN_OVER_FOUR_SQRT_42);
-    ch_mag_26_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_26_over_42_with_sigma2,1);
-    // x=1, y=7
-    ch_mag_50_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
-    ch_mag_50_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
-    // x=3, y=3
-    ch_mag_18_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,NINE_OVER_FOUR_SQRT_42);
-    ch_mag_18_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_18_over_42_with_sigma2,1);
-    // x=3, y=5
-    ch_mag_34_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,SEVENTEEN_OVER_FOUR_SQRT_42);
-    ch_mag_34_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_34_over_42_with_sigma2,1);
-    // x=3, y=7
-    ch_mag_58_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,TWENTYNINE_OVER_FOUR_SQRT_42);
-    ch_mag_58_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_58_over_42_with_sigma2,2);
-    // x=5, y=5
-    ch_mag_50_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
-    ch_mag_50_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
-    // x=5, y=7
-    ch_mag_74_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,THIRTYSEVEN_OVER_FOUR_SQRT_42);
-    ch_mag_74_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_74_over_42_with_sigma2,2);
-    // x=7, y=7
-    ch_mag_98_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,FORTYNINE_OVER_FOUR_SQRT_42);
-    ch_mag_98_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_98_over_42_with_sigma2,2);
-
-    // Computing Metrics
-    xmm0 = _mm_subs_epi16(psi_a_p7_p7, a_sq_p7_p7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_7_7);
-    bit_met_p7_p7 = _mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_p5, a_sq_p7_p5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_7_5);
-    bit_met_p7_p5 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_p3, a_sq_p7_p3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_7_3);
-    bit_met_p7_p3 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_p1, a_sq_p7_p1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_7_1);
-    bit_met_p7_p1 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_m1, a_sq_p7_m1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_7_1);
-    bit_met_p7_m1 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_m3, a_sq_p7_m3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_7_3);
-    bit_met_p7_m3 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_m5, a_sq_p7_m5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_7_5);
-    bit_met_p7_m5 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_m7, a_sq_p7_m7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_7_7);
-    bit_met_p7_m7 = _mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_p7, a_sq_p5_p7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_5_7);
-    bit_met_p5_p7 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_p5, a_sq_p5_p5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_5_5);
-    bit_met_p5_p5 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_p3, a_sq_p5_p3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_5_3);
-    bit_met_p5_p3 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_p1, a_sq_p5_p1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_5_1);
-    bit_met_p5_p1 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_m1, a_sq_p5_m1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_5_1);
-    bit_met_p5_m1 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_m3, a_sq_p5_m3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_5_3);
-    bit_met_p5_m3 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_m5, a_sq_p5_m5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_5_5);
-    bit_met_p5_m5 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_m7, a_sq_p5_m7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_5_7);
-    bit_met_p5_m7 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_p7, a_sq_p3_p7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_3_7);
-    bit_met_p3_p7 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_p5, a_sq_p3_p5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_3_5);
-    bit_met_p3_p5 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_p3, a_sq_p3_p3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_3_3);
-    bit_met_p3_p3 = _mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_p1, a_sq_p3_p1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_3_1);
-    bit_met_p3_p1 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_m1, a_sq_p3_m1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_3_1);
-    bit_met_p3_m1 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_m3, a_sq_p3_m3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_3_3);
-    bit_met_p3_m3 = _mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_m5, a_sq_p3_m5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_3_5);
-    bit_met_p3_m5 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_m7, a_sq_p3_m7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_3_7);
-    bit_met_p3_m7 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_p7, a_sq_p1_p7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_1_7);
-    bit_met_p1_p7 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_p5, a_sq_p1_p5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_1_5);
-    bit_met_p1_p5 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_p3, a_sq_p1_p3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_1_3);
-    bit_met_p1_p3 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_p1, a_sq_p1_p1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_1_1);
-    bit_met_p1_p1 = _mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_m1, a_sq_p1_m1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_1_1);
-    bit_met_p1_m1 = _mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_m3, a_sq_p1_m3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_1_3);
-    bit_met_p1_m3 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_m5, a_sq_p1_m5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_1_5);
-    bit_met_p1_m5 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_m7, a_sq_p1_m7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_1_7);
-    bit_met_p1_m7 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_p7, a_sq_m1_p7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_1_7);
-    bit_met_m1_p7 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_p5, a_sq_m1_p5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_1_5);
-    bit_met_m1_p5 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_p3, a_sq_m1_p3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_1_3);
-    bit_met_m1_p3 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_p1, a_sq_m1_p1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_1_1);
-    bit_met_m1_p1 = _mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_m1, a_sq_m1_m1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_1_1);
-    bit_met_m1_m1 = _mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_m3, a_sq_m1_m3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_1_3);
-    bit_met_m1_m3 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_m5, a_sq_m1_m5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_1_5);
-    bit_met_m1_m5 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_m7, a_sq_m1_m7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_1_7);
-    bit_met_m1_m7 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_p7, a_sq_m3_p7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_3_7);
-    bit_met_m3_p7 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_p5, a_sq_m3_p5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_3_5);
-    bit_met_m3_p5 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_p3, a_sq_m3_p3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_3_3);
-    bit_met_m3_p3 = _mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_p1, a_sq_m3_p1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_3_1);
-    bit_met_m3_p1 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_m1, a_sq_m3_m1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_3_1);
-    bit_met_m3_m1 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_m3, a_sq_m3_m3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_3_3);
-    bit_met_m3_m3 = _mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_m5, a_sq_m3_m5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_3_5);
-    bit_met_m3_m5 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_m7, a_sq_m3_m7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_3_7);
-    bit_met_m3_m7 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_p7, a_sq_m5_p7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_5_7);
-    bit_met_m5_p7 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_p5, a_sq_m5_p5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_5_5);
-    bit_met_m5_p5 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_p3, a_sq_m5_p3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_5_3);
-    bit_met_m5_p3 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_p1, a_sq_m5_p1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_5_1);
-    bit_met_m5_p1 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_m1, a_sq_m5_m1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_5_1);
-    bit_met_m5_m1 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_m3, a_sq_m5_m3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_5_3);
-    bit_met_m5_m3 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_m5, a_sq_m5_m5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_5_5);
-    bit_met_m5_m5 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_m7, a_sq_m5_m7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_5_7);
-    bit_met_m5_m7 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_p7, a_sq_m7_p7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_7_7);
-    bit_met_m7_p7 = _mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_p5, a_sq_m7_p5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_7_5);
-    bit_met_m7_p5 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_p3, a_sq_m7_p3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_7_3);
-    bit_met_m7_p3 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_p1, a_sq_m7_p1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_7_1);
-    bit_met_m7_p1 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_m1, a_sq_m7_m1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_7_1);
-    bit_met_m7_m1 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_m3, a_sq_m7_m3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_7_3);
-    bit_met_m7_m3 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_m5, a_sq_m7_m5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_7_5);
-    bit_met_m7_m5 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_m7, a_sq_m7_m7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_7_7);
-    bit_met_m7_m7 = _mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-
-    // Detection for 1st bit (LTE mapping)
-    // bit = 1
-    xmm0 = _mm_max_epi16(bit_met_m7_p7, bit_met_m7_p5);
-    xmm1 = _mm_max_epi16(bit_met_m7_p3, bit_met_m7_p1);
-    xmm2 = _mm_max_epi16(bit_met_m7_m1, bit_met_m7_m3);
-    xmm3 = _mm_max_epi16(bit_met_m7_m5, bit_met_m7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m5_p7, bit_met_m5_p5);
-    xmm1 = _mm_max_epi16(bit_met_m5_p3, bit_met_m5_p1);
-    xmm2 = _mm_max_epi16(bit_met_m5_m1, bit_met_m5_m3);
-    xmm3 = _mm_max_epi16(bit_met_m5_m5, bit_met_m5_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m3_p7, bit_met_m3_p5);
-    xmm1 = _mm_max_epi16(bit_met_m3_p3, bit_met_m3_p1);
-    xmm2 = _mm_max_epi16(bit_met_m3_m1, bit_met_m3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m3_m5, bit_met_m3_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m1_p7, bit_met_m1_p5);
-    xmm1 = _mm_max_epi16(bit_met_m1_p3, bit_met_m1_p1);
-    xmm2 = _mm_max_epi16(bit_met_m1_m1, bit_met_m1_m3);
-    xmm3 = _mm_max_epi16(bit_met_m1_m5, bit_met_m1_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    // bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p7_p7, bit_met_p7_p5);
-    xmm1 = _mm_max_epi16(bit_met_p7_p3, bit_met_p7_p1);
-    xmm2 = _mm_max_epi16(bit_met_p7_m1, bit_met_p7_m3);
-    xmm3 = _mm_max_epi16(bit_met_p7_m5, bit_met_p7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p5_p7, bit_met_p5_p5);
-    xmm1 = _mm_max_epi16(bit_met_p5_p3, bit_met_p5_p1);
-    xmm2 = _mm_max_epi16(bit_met_p5_m1, bit_met_p5_m3);
-    xmm3 = _mm_max_epi16(bit_met_p5_m5, bit_met_p5_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p3_p7, bit_met_p3_p5);
-    xmm1 = _mm_max_epi16(bit_met_p3_p3, bit_met_p3_p1);
-    xmm2 = _mm_max_epi16(bit_met_p3_m1, bit_met_p3_m3);
-    xmm3 = _mm_max_epi16(bit_met_p3_m5, bit_met_p3_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p1_p7, bit_met_p1_p5);
-    xmm1 = _mm_max_epi16(bit_met_p1_p3, bit_met_p1_p1);
-    xmm2 = _mm_max_epi16(bit_met_p1_m1, bit_met_p1_m3);
-    xmm3 = _mm_max_epi16(bit_met_p1_m5, bit_met_p1_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y0r = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 2nd bit (LTE mapping)
-    // bit = 1
-    xmm0 = _mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    // bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y1r = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 3rd bit (LTE mapping)
-    xmm0 = _mm_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
-    xmm1 = _mm_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
-    xmm2 = _mm_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
-    xmm3 = _mm_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
-    xmm1 = _mm_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
-    xmm2 = _mm_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
-    xmm2 = _mm_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
-    xmm3 = _mm_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
-    xmm1 = _mm_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
-    xmm2 = _mm_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
-    xmm3 = _mm_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
-    xmm1 = _mm_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
-    xmm2 = _mm_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
-    xmm1 = _mm_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
-    xmm3 = _mm_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
-    xmm1 = _mm_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
-    xmm3 = _mm_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
-    xmm2 = _mm_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y2r = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 4th bit (LTE mapping)
-    xmm0 = _mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m5_p5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y0i = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-
-    // Detection for 5th bit (LTE mapping)
-    xmm0 = _mm_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
-    xmm1 = _mm_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
-    xmm2 = _mm_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
-    xmm3 = _mm_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
-    xmm1 = _mm_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
-    xmm3 = _mm_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
-    xmm1 = _mm_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
-    xmm3 = _mm_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
-    xmm1 = _mm_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
-    xmm2 = _mm_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
-    xmm3 = _mm_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
-    xmm1 = _mm_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
-    xmm2 = _mm_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
-    xmm1 = _mm_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
-    xmm2 = _mm_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
-    xmm2 = _mm_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
-    xmm2 = _mm_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
-    xmm3 = _mm_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y1i = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 6th bit (LTE mapping)
-    xmm0 = _mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm_max_epi16(bit_met_m5_p1, bit_met_m5_p1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y2i = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-
-    // map to output stream, difficult to do in SIMD since we have 6 16bit LLRs
-    // RE 1
-    j = 24*i;
-    stream0_out[j + 0] = ((short *)&y0r)[0];
-    stream0_out[j + 1] = ((short *)&y1r)[0];
-    stream0_out[j + 2] = ((short *)&y2r)[0];
-    stream0_out[j + 3] = ((short *)&y0i)[0];
-    stream0_out[j + 4] = ((short *)&y1i)[0];
-    stream0_out[j + 5] = ((short *)&y2i)[0];
-    // RE 2
-    stream0_out[j + 6] = ((short *)&y0r)[1];
-    stream0_out[j + 7] = ((short *)&y1r)[1];
-    stream0_out[j + 8] = ((short *)&y2r)[1];
-    stream0_out[j + 9] = ((short *)&y0i)[1];
-    stream0_out[j + 10] = ((short *)&y1i)[1];
-    stream0_out[j + 11] = ((short *)&y2i)[1];
-    // RE 3
-    stream0_out[j + 12] = ((short *)&y0r)[2];
-    stream0_out[j + 13] = ((short *)&y1r)[2];
-    stream0_out[j + 14] = ((short *)&y2r)[2];
-    stream0_out[j + 15] = ((short *)&y0i)[2];
-    stream0_out[j + 16] = ((short *)&y1i)[2];
-    stream0_out[j + 17] = ((short *)&y2i)[2];
-    // RE 4
-    stream0_out[j + 18] = ((short *)&y0r)[3];
-    stream0_out[j + 19] = ((short *)&y1r)[3];
-    stream0_out[j + 20] = ((short *)&y2r)[3];
-    stream0_out[j + 21] = ((short *)&y0i)[3];
-    stream0_out[j + 22] = ((short *)&y1i)[3];
-    stream0_out[j + 23] = ((short *)&y2i)[3];
-    // RE 5
-    stream0_out[j + 24] = ((short *)&y0r)[4];
-    stream0_out[j + 25] = ((short *)&y1r)[4];
-    stream0_out[j + 26] = ((short *)&y2r)[4];
-    stream0_out[j + 27] = ((short *)&y0i)[4];
-    stream0_out[j + 28] = ((short *)&y1i)[4];
-    stream0_out[j + 29] = ((short *)&y2i)[4];
-    // RE 6
-    stream0_out[j + 30] = ((short *)&y0r)[5];
-    stream0_out[j + 31] = ((short *)&y1r)[5];
-    stream0_out[j + 32] = ((short *)&y2r)[5];
-    stream0_out[j + 33] = ((short *)&y0i)[5];
-    stream0_out[j + 34] = ((short *)&y1i)[5];
-    stream0_out[j + 35] = ((short *)&y2i)[5];
-    // RE 7
-    stream0_out[j + 36] = ((short *)&y0r)[6];
-    stream0_out[j + 37] = ((short *)&y1r)[6];
-    stream0_out[j + 38] = ((short *)&y2r)[6];
-    stream0_out[j + 39] = ((short *)&y0i)[6];
-    stream0_out[j + 40] = ((short *)&y1i)[6];
-    stream0_out[j + 41] = ((short *)&y2i)[6];
-    // RE 8
-    stream0_out[j + 42] = ((short *)&y0r)[7];
-    stream0_out[j + 43] = ((short *)&y1r)[7];
-    stream0_out[j + 44] = ((short *)&y2r)[7];
-    stream0_out[j + 45] = ((short *)&y0i)[7];
-    stream0_out[j + 46] = ((short *)&y1i)[7];
-    stream0_out[j + 47] = ((short *)&y2i)[7];
-
-#elif defined(__arm__)
-
-#endif
-  }
-
-#if defined(__x86_64__) || defined(__i386__)
-  _mm_empty();
-  _m_empty();
-#endif
-
-}
-
-
-int dlsch_64qam_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
-                          int32_t **rxdataF_comp,
-                          int32_t **rxdataF_comp_i,
-                          int32_t **dl_ch_mag,
-                          int32_t **dl_ch_mag_i,
-                          int32_t **rho_i,
-                          int16_t *dlsch_llr,
-                          uint8_t symbol,
-                          uint8_t first_symbol_flag,
-                          uint16_t nb_rb,
-                          uint16_t pbch_pss_sss_adjust,
-                          int16_t **llr16p)
-{
-
-  int16_t *rxF      = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rxF_i    = (int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *ch_mag   = (int16_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rho      = (int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *llr16;
-  int len;
-  uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
-
-  //first symbol has different structure due to more pilots
-  if (first_symbol_flag == 1) {
-    llr16 = (int16_t*)dlsch_llr;
-  } else {
-    llr16 = (int16_t*)(*llr16p);
-  }
-
-  AssertFatal(llr16!=NULL,"dlsch_16qam_64qam_llr:llr is null, symbol %d\n",symbol);
-
-  if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-    // if symbol has pilots
-    if (frame_parms->nb_antenna_ports_eNB!=1)
-      // in 2 antenna ports we have 8 REs per symbol per RB
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-    else
-      // for 1 antenna port we have 10 REs per symbol per RB
-      len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
-  } else {
-    // symbol has no pilots
-    len = (nb_rb*12) - pbch_pss_sss_adjust;
-  }
-
-  qam64_qam16((short *)rxF,
-              (short *)rxF_i,
-              (short *)ch_mag,
-              (short *)ch_mag_i,
-              (short *)llr16,
-              (short *)rho,
-              len);
-
-  llr16 += (6*len);
-  *llr16p = (short *)llr16;
-  return(0);
-}
-
-void qam64_qam64(short *stream0_in,
-                 short *stream1_in,
-                 short *ch_mag,
-                 short *ch_mag_i,
-                 short *stream0_out,
-                 short *rho01,
-                 int length
-     )
-{
-
-  /*
-    Author: S. Wagner
-    Date: 31-07-12
-
-    Input:
-    stream0_in:  MF filter for 1st stream, i.e., y0=h0'*y
-    stream1_in:  MF filter for 2nd stream, i.e., y1=h1'*y
-    ch_mag:      4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    ch_mag_i:    4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
-    rho01:       Channel cross correlation, i.e., h1'*h0
-
-    Output:
-    stream0_out: output LLRs for 1st stream
-  */
-
-#if defined(__x86_64__) || defined(__i386__)
-
-  __m128i *rho01_128i      = (__m128i *)rho01;
-  __m128i *stream0_128i_in = (__m128i *)stream0_in;
-  __m128i *stream1_128i_in = (__m128i *)stream1_in;
-  __m128i *ch_mag_128i     = (__m128i *)ch_mag;
-  __m128i *ch_mag_128i_i   = (__m128i *)ch_mag_i;
-
-  __m128i ONE_OVER_SQRT_42 = _mm_set1_epi16(10112); // round(1/sqrt(42)*2^16)
-  __m128i THREE_OVER_SQRT_42 = _mm_set1_epi16(30337); // round(3/sqrt(42)*2^16)
-  __m128i FIVE_OVER_SQRT_42 = _mm_set1_epi16(25281); // round(5/sqrt(42)*2^15)
-  __m128i SEVEN_OVER_SQRT_42 = _mm_set1_epi16(17697); // round(7/sqrt(42)*2^14) Q2.14
-  __m128i ONE_OVER_SQRT_2 = _mm_set1_epi16(23170); // round(1/sqrt(2)*2^15)
-  __m128i ONE_OVER_SQRT_2_42 = _mm_set1_epi16(3575); // round(1/sqrt(2*42)*2^15)
-  __m128i THREE_OVER_SQRT_2_42 = _mm_set1_epi16(10726); // round(3/sqrt(2*42)*2^15)
-  __m128i FIVE_OVER_SQRT_2_42 = _mm_set1_epi16(17876); // round(5/sqrt(2*42)*2^15)
-  __m128i SEVEN_OVER_SQRT_2_42 = _mm_set1_epi16(25027); // round(7/sqrt(2*42)*2^15)
-  __m128i FORTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(30969); // round(49/(4*sqrt(42))*2^14), Q2.14
-  __m128i THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(23385); // round(37/(4*sqrt(42))*2^14), Q2.14
-  __m128i TWENTYFIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(31601); // round(25/(4*sqrt(42))*2^15)
-  __m128i TWENTYNINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(18329); // round(29/(4*sqrt(42))*2^15), Q2.14
-  __m128i SEVENTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(21489); // round(17/(4*sqrt(42))*2^15)
-  __m128i NINE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(11376); // round(9/(4*sqrt(42))*2^15)
-  __m128i THIRTEEN_OVER_FOUR_SQRT_42 = _mm_set1_epi16(16433); // round(13/(4*sqrt(42))*2^15)
-  __m128i FIVE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(6320); // round(5/(4*sqrt(42))*2^15)
-  __m128i ONE_OVER_FOUR_SQRT_42 = _mm_set1_epi16(1264); // round(1/(4*sqrt(42))*2^15)
-  __m128i SQRT_42_OVER_FOUR = _mm_set1_epi16(13272); // round(sqrt(42)/4*2^13), Q3.12
-
-  __m128i ch_mag_des;
-  __m128i ch_mag_int;
-  __m128i ch_mag_98_over_42_with_sigma2;
-  __m128i ch_mag_74_over_42_with_sigma2;
-  __m128i ch_mag_58_over_42_with_sigma2;
-  __m128i ch_mag_50_over_42_with_sigma2;
-  __m128i ch_mag_34_over_42_with_sigma2;
-  __m128i ch_mag_18_over_42_with_sigma2;
-  __m128i ch_mag_26_over_42_with_sigma2;
-  __m128i ch_mag_10_over_42_with_sigma2;
-  __m128i ch_mag_2_over_42_with_sigma2;
-  __m128i  y0r_one_over_sqrt_21;
-  __m128i  y0r_three_over_sqrt_21;
-  __m128i  y0r_five_over_sqrt_21;
-  __m128i  y0r_seven_over_sqrt_21;
-  __m128i  y0i_one_over_sqrt_21;
-  __m128i  y0i_three_over_sqrt_21;
-  __m128i  y0i_five_over_sqrt_21;
-  __m128i  y0i_seven_over_sqrt_21;
-  __m128i ch_mag_int_with_sigma2;
-  __m128i two_ch_mag_int_with_sigma2;
-  __m128i three_ch_mag_int_with_sigma2;
-#elif defined(__arm__)
-
-#endif
-
-  int i,j;
-
-
-  for (i=0; i<length>>2; i+=2) {
-
-#if defined(__x86_64__) || defined(__i386__)
-
-    // Get rho
-    xmm0 = rho01_128i[i];
-    xmm1 = rho01_128i[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    xmm2 = _mm_unpacklo_epi64(xmm0,xmm1); // Re(rho)
-    xmm3 = _mm_unpackhi_epi64(xmm0,xmm1); // Im(rho)
-    rho_rpi = _mm_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho)
-    rho_rmi = _mm_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho)
-
-    // Compute the different rhos
-    rho_rpi_1_1 = _mm_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42);
-    rho_rmi_1_1 = _mm_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42);
-    rho_rpi_3_3 = _mm_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42);
-    rho_rmi_3_3 = _mm_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42);
-    rho_rpi_5_5 = _mm_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42);
-    rho_rmi_5_5 = _mm_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42);
-    rho_rpi_7_7 = _mm_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42);
-    rho_rmi_7_7 = _mm_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42);
-
-    rho_rpi_5_5 = _mm_slli_epi16(rho_rpi_5_5, 1);
-    rho_rmi_5_5 = _mm_slli_epi16(rho_rmi_5_5, 1);
-    rho_rpi_7_7 = _mm_slli_epi16(rho_rpi_7_7, 2);
-    rho_rmi_7_7 = _mm_slli_epi16(rho_rmi_7_7, 2);
-
-    xmm4 = _mm_mulhi_epi16(xmm2, ONE_OVER_SQRT_42);
-    xmm5 = _mm_mulhi_epi16(xmm3, ONE_OVER_SQRT_42);
-    xmm6 = _mm_mulhi_epi16(xmm3, THREE_OVER_SQRT_42);
-    xmm7 = _mm_mulhi_epi16(xmm3, FIVE_OVER_SQRT_42);
-    xmm8 = _mm_mulhi_epi16(xmm3, SEVEN_OVER_SQRT_42);
-    xmm7 = _mm_slli_epi16(xmm7, 1);
-    xmm8 = _mm_slli_epi16(xmm8, 2);
-
-    rho_rpi_1_3 = _mm_adds_epi16(xmm4, xmm6);
-    rho_rmi_1_3 = _mm_subs_epi16(xmm4, xmm6);
-    rho_rpi_1_5 = _mm_adds_epi16(xmm4, xmm7);
-    rho_rmi_1_5 = _mm_subs_epi16(xmm4, xmm7);
-    rho_rpi_1_7 = _mm_adds_epi16(xmm4, xmm8);
-    rho_rmi_1_7 = _mm_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm_mulhi_epi16(xmm2, THREE_OVER_SQRT_42);
-    rho_rpi_3_1 = _mm_adds_epi16(xmm4, xmm5);
-    rho_rmi_3_1 = _mm_subs_epi16(xmm4, xmm5);
-    rho_rpi_3_5 = _mm_adds_epi16(xmm4, xmm7);
-    rho_rmi_3_5 = _mm_subs_epi16(xmm4, xmm7);
-    rho_rpi_3_7 = _mm_adds_epi16(xmm4, xmm8);
-    rho_rmi_3_7 = _mm_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm_mulhi_epi16(xmm2, FIVE_OVER_SQRT_42);
-    xmm4 = _mm_slli_epi16(xmm4, 1);
-    rho_rpi_5_1 = _mm_adds_epi16(xmm4, xmm5);
-    rho_rmi_5_1 = _mm_subs_epi16(xmm4, xmm5);
-    rho_rpi_5_3 = _mm_adds_epi16(xmm4, xmm6);
-    rho_rmi_5_3 = _mm_subs_epi16(xmm4, xmm6);
-    rho_rpi_5_7 = _mm_adds_epi16(xmm4, xmm8);
-    rho_rmi_5_7 = _mm_subs_epi16(xmm4, xmm8);
-
-    xmm4 = _mm_mulhi_epi16(xmm2, SEVEN_OVER_SQRT_42);
-    xmm4 = _mm_slli_epi16(xmm4, 2);
-    rho_rpi_7_1 = _mm_adds_epi16(xmm4, xmm5);
-    rho_rmi_7_1 = _mm_subs_epi16(xmm4, xmm5);
-    rho_rpi_7_3 = _mm_adds_epi16(xmm4, xmm6);
-    rho_rmi_7_3 = _mm_subs_epi16(xmm4, xmm6);
-    rho_rpi_7_5 = _mm_adds_epi16(xmm4, xmm7);
-    rho_rmi_7_5 = _mm_subs_epi16(xmm4, xmm7);
-
-    // Rearrange interfering MF output
-    xmm0 = stream1_128i_in[i];
-    xmm1 = stream1_128i_in[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
-    y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
-
-    // Psi_r calculation from rho_rpi or rho_rmi
-    xmm0 = _mm_setzero_si128(); // ZERO for abs_pi16
-    xmm2 = _mm_subs_epi16(rho_rpi_7_7, y1r);
-    psi_r_p7_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_5, y1r);
-    psi_r_p7_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_3, y1r);
-    psi_r_p7_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_1, y1r);
-    psi_r_p7_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_1, y1r);
-    psi_r_p7_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_3, y1r);
-    psi_r_p7_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_5, y1r);
-    psi_r_p7_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_7, y1r);
-    psi_r_p7_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_7, y1r);
-    psi_r_p5_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_5, y1r);
-    psi_r_p5_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_3, y1r);
-    psi_r_p5_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_1, y1r);
-    psi_r_p5_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_1, y1r);
-    psi_r_p5_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_3, y1r);
-    psi_r_p5_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_5, y1r);
-    psi_r_p5_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_7, y1r);
-    psi_r_p5_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_7, y1r);
-    psi_r_p3_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_5, y1r);
-    psi_r_p3_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_3, y1r);
-    psi_r_p3_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_1, y1r);
-    psi_r_p3_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_1, y1r);
-    psi_r_p3_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_3, y1r);
-    psi_r_p3_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_5, y1r);
-    psi_r_p3_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_7, y1r);
-    psi_r_p3_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_7, y1r);
-    psi_r_p1_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_5, y1r);
-    psi_r_p1_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_3, y1r);
-    psi_r_p1_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_1, y1r);
-    psi_r_p1_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_1, y1r);
-    psi_r_p1_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_3, y1r);
-    psi_r_p1_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_5, y1r);
-    psi_r_p1_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_7, y1r);
-    psi_r_p1_m7 = _mm_abs_epi16(xmm2);
-
-    xmm2 = _mm_adds_epi16(rho_rmi_1_7, y1r);
-    psi_r_m1_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_5, y1r);
-    psi_r_m1_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_3, y1r);
-    psi_r_m1_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_1, y1r);
-    psi_r_m1_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_1, y1r);
-    psi_r_m1_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_3, y1r);
-    psi_r_m1_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_5, y1r);
-    psi_r_m1_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_7, y1r);
-    psi_r_m1_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_7, y1r);
-    psi_r_m3_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_5, y1r);
-    psi_r_m3_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_3, y1r);
-    psi_r_m3_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_1, y1r);
-    psi_r_m3_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_1, y1r);
-    psi_r_m3_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_3, y1r);
-    psi_r_m3_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_5, y1r);
-    psi_r_m3_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_7, y1r);
-    psi_r_m3_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_7, y1r);
-    psi_r_m5_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_5, y1r);
-    psi_r_m5_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_3, y1r);
-    psi_r_m5_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_1, y1r);
-    psi_r_m5_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_1, y1r);
-    psi_r_m5_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_3, y1r);
-    psi_r_m5_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_5, y1r);
-    psi_r_m5_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_7, y1r);
-    psi_r_m5_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_7, y1r);
-    psi_r_m7_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_5, y1r);
-    psi_r_m7_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_3, y1r);
-    psi_r_m7_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_1, y1r);
-    psi_r_m7_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_1, y1r);
-    psi_r_m7_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_3, y1r);
-    psi_r_m7_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_5, y1r);
-    psi_r_m7_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_7, y1r);
-    psi_r_m7_m7 = _mm_abs_epi16(xmm2);
-
-    // Psi_i calculation from rho_rpi or rho_rmi
-    xmm2 = _mm_subs_epi16(rho_rmi_7_7, y1i);
-    psi_i_p7_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_7, y1i);
-    psi_i_p7_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_7, y1i);
-    psi_i_p7_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_7, y1i);
-    psi_i_p7_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_7, y1i);
-    psi_i_p7_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_7, y1i);
-    psi_i_p7_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_7, y1i);
-    psi_i_p7_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_7, y1i);
-    psi_i_p7_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_5, y1i);
-    psi_i_p5_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_5, y1i);
-    psi_i_p5_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_5, y1i);
-    psi_i_p5_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_5, y1i);
-    psi_i_p5_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_5, y1i);
-    psi_i_p5_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_5, y1i);
-    psi_i_p5_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_5, y1i);
-    psi_i_p5_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_5, y1i);
-    psi_i_p5_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_3, y1i);
-    psi_i_p3_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_3, y1i);
-    psi_i_p3_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_3, y1i);
-    psi_i_p3_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_3, y1i);
-    psi_i_p3_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_3, y1i);
-    psi_i_p3_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_3, y1i);
-    psi_i_p3_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_3, y1i);
-    psi_i_p3_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_3, y1i);
-    psi_i_p3_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_7_1, y1i);
-    psi_i_p1_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_5_1, y1i);
-    psi_i_p1_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_3_1, y1i);
-    psi_i_p1_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rmi_1_1, y1i);
-    psi_i_p1_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_1_1, y1i);
-    psi_i_p1_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_3_1, y1i);
-    psi_i_p1_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_5_1, y1i);
-    psi_i_p1_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rpi_7_1, y1i);
-    psi_i_p1_m7 = _mm_abs_epi16(xmm2);
-
-    xmm2 = _mm_subs_epi16(rho_rpi_7_1, y1i);
-    psi_i_m1_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_1, y1i);
-    psi_i_m1_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_1, y1i);
-    psi_i_m1_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_1, y1i);
-    psi_i_m1_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_1, y1i);
-    psi_i_m1_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_1, y1i);
-    psi_i_m1_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_1, y1i);
-    psi_i_m1_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_1, y1i);
-    psi_i_m1_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_3, y1i);
-    psi_i_m3_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_3, y1i);
-    psi_i_m3_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_3, y1i);
-    psi_i_m3_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_3, y1i);
-    psi_i_m3_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_3, y1i);
-    psi_i_m3_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_3, y1i);
-    psi_i_m3_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_3, y1i);
-    psi_i_m3_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_3, y1i);
-    psi_i_m3_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_5, y1i);
-    psi_i_m5_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_5, y1i);
-    psi_i_m5_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_5, y1i);
-    psi_i_m5_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_5, y1i);
-    psi_i_m5_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_5, y1i);
-    psi_i_m5_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_5, y1i);
-    psi_i_m5_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_5, y1i);
-    psi_i_m5_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_5, y1i);
-    psi_i_m5_m7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_7_7, y1i);
-    psi_i_m7_p7 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_5_7, y1i);
-    psi_i_m7_p5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_3_7, y1i);
-    psi_i_m7_p3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_subs_epi16(rho_rpi_1_7, y1i);
-    psi_i_m7_p1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_1_7, y1i);
-    psi_i_m7_m1 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_3_7, y1i);
-    psi_i_m7_m3 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_5_7, y1i);
-    psi_i_m7_m5 = _mm_abs_epi16(xmm2);
-    xmm2 = _mm_adds_epi16(rho_rmi_7_7, y1i);
-    psi_i_m7_m7 = _mm_abs_epi16(xmm2);
-
-
-    // Rearrange desired MF output
-    xmm0 = stream0_128i_in[i];
-    xmm1 = stream0_128i_in[i+1];
-    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
-    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
-    y0r = _mm_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)]
-    y0i = _mm_unpackhi_epi64(xmm0,xmm1);
-
-    // Rearrange desired channel magnitudes
-    xmm2 = ch_mag_128i[i]; // = [|h|^2(1),|h|^2(1),|h|^2(2),|h|^2(2)]*(2/sqrt(10))
-    xmm3 = ch_mag_128i[i+1]; // = [|h|^2(3),|h|^2(3),|h|^2(4),|h|^2(4)]*(2/sqrt(10))
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    ch_mag_des = _mm_unpacklo_epi64(xmm2,xmm3);
-
-    // Rearrange interfering channel magnitudes
-    xmm2 = ch_mag_128i_i[i];
-    xmm3 = ch_mag_128i_i[i+1];
-    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
-    ch_mag_int  = _mm_unpacklo_epi64(xmm2,xmm3);
-
-    y0r_one_over_sqrt_21   = _mm_mulhi_epi16(y0r, ONE_OVER_SQRT_42);
-    y0r_three_over_sqrt_21 = _mm_mulhi_epi16(y0r, THREE_OVER_SQRT_42);
-    y0r_five_over_sqrt_21  = _mm_mulhi_epi16(y0r, FIVE_OVER_SQRT_42);
-    y0r_five_over_sqrt_21  = _mm_slli_epi16(y0r_five_over_sqrt_21, 1);
-    y0r_seven_over_sqrt_21 = _mm_mulhi_epi16(y0r, SEVEN_OVER_SQRT_42);
-    y0r_seven_over_sqrt_21 = _mm_slli_epi16(y0r_seven_over_sqrt_21, 2); // Q2.14
-
-    y0i_one_over_sqrt_21   = _mm_mulhi_epi16(y0i, ONE_OVER_SQRT_42);
-    y0i_three_over_sqrt_21 = _mm_mulhi_epi16(y0i, THREE_OVER_SQRT_42);
-    y0i_five_over_sqrt_21  = _mm_mulhi_epi16(y0i, FIVE_OVER_SQRT_42);
-    y0i_five_over_sqrt_21  = _mm_slli_epi16(y0i_five_over_sqrt_21, 1);
-    y0i_seven_over_sqrt_21 = _mm_mulhi_epi16(y0i, SEVEN_OVER_SQRT_42);
-    y0i_seven_over_sqrt_21 = _mm_slli_epi16(y0i_seven_over_sqrt_21, 2); // Q2.14
-
-    y0_p_7_1 = _mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_7_3 = _mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_7_5 = _mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_7_7 = _mm_adds_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_5_1 = _mm_adds_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_5_3 = _mm_adds_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_5_5 = _mm_adds_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_5_7 = _mm_adds_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_3_1 = _mm_adds_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_3_3 = _mm_adds_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_3_5 = _mm_adds_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_3_7 = _mm_adds_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_p_1_1 = _mm_adds_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_p_1_3 = _mm_adds_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_p_1_5 = _mm_adds_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_p_1_7 = _mm_adds_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
-
-    y0_m_1_1 = _mm_subs_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_1_3 = _mm_subs_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_1_5 = _mm_subs_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_1_7 = _mm_subs_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_3_1 = _mm_subs_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_3_3 = _mm_subs_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_3_5 = _mm_subs_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_3_7 = _mm_subs_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_5_1 = _mm_subs_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_5_3 = _mm_subs_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_5_5 = _mm_subs_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_5_7 = _mm_subs_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
-    y0_m_7_1 = _mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
-    y0_m_7_3 = _mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
-    y0_m_7_5 = _mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
-    y0_m_7_7 = _mm_subs_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
-
-    // Detection of interference term
-    ch_mag_int_with_sigma2       = _mm_srai_epi16(ch_mag_int, 1); // *2
-    two_ch_mag_int_with_sigma2   = ch_mag_int; // *4
-    three_ch_mag_int_with_sigma2 = _mm_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6
-
-    interference_abs_64qam_epi16(psi_r_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_p1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_r_m7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-
-    interference_abs_64qam_epi16(psi_i_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_p1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-    interference_abs_64qam_epi16(psi_i_m7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
-                                 SEVEN_OVER_SQRT_2_42);
-
-    // Calculation of a group of two terms in the bit metric involving product of psi and interference
-    prodsum_psi_a_epi16(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7, psi_a_p7_p7);
-    prodsum_psi_a_epi16(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5, psi_a_p7_p5);
-    prodsum_psi_a_epi16(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3, psi_a_p7_p3);
-    prodsum_psi_a_epi16(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1, psi_a_p7_p1);
-    prodsum_psi_a_epi16(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1, psi_a_p7_m1);
-    prodsum_psi_a_epi16(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3, psi_a_p7_m3);
-    prodsum_psi_a_epi16(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5, psi_a_p7_m5);
-    prodsum_psi_a_epi16(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7, psi_a_p7_m7);
-    prodsum_psi_a_epi16(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7, psi_a_p5_p7);
-    prodsum_psi_a_epi16(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5, psi_a_p5_p5);
-    prodsum_psi_a_epi16(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3, psi_a_p5_p3);
-    prodsum_psi_a_epi16(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1, psi_a_p5_p1);
-    prodsum_psi_a_epi16(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1, psi_a_p5_m1);
-    prodsum_psi_a_epi16(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3, psi_a_p5_m3);
-    prodsum_psi_a_epi16(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5, psi_a_p5_m5);
-    prodsum_psi_a_epi16(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7, psi_a_p5_m7);
-    prodsum_psi_a_epi16(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7, psi_a_p3_p7);
-    prodsum_psi_a_epi16(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5, psi_a_p3_p5);
-    prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3);
-    prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1);
-    prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1);
-    prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3);
-    prodsum_psi_a_epi16(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5, psi_a_p3_m5);
-    prodsum_psi_a_epi16(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7, psi_a_p3_m7);
-    prodsum_psi_a_epi16(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7, psi_a_p1_p7);
-    prodsum_psi_a_epi16(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5, psi_a_p1_p5);
-    prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3);
-    prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1);
-    prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1);
-    prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3);
-    prodsum_psi_a_epi16(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5, psi_a_p1_m5);
-    prodsum_psi_a_epi16(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7, psi_a_p1_m7);
-    prodsum_psi_a_epi16(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7, psi_a_m1_p7);
-    prodsum_psi_a_epi16(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5, psi_a_m1_p5);
-    prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3);
-    prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1);
-    prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1);
-    prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3);
-    prodsum_psi_a_epi16(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5, psi_a_m1_m5);
-    prodsum_psi_a_epi16(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7, psi_a_m1_m7);
-    prodsum_psi_a_epi16(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7, psi_a_m3_p7);
-    prodsum_psi_a_epi16(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5, psi_a_m3_p5);
-    prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3);
-    prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1);
-    prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1);
-    prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3);
-    prodsum_psi_a_epi16(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5, psi_a_m3_m5);
-    prodsum_psi_a_epi16(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7, psi_a_m3_m7);
-    prodsum_psi_a_epi16(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7, psi_a_m5_p7);
-    prodsum_psi_a_epi16(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5, psi_a_m5_p5);
-    prodsum_psi_a_epi16(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3, psi_a_m5_p3);
-    prodsum_psi_a_epi16(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1, psi_a_m5_p1);
-    prodsum_psi_a_epi16(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1, psi_a_m5_m1);
-    prodsum_psi_a_epi16(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3, psi_a_m5_m3);
-    prodsum_psi_a_epi16(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5, psi_a_m5_m5);
-    prodsum_psi_a_epi16(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7, psi_a_m5_m7);
-    prodsum_psi_a_epi16(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7, psi_a_m7_p7);
-    prodsum_psi_a_epi16(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5, psi_a_m7_p5);
-    prodsum_psi_a_epi16(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3, psi_a_m7_p3);
-    prodsum_psi_a_epi16(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1, psi_a_m7_p1);
-    prodsum_psi_a_epi16(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1, psi_a_m7_m1);
-    prodsum_psi_a_epi16(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3, psi_a_m7_m3);
-    prodsum_psi_a_epi16(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5, psi_a_m7_m5);
-    prodsum_psi_a_epi16(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7, psi_a_m7_m7);
-
-    // Multiply by sqrt(2)
-    psi_a_p7_p7 = _mm_mulhi_epi16(psi_a_p7_p7, ONE_OVER_SQRT_2);
-    psi_a_p7_p7 = _mm_slli_epi16(psi_a_p7_p7, 2);
-    psi_a_p7_p5 = _mm_mulhi_epi16(psi_a_p7_p5, ONE_OVER_SQRT_2);
-    psi_a_p7_p5 = _mm_slli_epi16(psi_a_p7_p5, 2);
-    psi_a_p7_p3 = _mm_mulhi_epi16(psi_a_p7_p3, ONE_OVER_SQRT_2);
-    psi_a_p7_p3 = _mm_slli_epi16(psi_a_p7_p3, 2);
-    psi_a_p7_p1 = _mm_mulhi_epi16(psi_a_p7_p1, ONE_OVER_SQRT_2);
-    psi_a_p7_p1 = _mm_slli_epi16(psi_a_p7_p1, 2);
-    psi_a_p7_m1 = _mm_mulhi_epi16(psi_a_p7_m1, ONE_OVER_SQRT_2);
-    psi_a_p7_m1 = _mm_slli_epi16(psi_a_p7_m1, 2);
-    psi_a_p7_m3 = _mm_mulhi_epi16(psi_a_p7_m3, ONE_OVER_SQRT_2);
-    psi_a_p7_m3 = _mm_slli_epi16(psi_a_p7_m3, 2);
-    psi_a_p7_m5 = _mm_mulhi_epi16(psi_a_p7_m5, ONE_OVER_SQRT_2);
-    psi_a_p7_m5 = _mm_slli_epi16(psi_a_p7_m5, 2);
-    psi_a_p7_m7 = _mm_mulhi_epi16(psi_a_p7_m7, ONE_OVER_SQRT_2);
-    psi_a_p7_m7 = _mm_slli_epi16(psi_a_p7_m7, 2);
-    psi_a_p5_p7 = _mm_mulhi_epi16(psi_a_p5_p7, ONE_OVER_SQRT_2);
-    psi_a_p5_p7 = _mm_slli_epi16(psi_a_p5_p7, 2);
-    psi_a_p5_p5 = _mm_mulhi_epi16(psi_a_p5_p5, ONE_OVER_SQRT_2);
-    psi_a_p5_p5 = _mm_slli_epi16(psi_a_p5_p5, 2);
-    psi_a_p5_p3 = _mm_mulhi_epi16(psi_a_p5_p3, ONE_OVER_SQRT_2);
-    psi_a_p5_p3 = _mm_slli_epi16(psi_a_p5_p3, 2);
-    psi_a_p5_p1 = _mm_mulhi_epi16(psi_a_p5_p1, ONE_OVER_SQRT_2);
-    psi_a_p5_p1 = _mm_slli_epi16(psi_a_p5_p1, 2);
-    psi_a_p5_m1 = _mm_mulhi_epi16(psi_a_p5_m1, ONE_OVER_SQRT_2);
-    psi_a_p5_m1 = _mm_slli_epi16(psi_a_p5_m1, 2);
-    psi_a_p5_m3 = _mm_mulhi_epi16(psi_a_p5_m3, ONE_OVER_SQRT_2);
-    psi_a_p5_m3 = _mm_slli_epi16(psi_a_p5_m3, 2);
-    psi_a_p5_m5 = _mm_mulhi_epi16(psi_a_p5_m5, ONE_OVER_SQRT_2);
-    psi_a_p5_m5 = _mm_slli_epi16(psi_a_p5_m5, 2);
-    psi_a_p5_m7 = _mm_mulhi_epi16(psi_a_p5_m7, ONE_OVER_SQRT_2);
-    psi_a_p5_m7 = _mm_slli_epi16(psi_a_p5_m7, 2);
-    psi_a_p3_p7 = _mm_mulhi_epi16(psi_a_p3_p7, ONE_OVER_SQRT_2);
-    psi_a_p3_p7 = _mm_slli_epi16(psi_a_p3_p7, 2);
-    psi_a_p3_p5 = _mm_mulhi_epi16(psi_a_p3_p5, ONE_OVER_SQRT_2);
-    psi_a_p3_p5 = _mm_slli_epi16(psi_a_p3_p5, 2);
-    psi_a_p3_p3 = _mm_mulhi_epi16(psi_a_p3_p3, ONE_OVER_SQRT_2);
-    psi_a_p3_p3 = _mm_slli_epi16(psi_a_p3_p3, 2);
-    psi_a_p3_p1 = _mm_mulhi_epi16(psi_a_p3_p1, ONE_OVER_SQRT_2);
-    psi_a_p3_p1 = _mm_slli_epi16(psi_a_p3_p1, 2);
-    psi_a_p3_m1 = _mm_mulhi_epi16(psi_a_p3_m1, ONE_OVER_SQRT_2);
-    psi_a_p3_m1 = _mm_slli_epi16(psi_a_p3_m1, 2);
-    psi_a_p3_m3 = _mm_mulhi_epi16(psi_a_p3_m3, ONE_OVER_SQRT_2);
-    psi_a_p3_m3 = _mm_slli_epi16(psi_a_p3_m3, 2);
-    psi_a_p3_m5 = _mm_mulhi_epi16(psi_a_p3_m5, ONE_OVER_SQRT_2);
-    psi_a_p3_m5 = _mm_slli_epi16(psi_a_p3_m5, 2);
-    psi_a_p3_m7 = _mm_mulhi_epi16(psi_a_p3_m7, ONE_OVER_SQRT_2);
-    psi_a_p3_m7 = _mm_slli_epi16(psi_a_p3_m7, 2);
-    psi_a_p1_p7 = _mm_mulhi_epi16(psi_a_p1_p7, ONE_OVER_SQRT_2);
-    psi_a_p1_p7 = _mm_slli_epi16(psi_a_p1_p7, 2);
-    psi_a_p1_p5 = _mm_mulhi_epi16(psi_a_p1_p5, ONE_OVER_SQRT_2);
-    psi_a_p1_p5 = _mm_slli_epi16(psi_a_p1_p5, 2);
-    psi_a_p1_p3 = _mm_mulhi_epi16(psi_a_p1_p3, ONE_OVER_SQRT_2);
-    psi_a_p1_p3 = _mm_slli_epi16(psi_a_p1_p3, 2);
-    psi_a_p1_p1 = _mm_mulhi_epi16(psi_a_p1_p1, ONE_OVER_SQRT_2);
-    psi_a_p1_p1 = _mm_slli_epi16(psi_a_p1_p1, 2);
-    psi_a_p1_m1 = _mm_mulhi_epi16(psi_a_p1_m1, ONE_OVER_SQRT_2);
-    psi_a_p1_m1 = _mm_slli_epi16(psi_a_p1_m1, 2);
-    psi_a_p1_m3 = _mm_mulhi_epi16(psi_a_p1_m3, ONE_OVER_SQRT_2);
-    psi_a_p1_m3 = _mm_slli_epi16(psi_a_p1_m3, 2);
-    psi_a_p1_m5 = _mm_mulhi_epi16(psi_a_p1_m5, ONE_OVER_SQRT_2);
-    psi_a_p1_m5 = _mm_slli_epi16(psi_a_p1_m5, 2);
-    psi_a_p1_m7 = _mm_mulhi_epi16(psi_a_p1_m7, ONE_OVER_SQRT_2);
-    psi_a_p1_m7 = _mm_slli_epi16(psi_a_p1_m7, 2);
-    psi_a_m1_p7 = _mm_mulhi_epi16(psi_a_m1_p7, ONE_OVER_SQRT_2);
-    psi_a_m1_p7 = _mm_slli_epi16(psi_a_m1_p7, 2);
-    psi_a_m1_p5 = _mm_mulhi_epi16(psi_a_m1_p5, ONE_OVER_SQRT_2);
-    psi_a_m1_p5 = _mm_slli_epi16(psi_a_m1_p5, 2);
-    psi_a_m1_p3 = _mm_mulhi_epi16(psi_a_m1_p3, ONE_OVER_SQRT_2);
-    psi_a_m1_p3 = _mm_slli_epi16(psi_a_m1_p3, 2);
-    psi_a_m1_p1 = _mm_mulhi_epi16(psi_a_m1_p1, ONE_OVER_SQRT_2);
-    psi_a_m1_p1 = _mm_slli_epi16(psi_a_m1_p1, 2);
-    psi_a_m1_m1 = _mm_mulhi_epi16(psi_a_m1_m1, ONE_OVER_SQRT_2);
-    psi_a_m1_m1 = _mm_slli_epi16(psi_a_m1_m1, 2);
-    psi_a_m1_m3 = _mm_mulhi_epi16(psi_a_m1_m3, ONE_OVER_SQRT_2);
-    psi_a_m1_m3 = _mm_slli_epi16(psi_a_m1_m3, 2);
-    psi_a_m1_m5 = _mm_mulhi_epi16(psi_a_m1_m5, ONE_OVER_SQRT_2);
-    psi_a_m1_m5 = _mm_slli_epi16(psi_a_m1_m5, 2);
-    psi_a_m1_m7 = _mm_mulhi_epi16(psi_a_m1_m7, ONE_OVER_SQRT_2);
-    psi_a_m1_m7 = _mm_slli_epi16(psi_a_m1_m7, 2);
-    psi_a_m3_p7 = _mm_mulhi_epi16(psi_a_m3_p7, ONE_OVER_SQRT_2);
-    psi_a_m3_p7 = _mm_slli_epi16(psi_a_m3_p7, 2);
-    psi_a_m3_p5 = _mm_mulhi_epi16(psi_a_m3_p5, ONE_OVER_SQRT_2);
-    psi_a_m3_p5 = _mm_slli_epi16(psi_a_m3_p5, 2);
-    psi_a_m3_p3 = _mm_mulhi_epi16(psi_a_m3_p3, ONE_OVER_SQRT_2);
-    psi_a_m3_p3 = _mm_slli_epi16(psi_a_m3_p3, 2);
-    psi_a_m3_p1 = _mm_mulhi_epi16(psi_a_m3_p1, ONE_OVER_SQRT_2);
-    psi_a_m3_p1 = _mm_slli_epi16(psi_a_m3_p1, 2);
-    psi_a_m3_m1 = _mm_mulhi_epi16(psi_a_m3_m1, ONE_OVER_SQRT_2);
-    psi_a_m3_m1 = _mm_slli_epi16(psi_a_m3_m1, 2);
-    psi_a_m3_m3 = _mm_mulhi_epi16(psi_a_m3_m3, ONE_OVER_SQRT_2);
-    psi_a_m3_m3 = _mm_slli_epi16(psi_a_m3_m3, 2);
-    psi_a_m3_m5 = _mm_mulhi_epi16(psi_a_m3_m5, ONE_OVER_SQRT_2);
-    psi_a_m3_m5 = _mm_slli_epi16(psi_a_m3_m5, 2);
-    psi_a_m3_m7 = _mm_mulhi_epi16(psi_a_m3_m7, ONE_OVER_SQRT_2);
-    psi_a_m3_m7 = _mm_slli_epi16(psi_a_m3_m7, 2);
-    psi_a_m5_p7 = _mm_mulhi_epi16(psi_a_m5_p7, ONE_OVER_SQRT_2);
-    psi_a_m5_p7 = _mm_slli_epi16(psi_a_m5_p7, 2);
-    psi_a_m5_p5 = _mm_mulhi_epi16(psi_a_m5_p5, ONE_OVER_SQRT_2);
-    psi_a_m5_p5 = _mm_slli_epi16(psi_a_m5_p5, 2);
-    psi_a_m5_p3 = _mm_mulhi_epi16(psi_a_m5_p3, ONE_OVER_SQRT_2);
-    psi_a_m5_p3 = _mm_slli_epi16(psi_a_m5_p3, 2);
-    psi_a_m5_p1 = _mm_mulhi_epi16(psi_a_m5_p1, ONE_OVER_SQRT_2);
-    psi_a_m5_p1 = _mm_slli_epi16(psi_a_m5_p1, 2);
-    psi_a_m5_m1 = _mm_mulhi_epi16(psi_a_m5_m1, ONE_OVER_SQRT_2);
-    psi_a_m5_m1 = _mm_slli_epi16(psi_a_m5_m1, 2);
-    psi_a_m5_m3 = _mm_mulhi_epi16(psi_a_m5_m3, ONE_OVER_SQRT_2);
-    psi_a_m5_m3 = _mm_slli_epi16(psi_a_m5_m3, 2);
-    psi_a_m5_m5 = _mm_mulhi_epi16(psi_a_m5_m5, ONE_OVER_SQRT_2);
-    psi_a_m5_m5 = _mm_slli_epi16(psi_a_m5_m5, 2);
-    psi_a_m5_m7 = _mm_mulhi_epi16(psi_a_m5_m7, ONE_OVER_SQRT_2);
-    psi_a_m5_m7 = _mm_slli_epi16(psi_a_m5_m7, 2);
-    psi_a_m7_p7 = _mm_mulhi_epi16(psi_a_m7_p7, ONE_OVER_SQRT_2);
-    psi_a_m7_p7 = _mm_slli_epi16(psi_a_m7_p7, 2);
-    psi_a_m7_p5 = _mm_mulhi_epi16(psi_a_m7_p5, ONE_OVER_SQRT_2);
-    psi_a_m7_p5 = _mm_slli_epi16(psi_a_m7_p5, 2);
-    psi_a_m7_p3 = _mm_mulhi_epi16(psi_a_m7_p3, ONE_OVER_SQRT_2);
-    psi_a_m7_p3 = _mm_slli_epi16(psi_a_m7_p3, 2);
-    psi_a_m7_p1 = _mm_mulhi_epi16(psi_a_m7_p1, ONE_OVER_SQRT_2);
-    psi_a_m7_p1 = _mm_slli_epi16(psi_a_m7_p1, 2);
-    psi_a_m7_m1 = _mm_mulhi_epi16(psi_a_m7_m1, ONE_OVER_SQRT_2);
-    psi_a_m7_m1 = _mm_slli_epi16(psi_a_m7_m1, 2);
-    psi_a_m7_m3 = _mm_mulhi_epi16(psi_a_m7_m3, ONE_OVER_SQRT_2);
-    psi_a_m7_m3 = _mm_slli_epi16(psi_a_m7_m3, 2);
-    psi_a_m7_m5 = _mm_mulhi_epi16(psi_a_m7_m5, ONE_OVER_SQRT_2);
-    psi_a_m7_m5 = _mm_slli_epi16(psi_a_m7_m5, 2);
-    psi_a_m7_m7 = _mm_mulhi_epi16(psi_a_m7_m7, ONE_OVER_SQRT_2);
-    psi_a_m7_m7 = _mm_slli_epi16(psi_a_m7_m7, 2);
-
-    // Calculation of a group of two terms in the bit metric involving squares of interference
-    square_a_64qam_epi16(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p7);
-    square_a_64qam_epi16(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p5);
-    square_a_64qam_epi16(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p3);
-    square_a_64qam_epi16(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p1);
-    square_a_64qam_epi16(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m1);
-    square_a_64qam_epi16(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m3);
-    square_a_64qam_epi16(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m5);
-    square_a_64qam_epi16(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m7);
-    square_a_64qam_epi16(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p7);
-    square_a_64qam_epi16(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p5);
-    square_a_64qam_epi16(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p3);
-    square_a_64qam_epi16(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p1);
-    square_a_64qam_epi16(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m1);
-    square_a_64qam_epi16(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m3);
-    square_a_64qam_epi16(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m5);
-    square_a_64qam_epi16(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m7);
-    square_a_64qam_epi16(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p7);
-    square_a_64qam_epi16(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p5);
-    square_a_64qam_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p3);
-    square_a_64qam_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p1);
-    square_a_64qam_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m1);
-    square_a_64qam_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m3);
-    square_a_64qam_epi16(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m5);
-    square_a_64qam_epi16(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m7);
-    square_a_64qam_epi16(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p7);
-    square_a_64qam_epi16(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p5);
-    square_a_64qam_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p3);
-    square_a_64qam_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p1);
-    square_a_64qam_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m1);
-    square_a_64qam_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m3);
-    square_a_64qam_epi16(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m5);
-    square_a_64qam_epi16(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m7);
-    square_a_64qam_epi16(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p7);
-    square_a_64qam_epi16(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p5);
-    square_a_64qam_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p3);
-    square_a_64qam_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p1);
-    square_a_64qam_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m1);
-    square_a_64qam_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m3);
-    square_a_64qam_epi16(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m5);
-    square_a_64qam_epi16(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m7);
-    square_a_64qam_epi16(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p7);
-    square_a_64qam_epi16(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p5);
-    square_a_64qam_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p3);
-    square_a_64qam_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p1);
-    square_a_64qam_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m1);
-    square_a_64qam_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m3);
-    square_a_64qam_epi16(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m5);
-    square_a_64qam_epi16(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m7);
-    square_a_64qam_epi16(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p7);
-    square_a_64qam_epi16(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p5);
-    square_a_64qam_epi16(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p3);
-    square_a_64qam_epi16(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p1);
-    square_a_64qam_epi16(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m1);
-    square_a_64qam_epi16(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m3);
-    square_a_64qam_epi16(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m5);
-    square_a_64qam_epi16(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m7);
-    square_a_64qam_epi16(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p7);
-    square_a_64qam_epi16(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p5);
-    square_a_64qam_epi16(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p3);
-    square_a_64qam_epi16(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p1);
-    square_a_64qam_epi16(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m1);
-    square_a_64qam_epi16(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m3);
-    square_a_64qam_epi16(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m5);
-    square_a_64qam_epi16(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m7);
-
-    // Computing different multiples of ||h0||^2
-    // x=1, y=1
-    ch_mag_2_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,ONE_OVER_FOUR_SQRT_42);
-    ch_mag_2_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_2_over_42_with_sigma2,1);
-    // x=1, y=3
-    ch_mag_10_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,FIVE_OVER_FOUR_SQRT_42);
-    ch_mag_10_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_10_over_42_with_sigma2,1);
-    // x=1, x=5
-    ch_mag_26_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,THIRTEEN_OVER_FOUR_SQRT_42);
-    ch_mag_26_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_26_over_42_with_sigma2,1);
-    // x=1, y=7
-    ch_mag_50_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
-    ch_mag_50_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
-    // x=3, y=3
-    ch_mag_18_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,NINE_OVER_FOUR_SQRT_42);
-    ch_mag_18_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_18_over_42_with_sigma2,1);
-    // x=3, y=5
-    ch_mag_34_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,SEVENTEEN_OVER_FOUR_SQRT_42);
-    ch_mag_34_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_34_over_42_with_sigma2,1);
-    // x=3, y=7
-    ch_mag_58_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,TWENTYNINE_OVER_FOUR_SQRT_42);
-    ch_mag_58_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_58_over_42_with_sigma2,2);
-    // x=5, y=5
-    ch_mag_50_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
-    ch_mag_50_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
-    // x=5, y=7
-    ch_mag_74_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,THIRTYSEVEN_OVER_FOUR_SQRT_42);
-    ch_mag_74_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_74_over_42_with_sigma2,2);
-    // x=7, y=7
-    ch_mag_98_over_42_with_sigma2 = _mm_mulhi_epi16(ch_mag_des,FORTYNINE_OVER_FOUR_SQRT_42);
-    ch_mag_98_over_42_with_sigma2 = _mm_slli_epi16(ch_mag_98_over_42_with_sigma2,2);
-
-    // Computing Metrics
-    xmm0 = _mm_subs_epi16(psi_a_p7_p7, a_sq_p7_p7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_7_7);
-    bit_met_p7_p7 = _mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_p5, a_sq_p7_p5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_7_5);
-    bit_met_p7_p5 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_p3, a_sq_p7_p3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_7_3);
-    bit_met_p7_p3 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_p1, a_sq_p7_p1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_7_1);
-    bit_met_p7_p1 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_m1, a_sq_p7_m1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_7_1);
-    bit_met_p7_m1 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_m3, a_sq_p7_m3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_7_3);
-    bit_met_p7_m3 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_m5, a_sq_p7_m5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_7_5);
-    bit_met_p7_m5 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p7_m7, a_sq_p7_m7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_7_7);
-    bit_met_p7_m7 = _mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_p7, a_sq_p5_p7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_5_7);
-    bit_met_p5_p7 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_p5, a_sq_p5_p5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_5_5);
-    bit_met_p5_p5 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_p3, a_sq_p5_p3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_5_3);
-    bit_met_p5_p3 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_p1, a_sq_p5_p1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_5_1);
-    bit_met_p5_p1 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_m1, a_sq_p5_m1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_5_1);
-    bit_met_p5_m1 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_m3, a_sq_p5_m3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_5_3);
-    bit_met_p5_m3 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_m5, a_sq_p5_m5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_5_5);
-    bit_met_p5_m5 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p5_m7, a_sq_p5_m7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_5_7);
-    bit_met_p5_m7 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_p7, a_sq_p3_p7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_3_7);
-    bit_met_p3_p7 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_p5, a_sq_p3_p5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_3_5);
-    bit_met_p3_p5 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_p3, a_sq_p3_p3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_3_3);
-    bit_met_p3_p3 = _mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_p1, a_sq_p3_p1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_3_1);
-    bit_met_p3_p1 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_m1, a_sq_p3_m1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_3_1);
-    bit_met_p3_m1 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_m3, a_sq_p3_m3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_3_3);
-    bit_met_p3_m3 = _mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_m5, a_sq_p3_m5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_3_5);
-    bit_met_p3_m5 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p3_m7, a_sq_p3_m7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_3_7);
-    bit_met_p3_m7 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_p7, a_sq_p1_p7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_1_7);
-    bit_met_p1_p7 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_p5, a_sq_p1_p5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_1_5);
-    bit_met_p1_p5 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_p3, a_sq_p1_p3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_1_3);
-    bit_met_p1_p3 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_p1, a_sq_p1_p1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_p_1_1);
-    bit_met_p1_p1 = _mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_m1, a_sq_p1_m1);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_1_1);
-    bit_met_p1_m1 = _mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_m3, a_sq_p1_m3);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_1_3);
-    bit_met_p1_m3 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_m5, a_sq_p1_m5);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_1_5);
-    bit_met_p1_m5 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_p1_m7, a_sq_p1_m7);
-    xmm1 = _mm_adds_epi16(xmm0, y0_m_1_7);
-    bit_met_p1_m7 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-
-    xmm0 = _mm_subs_epi16(psi_a_m1_p7, a_sq_m1_p7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_1_7);
-    bit_met_m1_p7 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_p5, a_sq_m1_p5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_1_5);
-    bit_met_m1_p5 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_p3, a_sq_m1_p3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_1_3);
-    bit_met_m1_p3 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_p1, a_sq_m1_p1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_1_1);
-    bit_met_m1_p1 = _mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_m1, a_sq_m1_m1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_1_1);
-    bit_met_m1_m1 = _mm_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_m3, a_sq_m1_m3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_1_3);
-    bit_met_m1_m3 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_m5, a_sq_m1_m5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_1_5);
-    bit_met_m1_m5 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m1_m7, a_sq_m1_m7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_1_7);
-    bit_met_m1_m7 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_p7, a_sq_m3_p7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_3_7);
-    bit_met_m3_p7 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_p5, a_sq_m3_p5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_3_5);
-    bit_met_m3_p5 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_p3, a_sq_m3_p3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_3_3);
-    bit_met_m3_p3 = _mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_p1, a_sq_m3_p1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_3_1);
-    bit_met_m3_p1 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_m1, a_sq_m3_m1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_3_1);
-    bit_met_m3_m1 = _mm_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_m3, a_sq_m3_m3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_3_3);
-    bit_met_m3_m3 = _mm_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_m5, a_sq_m3_m5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_3_5);
-    bit_met_m3_m5 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m3_m7, a_sq_m3_m7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_3_7);
-    bit_met_m3_m7 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_p7, a_sq_m5_p7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_5_7);
-    bit_met_m5_p7 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_p5, a_sq_m5_p5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_5_5);
-    bit_met_m5_p5 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_p3, a_sq_m5_p3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_5_3);
-    bit_met_m5_p3 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_p1, a_sq_m5_p1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_5_1);
-    bit_met_m5_p1 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_m1, a_sq_m5_m1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_5_1);
-    bit_met_m5_m1 = _mm_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_m3, a_sq_m5_m3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_5_3);
-    bit_met_m5_m3 = _mm_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_m5, a_sq_m5_m5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_5_5);
-    bit_met_m5_m5 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m5_m7, a_sq_m5_m7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_5_7);
-    bit_met_m5_m7 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_p7, a_sq_m7_p7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_7_7);
-    bit_met_m7_p7 = _mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_p5, a_sq_m7_p5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_7_5);
-    bit_met_m7_p5 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_p3, a_sq_m7_p3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_7_3);
-    bit_met_m7_p3 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_p1, a_sq_m7_p1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_m_7_1);
-    bit_met_m7_p1 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_m1, a_sq_m7_m1);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_7_1);
-    bit_met_m7_m1 = _mm_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_m3, a_sq_m7_m3);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_7_3);
-    bit_met_m7_m3 = _mm_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_m5, a_sq_m7_m5);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_7_5);
-    bit_met_m7_m5 = _mm_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
-    xmm0 = _mm_subs_epi16(psi_a_m7_m7, a_sq_m7_m7);
-    xmm1 = _mm_subs_epi16(xmm0, y0_p_7_7);
-    bit_met_m7_m7 = _mm_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
-
-    // Detection for 1st bit (LTE mapping)
-    // bit = 1
-    xmm0 = _mm_max_epi16(bit_met_m7_p7, bit_met_m7_p5);
-    xmm1 = _mm_max_epi16(bit_met_m7_p3, bit_met_m7_p1);
-    xmm2 = _mm_max_epi16(bit_met_m7_m1, bit_met_m7_m3);
-    xmm3 = _mm_max_epi16(bit_met_m7_m5, bit_met_m7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m5_p7, bit_met_m5_p5);
-    xmm1 = _mm_max_epi16(bit_met_m5_p3, bit_met_m5_p1);
-    xmm2 = _mm_max_epi16(bit_met_m5_m1, bit_met_m5_m3);
-    xmm3 = _mm_max_epi16(bit_met_m5_m5, bit_met_m5_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m3_p7, bit_met_m3_p5);
-    xmm1 = _mm_max_epi16(bit_met_m3_p3, bit_met_m3_p1);
-    xmm2 = _mm_max_epi16(bit_met_m3_m1, bit_met_m3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m3_m5, bit_met_m3_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m1_p7, bit_met_m1_p5);
-    xmm1 = _mm_max_epi16(bit_met_m1_p3, bit_met_m1_p1);
-    xmm2 = _mm_max_epi16(bit_met_m1_m1, bit_met_m1_m3);
-    xmm3 = _mm_max_epi16(bit_met_m1_m5, bit_met_m1_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    // bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p7_p7, bit_met_p7_p5);
-    xmm1 = _mm_max_epi16(bit_met_p7_p3, bit_met_p7_p1);
-    xmm2 = _mm_max_epi16(bit_met_p7_m1, bit_met_p7_m3);
-    xmm3 = _mm_max_epi16(bit_met_p7_m5, bit_met_p7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p5_p7, bit_met_p5_p5);
-    xmm1 = _mm_max_epi16(bit_met_p5_p3, bit_met_p5_p1);
-    xmm2 = _mm_max_epi16(bit_met_p5_m1, bit_met_p5_m3);
-    xmm3 = _mm_max_epi16(bit_met_p5_m5, bit_met_p5_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p3_p7, bit_met_p3_p5);
-    xmm1 = _mm_max_epi16(bit_met_p3_p3, bit_met_p3_p1);
-    xmm2 = _mm_max_epi16(bit_met_p3_m1, bit_met_p3_m3);
-    xmm3 = _mm_max_epi16(bit_met_p3_m5, bit_met_p3_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p1_p7, bit_met_p1_p5);
-    xmm1 = _mm_max_epi16(bit_met_p1_p3, bit_met_p1_p1);
-    xmm2 = _mm_max_epi16(bit_met_p1_m1, bit_met_p1_m3);
-    xmm3 = _mm_max_epi16(bit_met_p1_m5, bit_met_p1_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y0r = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 2nd bit (LTE mapping)
-    // bit = 1
-    xmm0 = _mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    // bit = 0
-    xmm0 = _mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y1r = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 3rd bit (LTE mapping)
-    xmm0 = _mm_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
-    xmm1 = _mm_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
-    xmm2 = _mm_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
-    xmm3 = _mm_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
-    xmm1 = _mm_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
-    xmm2 = _mm_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
-    xmm2 = _mm_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
-    xmm3 = _mm_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
-    xmm1 = _mm_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
-    xmm2 = _mm_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
-    xmm3 = _mm_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
-    xmm1 = _mm_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
-    xmm2 = _mm_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
-    xmm1 = _mm_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
-    xmm3 = _mm_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
-    xmm1 = _mm_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
-    xmm3 = _mm_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
-    xmm2 = _mm_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y2r = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 4th bit (LTE mapping)
-    xmm0 = _mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m5_p5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y0i = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-
-    // Detection for 5th bit (LTE mapping)
-    xmm0 = _mm_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
-    xmm1 = _mm_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
-    xmm2 = _mm_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
-    xmm3 = _mm_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
-    xmm1 = _mm_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
-    xmm3 = _mm_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
-    xmm1 = _mm_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
-    xmm3 = _mm_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
-    xmm1 = _mm_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
-    xmm2 = _mm_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
-    xmm3 = _mm_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
-    xmm1 = _mm_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
-    xmm2 = _mm_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
-    xmm1 = _mm_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
-    xmm2 = _mm_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
-    xmm2 = _mm_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
-    xmm3 = _mm_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
-    xmm2 = _mm_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
-    xmm3 = _mm_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y1i = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-    // Detection for 6th bit (LTE mapping)
-    xmm0 = _mm_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
-    xmm1 = _mm_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
-    xmm2 = _mm_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
-    xmm3 = _mm_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
-    xmm1 = _mm_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
-    xmm2 = _mm_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
-    xmm3 = _mm_max_epi16(bit_met_m5_p1, bit_met_m5_p1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
-    xmm1 = _mm_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
-    xmm2 = _mm_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
-    xmm3 = _mm_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
-    xmm1 = _mm_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
-    xmm2 = _mm_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
-    xmm3 = _mm_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm4);
-    logmax_den_re0 = _mm_max_epi16(logmax_den_re0, xmm5);
-
-    xmm0 = _mm_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
-    xmm1 = _mm_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
-    xmm2 = _mm_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
-    xmm3 = _mm_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(xmm4, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
-    xmm1 = _mm_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
-    xmm2 = _mm_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
-    xmm3 = _mm_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
-    xmm1 = _mm_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
-    xmm2 = _mm_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
-    xmm3 = _mm_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-    xmm0 = _mm_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
-    xmm1 = _mm_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
-    xmm2 = _mm_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
-    xmm3 = _mm_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
-    xmm4 = _mm_max_epi16(xmm0, xmm1);
-    xmm5 = _mm_max_epi16(xmm2, xmm3);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm4);
-    logmax_num_re0 = _mm_max_epi16(logmax_num_re0, xmm5);
-
-    y2i = _mm_subs_epi16(logmax_num_re0, logmax_den_re0);
-
-
-    // map to output stream, difficult to do in SIMD since we have 6 16bit LLRs
-    // RE 1
-    j = 24*i;
-    stream0_out[j + 0] = ((short *)&y0r)[0];
-    stream0_out[j + 1] = ((short *)&y1r)[0];
-    stream0_out[j + 2] = ((short *)&y2r)[0];
-    stream0_out[j + 3] = ((short *)&y0i)[0];
-    stream0_out[j + 4] = ((short *)&y1i)[0];
-    stream0_out[j + 5] = ((short *)&y2i)[0];
-    // RE 2
-    stream0_out[j + 6] = ((short *)&y0r)[1];
-    stream0_out[j + 7] = ((short *)&y1r)[1];
-    stream0_out[j + 8] = ((short *)&y2r)[1];
-    stream0_out[j + 9] = ((short *)&y0i)[1];
-    stream0_out[j + 10] = ((short *)&y1i)[1];
-    stream0_out[j + 11] = ((short *)&y2i)[1];
-    // RE 3
-    stream0_out[j + 12] = ((short *)&y0r)[2];
-    stream0_out[j + 13] = ((short *)&y1r)[2];
-    stream0_out[j + 14] = ((short *)&y2r)[2];
-    stream0_out[j + 15] = ((short *)&y0i)[2];
-    stream0_out[j + 16] = ((short *)&y1i)[2];
-    stream0_out[j + 17] = ((short *)&y2i)[2];
-    // RE 4
-    stream0_out[j + 18] = ((short *)&y0r)[3];
-    stream0_out[j + 19] = ((short *)&y1r)[3];
-    stream0_out[j + 20] = ((short *)&y2r)[3];
-    stream0_out[j + 21] = ((short *)&y0i)[3];
-    stream0_out[j + 22] = ((short *)&y1i)[3];
-    stream0_out[j + 23] = ((short *)&y2i)[3];
-    // RE 5
-    stream0_out[j + 24] = ((short *)&y0r)[4];
-    stream0_out[j + 25] = ((short *)&y1r)[4];
-    stream0_out[j + 26] = ((short *)&y2r)[4];
-    stream0_out[j + 27] = ((short *)&y0i)[4];
-    stream0_out[j + 28] = ((short *)&y1i)[4];
-    stream0_out[j + 29] = ((short *)&y2i)[4];
-    // RE 6
-    stream0_out[j + 30] = ((short *)&y0r)[5];
-    stream0_out[j + 31] = ((short *)&y1r)[5];
-    stream0_out[j + 32] = ((short *)&y2r)[5];
-    stream0_out[j + 33] = ((short *)&y0i)[5];
-    stream0_out[j + 34] = ((short *)&y1i)[5];
-    stream0_out[j + 35] = ((short *)&y2i)[5];
-    // RE 7
-    stream0_out[j + 36] = ((short *)&y0r)[6];
-    stream0_out[j + 37] = ((short *)&y1r)[6];
-    stream0_out[j + 38] = ((short *)&y2r)[6];
-    stream0_out[j + 39] = ((short *)&y0i)[6];
-    stream0_out[j + 40] = ((short *)&y1i)[6];
-    stream0_out[j + 41] = ((short *)&y2i)[6];
-    // RE 8
-    stream0_out[j + 42] = ((short *)&y0r)[7];
-    stream0_out[j + 43] = ((short *)&y1r)[7];
-    stream0_out[j + 44] = ((short *)&y2r)[7];
-    stream0_out[j + 45] = ((short *)&y0i)[7];
-    stream0_out[j + 46] = ((short *)&y1i)[7];
-    stream0_out[j + 47] = ((short *)&y2i)[7];
-
-#elif defined(__arm__)
-
-#endif
-
-  }
-
-#if defined(__x86_64__) || defined(__i386__)
-  _mm_empty();
-  _m_empty();
-#endif
-}
-
-
-int dlsch_64qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
-                          int32_t **rxdataF_comp,
-                          int32_t **rxdataF_comp_i,
-                          int32_t **dl_ch_mag,
-                          int32_t **dl_ch_mag_i,
-                          int32_t **rho_i,
-                          int16_t *dlsch_llr,
-                          uint8_t symbol,
-                          uint8_t first_symbol_flag,
-                          uint16_t nb_rb,
-                          uint16_t pbch_pss_sss_adjust,
-                          //int16_t **llr16p,
-                          uint32_t llr_offset)
-{
-
-  int16_t *rxF      = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rxF_i    = (int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *ch_mag   = (int16_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *rho      = (int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
-  int16_t *llr16;
-  int8_t  *pllr_symbol; // pointer where llrs should filled for this ofdm symbol
-  int len;
-  uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
-
-  //first symbol has different structure due to more pilots
-  /*if (first_symbol_flag == 1) {
-    llr16 = (int16_t*)dlsch_llr;
-  } else {
-    llr16 = (int16_t*)(*llr16p);
-  }*/
-
-  llr16 = (int16_t*)dlsch_llr;
-
-  AssertFatal(llr16!=NULL,"dlsch_16qam_64qam_llr:llr is null, symbol %d\n",symbol);
-
-
-  if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
-    // if symbol has pilots
-    if (frame_parms->nb_antenna_ports_eNB!=1)
-      // in 2 antenna ports we have 8 REs per symbol per RB
-      len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3);
-    else
-      // for 1 antenna port we have 10 REs per symbol per RB
-      len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6);
-  } else {
-    // symbol has no pilots
-    len = (nb_rb*12) - pbch_pss_sss_adjust;
-  }
-
-  pllr_symbol = (int8_t*)dlsch_llr;
-  pllr_symbol += llr_offset;
-  //printf("dlsch_64qam_64qam_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust);
-  /*LOG_I(PHY,"dlsch_64qam_64qam_llr [symb %d / FirstSym %d / Length %d / LLR Offset %d]: @LLR Buff %x, @LLR Buff(symb) %x, , @Compute LLR Buff(symb) %x  \n",
-             symbol,
-             first_symbol_flag,
-             len,
-             llr_offset,
-             (int16_t*)dlsch_llr,
-             llr16,
-             pllr_symbol);*/
-
-#ifdef __AVX2__
-
-  // Round length up to multiple of 16 words
-  uint32_t len256i = ((len+16)>>4)*16;
-  int32_t *rxF_256i      = (int32_t*) malloc16_clear(len256i*4);
-  int32_t *rxF_i_256i    = (int32_t*) malloc16_clear(len256i*4);
-  int32_t *ch_mag_256i   = (int32_t*) malloc16_clear(len256i*4);
-  int32_t *ch_mag_i_256i = (int32_t*) malloc16_clear(len256i*4);
-  int32_t *rho_256i      = (int32_t*) malloc16_clear(len256i*4);
-
-  memcpy(rxF_256i, rxF, len*4);
-  memcpy(rxF_i_256i, rxF_i, len*4);
-  memcpy(ch_mag_256i, ch_mag, len*4);
-  memcpy(ch_mag_i_256i, ch_mag_i, len*4);
-  memcpy(rho_256i, rho, len*4);
-
-#if 0
-  qam64_qam16_avx2((short *)rxF_256i,
-                   (short *)rxF_i_256i,
-                   (short *)ch_mag_256i,
-                   (short *)ch_mag_i_256i,
-                   (short *)llr16,
-                   (short *) rho_256i,
-                   len);
-#else
-  qam64_qam64_avx2((int32_t *)rxF_256i,
-                   (int32_t *)rxF_i_256i,
-                   (int32_t *)ch_mag_256i,
-                   (int32_t *)ch_mag_i_256i,
-                   (int16_t *)llr16,
-                   (int32_t *) rho_256i,
-                   len);
-#endif
-  
-  free16(rxF_256i, sizeof(rxF_256i));
-  free16(rxF_i_256i, sizeof(rxF_i_256i));
-  free16(ch_mag_256i, sizeof(ch_mag_256i));
-  free16(ch_mag_i_256i, sizeof(ch_mag_i_256i));
-  free16(rho_256i, sizeof(rho_256i));
-
-#else
-  qam64_qam64((short *)rxF,
-              (short *)rxF_i,
-              (short *)ch_mag,
-              (short *)ch_mag_i,
-              (short *)llr16,
-              (short *)rho,
-              len);
-#endif
-
-  llr16 += (6*len);
-  //*llr16p = (short *)llr16;
-
-  return(0);
-}
diff --git a/openair1/PHY/LTE_TRANSPORT/drs_modulation.c b/openair1/PHY/LTE_TRANSPORT/drs_modulation.c
deleted file mode 100644
index a0bde219b57706e59b5d5746f8408bc1307f46be..0000000000000000000000000000000000000000
--- a/openair1/PHY/LTE_TRANSPORT/drs_modulation.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * 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
- */
-
-/*! \file PHY/LTE_TRANSPORT/drs_modulation.c
-* \brief Top-level routines for generating the Demodulation Reference Signals from 36-211, V8.6 2009-03
-* \author R. Knopp, F. Kaltenberger, A. Bhamri
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr
-* \note
-* \warning
-*/
-#include "PHY/defs.h"
-#include "PHY/extern.h"
-#include "PHY/sse_intrin.h"
-//#define DEBUG_DRS
-
-int generate_drs_pusch(PHY_VARS_UE *ue,
-		       UE_rxtx_proc_t *proc,
-                       uint8_t eNB_id,
-                       short amp,
-                       unsigned int subframe,
-                       unsigned int first_rb,
-                       unsigned int nb_rb,
-                       uint8_t ant)
-{
-
-  uint16_t k,l,Msc_RS,Msc_RS_idx,rb,drs_offset;
-  uint16_t * Msc_idx_ptr;
-  int subframe_offset,re_offset,symbol_offset;
-
-  //uint32_t phase_shift; // phase shift for cyclic delay in DM RS
-  //uint8_t alpha_ind;
-
-  int16_t alpha_re[12] = {32767, 28377, 16383,     0,-16384,  -28378,-32768,-28378,-16384,    -1, 16383, 28377};
-  int16_t alpha_im[12] = {0,     16383, 28377, 32767, 28377,   16383,     0,-16384,-28378,-32768,-28378,-16384};
-
-  uint8_t cyclic_shift,cyclic_shift0,cyclic_shift1;
-  LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
-  int32_t *txdataF = ue->common_vars.txdataF[ant];
-  uint32_t u,v,alpha_ind;
-  uint32_t u0=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[subframe<<1];
-  uint32_t u1=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[1+(subframe<<1)];
-  uint32_t v0=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[subframe<<1];
-  uint32_t v1=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[1+(subframe<<1)];
-  int32_t ref_re,ref_im;
-  uint8_t harq_pid = subframe2harq_pid(frame_parms,proc->frame_tx,subframe);
-
-  cyclic_shift0 = (frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
-                   ue->ulsch[eNB_id]->harq_processes[harq_pid]->n_DMRS2 +
-                   frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1]+
-                   ((ue->ulsch[0]->cooperation_flag==2)?10:0)+
-                   ant*6) % 12;
-  //  printf("PUSCH.cyclicShift %d, n_DMRS2 %d, nPRS %d\n",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,ue->ulsch[eNB_id]->n_DMRS2,ue->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1]);
-  cyclic_shift1 = (frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
-                   ue->ulsch[eNB_id]->harq_processes[harq_pid]->n_DMRS2 +
-                   frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[(subframe<<1)+1]+
-                   ((ue->ulsch[0]->cooperation_flag==2)?10:0)+
-                   ant*6) % 12;
-
-  //       cyclic_shift0 = 0;
-  //        cyclic_shift1 = 0;
-  Msc_RS = 12*nb_rb;
-
-  Msc_idx_ptr = (uint16_t*) bsearch(&Msc_RS, dftsizes, 33, sizeof(uint16_t), compareints);
-
-  if (Msc_idx_ptr)
-    Msc_RS_idx = Msc_idx_ptr - dftsizes;
-  else {
-    LOG_I(PHY,"generate_drs_pusch: index for Msc_RS=%d not found\n",Msc_RS);
-    return(-1);
-  }
-
-  for (l = (3 - frame_parms->Ncp),u=u0,v=v0,cyclic_shift=cyclic_shift0;
-       l<frame_parms->symbols_per_tti;
-       l += (7 - frame_parms->Ncp),u=u1,v=v1,cyclic_shift=cyclic_shift1) {
-
-    drs_offset = 0;
-#ifdef DEBUG_DRS
-    printf("drs_modulation: Msc_RS = %d, Msc_RS_idx = %d, u=%d,v=%d\n",Msc_RS, Msc_RS_idx,u,v);
-#endif
-
-
-    re_offset = frame_parms->first_carrier_offset;
-    subframe_offset = subframe*frame_parms->symbols_per_tti*frame_parms->ofdm_symbol_size;
-    symbol_offset = subframe_offset + frame_parms->ofdm_symbol_size*l;
-
-
-#ifdef DEBUG_DRS
-    printf("generate_drs_pusch: symbol_offset %d, subframe offset %d, cyclic shift %d\n",symbol_offset,subframe_offset,cyclic_shift);
-#endif
-    alpha_ind = 0;
-
-    for (rb=0; rb<frame_parms->N_RB_UL; rb++) {
-
-      if ((rb >= first_rb) && (rb<(first_rb+nb_rb))) {
-
-#ifdef DEBUG_DRS
-        printf("generate_drs_pusch: doing RB %d, re_offset=%d, drs_offset=%d,cyclic shift %d\n",rb,re_offset,drs_offset,cyclic_shift);
-#endif
-
-        for (k=0; k<12; k++) {
-          ref_re = (int32_t) ul_ref_sigs[u][v][Msc_RS_idx][drs_offset<<1];
-          ref_im = (int32_t) ul_ref_sigs[u][v][Msc_RS_idx][(drs_offset<<1)+1];
-
-          ((int16_t*) txdataF)[2*(symbol_offset + re_offset)]   = (int16_t) (((ref_re*alpha_re[alpha_ind]) -
-              (ref_im*alpha_im[alpha_ind]))>>15);
-          ((int16_t*) txdataF)[2*(symbol_offset + re_offset)+1] = (int16_t) (((ref_re*alpha_im[alpha_ind]) +
-              (ref_im*alpha_re[alpha_ind]))>>15);
-          ((short*) txdataF)[2*(symbol_offset + re_offset)]   = (short) ((((short*) txdataF)[2*(symbol_offset + re_offset)]*(int32_t)amp)>>15);
-          ((short*) txdataF)[2*(symbol_offset + re_offset)+1] = (short) ((((short*) txdataF)[2*(symbol_offset + re_offset)+1]*(int32_t)amp)>>15);
-
-
-          alpha_ind = (alpha_ind + cyclic_shift);
-
-          if (alpha_ind > 11)
-            alpha_ind-=12;
-
-#ifdef DEBUG_DRS
-          printf("symbol_offset %d, alpha_ind %d , re_offset %d : (%d,%d)\n",
-              symbol_offset,
-              alpha_ind,
-              re_offset,
-              ((short*) txdataF)[2*(symbol_offset + re_offset)],
-              ((short*) txdataF)[2*(symbol_offset + re_offset)+1]);
-
-#endif  // DEBUG_DRS
-          re_offset++;
-          drs_offset++;
-
-          if (re_offset >= frame_parms->ofdm_symbol_size)
-            re_offset = 0;
-        }
-
-      } else {
-        re_offset+=12; // go to next RB
-
-        // check if we crossed the symbol boundary and skip DC
-
-        if (re_offset >= frame_parms->ofdm_symbol_size) {
-          if (frame_parms->N_RB_DL&1)  // odd number of RBs
-            re_offset=6;
-          else                         // even number of RBs (doesn't straddle DC)
-            re_offset=0;
-        }
-
-
-      }
-    }
-  }
-
-  return(0);
-}
-
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
deleted file mode 100644
index 09420f48ab1a7029fdbbb2015fd7f28f47ffcd8c..0000000000000000000000000000000000000000
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
+++ /dev/null
@@ -1,933 +0,0 @@
-/*
- * 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
- */
-
-/*! \file PHY/LTE_TRANSPORT/ulsch_coding.c
-* \brief Top-level routines for coding the ULSCH transport channel as described in 36.212 V8.6 2009-03
-* \author R. Knopp
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr
-* \note
-* \warning
-*/
-
-#include "PHY/defs.h"
-#include "PHY/extern.h"
-
-#include "PHY/CODING/defs.h"
-#include "PHY/CODING/extern.h"
-#include "PHY/CODING/lte_interleaver_inline.h"
-#include "PHY/LTE_TRANSPORT/defs.h"
-#include "defs.h"
-#include "extern.h"
-#include "SIMULATION/ETH_TRANSPORT/extern.h"
-#include "UTIL/LOG/vcd_signal_dumper.h"
-
-//#define DEBUG_ULSCH_CODING
-//#define DEBUG_ULSCH_FREE 1
-
-/*
-#define is_not_pilot(pilots,first_pilot,re) (pilots==0) || \
-  ((pilots==1)&&(first_pilot==1)&&(((re>2)&&(re<6))||((re>8)&&(re<12)))) || \
-  ((pilots==1)&&(first_pilot==0)&&(((re<3))||((re>5)&&(re<9)))) \
-*/
-#define is_not_pilot(pilots,first_pilot,re) (1)
-
-
-
-
-void free_ue_ulsch(LTE_UE_ULSCH_t *ulsch)
-{
-  int i;
-  int r;
-
-  if (ulsch) {
-#ifdef DEBUG_ULSCH_FREE
-    printf("Freeing ulsch %p\n",ulsch);
-#endif
-
-    for (i=0; i<8; i++) {
-      if (ulsch->harq_processes[i]) {
-        if (ulsch->harq_processes[i]->b) {
-          free16(ulsch->harq_processes[i]->b,MAX_ULSCH_PAYLOAD_BYTES);
-          ulsch->harq_processes[i]->b = NULL;
-        }
-        for (r=0; r<MAX_NUM_ULSCH_SEGMENTS; r++) {
-          if (ulsch->harq_processes[i]->c[r]) {
-            free16(ulsch->harq_processes[i]->c[r],((r==0)?8:0) + 3+768);
-            ulsch->harq_processes[i]->c[r] = NULL;
-          }
-        }
-
-        free16(ulsch->harq_processes[i],sizeof(LTE_UL_UE_HARQ_t));
-        ulsch->harq_processes[i] = NULL;
-      }
-    }
-    free16(ulsch,sizeof(LTE_UE_ULSCH_t));
-    ulsch = NULL;
-  }
-
-}
-
-LTE_UE_ULSCH_t *new_ue_ulsch(unsigned char N_RB_UL, uint8_t abstraction_flag)
-{
-
-  LTE_UE_ULSCH_t *ulsch;
-  unsigned char exit_flag = 0,i,j,r;
-  unsigned char bw_scaling =1;
-
-  switch (N_RB_UL) {
-  case 6:
-    bw_scaling =16;
-    break;
-
-  case 25:
-    bw_scaling =4;
-    break;
-
-  case 50:
-    bw_scaling =2;
-    break;
-
-  default:
-    bw_scaling =1;
-    break;
-  }
-
-  ulsch = (LTE_UE_ULSCH_t *)malloc16(sizeof(LTE_UE_ULSCH_t));
-
-  if (ulsch) {
-    memset(ulsch,0,sizeof(LTE_UE_ULSCH_t));
-
-    ulsch->Mlimit = 4;
-
-    for (i=0; i<8; i++) {
-
-      ulsch->harq_processes[i] = (LTE_UL_UE_HARQ_t *)malloc16(sizeof(LTE_UL_UE_HARQ_t));
-
-      //      printf("ulsch->harq_processes[%d] %p\n",i,ulsch->harq_processes[i]);
-      if (ulsch->harq_processes[i]) {
-        memset(ulsch->harq_processes[i], 0, sizeof(LTE_UL_UE_HARQ_t));
-        ulsch->harq_processes[i]->b = (unsigned char*)malloc16(MAX_ULSCH_PAYLOAD_BYTES/bw_scaling);
-
-        if (ulsch->harq_processes[i]->b)
-          memset(ulsch->harq_processes[i]->b,0,MAX_ULSCH_PAYLOAD_BYTES/bw_scaling);
-        else {
-          LOG_E(PHY,"Can't get b\n");
-          exit_flag=1;
-        }
-
-        if (abstraction_flag==0) {
-          for (r=0; r<MAX_NUM_ULSCH_SEGMENTS; r++) {
-            ulsch->harq_processes[i]->c[r] = (unsigned char*)malloc16(((r==0)?8:0) + 3+768);  // account for filler in first segment and CRCs for multiple segment case
-
-            if (ulsch->harq_processes[i]->c[r])
-              memset(ulsch->harq_processes[i]->c[r],0,((r==0)?8:0) + 3+768);
-            else {
-              LOG_E(PHY,"Can't get c\n");
-              exit_flag=2;
-            }
-          }
-        }
-
-        ulsch->harq_processes[i]->subframe_scheduling_flag = 0;
-        ulsch->harq_processes[i]->first_tx = 1;
-      } else {
-        LOG_E(PHY,"Can't get harq_p %d\n",i);
-        exit_flag=3;
-      }
-    }
-
-    if ((abstraction_flag == 0) && (exit_flag==0)) {
-      for (i=0; i<8; i++)
-        for (j=0; j<96; j++)
-          for (r=0; r<MAX_NUM_ULSCH_SEGMENTS; r++)
-            ulsch->harq_processes[i]->d[r][j] = LTE_NULL;
-
-      return(ulsch);
-    } else if (abstraction_flag==1)
-      return(ulsch);
-  }
-
-  LOG_E(PHY,"new_ue_ulsch exit flag, size of  %d ,   %zu\n",exit_flag, sizeof(LTE_UE_ULSCH_t));
-  free_ue_ulsch(ulsch);
-  return(NULL);
-
-
-}
-
-
-uint32_t ulsch_encoding(uint8_t *a,
-                        PHY_VARS_UE *ue,
-                        uint8_t harq_pid,
-                        uint8_t eNB_id,
-                        uint8_t subframe_rx,
-                        uint8_t tmode,
-                        uint8_t control_only_flag,
-                        uint8_t Nbundled)
-{
-
-  time_stats_t *seg_stats=&ue->ulsch_segmentation_stats;
-  time_stats_t *rm_stats=&ue->ulsch_rate_matching_stats;
-  time_stats_t *te_stats=&ue->ulsch_turbo_encoding_stats;
-  time_stats_t *i_stats=&ue->ulsch_interleaving_stats;
-  time_stats_t *m_stats=&ue->ulsch_multiplexing_stats;
-
-  //  uint16_t offset;
-  uint32_t crc=1;
-  uint16_t iind;
-  uint32_t A;
-  uint8_t Q_m=0;
-  uint32_t Kr=0,Kr_bytes,r,r_offset=0;
-  uint8_t y[6*14*1200],*yptr;;
-  uint8_t *columnset;
-  uint32_t sumKr=0;
-  uint32_t Qprime,L,G,Q_CQI=0,Q_RI=0,Q_ACK=0,H=0,Hprime=0,Hpp=0,Cmux=0,Rmux=0,Rmux_prime=0;
-  uint32_t Qprime_ACK=0,Qprime_CQI=0,Qprime_RI=0,len_ACK=0,len_RI=0;
-  //  uint32_t E;
-  uint8_t ack_parity;
-  uint32_t i,q,j,iprime,j2;
-  uint16_t o_RCC;
-  uint8_t o_flip[8];
-  uint32_t wACK_idx;
-  LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
-  PHY_MEASUREMENTS *meas = &ue->measurements;
-  LTE_UE_ULSCH_t *ulsch=ue->ulsch[eNB_id];
-  LTE_UE_DLSCH_t **dlsch = ue->dlsch[0][eNB_id];
-  uint16_t rnti = 0xffff;
-
-  if (!ulsch) {
-    LOG_E(PHY,"Null ulsch ptr %p\n",ulsch);
-    return(-1);
-  }
-
-  if (harq_pid >= 8) {
-    LOG_E(PHY,"Illegal harq_pid %d\n",harq_pid);
-    return(-1);
-  }
-
-  if (ulsch->harq_processes[harq_pid]->O_ACK > 2) {
-    LOG_E(PHY,"Illegal O_ACK %d\n",ulsch->harq_processes[harq_pid]->O_ACK);
-    return(-1);
-  }
-
-  if (ulsch->O_RI > 1) {
-    LOG_E(PHY,"Illegal O_RI %d\n",ulsch->O_RI);
-    return(-1);
-  }
-
-  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING, VCD_FUNCTION_IN);
-
-  // fill CQI/PMI information
-  if (ulsch->O>0) {
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING_FILL_CQI, VCD_FUNCTION_IN);
-    rnti = ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->crnti;
-    fill_CQI(ulsch,meas,0,harq_pid,ue->frame_parms.N_RB_DL,rnti, tmode,ue->sinr_eff);
-
-    LOG_D(PHY,"ULSCH Encoding rnti %x \n", rnti);
-    print_CQI(ulsch->o,ulsch->uci_format,0,ue->frame_parms.N_RB_DL);
-
-    // save PUSCH pmi for later (transmission modes 4,5,6)
-    if (dlsch[0]) {
-      //LOG_I(PHY,"XXX saving pmi for DL %x\n",pmi2hex_2Ar1(((wideband_cqi_rank1_2A_5MHz *)ulsch->o)->pmi));
-      dlsch[0]->pmi_alloc = ((wideband_cqi_rank1_2A_5MHz *)ulsch->o)->pmi;
-    }
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING_FILL_CQI, VCD_FUNCTION_OUT);
-  }
-
-  if (ulsch->O<=32) {
-    o_flip[0] = ulsch->o[3];
-    o_flip[1] = ulsch->o[2];
-    o_flip[2] = ulsch->o[1];
-    o_flip[3] = ulsch->o[0];
-  } else {
-    o_flip[0] = ulsch->o[7];
-    o_flip[1] = ulsch->o[6];
-    o_flip[2] = ulsch->o[5];
-    o_flip[3] = ulsch->o[4];
-    o_flip[4] = ulsch->o[3];
-    o_flip[5] = ulsch->o[2];
-    o_flip[6] = ulsch->o[1];
-    o_flip[7] = ulsch->o[0];
-  }
-
-  if (control_only_flag == 0) {
-    A=ulsch->harq_processes[harq_pid]->TBS;
-    Q_m = get_Qm_ul(ulsch->harq_processes[harq_pid]->mcs);
-
-    ulsch->harq_processes[harq_pid]->control_only = 0;
-
-#ifdef DEBUG_ULSCH_CODING
-    printf("[PHY][UE] ULSCH coding : A %d, Qm %d, mcs %d, harq_pid %d, round %d, RV %d\n",
-        ulsch->harq_processes[harq_pid]->TBS,
-        Q_m,
-        ulsch->harq_processes[harq_pid]->mcs,
-        harq_pid,
-        ulsch->harq_processes[harq_pid]->round,
-        ulsch->harq_processes[harq_pid]->rvidx);
-
-    for (i=0; i<ulsch->harq_processes[harq_pid]->O_ACK; i++)
-      printf("ulsch_coding: o_ACK[%d] %d\n",i,ulsch->o_ACK[i]);
-
-    for (i=0; i<ulsch->O_RI; i++)
-      printf("ulsch_coding: o_RI[%d] %d\n",i,ulsch->o_RI[i]);
-
-    printf("ulsch_coding: O=%d\n",ulsch->O);
-
-    for (i=0; i<1+((8+ulsch->O)/8); i++) {
-      //    ulsch->o[i] = i;
-      printf("ulsch_coding: O[%d] %d\n",i,ulsch->o[i]);
-    }
-
-    if ((tmode != 4))
-      print_CQI(ulsch->o,wideband_cqi_rank1_2A,0,ue->frame_parms.N_RB_DL);
-    else
-      print_CQI(ulsch->o,HLC_subband_cqi_rank1_2A,0,ue->frame_parms.N_RB_DL);
-
-#endif
-
-    if (ulsch->harq_processes[harq_pid]->round == 0) {  // this is a new packet
-
-      start_meas(seg_stats);
-      // Add 24-bit crc (polynomial A) to payload
-      crc = crc24a(a,
-                   A)>>8;
-
-      a[A>>3] = ((uint8_t*)&crc)[2];
-      a[1+(A>>3)] = ((uint8_t*)&crc)[1];
-      a[2+(A>>3)] = ((uint8_t*)&crc)[0];
-
-      ulsch->harq_processes[harq_pid]->B = A+24;
-      ulsch->harq_processes[harq_pid]->b = a;
-      lte_segmentation(ulsch->harq_processes[harq_pid]->b,
-                       ulsch->harq_processes[harq_pid]->c,
-                       ulsch->harq_processes[harq_pid]->B,
-                       &ulsch->harq_processes[harq_pid]->C,
-                       &ulsch->harq_processes[harq_pid]->Cplus,
-                       &ulsch->harq_processes[harq_pid]->Cminus,
-                       &ulsch->harq_processes[harq_pid]->Kplus,
-                       &ulsch->harq_processes[harq_pid]->Kminus,
-                       &ulsch->harq_processes[harq_pid]->F);
-
-      stop_meas(seg_stats);
-
-      for (r=0; r<ulsch->harq_processes[harq_pid]->C; r++) {
-        if (r<ulsch->harq_processes[harq_pid]->Cminus)
-          Kr = ulsch->harq_processes[harq_pid]->Kminus;
-        else
-          Kr = ulsch->harq_processes[harq_pid]->Kplus;
-
-        Kr_bytes = Kr>>3;
-
-        // get interleaver index for Turbo code (lookup in Table 5.1.3-3 36-212, V8.6 2009-03, p. 13-14)
-        if (Kr_bytes<=64)
-          iind = (Kr_bytes-5);
-        else if (Kr_bytes <=128)
-          iind = 59 + ((Kr_bytes-64)>>1);
-        else if (Kr_bytes <= 256)
-          iind = 91 + ((Kr_bytes-128)>>2);
-        else if (Kr_bytes <= 768)
-          iind = 123 + ((Kr_bytes-256)>>3);
-        else {
-          LOG_E(PHY,"ulsch_coding: Illegal codeword size %d!!!\n",Kr_bytes);
-          VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING, VCD_FUNCTION_OUT);
-          return(-1);
-        }
-
-
-#ifdef DEBUG_ULSCH_CODING
-        printf("Generating Code Segment %d (%d bits)\n",r,Kr);
-        // generate codewords
-
-        printf("bits_per_codeword (Kr)= %d\n",Kr);
-        printf("N_RB = %d\n",ulsch->harq_processes[harq_pid]->nb_rb);
-        printf("Ncp %d\n",frame_parms->Ncp);
-        printf("Qm %d\n",Q_m);
-#endif
-
-        //  offset=0;
-
-
-#ifdef DEBUG_ULSCH_CODING
-        printf("Encoding ... iind %d f1 %d, f2 %d\n",iind,f1f2mat_old[iind*2],f1f2mat_old[(iind*2)+1]);
-#endif
-        start_meas(te_stats);
-        encoder(ulsch->harq_processes[harq_pid]->c[r],
-        	Kr>>3,
-        	&ulsch->harq_processes[harq_pid]->d[r][96],
-        	(r==0) ? ulsch->harq_processes[harq_pid]->F : 0,
-        	f1f2mat_old[iind*2],   // f1 (see 36212-820, page 14)
-        	f1f2mat_old[(iind*2)+1]  // f2 (see 36212-820, page 14)
-               );
-        stop_meas(te_stats);
-#ifdef DEBUG_ULSCH_CODING
-
-        if (r==0)
-          write_output("enc_output0.m","enc0",&ulsch->harq_processes[harq_pid]->d[r][96],(3*8*Kr_bytes)+12,1,4);
-
-#endif
-        start_meas(i_stats);
-        ulsch->harq_processes[harq_pid]->RTC[r] =
-          sub_block_interleaving_turbo(4+(Kr_bytes*8),
-                                       &ulsch->harq_processes[harq_pid]->d[r][96],
-                                       ulsch->harq_processes[harq_pid]->w[r]);
-        stop_meas(i_stats);
-      }
-
-    }
-
-    if (ulsch->harq_processes[harq_pid]->C == 0) {
-      LOG_E(PHY,"null segment\n");
-      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING, VCD_FUNCTION_OUT);
-      return(-1);
-    }
-
-    sumKr = 0;
-
-    for (r=0; r<ulsch->harq_processes[harq_pid]->C; r++) {
-      if (r<ulsch->harq_processes[harq_pid]->Cminus)
-        Kr = ulsch->harq_processes[harq_pid]->Kminus;
-      else
-        Kr = ulsch->harq_processes[harq_pid]->Kplus;
-
-      sumKr += Kr;
-    }
-  } else { // This is a control-only PUSCH, set sumKr to O_CQI-MIN
-    ulsch->harq_processes[harq_pid]->control_only = 1;
-    sumKr = ulsch->O_CQI_MIN;
-  }
-
-  ulsch->harq_processes[harq_pid]->sumKr = sumKr;
-  // Compute Q_ri (p. 23 36-212)
-
-  Qprime = ulsch->O_RI*ulsch->harq_processes[harq_pid]->Msc_initial*ulsch->harq_processes[harq_pid]->Nsymb_initial * ulsch->beta_offset_ri_times8;
-
-  if (Qprime > 0) {
-    if ((Qprime % (8*sumKr)) > 0)
-      Qprime = 1+(Qprime/(8*sumKr));
-    else
-      Qprime = Qprime/(8*sumKr);
-
-    if (Qprime > 4*ulsch->harq_processes[harq_pid]->nb_rb * 12)
-      Qprime = 4*ulsch->harq_processes[harq_pid]->nb_rb * 12;
-  }
-
-  Q_RI = Q_m*Qprime;
-  Qprime_RI = Qprime;
-
-  // Compute Q_ack (p. 23 36-212)
-  Qprime = ulsch->harq_processes[harq_pid]->O_ACK*ulsch->harq_processes[harq_pid]->Msc_initial*ulsch->harq_processes[harq_pid]->Nsymb_initial * ulsch->beta_offset_harqack_times8;
-
-  if (Qprime > 0) {
-    if ((Qprime % (8*sumKr)) > 0)
-      Qprime = 1+(Qprime/(8*sumKr));
-    else
-      Qprime = Qprime/(8*sumKr);
-
-    if (Qprime > 4*ulsch->harq_processes[harq_pid]->nb_rb * 12)
-      Qprime = 4*ulsch->harq_processes[harq_pid]->nb_rb * 12;
-  }
-
-  Q_ACK = Qprime * Q_m;
-  Qprime_ACK = Qprime;
-
-  LOG_D(PHY,"UE (%x/%d) O_ACK %d, Mcs_initial %d, Nsymb_initial %d, beta_offset_harqack*8 %d, sum Kr %d, Qprime_ACK %d, Q_ACK %d\n",
-      rnti, harq_pid,
-      ulsch->harq_processes[harq_pid]->O_ACK,
-      ulsch->harq_processes[harq_pid]->Msc_initial,
-      ulsch->harq_processes[harq_pid]->Nsymb_initial,
-      ulsch->beta_offset_harqack_times8,
-      sumKr,
-      Qprime_ACK,
-      Q_ACK);
-
-  // Compute Q_cqi, assume O>11, p. 26 36-212
-  if (control_only_flag == 0) {
-
-    if (ulsch->O < 12)
-      L=0;
-    else
-      L=8;
-
-    if (ulsch->O > 0)
-      Qprime = (ulsch->O + L) * ulsch->harq_processes[harq_pid]->Msc_initial*ulsch->harq_processes[harq_pid]->Nsymb_initial * ulsch->beta_offset_cqi_times8;
-    else
-      Qprime = 0;
-
-    if (Qprime > 0) {
-      if ((Qprime % (8*sumKr)) > 0)
-        Qprime = 1+(Qprime/(8*sumKr));
-      else
-        Qprime = Qprime/(8*sumKr);
-    }
-
-    G = ulsch->harq_processes[harq_pid]->nb_rb * (12 * Q_m) * (ulsch->Nsymb_pusch);
-
-    if (Qprime > (G - ulsch->O_RI))
-      Qprime = G - ulsch->O_RI;
-
-    Q_CQI = Q_m * Qprime;
-    Qprime_CQI = Qprime;
-
-
-
-    G = G - Q_RI - Q_CQI;
-    ulsch->harq_processes[harq_pid]->G = G;
-
-/*
-    LOG_I(PHY,"ULSCH Encoding G %d, Q_RI %d (O_RI%d, Msc_initial %d, Nsymb_initial%d, beta_offset_ri_times8 %d), Q_CQI %d, Q_ACK %d \n",G,Q_RI,ulsch->O_RI,ulsch->harq_processes[harq_pid]->Msc_initial,ulsch->harq_processes[harq_pid]->Nsymb_initial,ulsch->beta_offset_ri_times8,Q_CQI,Q_ACK);
-
-    LOG_I(PHY,"ULSCH Encoding (Nid_cell %d, rnti %x): harq_pid %d round %d, RV %d, mcs %d, O_RI %d, O_ACK %d, G %d\n",
-          frame_parms->Nid_cell,ulsch->rnti,
-          harq_pid,
-          ulsch->harq_processes[harq_pid]->round,
-          ulsch->harq_processes[harq_pid]->rvidx,
-          ulsch->harq_processes[harq_pid]->mcs,
-          ulsch->O_RI,
-          ulsch->harq_processes[harq_pid]->O_ACK,
-          G);
-*/
-
-    if ((int)G < 0) {
-      LOG_E(PHY,"FATAL: ulsch_coding.c G < 0 (%d) : Q_RI %d, Q_CQI %d, O %d, betaCQI_times8 %d)\n",G,Q_RI,Q_CQI,ulsch->O,ulsch->beta_offset_cqi_times8);
-      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING, VCD_FUNCTION_OUT);
-      return(-1);
-    }
-
-
-    // Data and control multiplexing (5.2.2.7 36-212)
-
-    H = G + Q_CQI;
-    Hprime = H/Q_m;
-
-
-
-    // Fill in the "e"-sequence from 36-212, V8.6 2009-03, p. 16-17 (for each "e") and concatenate the
-    // outputs for each code segment, see Section 5.1.5 p.20
-
-    for (r=0; r<ulsch->harq_processes[harq_pid]->C; r++) {
-#ifdef DEBUG_ULSCH_CODING
-      printf("Rate Matching, Code segment %d (coded bits (G) %d,unpunctured/repeated bits per code segment %d,mod_order %d, nb_rb %d)...\n",
-          r,
-          G,
-          Kr*3,
-          Q_m,ulsch->harq_processes[harq_pid]->nb_rb);
-#endif
-
-      start_meas(rm_stats);
-      r_offset += lte_rate_matching_turbo(ulsch->harq_processes[harq_pid]->RTC[r],
-                                          G,
-                                          ulsch->harq_processes[harq_pid]->w[r],
-                                          ulsch->e+r_offset,
-                                          ulsch->harq_processes[harq_pid]->C, // C
-                                          NSOFT,                    // Nsoft,
-                                          0,  // this means UL
-                                          1,
-                                          ulsch->harq_processes[harq_pid]->rvidx,
-                                          get_Qm_ul(ulsch->harq_processes[harq_pid]->mcs),
-                                          1,
-                                          r,
-                                          ulsch->harq_processes[harq_pid]->nb_rb);
-                                          //ulsch->harq_processes[harq_pid]->mcs);                       // r
-      stop_meas(rm_stats);
-#ifdef DEBUG_ULSCH_CODING
-
-      if (r==ulsch->harq_processes[harq_pid]->C-1)
-        write_output("enc_output.m","enc",ulsch->e,r_offset,1,4);
-
-#endif
-    }
-  } else { //control-only PUSCH
-    Q_CQI = (ulsch->harq_processes[harq_pid]->nb_rb * (12 * Q_m) * (ulsch->Nsymb_pusch)) - Q_RI;
-    H = Q_CQI;
-    Hprime = H/Q_m;
-  }
-
-
-  //  Do CQI coding
-  if ((ulsch->O>1) && (ulsch->O < 12)) {
-    LOG_E(PHY,"short CQI sizes not supported yet\n");
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING, VCD_FUNCTION_OUT);
-    return(-1);
-  } else {
-    // add 8-bit CRC
-    crc = crc8(o_flip,
-               ulsch->O)>>24;
-#ifdef DEBUG_ULSCH_CODING
-    printf("crc(cqi) tx : %x\n",crc);
-#endif
-    memset((void *)&ulsch->o_d[0],LTE_NULL,96);
-
-    ccodelte_encode(ulsch->O,
-                    1,
-                    o_flip,
-                    &ulsch->o_d[96],
-                    0);
-
-
-    o_RCC = sub_block_interleaving_cc(8+ulsch->O,
-                                      &ulsch->o_d[96],
-                                      ulsch->o_w);
-
-    lte_rate_matching_cc(o_RCC,
-                         Q_CQI,
-                         ulsch->o_w,
-                         ulsch->q);
-
-  }
-
-  i=0;
-
-  //  Do RI coding
-  if (ulsch->O_RI == 1) {
-    switch (Q_m) {
-    case 2:
-      ulsch->q_RI[0] = ulsch->o_RI[0];
-      ulsch->q_RI[1] = PUSCH_y;//ulsch->o_RI[0];
-      len_RI=2;
-      break;
-
-    case 4:
-      ulsch->q_RI[0] = ulsch->o_RI[0];
-      ulsch->q_RI[1] = PUSCH_y;//1;
-      ulsch->q_RI[2] = PUSCH_x;//ulsch->o_RI[0];
-      ulsch->q_RI[3] = PUSCH_x;//1;
-      len_RI=4;
-      break;
-
-    case 6:
-      ulsch->q_RI[0] = ulsch->o_RI[0];
-      ulsch->q_RI[1] = PUSCH_y;//1;
-      ulsch->q_RI[2] = PUSCH_x;//1;
-      ulsch->q_RI[3] = PUSCH_x;//ulsch->o_RI[0];
-      ulsch->q_RI[4] = PUSCH_x;//1;
-      ulsch->q_RI[5] = PUSCH_x;//1;
-      len_RI=6;
-      break;
-    }
-  } else if (ulsch->O_RI>1) {
-    LOG_E(PHY,"RI cannot be more than 1 bit yet\n");
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING, VCD_FUNCTION_OUT);
-    return(-1);
-  }
-
-  //  Do ACK coding, Section 5.2.2.6 36.213 (p.23-24 in v8.6)
-  wACK_idx = (ulsch->bundling==0) ? 4 : ((Nbundled-1)&3);
-#ifdef DEBUG_ULSCH_CODING
-  printf("ulsch_coding.c: Bundling %d, Nbundled %d, wACK_idx %d\n",
-      ulsch->bundling,Nbundled,wACK_idx);
-#endif
-
-  // 1-bit ACK/NAK
-  if (ulsch->harq_processes[harq_pid]->O_ACK == 1) {
-    switch (Q_m) {
-    case 2:
-      ulsch->q_ACK[0] = (ulsch->o_ACK[0]+wACK[wACK_idx][0])&1;
-      ulsch->q_ACK[1] = (ulsch->bundling==0)? PUSCH_y : ((ulsch->o_ACK[0]+wACK[wACK_idx][1])&1);//ulsch->o_ACK[0];
-      len_ACK = 2;
-      break;
-
-    case 4:
-      ulsch->q_ACK[0] = (ulsch->o_ACK[0]+wACK[wACK_idx][0])&1;
-      ulsch->q_ACK[1] = (ulsch->bundling==0)? PUSCH_y : ((ulsch->o_ACK[0]+wACK[wACK_idx][1])&1);
-      ulsch->q_ACK[2] = PUSCH_x;
-      ulsch->q_ACK[3] = PUSCH_x;
-      len_ACK = 4;
-      break;
-
-    case 6:
-      ulsch->q_ACK[0] = (ulsch->o_ACK[0]+wACK[wACK_idx][0])&1;
-      ulsch->q_ACK[1] = (ulsch->bundling==0)? PUSCH_y : ((ulsch->o_ACK[0]+wACK[wACK_idx][1])&1);
-      ulsch->q_ACK[2] = PUSCH_x;
-      ulsch->q_ACK[3] = PUSCH_x;
-      ulsch->q_ACK[4] = PUSCH_x;
-      ulsch->q_ACK[6] = PUSCH_x;
-      len_ACK = 6;
-      break;
-    }
-  }
-
-  // two-bit ACK/NAK
-  if (ulsch->harq_processes[harq_pid]->O_ACK == 2) {
-    ack_parity = (ulsch->o_ACK[0]+ulsch->o_ACK[1])&1;
-
-    switch (Q_m) {
-    case 2:
-      ulsch->q_ACK[0] = (ulsch->o_ACK[0]+wACK[wACK_idx][0])&1;
-      ulsch->q_ACK[1] = (ulsch->o_ACK[1]+wACK[wACK_idx][0])&1;
-      ulsch->q_ACK[2] = (ack_parity+wACK[wACK_idx][0])&1;
-      ulsch->q_ACK[3] = (ulsch->o_ACK[0]+wACK[wACK_idx][1])&1;
-      ulsch->q_ACK[4] = (ulsch->o_ACK[1]+wACK[wACK_idx][1])&1;
-      ulsch->q_ACK[5] = (ack_parity+wACK[wACK_idx][1])&1;
-      len_ACK = 6;
-      break;
-
-    case 4:
-      ulsch->q_ACK[0]  = (ulsch->o_ACK[0]+wACK[wACK_idx][0])&1;
-      ulsch->q_ACK[1]  = (ulsch->o_ACK[1]+wACK[wACK_idx][0])&1;
-      ulsch->q_ACK[2]  = PUSCH_x;
-      ulsch->q_ACK[3]  = PUSCH_x;//1;
-      ulsch->q_ACK[4]  = (ack_parity+wACK[wACK_idx][0])&1;
-      ulsch->q_ACK[5]  = (ulsch->o_ACK[0]+wACK[wACK_idx][1])&1;
-      ulsch->q_ACK[6]  = PUSCH_x;
-      ulsch->q_ACK[7]  = PUSCH_x;//1;
-      ulsch->q_ACK[8]  = (ulsch->o_ACK[1]+wACK[wACK_idx][1])&1;
-      ulsch->q_ACK[9]  = (ack_parity+wACK[wACK_idx][1])&1;
-      ulsch->q_ACK[10] = PUSCH_x;
-      ulsch->q_ACK[11] = PUSCH_x;//1;
-      len_ACK = 12;
-      break;
-
-    case 6:
-      ulsch->q_ACK[0] = (ulsch->o_ACK[0]+wACK[wACK_idx][0])&1;
-      ulsch->q_ACK[1] = (ulsch->o_ACK[1]+wACK[wACK_idx][0])&1;
-      ulsch->q_ACK[2] = PUSCH_x;
-      ulsch->q_ACK[3] = PUSCH_x;
-      ulsch->q_ACK[4] = PUSCH_x;
-      ulsch->q_ACK[5] = PUSCH_x;
-
-      ulsch->q_ACK[6] = (ack_parity+wACK[wACK_idx][0])&1;
-      ulsch->q_ACK[7] = (ulsch->o_ACK[0]+wACK[wACK_idx][1])&1;
-      ulsch->q_ACK[8] = PUSCH_x;
-      ulsch->q_ACK[9] = PUSCH_x;
-      ulsch->q_ACK[10] = PUSCH_x;
-      ulsch->q_ACK[11] = PUSCH_x;
-
-      ulsch->q_ACK[12] = (ulsch->o_ACK[1]+wACK[wACK_idx][1])&1;
-      ulsch->q_ACK[13] = (ack_parity+wACK[wACK_idx][1])&1;
-      ulsch->q_ACK[14] = PUSCH_x;
-      ulsch->q_ACK[15] = PUSCH_x;
-      ulsch->q_ACK[16] = PUSCH_x;
-      ulsch->q_ACK[17] = PUSCH_x;
-      len_ACK = 18;
-
-      break;
-    }
-  }
-
-  if (ulsch->harq_processes[harq_pid]->O_ACK > 2) {
-    LOG_E(PHY,"ACK cannot be more than 2 bits yet\n");
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING, VCD_FUNCTION_OUT);
-    return(-1);
-  }
-
-
-  // channel multiplexing/interleaving
-
-  start_meas(m_stats);
-  Hpp = Hprime + Q_RI;
-
-  Cmux       = ulsch->Nsymb_pusch;
-  Rmux       = Hpp*Q_m/Cmux;
-  Rmux_prime = Rmux/Q_m;
-
-  Qprime_RI  = Q_RI / Q_m;
-  Qprime_ACK = Q_ACK / Q_m;
-  Qprime_CQI = Q_CQI / Q_m;
-
-  //  printf("Qprime_CQI = %d\n",Qprime_CQI);
-  // RI BITS
-
-  memset(y,LTE_NULL,Q_m*Hpp);
-
-  if (frame_parms->Ncp == 0)
-    columnset = cs_ri_normal;
-  else
-    columnset = cs_ri_extended;
-
-  j=0;
-
-  for (i=0; i<Qprime_RI; i++) {
-    r = Rmux_prime - 1 - (i>>2);
-
-    for (q=0; q<Q_m; q++)  {
-      y[q+(Q_m*((r*Cmux) + columnset[j]))]  = ulsch->q_RI[(q+(Q_m*i))%len_RI];
-      //      printf("ri[%d] %d => y[%d]\n",q+(Q_m*i)%len_RI,ulsch->q_RI[(q+(Q_m*i))%len_RI],q+(Q_m*((r*Cmux) + columnset[j])),y[q+(Q_m*((r*Cmux) + columnset[j]))]);
-    }
-
-    j=(j+3)&3;
-
-  }
-
-
-  // CQI and Data bits
-  j=0;
-  /*
-  for (i=0,iprime=-Qprime_CQI;i<Hprime;i++,iprime++) {
-
-    while (y[Q_m*j] != LTE_NULL) j++;
-
-    if (i<Qprime_CQI) {
-      for (q=0;q<Q_m;q++) {
-  y[q+(Q_m*j)] = ulsch->q[q+(Q_m*i)];
-  //printf("cqi[%d] %d => y[%d]\n",q+(Q_m*i),ulsch->q[q+(Q_m*i)],q+(Q_m*j));
-      }
-    }
-    else {
-      for (q=0;q<Q_m;q++) {
-  y[q+(Q_m*j)] = ulsch->e[q+(Q_m*iprime)];
-  //  printf("e[%d] %d => y[%d]\n",q+(Q_m*iprime),ulsch->e[q+(Q_m*iprime)],q+(Q_m*j));
-      }
-    }
-    j++;
-  }
-  */
-
-  for (i=0; i<Qprime_CQI; i++) {
-
-    while (y[Q_m*j] != LTE_NULL) j++;
-
-    for (q=0; q<Q_m; q++) {
-      y[q+(Q_m*j)] = ulsch->q[q+(Q_m*i)];
-      //        printf("cqi[%d] %d => y[%d] (j %d)\n",q+(Q_m*i),ulsch->q[q+(Q_m*i)],q+(Q_m*j),j);
-    }
-
-    j++;
-  }
-
-  j2 = j*Q_m;
-
-  switch (Q_m) {
-
-  case 2:
-
-    for (iprime=0; iprime<(Hprime-Qprime_CQI)<<1; iprime+=2) {
-      while (y[j2] != LTE_NULL) j2+=2;
-
-      y[j2]   = ulsch->e[iprime];
-      y[1+j2] = ulsch->e[1+iprime];
-      j2+=2;
-    }
-
-    break;
-
-  case 4:
-    for (iprime=0; iprime<(Hprime-Qprime_CQI)<<2; iprime+=4) {
-      while (y[j2] != LTE_NULL) j2+=4;
-
-      y[j2]   = ulsch->e[iprime];
-      y[1+j2] = ulsch->e[1+iprime];
-      y[2+j2] = ulsch->e[2+iprime];
-      y[3+j2] = ulsch->e[3+iprime];
-      j2+=4;
-    }
-
-    break;
-
-  case 6:
-    for (iprime=0; iprime<(Hprime-Qprime_CQI)*6; iprime+=6) {
-      while (y[j2] != LTE_NULL) j2+=6;
-
-      y[j2]   = ulsch->e[iprime];
-      y[1+j2] = ulsch->e[1+iprime];
-      y[2+j2] = ulsch->e[2+iprime];
-      y[3+j2] = ulsch->e[3+iprime];
-      y[4+j2] = ulsch->e[4+iprime];
-      y[5+j2] = ulsch->e[5+iprime];
-      j2+=6;
-    }
-
-    break;
-
-  }
-
-  // HARQ-ACK Bits (Note these overwrite some bits)
-
-  if (frame_parms->Ncp == 0)
-    columnset = cs_ack_normal;
-  else
-    columnset = cs_ack_extended;
-
-  j=0;
-
-  for (i=0; i<Qprime_ACK; i++) {
-    r = Rmux_prime - 1 - (i>>2);
-
-    for (q=0; q<Q_m; q++) {
-      y[q+(Q_m*((r*Cmux) + columnset[j]))]  = ulsch->q_ACK[(q+(Q_m*i))%len_ACK];
-#ifdef DEBUG_ULSCH_CODING
-      printf("ulsch_coding.c: ACK %d => y[%d]=%d (i %d, r*Cmux %d, columnset %d)\n",q+(Q_m*i),
-          q+(Q_m*((r*Cmux) + columnset[j])),ulsch->q_ACK[(q+(Q_m*i))%len_ACK],
-          i,r*Cmux,columnset[j]);
-#endif
-    }
-
-    j=(j+3)&3;
-
-  }
-
-  // write out buffer
-  j=0;
-
-  switch (Q_m) {
-  case 2:
-    for (i=0; i<Cmux; i++)
-      for (r=0; r<Rmux_prime; r++) {
-        yptr=&y[((r*Cmux)+i)<<1];
-        ulsch->h[j++] = *yptr++;
-        ulsch->h[j++] = *yptr++;
-      }
-
-    break;
-
-  case 4:
-    for (i=0; i<Cmux; i++)
-      for (r=0; r<Rmux_prime; r++) {
-        yptr = &y[((r*Cmux)+i)<<2];
-        ulsch->h[j++] = *yptr++;
-        ulsch->h[j++] = *yptr++;
-        ulsch->h[j++] = *yptr++;
-        ulsch->h[j++] = *yptr++;
-      }
-
-    break;
-
-  case 6:
-    for (i=0; i<Cmux; i++)
-      for (r=0; r<Rmux_prime; r++) {
-        yptr = &y[((r*Cmux)+i)*6];
-        ulsch->h[j++] = *yptr++;
-        ulsch->h[j++] = *yptr++;
-        ulsch->h[j++] = *yptr++;
-        ulsch->h[j++] = *yptr++;
-        ulsch->h[j++] = *yptr++;
-        ulsch->h[j++] = *yptr++;
-      }
-
-    break;
-
-  default:
-    break;
-  }
-
-  stop_meas(m_stats);
-
-  if (j!=(H+Q_RI)) {
-    LOG_E(PHY,"Error in output buffer length (j %d, H+Q_RI %d)\n",j,H+Q_RI);
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING, VCD_FUNCTION_OUT);
-    return(-1);
-  }
-
-  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING, VCD_FUNCTION_OUT);
-  return(0);
-}
-
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c
deleted file mode 100644
index d1718f6e90f600927f5d93f3a18e93213bea86f8..0000000000000000000000000000000000000000
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c
+++ /dev/null
@@ -1,777 +0,0 @@
-/*
- * 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
- */
-
-/*! \file PHY/LTE_TRANSPORT/ulsch_modulation.c
-* \brief Top-level routines for generating PUSCH physical channel from 36.211 V8.6 2009-03
-* \author R. Knopp, F. Kaltenberger, A. Bhamri
-* \date 2011
-* \version 0.1
-* \company Eurecom
-* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr
-* \note
-* \warning
-*/
-#include "PHY/defs.h"
-#include "PHY/extern.h"
-#include "PHY/CODING/defs.h"
-#include "PHY/CODING/extern.h"
-#include "PHY/LTE_TRANSPORT/defs.h"
-#include "defs.h"
-#include "UTIL/LOG/vcd_signal_dumper.h"
-
-
-
-//#define DEBUG_ULSCH_MODULATION
-
-#ifndef OFDMA_ULSCH
-void dft_lte(int32_t *z,int32_t *d, int32_t Msc_PUSCH, uint8_t Nsymb)
-{
-
-#if defined(__x86_64__) || defined(__i386__)
-  __m128i dft_in128[4][1200],dft_out128[4][1200];
-#elif defined(__arm__)
-  int16x8_t dft_in128[4][1200],dft_out128[4][1200];
-#endif
-  uint32_t *dft_in0=(uint32_t*)dft_in128[0],*dft_out0=(uint32_t*)dft_out128[0];
-  uint32_t *dft_in1=(uint32_t*)dft_in128[1],*dft_out1=(uint32_t*)dft_out128[1];
-  uint32_t *dft_in2=(uint32_t*)dft_in128[2],*dft_out2=(uint32_t*)dft_out128[2];
-  //  uint32_t *dft_in3=(uint32_t*)dft_in128[3],*dft_out3=(uint32_t*)dft_out128[3];
-
-  uint32_t *d0,*d1,*d2,*d3,*d4,*d5,*d6,*d7,*d8,*d9,*d10,*d11;
-
-  uint32_t *z0,*z1,*z2,*z3,*z4,*z5,*z6,*z7,*z8,*z9,*z10,*z11;
-  uint32_t i,ip;
-#if defined(__x86_64__) || defined(__i386__)
-  __m128i norm128;
-#elif defined(__arm__)
-  int16x8_t norm128;
-#endif
-  //  printf("Doing lte_dft for Msc_PUSCH %d\n",Msc_PUSCH);
-
-  d0 = (uint32_t *)d;
-  d1 = d0+Msc_PUSCH;
-  d2 = d1+Msc_PUSCH;
-  d3 = d2+Msc_PUSCH;
-  d4 = d3+Msc_PUSCH;
-  d5 = d4+Msc_PUSCH;
-  d6 = d5+Msc_PUSCH;
-  d7 = d6+Msc_PUSCH;
-  d8 = d7+Msc_PUSCH;
-  d9 = d8+Msc_PUSCH;
-  d10 = d9+Msc_PUSCH;
-  d11 = d10+Msc_PUSCH;
-
-  //  printf("symbol 0 (d0 %p, d %p)\n",d0,d);
-  for (i=0,ip=0; i<Msc_PUSCH; i++,ip+=4) {
-    dft_in0[ip]   =  d0[i];
-    dft_in0[ip+1] =  d1[i];
-    dft_in0[ip+2] =  d2[i];
-    dft_in0[ip+3] =  d3[i];
-    dft_in1[ip]   =  d4[i];
-    dft_in1[ip+1] =  d5[i];
-    dft_in1[ip+2] =  d6[i];
-    dft_in1[ip+3] =  d7[i];
-    dft_in2[ip]   =  d8[i];
-    dft_in2[ip+1] =  d9[i];
-    dft_in2[ip+2] =  d10[i];
-    dft_in2[ip+3] =  d11[i];
-    //    printf("dft%d %d: %d,%d,%d,%d\n",Msc_PUSCH,ip,d0[i],d1[i],d2[i],d3[i]);
-
-    //    dft_in_re2[ip+1] =  d9[i];
-    //    dft_in_re2[ip+2] =  d10[i];
-  }
-
-  //  printf("\n");
-
-  switch (Msc_PUSCH) {
-  case 12:
-    dft12((int16_t *)dft_in0,(int16_t *)dft_out0);
-    dft12((int16_t *)dft_in1,(int16_t *)dft_out1);
-    dft12((int16_t *)dft_in2,(int16_t *)dft_out2);
-
-    /*
-    dft12f(&((__m128i *)dft_in0)[0],&((__m128i *)dft_in0)[1],&((__m128i *)dft_in0)[2],&((__m128i *)dft_in0)[3],&((__m128i *)dft_in0)[4],&((__m128i *)dft_in0)[5],&((__m128i *)dft_in0)[6],&((__m128i *)dft_in0)[7],&((__m128i *)dft_in0)[8],&((__m128i *)dft_in0)[9],&((__m128i *)dft_in0)[10],&((__m128i *)dft_in0)[11],
-    &((__m128i *)dft_out0)[0],&((__m128i *)dft_out0)[1],&((__m128i *)dft_out0)[2],&((__m128i *)dft_out0)[3],&((__m128i *)dft_out0)[4],&((__m128i *)dft_out0)[5],&((__m128i *)dft_out0)[6],&((__m128i *)dft_out0)[7],&((__m128i *)dft_out0)[8],&((__m128i *)dft_out0)[9],&((__m128i *)dft_out0)[10],&((__m128i *)dft_out0)[11]);
-
-    dft12f(&((__m128i *)dft_in1)[0],&((__m128i *)dft_in1)[1],&((__m128i *)dft_in1)[2],&((__m128i *)dft_in1)[3],&((__m128i *)dft_in1)[4],&((__m128i *)dft_in1)[5],&((__m128i *)dft_in1)[6],&((__m128i *)dft_in1)[7],&((__m128i *)dft_in1)[8],&((__m128i *)dft_in1)[9],&((__m128i *)dft_in1)[10],&((__m128i *)dft_in1)[11],
-    &((__m128i *)dft_out1)[0],&((__m128i *)dft_out1)[1],&((__m128i *)dft_out1)[2],&((__m128i *)dft_out1)[3],&((__m128i *)dft_out1)[4],&((__m128i *)dft_out1)[5],&((__m128i *)dft_out1)[6],&((__m128i *)dft_out1)[7],&((__m128i *)dft_out1)[8],&((__m128i *)dft_out1)[9],&((__m128i *)dft_out1)[10],&((__m128i *)dft_out1)[11]);
-
-    dft12f(&((__m128i *)dft_in2)[0],&((__m128i *)dft_in2)[1],&((__m128i *)dft_in2)[2],&((__m128i *)dft_in2)[3],&((__m128i *)dft_in2)[4],&((__m128i *)dft_in2)[5],&((__m128i *)dft_in2)[6],&((__m128i *)dft_in2)[7],&((__m128i *)dft_in2)[8],&((__m128i *)dft_in2)[9],&((__m128i *)dft_in2)[10],&((__m128i *)dft_in2)[11],
-    &((__m128i *)dft_out2)[0],&((__m128i *)dft_out2)[1],&((__m128i *)dft_out2)[2],&((__m128i *)dft_out2)[3],&((__m128i *)dft_out2)[4],&((__m128i *)dft_out2)[5],&((__m128i *)dft_out2)[6],&((__m128i *)dft_out2)[7],&((__m128i *)dft_out2)[8],&((__m128i *)dft_out2)[9],&((__m128i *)dft_out2)[10],&((__m128i *)dft_out2)[11]);
-    */
-#if defined(__x86_64__) || defined(__i386__)
-    norm128 = _mm_set1_epi16(9459);
-#elif defined(__arm__)
-    norm128 = vdupq_n_s16(9459);
-#endif
-    for (i=0; i<12; i++) {
-#if defined(__x86_64__) || defined(__i386__)
-      ((__m128i*)dft_out0)[i] = _mm_slli_epi16(_mm_mulhi_epi16(((__m128i*)dft_out0)[i],norm128),1);
-      ((__m128i*)dft_out1)[i] = _mm_slli_epi16(_mm_mulhi_epi16(((__m128i*)dft_out1)[i],norm128),1);
-      ((__m128i*)dft_out2)[i] = _mm_slli_epi16(_mm_mulhi_epi16(((__m128i*)dft_out2)[i],norm128),1);
-#elif defined(__arm__)
-      ((int16x8_t*)dft_out0)[i] = vqdmulhq_s16(((int16x8_t*)dft_out0)[i],norm128);
-      ((int16x8_t*)dft_out1)[i] = vqdmulhq_s16(((int16x8_t*)dft_out1)[i],norm128);
-      ((int16x8_t*)dft_out2)[i] = vqdmulhq_s16(((int16x8_t*)dft_out2)[i],norm128);
-#endif
-    }
-
-    break;
-
-  case 24:
-    dft24((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft24((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft24((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 36:
-    dft36((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft36((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft36((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 48:
-    dft48((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft48((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft48((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 60:
-    dft60((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft60((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft60((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 72:
-    dft72((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft72((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft72((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 96:
-    dft96((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft96((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft96((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 108:
-    dft108((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft108((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft108((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 120:
-    dft120((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft120((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft120((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 144:
-    dft144((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft144((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft144((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 180:
-    dft180((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft180((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft180((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 192:
-    dft192((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft192((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft192((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 216:
-    dft216((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft216((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft216((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 240:
-    dft240((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft240((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft240((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 288:
-    dft288((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft288((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft288((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 300:
-    dft300((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft300((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft300((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 324:
-    dft324((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft324((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft324((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 360:
-    dft360((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft360((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft360((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 384:
-    dft384((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft384((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft384((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 432:
-    dft432((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft432((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft432((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 480:
-    dft480((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft480((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft480((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 540:
-    dft540((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft540((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft540((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 576:
-    dft576((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft576((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft576((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 600:
-    dft600((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft600((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft600((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 648:
-    dft648((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft648((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft648((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 720:
-    dft720((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft720((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft720((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 864:
-    dft864((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft864((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft864((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 900:
-    dft900((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft900((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft900((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 960:
-    dft960((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft960((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft960((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 972:
-    dft972((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft972((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft972((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 1080:
-    dft1080((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft1080((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft1080((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 1152:
-    dft1152((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft1152((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft1152((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-
-  case 1200:
-    dft1200((int16_t*)dft_in0,(int16_t*)dft_out0,1);
-    dft1200((int16_t*)dft_in1,(int16_t*)dft_out1,1);
-    dft1200((int16_t*)dft_in2,(int16_t*)dft_out2,1);
-    break;
-  }
-
-  z0 = (uint32_t *)z;
-  z1 = z0+Msc_PUSCH;
-  z2 = z1+Msc_PUSCH;
-  z3 = z2+Msc_PUSCH;
-  z4 = z3+Msc_PUSCH;
-  z5 = z4+Msc_PUSCH;
-  z6 = z5+Msc_PUSCH;
-  z7 = z6+Msc_PUSCH;
-  z8 = z7+Msc_PUSCH;
-  z9 = z8+Msc_PUSCH;
-  z10 = z9+Msc_PUSCH;
-  z11 = z10+Msc_PUSCH;
-
-  //  printf("symbol0 (dft)\n");
-  for (i=0,ip=0; i<Msc_PUSCH; i++,ip+=4) {
-    z0[i]     = dft_out0[ip];
-    //    printf("%d,%d,",((short*)&z0[i])[0],((short*)&z0[i])[1]);
-    z1[i]     = dft_out0[ip+1];
-    z2[i]     = dft_out0[ip+2];
-    z3[i]     = dft_out0[ip+3];
-    z4[i]     = dft_out1[ip+0];
-    z5[i]     = dft_out1[ip+1];
-    z6[i]     = dft_out1[ip+2];
-    z7[i]     = dft_out1[ip+3];
-    z8[i]     = dft_out2[ip];
-    z9[i]     = dft_out2[ip+1];
-    z10[i]    = dft_out2[ip+2];
-    z11[i]    = dft_out2[ip+3];
-    //    printf("out dft%d %d: %d,%d,%d,%d,%d,%d,%d,%d\n",Msc_PUSCH,ip,z0[i],z1[i],z2[i],z3[i],z4[i],z5[i],z6[i],z7[i]);
-
-  }
-
-  //  printf("\n");
-}
-
-#endif
-void ulsch_modulation(int32_t **txdataF,
-                      short amp,
-                      uint32_t frame,
-                      uint32_t subframe,
-                      LTE_DL_FRAME_PARMS *frame_parms,
-                      LTE_UE_ULSCH_t *ulsch)
-{
-
-  uint8_t qam64_table_offset_re = 0;
-  uint8_t qam64_table_offset_im = 0;
-  uint8_t qam16_table_offset_re = 0;
-  uint8_t qam16_table_offset_im = 0;
-  short gain_lin_QPSK;
-
-  DevAssert(frame_parms);
-
-  int re_offset,re_offset0,i,Msymb,j,k,nsymb,Msc_PUSCH,l;
-  //  uint8_t harq_pid = (rag_flag == 1) ? 0 : subframe2harq_pid_tdd(frame_parms->tdd_config,subframe);
-  uint8_t harq_pid = subframe2harq_pid(frame_parms,frame,subframe);
-  uint8_t Q_m;
-  int32_t *txptr;
-  uint32_t symbol_offset;
-  uint16_t first_rb;
-  uint16_t nb_rb;
-  int G;
-
-  uint32_t x1, x2, s=0;
-  uint8_t c;
-
-  if (!ulsch) {
-    printf("ulsch_modulation.c: Null ulsch\n");
-    return;
-  }
-
-  // x1 is set in lte_gold_generic
-  x2 = (ulsch->rnti<<14) + (subframe<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.3.1
-
-  if (harq_pid>=8) {
-    printf("ulsch_modulation.c: Illegal harq_pid %d\n",harq_pid);
-    return;
-  }
-
-  first_rb = ulsch->harq_processes[harq_pid]->first_rb;
-  nb_rb = ulsch->harq_processes[harq_pid]->nb_rb;
-
-  if (nb_rb == 0) {
-    printf("ulsch_modulation.c: Frame %d, Subframe %d Illegal nb_rb %d\n",frame,subframe,nb_rb);
-    return;
-  }
-
-  if (first_rb > frame_parms->N_RB_UL) {
-    printf("ulsch_modulation.c: Frame %d, Subframe %d Illegal first_rb %d\n",frame,subframe,first_rb);
-    return;
-  }
-
-  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_MODULATION, VCD_FUNCTION_IN);
-
-  Q_m = get_Qm_ul(ulsch->harq_processes[harq_pid]->mcs);
-
-  G = (int)ulsch->harq_processes[harq_pid]->nb_rb * (12 * Q_m) * (ulsch->Nsymb_pusch);
-
-
-  // Mapping
-  nsymb = (frame_parms->Ncp==0) ? 14:12;
-  Msc_PUSCH = ulsch->harq_processes[harq_pid]->nb_rb*12;
-
-#ifdef DEBUG_ULSCH_MODULATION
-  LOG_D(PHY,"ulsch_modulation.c: Doing modulation (rnti %x,x2 %x) for G=%d bits, harq_pid %d , nb_rb %d, Q_m %d, Nsymb_pusch %d (nsymb %d), subframe %d\n",
-        ulsch->rnti,x2,G,harq_pid,ulsch->harq_processes[harq_pid]->nb_rb,Q_m, ulsch->Nsymb_pusch,nsymb,subframe);
-#endif
-
-  // scrambling (Note the placeholding bits are handled in ulsch_coding.c directly!)
-  //printf("ulsch bits: ");
-  s = lte_gold_generic(&x1, &x2, 1);
-  k=0;
-
-  //printf("G %d\n",G);
-  for (i=0; i<(1+(G>>5)); i++) {
-    for (j=0; j<32; j++,k++) {
-      c = (uint8_t)((s>>j)&1);
-
-      if (ulsch->h[k] == PUSCH_x) {
-        //  printf("i %d: PUSCH_x\n",i);
-        ulsch->b_tilde[k] = 1;
-      } else if (ulsch->h[k] == PUSCH_y) {
-        //  printf("i %d: PUSCH_y\n",i);
-        ulsch->b_tilde[k] = ulsch->b_tilde[k-1];
-      } else {
-        ulsch->b_tilde[k] = (ulsch->h[k]+c)&1;
-        //  printf("i %d : %d (h %d c %d)\n", (i<<5)+j,ulsch->b_tilde[k],ulsch->h[k],c);
-      }
-
-    }
-
-    s = lte_gold_generic(&x1, &x2, 0);
-  }
-
-  //printf("\n");
-
-
-  gain_lin_QPSK = (short)((amp*ONE_OVER_SQRT2_Q15)>>15);
-
-
-  // Modulation
-
-  Msymb = G/Q_m;
-
-  if(ulsch->cooperation_flag == 2)
-    // For Distributed Alamouti Scheme in Collabrative Communication
-  {
-    for (i=0,j=Q_m; i<Msymb; i+=2,j+=2*Q_m) {
-
-      switch (Q_m) {
-
-      case 2:
-
-
-        //UE1, -x1*
-        ((int16_t*)&ulsch->d[i])[0] = (ulsch->b_tilde[j] == 1)  ? (gain_lin_QPSK) : -gain_lin_QPSK;
-        ((int16_t*)&ulsch->d[i])[1] = (ulsch->b_tilde[j+1] == 1)? (-gain_lin_QPSK) : gain_lin_QPSK;
-        //      if (i<Msc_PUSCH)
-        //  printf("input %d (%p): %d,%d\n", i,&ulsch->d[i],((int16_t*)&ulsch->d[i])[0],((int16_t*)&ulsch->d[i])[1]);
-
-        // UE1, x0*
-        ((int16_t*)&ulsch->d[i+1])[0] = (ulsch->b_tilde[j-2] == 1)  ? (-gain_lin_QPSK) : gain_lin_QPSK;
-        ((int16_t*)&ulsch->d[i+1])[1] = (ulsch->b_tilde[j-1] == 1)? (gain_lin_QPSK) : -gain_lin_QPSK;
-
-        break;
-
-      case 4:
-
-
-        //UE1,-x1*
-        qam16_table_offset_re = 0;
-        qam16_table_offset_im = 0;
-
-        if (ulsch->b_tilde[j] == 1)
-          qam16_table_offset_re+=2;
-
-        if (ulsch->b_tilde[j+1] == 1)
-          qam16_table_offset_im+=2;
-
-
-
-        if (ulsch->b_tilde[j+2] == 1)
-          qam16_table_offset_re+=1;
-
-        if (ulsch->b_tilde[j+3] == 1)
-          qam16_table_offset_im+=1;
-
-
-        ((int16_t*)&ulsch->d[i])[0]=-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
-        ((int16_t*)&ulsch->d[i])[1]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
-
-        //UE1,x0*
-        qam16_table_offset_re = 0;
-        qam16_table_offset_im = 0;
-
-        if (ulsch->b_tilde[j-4] == 1)
-          qam16_table_offset_re+=2;
-
-        if (ulsch->b_tilde[j-3] == 1)
-          qam16_table_offset_im+=2;
-
-
-        if (ulsch->b_tilde[j-2] == 1)
-          qam16_table_offset_re+=1;
-
-        if (ulsch->b_tilde[j-1] == 1)
-          qam16_table_offset_im+=1;
-
-
-        //    ((int16_t*)&ulsch->d[i+1])[0]=-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
-        //    ((int16_t*)&ulsch->d[i+1])[1]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
-        ((int16_t*)&ulsch->d[i+1])[0]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
-        ((int16_t*)&ulsch->d[i+1])[1]=-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
-
-
-        break;
-
-      case 6:
-
-
-
-        //UE1,-x1*FPGA_UE
-        qam64_table_offset_re = 0;
-        qam64_table_offset_im = 0;
-
-        if (ulsch->b_tilde[j] == 1)
-          qam64_table_offset_re+=4;
-
-        if (ulsch->b_tilde[j+1] == 1)
-          qam64_table_offset_im+=4;
-
-        if (ulsch->b_tilde[j+2] == 1)
-          qam64_table_offset_re+=2;
-
-
-        if (ulsch->b_tilde[j+3] == 1)
-          qam64_table_offset_im+=2;
-
-        if (ulsch->b_tilde[j+4] == 1)
-          qam64_table_offset_re+=1;
-
-        if (ulsch->b_tilde[j+5] == 1)
-          qam64_table_offset_im+=1;
-
-
-        ((int16_t*)&ulsch->d[i])[0]=-(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15);
-        ((int16_t*)&ulsch->d[i])[1]=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15);
-
-        //UE1,x0*
-        qam64_table_offset_re = 0;
-        qam64_table_offset_im = 0;
-
-        if (ulsch->b_tilde[j-6] == 1)
-          qam64_table_offset_re+=4;
-
-        if (ulsch->b_tilde[j-5] == 1)
-          qam64_table_offset_im+=4;
-
-        if (ulsch->b_tilde[j-4] == 1)
-          qam64_table_offset_re+=2;
-
-
-        if (ulsch->b_tilde[j-3] == 1)
-          qam64_table_offset_im+=2;
-
-        if (ulsch->b_tilde[j-2] == 1)
-          qam64_table_offset_re+=1;
-
-        if (ulsch->b_tilde[j-1] == 1)
-          qam64_table_offset_im+=1;
-
-
-        ((int16_t*)&ulsch->d[i+1])[0]=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15);
-        ((int16_t*)&ulsch->d[i+1])[1]=-(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15);
-
-        break;
-
-      }//switch
-    }//for
-  }//cooperation_flag == 2
-  else {
-    for (i=0,j=0; i<Msymb; i++,j+=Q_m) {
-
-      switch (Q_m) {
-
-      case 2:
-        // TODO: this has to be updated!!!
-
-        ((int16_t*)&ulsch->d[i])[0] = (ulsch->b_tilde[j] == 1)  ? (-gain_lin_QPSK) : gain_lin_QPSK;
-        ((int16_t*)&ulsch->d[i])[1] = (ulsch->b_tilde[j+1] == 1)? (-gain_lin_QPSK) : gain_lin_QPSK;
-        //        if (i<Msc_PUSCH)
-        //    printf("input %d/%d Msc_PUSCH %d (%p): %d,%d\n", i,Msymb,Msc_PUSCH,&ulsch->d[i],((int16_t*)&ulsch->d[i])[0],((int16_t*)&ulsch->d[i])[1]);
-
-        break;
-
-      case 4:
-
-        qam16_table_offset_re = 0;
-        qam16_table_offset_im = 0;
-
-        if (ulsch->b_tilde[j] == 1)
-          qam16_table_offset_re+=2;
-
-        if (ulsch->b_tilde[j+1] == 1)
-          qam16_table_offset_im+=2;
-
-        if (ulsch->b_tilde[j+2] == 1)
-          qam16_table_offset_re+=1;
-
-        if (ulsch->b_tilde[j+3] == 1)
-          qam16_table_offset_im+=1;
-
-
-        ((int16_t*)&ulsch->d[i])[0]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
-        ((int16_t*)&ulsch->d[i])[1]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
-        //      printf("input(16qam) %d (%p): %d,%d\n", i,&ulsch->d[i],((int16_t*)&ulsch->d[i])[0],((int16_t*)&ulsch->d[i])[1]);
-        break;
-
-      case 6:
-
-
-        qam64_table_offset_re = 0;
-        qam64_table_offset_im = 0;
-
-        if (ulsch->b_tilde[j] == 1)
-          qam64_table_offset_re+=4;
-
-        if (ulsch->b_tilde[j+1] == 1)
-          qam64_table_offset_im+=4;
-
-        if (ulsch->b_tilde[j+2] == 1)
-          qam64_table_offset_re+=2;
-
-        if (ulsch->b_tilde[j+3] == 1)
-          qam64_table_offset_im+=2;
-
-        if (ulsch->b_tilde[j+4] == 1)
-          qam64_table_offset_re+=1;
-
-        if (ulsch->b_tilde[j+5] == 1)
-          qam64_table_offset_im+=1;
-
-
-        ((int16_t*)&ulsch->d[i])[0]=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15);
-        ((int16_t*)&ulsch->d[i])[1]=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15);
-
-        break;
-
-      }
-    }
-  }// normal symbols
-
-
-  // Transform Precoding
-
-#ifdef OFDMA_ULSCH
-
-  for (i=0; i<Msymb; i++) {
-    ulsch->z[i] = ulsch->d[i];
-  }
-
-#else
-  dft_lte(ulsch->z,ulsch->d,Msc_PUSCH,ulsch->Nsymb_pusch);
-#endif
-
-  DevAssert(txdataF);
-
-#ifdef OFDMA_ULSCH
-  re_offset0 = frame_parms->first_carrier_offset + (ulsch->harq_processes[harq_pid]->first_rb*12);
-
-  if (re_offset0>frame_parms->ofdm_symbol_size) {
-    re_offset0 -= frame_parms->ofdm_symbol_size;
-    //    re_offset0++;
-  }
-
-  //  printf("re_offset0 %d\n",re_offset0);
-
-
-  for (j=0,l=0; l<(nsymb-ulsch->srs_active); l++) {
-    re_offset = re_offset0;
-    symbol_offset = (int)frame_parms->ofdm_symbol_size*(l+(subframe*nsymb));
-#ifdef DEBUG_ULSCH_MODULATION
-    printf("symbol %d (subframe %d): symbol_offset %d\n",l,subframe,symbol_offset);
-#endif
-    txptr = &txdataF[0][symbol_offset];
-
-    if (((frame_parms->Ncp == 0) && ((l==3) || (l==10)))||
-        ((frame_parms->Ncp == 1) && ((l==2) || (l==8)))) {
-    }
-    // Skip reference symbols
-    else {
-
-      //      printf("copying %d REs\n",Msc_PUSCH);
-      for (i=0; i<Msc_PUSCH; i++,j++) {
-#ifdef DEBUG_ULSCH_MODULATION
-        printf("re_offset %d (%p): %d,%d\n", re_offset,&ulsch->z[j],((int16_t*)&ulsch->z[j])[0],((int16_t*)&ulsch->z[j])[1]);
-#endif
-        txptr[re_offset++] = ulsch->z[j];
-
-        if (re_offset==frame_parms->ofdm_symbol_size)
-          re_offset = 0;
-      }
-    }
-  }
-
-# else  // OFDMA_ULSCH = 0
-  re_offset0 = frame_parms->first_carrier_offset + (ulsch->harq_processes[harq_pid]->first_rb*12);
-
-  if (re_offset0>frame_parms->ofdm_symbol_size) {
-    re_offset0 -= frame_parms->ofdm_symbol_size;
-    //    re_offset0++;
-  }
-
-  //    printf("re_offset0 %d\n",re_offset0);
-  //  printf("txdataF %p\n",&txdataF[0][0]);
-  for (j=0,l=0; l<(nsymb-ulsch->srs_active); l++) {
-    re_offset = re_offset0;
-    symbol_offset = (uint32_t)frame_parms->ofdm_symbol_size*(l+(subframe*nsymb));
-#ifdef DEBUG_ULSCH_MODULATION
-    printf("ulsch_mod (SC-FDMA) symbol %d (subframe %d): symbol_offset %d\n",l,subframe,symbol_offset);
-#endif
-    txptr = &txdataF[0][symbol_offset];
-
-    if (((frame_parms->Ncp == 0) && ((l==3) || (l==10)))||
-        ((frame_parms->Ncp == 1) && ((l==2) || (l==8)))) {
-    }
-    // Skip reference symbols
-    else {
-      //      printf("copying %d REs\n",Msc_PUSCH);
-      for (i=0; i<Msc_PUSCH; i++,j++) {
-
-#ifdef DEBUG_ULSCH_MODULATION
-        printf("re_offset %d (%p): %d,%d => %p\n", re_offset,&ulsch->z[j],((int16_t*)&ulsch->z[j])[0],((int16_t*)&ulsch->z[j])[1],&txptr[re_offset]);
-#endif //DEBUG_ULSCH_MODULATION
-        txptr[re_offset++] = ulsch->z[j];
-
-        if (re_offset==frame_parms->ofdm_symbol_size)
-          re_offset = 0;
-      }
-    }
-  }
-
-#endif
-  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_MODULATION, VCD_FUNCTION_OUT);
-
-}
-
diff --git a/openair1/PHY/defs_RU.h b/openair1/PHY/defs_RU.h
index 0bda340c27e8e5917d407ba7773efb03f263f860..3ad007813e5dbcb0b2a2c63fd5cac26628964bc5 100644
--- a/openair1/PHY/defs_RU.h
+++ b/openair1/PHY/defs_RU.h
@@ -35,7 +35,6 @@
 
 
 #define MAX_BANDS_PER_RRU 4
-#define MAX_NUM_RU_PER_gNB MAX_NUM_RU_PER_eNB
 
 
 #ifdef OCP_FRAMEWORK
diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h
index f5e9efa3cbed1d3d3b2d474ae57affdaa6c64dae..18c2ba5cce345955af6e529dcbc63cf948760c7a 100644
--- a/openair1/PHY/defs_gNB.h
+++ b/openair1/PHY/defs_gNB.h
@@ -38,6 +38,7 @@
 #include "CODING/nrPolar_tools/nr_polar_pbch_defs.h"
 #include "openair2/NR_PHY_INTERFACE/NR_IF_Module.h"
 
+#define MAX_NUM_RU_PER_gNB MAX_NUM_RU_PER_eNB
 
 typedef struct {
   uint8_t pbch_a[NR_POLAR_PBCH_PAYLOAD_BITS>>3];
diff --git a/openair2/LAYER2/MAC/mac.h b/openair2/LAYER2/MAC/mac.h
index 3b57d8240b56bec2b366a26995a652327c012ed8..d9e914f087009858a77e323fb2c3597609ca3d38 100644
--- a/openair2/LAYER2/MAC/mac.h
+++ b/openair2/LAYER2/MAC/mac.h
@@ -77,11 +77,6 @@
 
 #include "targets/ARCH/COMMON/common_lib.h"
 
-//solve implicit declaration
-#include "PHY/LTE_ESTIMATION/lte_estimation.h"
-#include "PHY/LTE_TRANSPORT/transport_proto.h"
-#include "PHY/LTE_TRANSPORT/transport_common_proto.h"
-
 /** @defgroup _mac  MAC
  * @ingroup _oai2
  * @{
diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c
index 3b567b257b2b20b17807d8b24a80f6406465e167..a299d3d1c51e6dacaf2e6658cf72d97b308f2b11 100644
--- a/targets/RT/USER/lte-enb.c
+++ b/targets/RT/USER/lte-enb.c
@@ -207,7 +207,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam
   // ****************************************
   // Common RX procedures subframe n
 
-  T(T_GNB_PHY_DL_TICK, T_INT(eNB->Mod_id), T_INT(proc->frame_tx), T_INT(proc->subframe_tx));
+  T(T_ENB_PHY_DL_TICK, T_INT(eNB->Mod_id), T_INT(proc->frame_tx), T_INT(proc->subframe_tx));
 
   // if this is IF5 or 3GPP_eNB
   if (eNB && eNB->RU_list && eNB->RU_list[0] && eNB->RU_list[0]->function < NGFI_RAU_IF4p5) {
diff --git a/targets/RT/USER/nr-softmodem.c b/targets/RT/USER/nr-softmodem.c
index fffdecce9cd3758f88d23eb11f8153b78bd63def..58b41d1a12528b10c31ee52d3518ad9a7c096030 100644
--- a/targets/RT/USER/nr-softmodem.c
+++ b/targets/RT/USER/nr-softmodem.c
@@ -886,7 +886,6 @@ static  void wait_nfapi_init(char *thread_name) {
 
 int main( int argc, char **argv )
 {
-	crcTableInit();
   int i;
 #if defined (XFORMS)
   //void *status;