@@ -726,17 +726,25 @@ Vec_Wrd_t * Gia_ManMulFindSim( Vec_Wrd_t * vSim0, Vec_Wrd_t * vSim1, int fSigned
726726 }
727727 return vRes ;
728728}
729- void Gia_ManMulFindOutputs ( Gia_Man_t * p , Vec_Wec_t * vTerms , int fLits , int fVerbose )
729+ Vec_Wrd_t * Gia_ManMulFindSim2 ( Vec_Wrd_t * vSim0 , Vec_Wrd_t * vSim1 , int fSigned )
730730{
731+ extern word * product_many (word * pInfo1 , int nBits1 , word * pInfo2 , int nBits2 , int fSigned );
732+ word * pRes = product_many ( Vec_WrdArray (vSim0 ), Vec_WrdSize (vSim0 ), Vec_WrdArray (vSim1 ), Vec_WrdSize (vSim1 ), fSigned );
733+ return Vec_WrdAllocArray ( pRes , Vec_WrdSize (vSim0 ) + Vec_WrdSize (vSim1 ) );
734+ }
735+ int Gia_ManMulFindOutputs ( Gia_Man_t * p , Vec_Wec_t * vTerms , int fLits , int fVerbose )
736+ {
737+ //abctime clkTotal = Abc_Clock();
738+ int nDetected = 0 ;
731739 Abc_Random (1 );
732740 for ( int m = 0 ; m < Vec_WecSize (vTerms )/3 ; m ++ ) {
733741 Vec_Int_t * vIn0 = Vec_WecEntry (vTerms , 3 * m + 0 );
734742 Vec_Int_t * vIn1 = Vec_WecEntry (vTerms , 3 * m + 1 );
735743 Vec_Int_t * vOut = Vec_WecEntry (vTerms , 3 * m + 2 );
736744 Vec_Wrd_t * vSim0 = Vec_WrdStartRandom ( Vec_IntSize (vIn0 ) );
737745 Vec_Wrd_t * vSim1 = Vec_WrdStartRandom ( Vec_IntSize (vIn1 ) );
738- Vec_Wrd_t * vSimU = Gia_ManMulFindSim ( vSim0 , vSim1 , 0 );
739- Vec_Wrd_t * vSimS = Gia_ManMulFindSim ( vSim0 , vSim1 , 1 );
746+ Vec_Wrd_t * vSimU = Gia_ManMulFindSim2 ( vSim0 , vSim1 , 0 );
747+ Vec_Wrd_t * vSimS = Gia_ManMulFindSim2 ( vSim0 , vSim1 , 1 );
740748 Vec_Int_t * vTfo = Gia_ManMulFindTfo ( p , vIn0 , vIn1 , fLits );
741749 Vec_Wrd_t * vSims = Gia_ManMulFindSimCone ( p , vIn0 , vIn1 , vSim0 , vSim1 , vTfo , fLits );
742750 Vec_Int_t * vOutU = Vec_IntAlloc ( 100 );
@@ -762,10 +770,14 @@ void Gia_ManMulFindOutputs( Gia_Man_t * p, Vec_Wec_t * vTerms, int fLits, int fV
762770 if ( Vec_IntCountEntry (vOutU , -1 ) < Vec_IntSize (vOutU ) ||
763771 Vec_IntCountEntry (vOutS , -1 ) < Vec_IntSize (vOutS ) )
764772 {
765- if ( Vec_IntCountEntry (vOutU , -1 ) < Vec_IntCountEntry (vOutS , -1 ) )
773+ if ( Vec_IntCountEntry (vOutU , -1 ) < Vec_IntCountEntry (vOutS , -1 ) ) {
766774 Vec_IntAppend ( vOut , vOutU ), Vec_IntPush (vOut , 0 );
767- else
775+ nDetected = Vec_IntSize (vOutU ) - Vec_IntCountEntry (vOutU , -1 );
776+ }
777+ else {
768778 Vec_IntAppend ( vOut , vOutS ), Vec_IntPush (vOut , 1 );
779+ nDetected = Vec_IntSize (vOutS ) - Vec_IntCountEntry (vOutS , -1 );
780+ }
769781 }
770782 else
771783 {
@@ -782,6 +794,8 @@ void Gia_ManMulFindOutputs( Gia_Man_t * p, Vec_Wec_t * vTerms, int fLits, int fV
782794 Vec_IntFree ( vOutS );
783795 }
784796 Vec_WecRemoveEmpty ( vTerms );
797+ //Abc_PrintTime( 1, "Output detection time", Abc_Clock() - clkTotal );
798+ return nDetected ;
785799}
786800
787801/**Function*************************************************************
@@ -831,11 +845,28 @@ void Gia_ManMulFindPrintSet( Vec_Int_t * vSet, int fLit, int fSkipLast )
831845{
832846 int i , Temp , Limit = Vec_IntSize (vSet ) - fSkipLast ;
833847 printf ( "{" );
834- Vec_IntForEachEntryStop ( vSet , Temp , i , Limit ) {
835- if ( Temp == -1 )
836- printf ( "n/a%s" , i < Limit - 1 ? " " :"" );
837- else
838- printf ( "%s%d%s" , (fLit & Abc_LitIsCompl (Temp )) ? "~" :"" , fLit ? Abc_Lit2Var (Temp ) : Temp , i < Limit - 1 ? " " :"" );
848+ if ( Vec_IntSize (vSet ) > 16 ) {
849+ Vec_IntForEachEntryStop ( vSet , Temp , i , 4 ) {
850+ if ( Temp == -1 )
851+ printf ( "n/a%s" , i < Limit - 1 ? " " :"" );
852+ else
853+ printf ( "%s%d%s" , (fLit & Abc_LitIsCompl (Temp )) ? "~" :"" , fLit ? Abc_Lit2Var (Temp ) : Temp , i < Limit - 1 ? " " :"" );
854+ }
855+ printf ( "... " );
856+ Vec_IntForEachEntryStartStop ( vSet , Temp , i , Limit - 4 , Limit ) {
857+ if ( Temp == -1 )
858+ printf ( "n/a%s" , i < Limit - 1 ? " " :"" );
859+ else
860+ printf ( "%s%d%s" , (fLit & Abc_LitIsCompl (Temp )) ? "~" :"" , fLit ? Abc_Lit2Var (Temp ) : Temp , i < Limit - 1 ? " " :"" );
861+ }
862+ }
863+ else {
864+ Vec_IntForEachEntryStop ( vSet , Temp , i , Limit ) {
865+ if ( Temp == -1 )
866+ printf ( "n/a%s" , i < Limit - 1 ? " " :"" );
867+ else
868+ printf ( "%s%d%s" , (fLit & Abc_LitIsCompl (Temp )) ? "~" :"" , fLit ? Abc_Lit2Var (Temp ) : Temp , i < Limit - 1 ? " " :"" );
869+ }
839870 }
840871 printf ( "}" );
841872}
0 commit comments