46static inline int Aig_Word6CountOnes(
word t ) {
return Aig_WordCountOnes( (
unsigned)(t >> 32) ) + Aig_WordCountOnes( (
unsigned)(t & 0xFFFFFFFF) ); }
47static inline int Aig_Word6HasOneBit(
word t ) {
return (t & (t-1)) == 0; }
70 p->vSigns = Vec_WrdStart( Aig_ManObjNumMax(pAig) );
71 p->vPiPats = Vec_WrdStart( Aig_ManCiNum(pAig) );
72 p->vPiCare = Vec_WrdStart( Aig_ManCiNum(pAig) );
93 Total += Aig_Word6CountOnes( Vec_WrdEntry(
p->vPiCare, i) );
115 Sign = Vec_WrdEntry(
p->vPiCare, i );
137 printf(
"Patterns: " );
138 printf(
"Total = %6d. ",
p->nPatTotal );
139 printf(
"Skipped = %6d. ",
p->nPatSkip );
142 Vec_WrdFree(
p->vSigns );
143 Vec_WrdFree(
p->vPiPats );
144 Vec_WrdFree(
p->vPiCare );
167 Vec_WrdWriteEntry(
p->vPiPats, i, Sign << 1 );
185 word Sign, Sign0, Sign1;
188 Vec_WrdWriteEntry(
p->vSigns, 0, ~(
word)0 );
191 Vec_WrdWriteEntry(
p->vSigns, Aig_ObjId(pObj), Vec_WrdEntry(
p->vPiPats, i) );
195 Sign0 = Vec_WrdEntry(
p->vSigns, Aig_ObjFaninId0(pObj) );
196 Sign1 = Vec_WrdEntry(
p->vSigns, Aig_ObjFaninId1(pObj) );
197 if ( Aig_ObjFaninC0(pObj) && Aig_ObjFaninC1(pObj) )
198 Sign = ~(Sign0 | Sign1);
199 else if ( Aig_ObjFaninC0(pObj) )
200 Sign = ~Sign0 & Sign1;
201 else if ( Aig_ObjFaninC1(pObj) )
202 Sign = Sign0 & ~Sign1;
204 Sign = Sign0 & Sign1;
205 Vec_WrdWriteEntry(
p->vSigns, Aig_ObjId(pObj), Sign );
210 Sign0 = Vec_WrdEntry(
p->vSigns, Aig_ObjFaninId0(pObj) );
211 Sign = Aig_ObjFaninC0(pObj) ? ~Sign0 : Sign0;
212 Vec_WrdWriteEntry(
p->vSigns, Aig_ObjId(pObj), Sign );
231 int i, Total, Count, Counts[33] = {0};
234 Sign = Vec_WrdEntry(
p->vSigns, Aig_ObjId(pObj) );
235 Count = Aig_Word6CountOnes( Sign );
242 for ( i = 0; i <= 32; i++ )
245 printf(
"%2d : ", i );
246 printf(
"%6d ", Counts[i] );
247 printf(
"%6.1f %%", 100.0*Counts[i]/Aig_ManNodeNum(
p->pAig) );
248 printf(
"%6.1f %%", 100.0*Total/Aig_ManNodeNum(
p->pAig) );
270 vNodes = Vec_IntAlloc( 1000 );
273 Sign = Vec_WrdEntry(
p->vSigns, Aig_ObjId(pObj) );
274 if ( Sign == 0 || ~Sign == 0 || Aig_Word6HasOneBit(Sign) || Aig_Word6HasOneBit(~Sign) )
275 Vec_IntPush( vNodes, Aig_ObjId(pObj) );
294 word * pInfo, * pPres;
298 pInfo = Vec_WrdEntryP(
p->vPiPats, Abc_Lit2Var(Lit) );
299 pPres = Vec_WrdEntryP(
p->vPiCare, Abc_Lit2Var(Lit) );
300 if ( Abc_InfoHasBit( (
unsigned *)pPres, iBit ) &&
301 Abc_InfoHasBit( (
unsigned *)pInfo, iBit ) == Abc_LitIsCompl(Lit) )
306 pInfo = Vec_WrdEntryP(
p->vPiPats, Abc_Lit2Var(Lit) );
307 pPres = Vec_WrdEntryP(
p->vPiCare, Abc_Lit2Var(Lit) );
308 Abc_InfoSetBit( (
unsigned *)pPres, iBit );
309 if ( Abc_InfoHasBit( (
unsigned *)pInfo, iBit ) == Abc_LitIsCompl(Lit) )
310 Abc_InfoXorBit( (
unsigned *)pInfo, iBit );
329 for ( k = 1; k < 64; k++ )
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
struct Aig_ManPack_t_ Aig_ManPack_t
Aig_ManPack_t * Aig_ManPackAlloc(Aig_Man_t *pAig)
FUNCTION DEFINITIONS ///.
void Aig_ManPackSetRandom(Aig_ManPack_t *p)
Vec_Int_t * Aig_ManPackConstNodes(Aig_ManPack_t *p)
void Aig_ManPackPrintCare(Aig_ManPack_t *p)
void Aig_ManPackStop(Aig_ManPack_t *p)
void Aig_ManPackPrintStats(Aig_ManPack_t *p)
int Aig_ManPackCountCares(Aig_ManPack_t *p)
Aig_ManPack_t * Aig_ManPackStart(Aig_Man_t *pAig)
void Aig_ManPackFree(Aig_ManPack_t *p)
void Aig_ManPackAddPattern(Aig_ManPack_t *p, Vec_Int_t *vLits)
int Aig_ManPackAddPatternTry(Aig_ManPack_t *p, int iBit, Vec_Int_t *vLits)
void Aig_ManPackSimulate(Aig_ManPack_t *p)
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
struct Aig_Obj_t_ Aig_Obj_t
#define Aig_ManForEachNode(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
#define Aig_ManForEachCo(p, pObj, i)
unsigned Aig_ManRandom(int fReset)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
unsigned __int64 word
DECLARATIONS ///.
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wrd_t_ Vec_Wrd_t
INCLUDES ///.