256 static int s_FPrimes[128] = {
257 1009, 1049, 1093, 1151, 1201, 1249, 1297, 1361, 1427, 1459,
258 1499, 1559, 1607, 1657, 1709, 1759, 1823, 1877, 1933, 1997,
259 2039, 2089, 2141, 2213, 2269, 2311, 2371, 2411, 2467, 2543,
260 2609, 2663, 2699, 2741, 2797, 2851, 2909, 2969, 3037, 3089,
261 3169, 3221, 3299, 3331, 3389, 3461, 3517, 3557, 3613, 3671,
262 3719, 3779, 3847, 3907, 3943, 4013, 4073, 4129, 4201, 4243,
263 4289, 4363, 4441, 4493, 4549, 4621, 4663, 4729, 4793, 4871,
264 4933, 4973, 5021, 5087, 5153, 5227, 5281, 5351, 5417, 5471,
265 5519, 5573, 5651, 5693, 5749, 5821, 5861, 5923, 6011, 6073,
266 6131, 6199, 6257, 6301, 6353, 6397, 6481, 6563, 6619, 6689,
267 6737, 6803, 6863, 6917, 6977, 7027, 7109, 7187, 7237, 7309,
268 7393, 7477, 7523, 7561, 7607, 7681, 7727, 7817, 7877, 7933,
269 8011, 8039, 8059, 8081, 8093, 8111, 8123, 8147
274 for ( i = 0; i <
nWords; i++ )
275 uHash ^= pState[i] * s_FPrimes[i & 0x7F];
276 return uHash % nTableSize;
507 unsigned * pTemp, * pStates = (
unsigned *)Vec_PtrPop( vStates );
508 int i, w, nZeros, nConsts, nStateWords;
510 nStateWords = Abc_BitWordNum( 2*nRegs );
511 memset( pStates, 0,
sizeof(
int) * nStateWords );
513 for ( w = 0; w < nStateWords; w++ )
514 pStates[w] |= pTemp[w];
517 for ( i = 0; i < nRegs; i++ )
518 if ( Gia_ManTerSimInfoGet(pStates, i) ==
GIA_ZER )
520 printf(
"Found %d constant registers.\n", nZeros );
522 memset( pStates, 0,
sizeof(
int) * nStateWords );
524 for ( w = 0; w < nStateWords; w++ )
525 pStates[w] |= (~(pTemp[w] ^ (pTemp[w] >> 1)) & 0x55555555);
528 for ( i = 0; i < nRegs; i++ )
529 if ( Gia_ManTerSimInfoGet(pStates, i) == 0 )
531 printf(
"Found %d non-ternary registers.\n", nConsts );
533 Vec_PtrPush( vStates, pStates );
632 int i, iRepr, nFlopWords, Counter0 = 0, CounterE = 0;
633 nFlopWords = Abc_BitWordNum( 2*Vec_PtrSize(
p->vStates) );
635 pCi2Lit =
ABC_FALLOC(
int, Gia_ManCiNum(
p->pAig) );
636 vMapKtoI = Vec_IntAlloc( 100 );
637 for ( i = 0; i < Gia_ManRegNum(
p->pAig); i++ )
638 if (
p->pCount0[i] == Vec_PtrSize(
p->vStates) )
639 pCi2Lit[Gia_ManPiNum(
p->pAig)+i] = 0, Counter0++;
640 else if (
p->pCountX[i] == 0 )
643 Vec_IntPush( vMapKtoI, i );
646 pObj = Gia_ManCi(
p->pAig, Gia_ManPiNum(
p->pAig)+Vec_IntEntry(vMapKtoI, iRepr) );
647 pCi2Lit[Gia_ManPiNum(
p->pAig)+i] = Abc_Var2Lit( Gia_ObjId(
p->pAig, pObj ), 0 );
650 Vec_IntFree( vMapKtoI );
652 printf(
"Transforming %d const and %d equiv registers.\n", Counter0, CounterE );