Commit 668c0309 authored by thomas dettbarn's avatar thomas dettbarn
Browse files

the first left_64() function call is correct. but only with a lot of magic!

parent a0e4c6f1
Loading
Loading
Loading
Loading
+53 −12
Original line number Diff line number Diff line
@@ -906,6 +906,24 @@ static void HouseholderReduction_fx(
			nChannelsC,
			nCh
		);

		{
			int i,j;
			printf("COMPARE%d \x1b[1;32mstart\x1b[0m\n",nCh);
			for (i=0;i<nChannelsL;i++)
			{
				printf("COMPARE%d,%d: \x1b[1;32m",nCh,i);
				for (j=0;j<nChannelsC;j++)
				{
					Word16 n;
					n=W_norm(singularVectors_Left_64[i][j]);
					printf("%08X ",W_extract_h(W_shl(singularVectors_Left_64[i][j],n)));
				}
				printf("\x1b[0m\n");
			}
			printf("COMPARE%d \x1b[1;32mend\x1b[0m\n",nCh);
		}

		biDiagonalReductionRight_64(
			singularVectors_Left_64,nCh,
			secDiag_fx,secDiag_fx_e,
@@ -935,6 +953,21 @@ static void HouseholderReduction_fx(
    {
#ifdef	MYCHANGES
        biDiagonalReductionLeft_fx( singularVectors_Left_fx, singularValues_fx, singularVectors_Left_fx_e, singularValues_fx_e, nChannelsL, nChannelsC, nCh );
		{
			int i,j;
			printf("COMPARE%d start\n",nCh);
			for (i=0;i<nChannelsL;i++)
			{
				printf("COMPARE%d,%d: ",nCh,i);
				for (j=0;j<nChannelsC;j++)
				{
					Word16 n;
					printf("%08X ",singularVectors_Left_fx[i][j]);
				}
				printf("\n");
			}
			printf("COMPARE%d end\n",nCh);
		}
        biDiagonalReductionRight_fx( singularVectors_Left_fx, secDiag_fx, singularVectors_Left_fx_e, secDiag_fx_e, nChannelsL, nChannelsC, nCh, &g_fx, &g_e );
#else
        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 );
@@ -1062,18 +1095,26 @@ 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:  \x1b[1;33m");
		printf("MYADD%d: [%08X<%2x] \x1b[1;33m",iCh,f,f_e);
            for (jCh=currChannel;jCh<nChannelsL; jCh++)
            {
                tmp2=W_extract_l(W_shr(singularVectors_Left_64[jCh][currChannel],tmpe));
		printf("%016llX + %08X*%08X  (%016llX  %08X  ) =",singularVectors_Left_64[jCh][iCh],f,tmp2,
		-W_mult0_32_32(f,tmp2),
		-Mpy_32_32(f,tmp2)

		);
		singularVectors_Left_64[jCh][iCh]=W_add(singularVectors_Left_64[jCh][iCh],W_shr(W_mult0_32_32(f,tmp2),28));	// exponent +1
		printf("%016llX    ",-singularVectors_Left_64[jCh][iCh]);
// 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
		{
			Word16 n;
			n=W_norm(singularVectors_Left_64[jCh][iCh]);
			printf("%08X ",W_extract_h(W_shl(singularVectors_Left_64[jCh][iCh],n)));
		}
            }
		printf("\x1b[0m\n");
        }
@@ -1363,12 +1404,11 @@ 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:  ");
		printf("MYADD%d: [%08X<%2x]  ",iCh,f,f_e);
                FOR( jCh = currChannel; jCh < nChannelsL; jCh++ ) /* nChannelsL */
                {
			printf("%08X<%02X + %08X<%02X*%08X<%02X= ",singularVectors[jCh][iCh],singularVectors2_e[jCh][iCh], f,f_e, singularVectors[jCh][currChannel], singularVectors2_e[jCh][currChannel]);
                    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] );
			printf("%08X<%02X    ",-singularVectors[jCh][iCh],singularVectors2_e[jCh][iCh]);
			printf("%08X ",singularVectors[jCh][iCh]);
                    move32();
                }
		printf("\n");
@@ -1379,6 +1419,7 @@ static void biDiagonalReductionLeft_fx(
        move32();
        singularValues_e[currChannel] = g_e;
        move16();
	printf("MYADD done\n");
    }

    return;