@@ -661,15 +661,15 @@ Vec_Wec_t * Gia_ManMulFindBInputs( Gia_Man_t * p, Vec_Wec_t * vCuts4, Vec_Wec_t
661661 SeeAlso []
662662
663663***********************************************************************/
664- Vec_Int_t * Gia_ManMulFindTfo ( Gia_Man_t * p , Vec_Int_t * vIn0 , Vec_Int_t * vIn1 )
664+ Vec_Int_t * Gia_ManMulFindTfo ( Gia_Man_t * p , Vec_Int_t * vIn0 , Vec_Int_t * vIn1 , int fLits )
665665{
666666 Vec_Int_t * vTfo = Vec_IntAlloc ( 100 );
667667 Gia_Obj_t * pObj ; int i , Obj ;
668668 Gia_ManIncrementTravId ( p );
669669 Vec_IntForEachEntry ( vIn0 , Obj , i )
670- Gia_ObjSetTravIdCurrentId ( p , Obj );
670+ Gia_ObjSetTravIdCurrentId ( p , fLits ? Abc_Lit2Var ( Obj ) : Obj );
671671 Vec_IntForEachEntry ( vIn1 , Obj , i )
672- Gia_ObjSetTravIdCurrentId ( p , Obj );
672+ Gia_ObjSetTravIdCurrentId ( p , fLits ? Abc_Lit2Var ( Obj ) : Obj );
673673 Gia_ManForEachAnd ( p , pObj , i ) {
674674 if ( Gia_ObjIsTravIdCurrentId (p , i ) )
675675 continue ;
@@ -678,15 +678,15 @@ Vec_Int_t * Gia_ManMulFindTfo( Gia_Man_t * p, Vec_Int_t * vIn0, Vec_Int_t * vIn1
678678 }
679679 return vTfo ;
680680}
681- Vec_Wrd_t * Gia_ManMulFindSimCone ( Gia_Man_t * p , Vec_Int_t * vIn0 , Vec_Int_t * vIn1 , Vec_Wrd_t * vSim0 , Vec_Wrd_t * vSim1 , Vec_Int_t * vTfo )
681+ Vec_Wrd_t * Gia_ManMulFindSimCone ( Gia_Man_t * p , Vec_Int_t * vIn0 , Vec_Int_t * vIn1 , Vec_Wrd_t * vSim0 , Vec_Wrd_t * vSim1 , Vec_Int_t * vTfo , int fLits )
682682{
683683 Vec_Wrd_t * vRes = Vec_WrdAlloc ( Vec_IntSize (vTfo ) );
684684 Vec_Wrd_t * vSims = Vec_WrdStart ( Gia_ManObjNum (p ) );
685685 Gia_Obj_t * pObj ; int i , Obj ;
686686 Vec_IntForEachEntry ( vIn0 , Obj , i )
687- Vec_WrdWriteEntry ( vSims , Obj , Vec_WrdEntry (vSim0 , i ) );
687+ Vec_WrdWriteEntry ( vSims , fLits ? Abc_Lit2Var ( Obj ) : Obj , ( fLits && Abc_LitIsCompl ( Obj )) ? ~ Vec_WrdEntry ( vSim0 , i ) : Vec_WrdEntry (vSim0 , i ) );
688688 Vec_IntForEachEntry ( vIn1 , Obj , i )
689- Vec_WrdWriteEntry ( vSims , Obj , Vec_WrdEntry (vSim1 , i ) );
689+ Vec_WrdWriteEntry ( vSims , fLits ? Abc_Lit2Var ( Obj ) : Obj , ( fLits && Abc_LitIsCompl ( Obj )) ? ~ Vec_WrdEntry ( vSim1 , i ) : Vec_WrdEntry (vSim1 , i ) );
690690 Gia_ManForEachObjVec ( vTfo , p , pObj , i ) {
691691 word Sim0 = Vec_WrdEntry (vSims , Gia_ObjFaninId0p (p , pObj ) );
692692 word Sim1 = Vec_WrdEntry (vSims , Gia_ObjFaninId1p (p , pObj ) );
@@ -697,17 +697,17 @@ Vec_Wrd_t * Gia_ManMulFindSimCone( Gia_Man_t * p, Vec_Int_t * vIn0, Vec_Int_t *
697697 Vec_WrdFree ( vSims );
698698 return vRes ;
699699}
700- int Gia_ManMulFindGetArg ( Vec_Wrd_t * vSim , int i , int fSigned )
700+ iword Gia_ManMulFindGetArg ( Vec_Wrd_t * vSim , int i , int fSigned )
701701{
702- int w , Res = 0 ; word Word = 0 ;
702+ int w ; iword Res = 0 ; word Word = 0 ;
703703 Vec_WrdForEachEntry ( vSim , Word , w )
704704 if ( (Word >> i ) & 1 )
705- Res |= (1 << w );
705+ Res |= (( iword ) 1 << w );
706706 if ( fSigned && ((Word >> i ) & 1 ) )
707- Res |= ~0 << Vec_WrdSize (vSim );
707+ Res |= ~( iword ) 0 << Vec_WrdSize (vSim );
708708 return Res ;
709709}
710- void Gia_ManMulFindSetArg ( Vec_Wrd_t * vSim , int i , int iNum )
710+ void Gia_ManMulFindSetArg ( Vec_Wrd_t * vSim , int i , iword iNum )
711711{
712712 int w ; word * pWords = Vec_WrdArray (vSim );
713713 for ( w = 0 ; w < Vec_WrdSize (vSim ); w ++ )
@@ -716,17 +716,17 @@ void Gia_ManMulFindSetArg( Vec_Wrd_t * vSim, int i, int iNum )
716716}
717717Vec_Wrd_t * Gia_ManMulFindSim ( Vec_Wrd_t * vSim0 , Vec_Wrd_t * vSim1 , int fSigned )
718718{
719- assert ( Vec_WrdSize (vSim0 ) + Vec_WrdSize (vSim1 ) <= 30 );
719+ assert ( Vec_WrdSize (vSim0 ) + Vec_WrdSize (vSim1 ) <= 62 );
720720 Vec_Wrd_t * vRes = Vec_WrdStart ( Vec_WrdSize (vSim0 ) + Vec_WrdSize (vSim1 ) );
721721 for ( int i = 0 ; i < 64 ; i ++ )
722722 {
723- int a = Gia_ManMulFindGetArg ( vSim0 , i , fSigned );
724- int b = Gia_ManMulFindGetArg ( vSim1 , i , fSigned );
723+ iword a = Gia_ManMulFindGetArg ( vSim0 , i , fSigned );
724+ iword b = Gia_ManMulFindGetArg ( vSim1 , i , fSigned );
725725 Gia_ManMulFindSetArg ( vRes , i , a * b );
726726 }
727727 return vRes ;
728728}
729- void Gia_ManMulFindOutputs ( Gia_Man_t * p , Vec_Wec_t * vTerms , int fVerbose )
729+ void Gia_ManMulFindOutputs ( Gia_Man_t * p , Vec_Wec_t * vTerms , int fLits , int fVerbose )
730730{
731731 Abc_Random (1 );
732732 for ( int m = 0 ; m < Vec_WecSize (vTerms )/3 ; m ++ ) {
@@ -737,8 +737,8 @@ void Gia_ManMulFindOutputs( Gia_Man_t * p, Vec_Wec_t * vTerms, int fVerbose )
737737 Vec_Wrd_t * vSim1 = Vec_WrdStartRandom ( Vec_IntSize (vIn1 ) );
738738 Vec_Wrd_t * vSimU = Gia_ManMulFindSim ( vSim0 , vSim1 , 0 );
739739 Vec_Wrd_t * vSimS = Gia_ManMulFindSim ( vSim0 , vSim1 , 1 );
740- Vec_Int_t * vTfo = Gia_ManMulFindTfo ( p , vIn0 , vIn1 );
741- Vec_Wrd_t * vSims = Gia_ManMulFindSimCone ( p , vIn0 , vIn1 , vSim0 , vSim1 , vTfo );
740+ Vec_Int_t * vTfo = Gia_ManMulFindTfo ( p , vIn0 , vIn1 , fLits );
741+ Vec_Wrd_t * vSims = Gia_ManMulFindSimCone ( p , vIn0 , vIn1 , vSim0 , vSim1 , vTfo , fLits );
742742 Vec_Int_t * vOutU = Vec_IntAlloc ( 100 );
743743 Vec_Int_t * vOutS = Vec_IntAlloc ( 100 );
744744 word Word ; int w , iPlace ;
@@ -814,7 +814,7 @@ Vec_Wec_t * Gia_ManMulFindA( Gia_Man_t * p, Vec_Wec_t * vCuts3, int fVerbose )
814814 Vec_Wec_t * vXors = Gia_ManMulFindXors ( p , vCuts3 , fVerbose );
815815 Vec_Wec_t * vTerms = Gia_ManMulFindAInputs2 ( p , fVerbose );
816816 if ( Vec_WecSize (vTerms ) )
817- Gia_ManMulFindOutputs ( p , vTerms , fVerbose );
817+ Gia_ManMulFindOutputs ( p , vTerms , 0 , fVerbose );
818818 Vec_WecFree ( vXors );
819819 return vTerms ;
820820}
@@ -824,7 +824,7 @@ Vec_Wec_t * Gia_ManMulFindB( Gia_Man_t * p, Vec_Wec_t * vCuts4, Vec_Wec_t * vCut
824824 if ( Vec_WecSize (vCuts4 ) && Vec_WecSize (vCuts5 ) )
825825 vTerms = Gia_ManMulFindBInputs2 ( p , vCuts4 , vCuts5 , fVerbose );
826826 if ( Vec_WecSize (vTerms ) )
827- Gia_ManMulFindOutputs ( p , vTerms , fVerbose );
827+ Gia_ManMulFindOutputs ( p , vTerms , 0 , fVerbose );
828828 return vTerms ;
829829}
830830void Gia_ManMulFindPrintSet ( Vec_Int_t * vSet , int fLit , int fSkipLast )
0 commit comments