Loading lib_dec/ivas_svd_dec_fx.c +63 −159 Original line number Diff line number Diff line Loading @@ -855,16 +855,23 @@ static void HouseholderReduction_fx( Word16 nCh; push_wmops("HouseholderReduction_fx"); #ifdef MYCHANGES Word32 singularValues_fx2[MAX_OUTPUT_CHANNELS]; /* exp(singularValues_fx_e) */ Word16 singularValues_fx2_e[MAX_OUTPUT_CHANNELS]; Word32 secDiag_fx2[MAX_OUTPUT_CHANNELS]; /* exp(secDiag_fx_e) */ Word16 secDiag_fx2_e[MAX_OUTPUT_CHANNELS]; Word64 singularVectors_Left_64[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; Word32 g_fx = 0; Word16 g_e = 0; move32(); move16(); Word32 sig_x_fx = 0; Word16 sig_x_fx_e = 0; move32(); move16(); Word32 eps_x_fx2=*eps_x_fx; /* exp(eps_x_fx_e) */ Word16 eps_x_fx2_e=*eps_x_fx_e; #else // float g = 0.0f, sig_x = 0.0f;// to be removed Loading Loading @@ -893,32 +900,15 @@ static void HouseholderReduction_fx( bitwindow=1; biDiagonalReductionLeft_64( singularVectors_Left_64,bitwindow, singularValues_fx,singularValues_fx_e, singularValues_fx2,singularValues_fx2_e, nChannelsL, nChannelsC, nCh ); { int i,j; printf("\ncompare%d, (%d)\x1b[1;32mstart\x1b[0m\n",nCh,singularVectors_Left_e); 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); } secDiag_fx[nCh]=g_fx; secDiag_fx_e[nCh]=g_e; singularValues_fx2_e[nCh]=add(singularVectors_Left_e,singularValues_fx2_e[nCh]); secDiag_fx2[nCh]=g_fx; move32(); move16(); secDiag_fx2_e[nCh]=add(singularVectors_Left_e,g_e); bitwindow=2; biDiagonalReductionRight_64( singularVectors_Left_64,bitwindow, Loading @@ -929,40 +919,22 @@ static void HouseholderReduction_fx( &g_e ); { int i,j; printf("\nCOMPARE%d, (%d)\x1b[1;32mstart\x1b[0m\n",nCh,singularVectors_Left_e); for (i=0;i<nChannelsL;i++) { printf("COMPARE%d,%d: \x1b[1;32m",nCh,i); for (j=0;j<nChannelsC;j++) Word16 L_temp_e; Word32 L_temp; printf("\nSINGLUAR \x1b[1;36m %08X<%2d %08X<%2d --> ",singularValues_fx2[nCh],singularValues_fx2_e[nCh], secDiag_fx2[nCh], secDiag_fx2_e[nCh]); fflush(stdout); L_temp = BASOP_Util_Add_Mant32Exp( L_abs( singularValues_fx2[nCh] ), singularValues_fx2_e[nCh], L_abs( secDiag_fx2[nCh] ), secDiag_fx2_e[nCh], &L_temp_e ); /* exp(L_temp_e) */ printf("%08X<%2d\x1b[0m\n",L_temp, L_temp_e); IF( EQ_16( BASOP_Util_Cmp_Mant32Exp( L_temp, L_temp_e, eps_x_fx2, eps_x_fx2_e ), 1 ) ) { Word16 n; n=W_norm(singularVectors_Left_64[i][j]); printf("%08X<%3d ",W_extract_h(W_shl(singularVectors_Left_64[i][j],n)),n); } printf("\x1b[0m\n"); eps_x_fx2 = L_temp; /* exp(L_temp_e) */ move32(); eps_x_fx2_e = L_temp_e; move32(); } printf("COMPARE%d \x1b[1;32mend\x1b[0m\n",nCh); } } pop_wmops(); { int i; printf("SECDIAG: \x1b[1;37m"); for (i=0;i<nChannelsC;i++) { secDiag_fx_e[i]+=singularVectors_Left_e; printf("%08X<%2d ",secDiag_fx[i],secDiag_fx_e[i]); } printf("\x1b[0m\n"); printf("SINGULARVALUES: \x1b[1;37m"); for (i=0;i<nChannelsC;i++) { singularValues_fx_e[i]+=singularVectors_Left_e; printf("%08X<%2d ",singularValues_fx[i],singularValues_fx_e[i]); } printf("\x1b[0m\n"); } #endif push_wmops("HouseholderReduction_fx 32"); FOR( jCh = 0; jCh < nChannelsL; jCh++ ) Loading @@ -978,38 +950,15 @@ static void HouseholderReduction_fx( FOR( nCh = 0; nCh < nChannelsC; nCh++ ) /* nChannelsC */ { 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 ); { 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++) { 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, &sig_x_fx, &sig_x_fx_e, &g_fx ); { 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++) { printf("%08X<%3d ",singularVectors_Left_fx[i][j],singularVectors_Left_fx_e[i][j]); } printf("\n"); } printf("COMPARE%d, end\n",nCh); } Word16 L_temp_e; Word32 L_temp = BASOP_Util_Add_Mant32Exp( L_abs( singularValues_fx[nCh] ), singularValues_fx_e[nCh], L_abs( secDiag_fx[nCh] ), secDiag_fx_e[nCh], &L_temp_e ); /* exp(L_temp_e) */ { printf("\nSINGLUAR %08X<%2d %08X<%2d --> ",singularValues_fx[nCh],singularValues_fx_e[nCh], secDiag_fx[nCh], secDiag_fx_e[nCh]); fflush(stdout); printf("%08X<%2d\n",L_temp, L_temp_e); } IF( EQ_16( BASOP_Util_Cmp_Mant32Exp( L_temp, L_temp_e, *eps_x_fx, *eps_x_fx_e ), 1 ) ) { *eps_x_fx = L_temp; /* exp(L_temp_e) */ Loading @@ -1019,71 +968,28 @@ static void HouseholderReduction_fx( } } { int i; printf("SECDIAG: "); for (i=0;i<nChannelsC;i++) { printf("%08X<%2d ",secDiag_fx[i],secDiag_fx_e[i]); } printf("\n"); printf("SINGULARVALUES: "); for (i=0;i<nChannelsC;i++) { printf("%08X<%2d ",singularValues_fx[i],singularValues_fx_e[i]); } printf("\n"); } pop_wmops(); { int i,j; static int replacecnt=0; static int bettercnt=0; static int totalcnt=0; for (j=0;j<nChannelsC;j++) { secDiag_fx[j]=secDiag_fx2[j]; secDiag_fx_e[j]=secDiag_fx2_e[j]; // singularValues_fx[j]=singularValues_fx2[j]; // singularValues_fx_e[j]=singularValues_fx2_e[j]; for (i=0;i<nChannelsL;i++) { printf("EXPONENT%02d: IN%3d ",i,singularVectors_Left_e); for (j=0;j<nChannelsC;j++) { Word16 n; Word32 tmp; Word32 minemant; unsigned int x,y; int mine,theirs; n=norm_l(singularVectors_Left_fx[i][j]); minemant=singularVectors_Left_fx[i][j]<<n; x=(unsigned int)minemant; printf("[(%2d)",singularVectors_Left_fx_e[i][j]-n); theirs=singularVectors_Left_fx_e[i][j]-n; n=W_norm(singularVectors_Left_64[i][j]); tmp=W_extract_h(W_shl(singularVectors_Left_64[i][j],n)); y=(unsigned int)tmp; n=32+singularVectors_Left_e-n; mine=n; printf("MINE:%2d]",n); if (!((x^y)&0xff000000)) bettercnt++; // if (mine==theirs || minemant==singularVectors_Left_fx[i][j]) if (1) { singularVectors_Left_fx[i][j]=x; singularVectors_Left_fx_e[i][j]=mine; replacecnt++; printf("\x1b[0;32m"); } printf("%08X/%08X ",x,y); printf("\x1b[0m"); totalcnt++; n=W_norm(singularVectors_Left_64[j][i]); singularVectors_Left_fx[j][i]=W_extract_h(W_shl(singularVectors_Left_64[j][i],n)); singularVectors_Left_fx_e[j][i]=sub(add(32,singularVectors_Left_e),n); } printf("\n"); } printf("\nbetter %d replace:%d /%d\n",bettercnt,replacecnt,totalcnt); *eps_x_fx = eps_x_fx2; *eps_x_fx_e = eps_x_fx2_e; } /* SingularVecotr Accumulation */ Loading Loading @@ -1256,10 +1162,8 @@ static void biDiagonalReductionRight_64( Word32 r; Word16 r_e; Word32 f; Word16 f_e; Word32 invVal; Word16 invVal_e; Word16 r_e2; tmp_g_e = norm_x_e; move16(); Loading Loading
lib_dec/ivas_svd_dec_fx.c +63 −159 Original line number Diff line number Diff line Loading @@ -855,16 +855,23 @@ static void HouseholderReduction_fx( Word16 nCh; push_wmops("HouseholderReduction_fx"); #ifdef MYCHANGES Word32 singularValues_fx2[MAX_OUTPUT_CHANNELS]; /* exp(singularValues_fx_e) */ Word16 singularValues_fx2_e[MAX_OUTPUT_CHANNELS]; Word32 secDiag_fx2[MAX_OUTPUT_CHANNELS]; /* exp(secDiag_fx_e) */ Word16 secDiag_fx2_e[MAX_OUTPUT_CHANNELS]; Word64 singularVectors_Left_64[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; Word32 g_fx = 0; Word16 g_e = 0; move32(); move16(); Word32 sig_x_fx = 0; Word16 sig_x_fx_e = 0; move32(); move16(); Word32 eps_x_fx2=*eps_x_fx; /* exp(eps_x_fx_e) */ Word16 eps_x_fx2_e=*eps_x_fx_e; #else // float g = 0.0f, sig_x = 0.0f;// to be removed Loading Loading @@ -893,32 +900,15 @@ static void HouseholderReduction_fx( bitwindow=1; biDiagonalReductionLeft_64( singularVectors_Left_64,bitwindow, singularValues_fx,singularValues_fx_e, singularValues_fx2,singularValues_fx2_e, nChannelsL, nChannelsC, nCh ); { int i,j; printf("\ncompare%d, (%d)\x1b[1;32mstart\x1b[0m\n",nCh,singularVectors_Left_e); 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); } secDiag_fx[nCh]=g_fx; secDiag_fx_e[nCh]=g_e; singularValues_fx2_e[nCh]=add(singularVectors_Left_e,singularValues_fx2_e[nCh]); secDiag_fx2[nCh]=g_fx; move32(); move16(); secDiag_fx2_e[nCh]=add(singularVectors_Left_e,g_e); bitwindow=2; biDiagonalReductionRight_64( singularVectors_Left_64,bitwindow, Loading @@ -929,40 +919,22 @@ static void HouseholderReduction_fx( &g_e ); { int i,j; printf("\nCOMPARE%d, (%d)\x1b[1;32mstart\x1b[0m\n",nCh,singularVectors_Left_e); for (i=0;i<nChannelsL;i++) { printf("COMPARE%d,%d: \x1b[1;32m",nCh,i); for (j=0;j<nChannelsC;j++) Word16 L_temp_e; Word32 L_temp; printf("\nSINGLUAR \x1b[1;36m %08X<%2d %08X<%2d --> ",singularValues_fx2[nCh],singularValues_fx2_e[nCh], secDiag_fx2[nCh], secDiag_fx2_e[nCh]); fflush(stdout); L_temp = BASOP_Util_Add_Mant32Exp( L_abs( singularValues_fx2[nCh] ), singularValues_fx2_e[nCh], L_abs( secDiag_fx2[nCh] ), secDiag_fx2_e[nCh], &L_temp_e ); /* exp(L_temp_e) */ printf("%08X<%2d\x1b[0m\n",L_temp, L_temp_e); IF( EQ_16( BASOP_Util_Cmp_Mant32Exp( L_temp, L_temp_e, eps_x_fx2, eps_x_fx2_e ), 1 ) ) { Word16 n; n=W_norm(singularVectors_Left_64[i][j]); printf("%08X<%3d ",W_extract_h(W_shl(singularVectors_Left_64[i][j],n)),n); } printf("\x1b[0m\n"); eps_x_fx2 = L_temp; /* exp(L_temp_e) */ move32(); eps_x_fx2_e = L_temp_e; move32(); } printf("COMPARE%d \x1b[1;32mend\x1b[0m\n",nCh); } } pop_wmops(); { int i; printf("SECDIAG: \x1b[1;37m"); for (i=0;i<nChannelsC;i++) { secDiag_fx_e[i]+=singularVectors_Left_e; printf("%08X<%2d ",secDiag_fx[i],secDiag_fx_e[i]); } printf("\x1b[0m\n"); printf("SINGULARVALUES: \x1b[1;37m"); for (i=0;i<nChannelsC;i++) { singularValues_fx_e[i]+=singularVectors_Left_e; printf("%08X<%2d ",singularValues_fx[i],singularValues_fx_e[i]); } printf("\x1b[0m\n"); } #endif push_wmops("HouseholderReduction_fx 32"); FOR( jCh = 0; jCh < nChannelsL; jCh++ ) Loading @@ -978,38 +950,15 @@ static void HouseholderReduction_fx( FOR( nCh = 0; nCh < nChannelsC; nCh++ ) /* nChannelsC */ { 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 ); { 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++) { 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, &sig_x_fx, &sig_x_fx_e, &g_fx ); { 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++) { printf("%08X<%3d ",singularVectors_Left_fx[i][j],singularVectors_Left_fx_e[i][j]); } printf("\n"); } printf("COMPARE%d, end\n",nCh); } Word16 L_temp_e; Word32 L_temp = BASOP_Util_Add_Mant32Exp( L_abs( singularValues_fx[nCh] ), singularValues_fx_e[nCh], L_abs( secDiag_fx[nCh] ), secDiag_fx_e[nCh], &L_temp_e ); /* exp(L_temp_e) */ { printf("\nSINGLUAR %08X<%2d %08X<%2d --> ",singularValues_fx[nCh],singularValues_fx_e[nCh], secDiag_fx[nCh], secDiag_fx_e[nCh]); fflush(stdout); printf("%08X<%2d\n",L_temp, L_temp_e); } IF( EQ_16( BASOP_Util_Cmp_Mant32Exp( L_temp, L_temp_e, *eps_x_fx, *eps_x_fx_e ), 1 ) ) { *eps_x_fx = L_temp; /* exp(L_temp_e) */ Loading @@ -1019,71 +968,28 @@ static void HouseholderReduction_fx( } } { int i; printf("SECDIAG: "); for (i=0;i<nChannelsC;i++) { printf("%08X<%2d ",secDiag_fx[i],secDiag_fx_e[i]); } printf("\n"); printf("SINGULARVALUES: "); for (i=0;i<nChannelsC;i++) { printf("%08X<%2d ",singularValues_fx[i],singularValues_fx_e[i]); } printf("\n"); } pop_wmops(); { int i,j; static int replacecnt=0; static int bettercnt=0; static int totalcnt=0; for (j=0;j<nChannelsC;j++) { secDiag_fx[j]=secDiag_fx2[j]; secDiag_fx_e[j]=secDiag_fx2_e[j]; // singularValues_fx[j]=singularValues_fx2[j]; // singularValues_fx_e[j]=singularValues_fx2_e[j]; for (i=0;i<nChannelsL;i++) { printf("EXPONENT%02d: IN%3d ",i,singularVectors_Left_e); for (j=0;j<nChannelsC;j++) { Word16 n; Word32 tmp; Word32 minemant; unsigned int x,y; int mine,theirs; n=norm_l(singularVectors_Left_fx[i][j]); minemant=singularVectors_Left_fx[i][j]<<n; x=(unsigned int)minemant; printf("[(%2d)",singularVectors_Left_fx_e[i][j]-n); theirs=singularVectors_Left_fx_e[i][j]-n; n=W_norm(singularVectors_Left_64[i][j]); tmp=W_extract_h(W_shl(singularVectors_Left_64[i][j],n)); y=(unsigned int)tmp; n=32+singularVectors_Left_e-n; mine=n; printf("MINE:%2d]",n); if (!((x^y)&0xff000000)) bettercnt++; // if (mine==theirs || minemant==singularVectors_Left_fx[i][j]) if (1) { singularVectors_Left_fx[i][j]=x; singularVectors_Left_fx_e[i][j]=mine; replacecnt++; printf("\x1b[0;32m"); } printf("%08X/%08X ",x,y); printf("\x1b[0m"); totalcnt++; n=W_norm(singularVectors_Left_64[j][i]); singularVectors_Left_fx[j][i]=W_extract_h(W_shl(singularVectors_Left_64[j][i],n)); singularVectors_Left_fx_e[j][i]=sub(add(32,singularVectors_Left_e),n); } printf("\n"); } printf("\nbetter %d replace:%d /%d\n",bettercnt,replacecnt,totalcnt); *eps_x_fx = eps_x_fx2; *eps_x_fx_e = eps_x_fx2_e; } /* SingularVecotr Accumulation */ Loading Loading @@ -1256,10 +1162,8 @@ static void biDiagonalReductionRight_64( Word32 r; Word16 r_e; Word32 f; Word16 f_e; Word32 invVal; Word16 invVal_e; Word16 r_e2; tmp_g_e = norm_x_e; move16(); Loading