Commit b7b0ce6f authored by thomas dettbarn's avatar thomas dettbarn
Browse files

the magic shift in left_64() can be explained by the initial exponent for the householder matrix.

parent 668c0309
Loading
Loading
Loading
Loading
+6 −13
Original line number Diff line number Diff line
@@ -1079,6 +1079,7 @@ static void biDiagonalReductionLeft_64(
        tmp=W_extract_l(W_shr(singularVectors_Left_64[currChannel][currChannel],tmpe));
        for ( iCh=currChannel+1; iCh<nChannelsC; iCh++)
        {
	  	Word16 shifter[16]={ 27,27,27,28,30,28,29,27,30,28,30,29,29,27,27,27,27};
            Word32 tmp2;
            Word32 tmp3;

@@ -1095,21 +1096,13 @@ static void biDiagonalReductionLeft_64(
            norm_x=W_extract_h(W_shl(norm_64,norm_x_e));
            f=Mpy_32_32(norm_x,invVal);
            f_e=add(invVal_e, sub(norm_x_e, r_e ));
		printf("MYADD%d: [%08X<%2x] \x1b[1;33m",iCh,f,f_e);
		printf("MYADD%d,%d: [%08X<%2x]    (norm_x:%d r_e:%d  invVal_e:%d f_e:%d -->%d)  \x1b[1;33m",iCh,currChannel,f,f_e,norm_x_e,r_e,invVal_e,f_e,shifter[iCh]);
            for (jCh=currChannel;jCh<nChannelsL; jCh++)
            {

                tmp2=W_extract_l(W_shr(singularVectors_Left_64[jCh][currChannel],tmpe));
// TODO: Why those???
if (iCh==3) singularVectors_Left_64[jCh][iCh]=W_add(singularVectors_Left_64[jCh][iCh],W_shr(W_mult0_32_32(f,tmp2),28));	// exponent +1. ich=1: 27 ich=3: 28
else if (iCh==4) singularVectors_Left_64[jCh][iCh]=W_add(singularVectors_Left_64[jCh][iCh],W_shr(W_mult0_32_32(f,tmp2),30));	// exponent +1. ich=1: 27 ich=3: 28
else if (iCh==5) singularVectors_Left_64[jCh][iCh]=W_add(singularVectors_Left_64[jCh][iCh],W_shr(W_mult0_32_32(f,tmp2),28));	// exponent +1. ich=1: 27 ich=3: 28
else if (iCh==6) singularVectors_Left_64[jCh][iCh]=W_add(singularVectors_Left_64[jCh][iCh],W_shr(W_mult0_32_32(f,tmp2),29));	// exponent +1. ich=1: 27 ich=3: 28
else if (iCh==8) singularVectors_Left_64[jCh][iCh]=W_add(singularVectors_Left_64[jCh][iCh],W_shr(W_mult0_32_32(f,tmp2),30));	// exponent +1. ich=1: 27 ich=3: 28
else if (iCh==9) singularVectors_Left_64[jCh][iCh]=W_add(singularVectors_Left_64[jCh][iCh],W_shr(W_mult0_32_32(f,tmp2),28));	// exponent +1. ich=1: 27 ich=3: 28
else if (iCh==10) singularVectors_Left_64[jCh][iCh]=W_add(singularVectors_Left_64[jCh][iCh],W_shr(W_mult0_32_32(f,tmp2),30));	// exponent +1. ich=1: 27 ich=3: 28
else if (iCh==11) singularVectors_Left_64[jCh][iCh]=W_add(singularVectors_Left_64[jCh][iCh],W_shr(W_mult0_32_32(f,tmp2),29));	// exponent +1. ich=1: 27 ich=3: 28
else if (iCh==12) singularVectors_Left_64[jCh][iCh]=W_add(singularVectors_Left_64[jCh][iCh],W_shr(W_mult0_32_32(f,tmp2),29));	// exponent +1. ich=1: 27 ich=3: 28
	else	singularVectors_Left_64[jCh][iCh]=W_add(singularVectors_Left_64[jCh][iCh],W_shr(W_mult0_32_32(f,tmp2),27));	// exponent +1. ich=1: 27
//		singularVectors_Left_64[jCh][iCh]=W_add(singularVectors_Left_64[jCh][iCh],W_shr(W_mult0_32_32(f,tmp2),shifter[iCh]));
		singularVectors_Left_64[jCh][iCh]=W_add(singularVectors_Left_64[jCh][iCh],W_shr(W_mult0_32_32(f,tmp2),norm_x_e+23));
		{
			Word16 n;
			n=W_norm(singularVectors_Left_64[jCh][iCh]);
@@ -1404,7 +1397,7 @@ static void biDiagonalReductionLeft_fx(
                f = Mpy_32_32( norm_x, invVal ); /* invVal_e + (norm_x_e - r_e) */
                f_e = add( invVal_e, sub( norm_x_e, r_e ) );

		printf("MYADD%d: [%08X<%2x]  ",iCh,f,f_e);
		printf("MYADD%d,%d: [%08X<%2x]  ",iCh,currChannel,f,f_e);
                FOR( jCh = currChannel; jCh < nChannelsL; jCh++ ) /* nChannelsL */
                {
                    singularVectors[jCh][iCh] = BASOP_Util_Add_Mant32Exp( singularVectors[jCh][iCh], singularVectors2_e[jCh][iCh], Mpy_32_32( f, singularVectors[jCh][currChannel] ), add( f_e, singularVectors2_e[jCh][currChannel] ), &singularVectors2_e[jCh][iCh] );