Commit 36f21240 authored by thomas dettbarn's avatar thomas dettbarn
Browse files

rollback

parent fc706ecc
Loading
Loading
Loading
Loading
+1 −151
Original line number Diff line number Diff line
@@ -66,25 +66,6 @@ static void HouseholderReduction_fx(
    Word32 *eps_x_fx,        /* exp(eps_x_fx_e) */
    Word16 *eps_x_fx_e );



static void biDiagonalReductionLeft_64_fx(
    Word32 singularVectors[][MAX_OUTPUT_CHANNELS], /* exp(singularVectors_e) */
    Word16 singularVectors2_e[][MAX_OUTPUT_CHANNELS],

    Word32 singularValues[MAX_OUTPUT_CHANNELS],    /* exp(singularValues_e) */
    Word16 singularValues_e[MAX_OUTPUT_CHANNELS],

    Word32 secDiag[MAX_OUTPUT_CHANNELS],           /* exp(secDiag_e) */
    Word16 secDiag_e[MAX_OUTPUT_CHANNELS],

    const Word16 nChannelsL,  /* Q0 */
    const Word16 nChannelsC,  /* Q0 */
    const Word16 currChannel, /* Q0 */

    Word64 g
);

static void biDiagonalReductionLeft_fx(
    Word32 singularVectors[][MAX_OUTPUT_CHANNELS], /* exp(singularVectors_e) */
    Word32 singularValues[MAX_OUTPUT_CHANNELS],    /* exp(singularValues_e) */
@@ -861,9 +842,6 @@ static void HouseholderReduction_fx(
    /* Bidiagonal Reduction for every channel */
    FOR( nCh = 0; nCh < nChannelsC; nCh++ ) /* nChannelsC */
    {

	biDiagonalReductionLeft_64_fx(singularVectors_Left_fx, singularVectors_Left_fx_e,  singularValues_fx, singularValues_fx_e, secDiag_fx, secDiag_fx_e, nChannelsL, nChannelsC, nCh, W_deposit32_l(g_fx) );
	
        biDiagonalReductionLeft_fx( singularVectors_Left_fx, singularValues_fx, secDiag_fx, singularVectors_Left_fx_e, singularValues_fx_e, secDiag_fx_e, nChannelsL, nChannelsC, nCh, &sig_x_fx, &sig_x_fx_e, &g_fx );
        biDiagonalReductionRight_fx( singularVectors_Left_fx, secDiag_fx, singularVectors_Left_fx_e, secDiag_fx_e, nChannelsL, nChannelsC, nCh, &sig_x_fx, &sig_x_fx_e, &g_fx );

@@ -893,120 +871,6 @@ static void HouseholderReduction_fx(
 *
 *-------------------------------------------------------------------------*/

static void biDiagonalReductionLeft_64_fx(
    Word32 singularVectors[][MAX_OUTPUT_CHANNELS], /* exp(singularVectors_e) */
    Word16 singularVectors2_e[][MAX_OUTPUT_CHANNELS],

    Word32 singularValues[MAX_OUTPUT_CHANNELS],    /* exp(singularValues_e) */
    Word16 singularValues_e[MAX_OUTPUT_CHANNELS],

    Word32 secDiag[MAX_OUTPUT_CHANNELS],           /* exp(secDiag_e) */
    Word16 secDiag_e[MAX_OUTPUT_CHANNELS],

    const Word16 nChannelsL,  /* Q0 */
    const Word16 nChannelsC,  /* Q0 */
    const Word16 currChannel, /* Q0 */

    Word64 g
)
#define CONVERT_64( x_64, y_fx, y_e )              \
    {                                              \
        Word16 norm;                               \
        norm = W_norm( x_64 );                     \
        y_fx = W_extract_h( W_shl( x_64, norm ) ); \
        y_e = sub( 63, norm );                \
    }
{
	Word64 norm_64;
	Word16 norm_64_e;
	Word16 iCh, jCh;
	
	CONVERT_64(g, secDiag[currChannel], secDiag_e[currChannel] );	// TODO: can be moved one function up

	g=0;
	move64();
	norm_64=0;
	move64();
	norm_64_e=0;
	move16();
	for (jCh = currChannel; jCh<nChannelsL; jCh++)
	{
		norm_64=W_add(norm_64, W_mult0_32_32(singularVectors[jCh][currChannel], singularVectors[jCh][currChannel] ) );
		norm_64_e=add(norm_e, singularVectors2_e[jCh][currChannel]);
	}
	IF (norm_64)
	{
		Word32 tmp;
		Word16 tmp_e;


		Word64 r;
		Word32 r_x;
		Word16 r_e;
		CONVERT_64( norm_64, tmp, tmp_e);
		tmp_e+=8;
		tmp=Sqrt32(tmp,&tmp_e);
		g=W_shl(W_deposit32_l(tmp),tmp_e);
		printf("tmp:%08X<%2x\n",tmp,tmp_e);
		IF (singularVectors[currChannel][currChannel]>=0)
		{
			g = W_neg(g);
			tmp = L_negate(tmp);
		}
//		r=W_sub( W_mult0_32_32( tmp,singularVectors[currChannel][currChannel]) , norm_64);
		r=W_sub( norm_64, W_mult0_32_32( tmp,singularVectors[currChannel][currChannel]) );
		printf("r=%016llX\n",r);
		printf("sing:%08X<%2x +%08X<%2x --> ",singularVectors[currChannel][currChannel],singularVectors2_e[currChannel][currChannel],tmp,tmp_e);
		singularVectors[currChannel][currChannel]=BASOP_Util_Add_Mant32Exp(singularVectors[currChannel][currChannel],singularVectors2_e[currChannel][currChannel], L_negate(tmp), tmp_e, &singularVectors2_e[currChannel][currChannel]);
		printf("sing:%08X<%2x\n",singularVectors[currChannel][currChannel],singularVectors2_e[currChannel][currChannel]);
		
		
		CONVERT_64(r, r_x, r_e);
//// SAME AS FLOATING POINT UNTIL HERE
		for (iCh=currChannel+1; iCh<nChannelsC; iCh++)
		{
			Word32 f;
			Word16 f_e;
			Word32 n;
			Word16 n_e;
			norm_64=0;
			move64();
			for (jCh=currChannel;jCh<nChannelsL;jCh++)
			{
				norm_64=W_add(norm_64, W_mult0_32_32(singularVectors[jCh][currChannel], singularVectors[jCh][iCh] ) );
			}
			CONVERT_64(norm_64,n,n_e);
		
			f=BASOP_Util_Divide3232_Scale_newton(n,r_x, &f_e);

			for (jCh=currChannel;jCh<nChannelsL;jCh++)
			{
				Word64 tmp64;
				tmp64=W_mult0_32_32( f,singularVectors[jCh][currChannel]);
				CONVERT_64(tmp64, tmp, tmp_e);
				singularVectors[jCh][iCh]=BASOP_Util_Add_Mant32Exp(singularVectors[jCh][iCh],singularVectors2_e[jCh][iCh], tmp, tmp_e, &singularVectors2_e[jCh][iCh]);
			}
		}
		
	}
	CONVERT_64(g,singularValues[currChannel],singularValues_e[currChannel]);
	{
		int i;
		int j;
		for (i=0;i<MAX_OUTPUT_CHANNELS;i++)
		{
			for (j=0;j<MAX_OUTPUT_CHANNELS;j++)
			{
				printf("%08X<%2x   ",singularVectors[i][j], singularVectors2_e[i][j]);
			}
			printf("\n");
		}
		exit(0);
	}
	return;	
}
    

static void biDiagonalReductionLeft_fx(
    Word32 singularVectors[][MAX_OUTPUT_CHANNELS], /* exp(singularVectors_e) */
    Word32 singularValues[MAX_OUTPUT_CHANNELS],    /* exp(singularValues_e) */
@@ -1067,7 +931,6 @@ static void biDiagonalReductionLeft_fx(
                move16();
                norm_x = BASOP_Util_Add_Mant32Exp( norm_x, norm_x_e, Mpy_32_32( singularVectors[jCh][currChannel], singularVectors[jCh][currChannel] ), shl( singularVectors2_e[jCh][currChannel], 1 ), &norm_x_e ); /* exp(norm_x_e) */
            }
		printf("NORM: %08X    %016llX\n",norm_x,(signed long long)norm_x*(signed long long)*sig_x*(signed long long)*sig_x);
            IF( GT_16( norm_x_e, 0 ) )
            {
                norm_x = MAX_32;
@@ -1078,7 +941,6 @@ static void biDiagonalReductionLeft_fx(
            L_temp_e = norm_x_e;
            move16();
            L_temp = Sqrt32( norm_x, &L_temp_e );
		printf("\nSQRT: %08X<%2x   %016llX\n",norm_x,L_temp_e,(signed long long)norm_x*(signed long long)(*sig_x));
            L_temp = L_shl_r( L_temp, L_temp_e ); // Q31
                                                  //( *g ) = L_negate( GE_32( singularVectors[currChannel][idx], 0 ) ? L_temp : L_negate( L_temp ) );
            if ( singularVectors[currChannel][idx] >= 0 )
@@ -1131,19 +993,6 @@ static void biDiagonalReductionLeft_fx(
        singularValues_e[currChannel] = *sig_x_e;
        move16();
    }
	{
		int i;
		int j;
		for (i=0;i<MAX_OUTPUT_CHANNELS;i++)
		{
			for (j=0;j<MAX_OUTPUT_CHANNELS;j++)
			{
				printf("%08X<%2x   ",singularVectors[i][j], singularVectors2_e[i][j]);
			}
			printf("\n");
		}
		exit(0);
	}

    return;
}
@@ -1274,6 +1123,7 @@ static void biDiagonalReductionRight_fx(

    return;
}

/*-------------------------------------------------------------------------
 * singularVectorsAccumulationLeft()
 *