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

getting closer...

parent 5a74ba82
Loading
Loading
Loading
Loading
+59 −11
Original line number Diff line number Diff line
@@ -926,8 +926,8 @@ static void biDiagonalReductionLeft_fx(
                L_temp = L_negate( L_temp );
            }
            g = L_temp;
            g_e = L_temp_e;
            move32();
            g_e = L_temp_e;
            move16();

            r = BASOP_Util_Add_Mant32Exp( Mpy_32_32( ( g ), singularVectors[currChannel][idx] ), add( singularVectors2_e[currChannel][idx], g_e), -norm_x, norm_x_e, &r_e );                                      /* exp(r_e) */
@@ -967,6 +967,26 @@ static void biDiagonalReductionLeft_fx(
        move32();
        singularValues_e[currChannel] = g_e;
        move16();
	printf("\nsecDiag[%2d]: %08X<%2x  singularvalues:%08X<%2x\n",currChannel,secDiag[currChannel],secDiag_e[currChannel],singularValues[currChannel],singularValues_e[currChannel]);
    }
    {
	    int i,j;
	    printf("\n\x1b[1;37;41mLEFT\x1b[0m\n");
	    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");
	    }
	    printf("\x1b[0m\n");
    	printf("\x1b[1;37;44m");
        FOR( jCh = idx; jCh < nChannelsL; jCh++ ) /* nChannelsL */
        {
		printf("%08X<%2x  ",singularVectors[jCh][currChannel+1], singularVectors2_e[jCh][currChannel+1]);
        }
	printf("\n");
}

    return;
@@ -993,6 +1013,8 @@ static void biDiagonalReductionRight_fx(
    Word16 iCh, jCh, idx;
    Word32 norm_x, r;
    Word16 norm_x_e, r_e;
    Word32 abs_x;
    Word16 abs_x_e;
    Word32 L_temp;
    Word16 L_temp_e;

@@ -1008,9 +1030,14 @@ static void biDiagonalReductionRight_fx(
        move32();
        norm_x_e = 0;
        move16();
        abs_x = 0;
        move32();
        abs_x_e = 0;
        move16();
        FOR( jCh = idx; jCh < nChannelsC; jCh++ ) /*nChannelsC */
        {
            norm_x = BASOP_Util_Add_Mant32Exp( norm_x, norm_x_e, Mpy_32_32( singularVectors[currChannel][jCh], singularVectors[currChannel][jCh] ), shl( singularVectors2_e[currChannel][jCh], 1 ), &norm_x_e ); /* exp(norm_x_e) */
            abs_x = BASOP_Util_Add_Mant32Exp( abs_x, abs_x_e, L_abs( singularVectors[currChannel][jCh] ), singularVectors2_e[currChannel][jCh], &abs_x_e );
        }

        IF( norm_x ) /*(fabsf(*sig_x) > EPSILON * fabsf(*sig_x)) { */
@@ -1043,24 +1070,32 @@ static void biDiagonalReductionRight_fx(
            move16();


            r = BASOP_Util_Add_Mant32Exp( Mpy_32_32( ( *g ), singularVectors[currChannel][idx] ), singularVectors2_e[currChannel][idx], -norm_x, norm_x_e, &r_e );                                      /* exp(r_e) */
            r = BASOP_Util_Add_Mant32Exp( Mpy_32_32( ( *g ), singularVectors[currChannel][idx] ), add( *g_e, singularVectors2_e[currChannel][idx] ), -norm_x, norm_x_e, &r_e );                                      /* exp(r_e) */
            singularVectors[currChannel][idx] = BASOP_Util_Add_Mant32Exp( singularVectors[currChannel][idx], singularVectors2_e[currChannel][idx], -( *g ), ( *g_e ), &singularVectors2_e[currChannel][idx] ); /* exp(sing_exp) */
            move32();


            invVal_e = r_e;
            invVal_e = 0;
            move16();
            invVal = BASOP_Util_Divide3232_Scale_newton( MAXVAL_WORD32, maxWithSign_fx( r ), &invVal_e );

            invVal = BASOP_Util_Divide3232_Scale_newton( abs_x, maxWithSign_fx( r ), &invVal_e );
            invVal_e = add( invVal_e, sub( abs_x_e, r_e ) );
		printf("r:%08X<%2x::   ",r,r_e);
		printf("\x1b[1;37;43m secdiag: ");
            FOR( jCh = idx; jCh < nChannelsC; jCh++ ) /* nChannelsC */
            {
                temp_e = norm_l( singularVectors[currChannel][jCh] );
                secDiag[jCh] = Mpy_32_32( L_shl( singularVectors[currChannel][jCh], temp_e ), invVal ); /* exp(sing_exp + (singularVectors_e - sig_x_e) */
//                temp_e = norm_l( singularVectors[currChannel][jCh] );
//                secDiag[jCh] = Mpy_32_32( L_shl( singularVectors[currChannel][jCh], temp_e ), invVal ); /* exp(sing_exp + (singularVectors_e - sig_x_e) */
//                move32();
//                secDiag_exp[jCh] = add( sub( invVal_e, temp_e ), sub( singularVectors2_e[currChannel][jCh], r_e ) );
//                move16();
                secDiag[jCh] = Mpy_32_32( singularVectors[currChannel][jCh], invVal ); /* exp(sing_exp + (singularVectors_e - sig_x_e) */
                move32();
                secDiag_exp[jCh] = add( sub( invVal_e, temp_e ), sub( singularVectors2_e[currChannel][jCh], r_e ) );
                secDiag_exp[jCh] = add( invVal_e, sub( singularVectors2_e[currChannel][jCh], r_e ) );
                move16();
            }
		printf("%08X<%2x  ",secDiag[jCh],secDiag_exp[jCh]);
			
            }
		printf("\x1b[0m\n");
            FOR( iCh = currChannel + 1; iCh < nChannelsL; iCh++ ) /*  nChannelsL */
            {
                norm_x = 0;
@@ -1071,7 +1106,8 @@ static void biDiagonalReductionRight_fx(
                {
                    norm_x = BASOP_Util_Add_Mant32Exp( norm_x, norm_x_e, Mpy_32_32( singularVectors[iCh][jCh], singularVectors[currChannel][jCh] ), add( singularVectors2_e[iCh][jCh], singularVectors2_e[currChannel][jCh] ), &norm_x_e ); /* exp(norm_x_e) */
                }

                norm_x = BASOP_Util_Divide3232_Scale_newton( norm_x, abs_x, &invVal_e );
                norm_x_e = add( invVal_e, sub(norm_x_e, abs_x_e ) );
                FOR( jCh = idx; jCh < nChannelsC; jCh++ ) /*  nChannelsC */
                {
                    singularVectors[iCh][jCh] = BASOP_Util_Add_Mant32Exp( singularVectors[iCh][jCh], singularVectors2_e[iCh][jCh], Mpy_32_32( norm_x, secDiag[jCh] ), add( norm_x_e, secDiag_exp[jCh] ), &singularVectors2_e[iCh][jCh] ); /* exp(sing_exp2) */
@@ -1081,7 +1117,19 @@ static void biDiagonalReductionRight_fx(

        }
    }

    {
	    int i,j;
	    printf("\n\x1b[1;37;42mRIGHT\x1b[0m\n");
	    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");
	    }
	    printf("\x1b[0m\n");
    }
    return;
}