POP(stack);
void split_cb_search_nogain(float target[],			/* target vector */float ak[],			/* LPCs for this subframe */float awk1[],			/* Weighted LPCs for this subframe */float awk2[],			/* Weighted LPCs for this subframe */void *par,                      /* Codebook/search parameters*/int   p,                        /* number of LPC coeffs */int   nsf,                      /* number of samples in subframe */float *exc,SpeexBits *bits,float *stack){   int i,j;   float *resp;   float *t, *r, *e;   int *ind;   float *shape_cb;   int shape_cb_size, subvect_size, nb_subvect;   split_cb_params *params;   params = (split_cb_params *) par;   subvect_size = params->subvect_size;   nb_subvect = params->nb_subvect;   shape_cb_size = 1<<params->shape_bits;   shape_cb = params->shape_cb;   resp = PUSH(stack, shape_cb_size*subvect_size);   t = PUSH(stack, nsf);   r = PUSH(stack, nsf);   e = PUSH(stack, nsf);   ind = (int*)PUSH(stack, nb_subvect);   for (i=0;i<nsf;i++)      t[i]=target[i];   e[0]=1;   for (i=1;i<nsf;i++)      e[i]=0;   residue_zero(e, awk1, r, nsf, p);   syn_filt_zero(r, ak, r, nsf, p);   syn_filt_zero(r, awk2, r, nsf,p);      /* Pre-compute codewords response and energy */   for (i=0;i<shape_cb_size;i++)   {      float *res = resp+i*subvect_size;      /* Compute codeword response */      int k;      for(j=0;j<subvect_size;j++)         res[j]=0;      for(j=0;j<subvect_size;j++)      {         for (k=j;k<subvect_size;k++)            res[k]+=shape_cb[i*subvect_size+j]*r[k-j];      }   }   for (i=0;i<nb_subvect;i++)   {      int best_index=0, k, m;      float g, dist, best_dist=-1;      float *a, *b;      /* Find best codeword for current sub-vector */      for (j=0;j<shape_cb_size;j++)      {         dist=0;         a=resp+j*subvect_size;         b=t+subvect_size*i;         for (k=0;k<subvect_size;k++)            dist += (a[k]-b[k])*(a[k]-b[k]);         if (dist<best_dist || j==0)         {            best_dist=dist;            best_index=j;         }      }      /*printf ("best index: %d/%d\n", best_index, shape_cb_size);*/      speex_bits_pack(bits,best_index,params->shape_bits);      ind[i]=best_index;      /* Update target for next subvector */      for (j=0;j<subvect_size;j++)      {         g=shape_cb[best_index*subvect_size+j];         for (k=subvect_size*i+j,m=0;k<nsf;k++,m++)            t[k] -= g*r[m];      }   }      /* Put everything back together */   for (i=0;i<nb_subvect;i++)      for (j=0;j<subvect_size;j++)         e[subvect_size*i+j]=shape_cb[ind[i]*subvect_size+j];   /* Update excitation */   for (j=0;j<nsf;j++)      exc[j]+=e[j];      /* Update target */   residue_zero(e, awk1, r, nsf, p);   syn_filt_zero(r, ak, r, nsf, p);   syn_filt_zero(r, awk2, r, nsf,p);   for (j=0;j<nsf;j++)      target[j]-=r[j];      POP(stack);   POP(stack);   POP(stack);   POP(stack);}