33static word PMasks[5][3] = {
41static word Truth6[6] = {
49static word Truth7[7][2] = {
69 S[0] = (z & 0xffff) | ((z & 0xffff) << 16);
74 printf(
" %d", (
int)((z >> 16) & 7) );
75 printf(
" %d", (
int)((z >> 20) & 7) );
76 printf(
" %d", (
int)((z >> 24) & 7) );
77 printf(
" %d", (
int)((z >> 28) & 7) );
79 S[0] = ((z >> 32) & 0xffff) | (((z >> 32) & 0xffff) << 16);
84 printf(
" %d", (
int)((z >> 48) & 7) );
85 printf(
" %d", (
int)((z >> 52) & 7) );
86 printf(
" %d", (
int)((z >> 56) & 7) );
87 printf(
" %d", (
int)((z >> 60) & 7) );
92static word If_Dec6ComposeLut4(
int t,
word f[4] )
96 for ( m = 0; m < 16; m++ )
98 if ( !((t >> m) & 1) )
101 for ( v = 0; v < 4; v++ )
102 c &= ((m >> v) & 1) ? f[v] : ~f[v];
112 for ( i = 0; i < 4; i++ )
114 v = (z >> (16+(i<<2))) & 7;
120 q = If_Dec6ComposeLut4( (
int)(z & 0xffff), f );
121 for ( i = 0; i < 4; i++ )
123 v = (z >> (48+(i<<2))) & 7;
126 f[i] = (v == 7) ? q : Truth6[v];
128 r = If_Dec6ComposeLut4( (
int)((z >> 32) & 0xffff), f );
140 printf(
"Verification failed!\n" );
144static void If_Dec7ComposeLut4(
int t,
word f[4][2],
word r[2] )
149 for ( m = 0; m < 16; m++ )
151 if ( !((t >> m) & 1) )
153 c[0] = c[1] = ~(
word)0;
154 for ( v = 0; v < 4; v++ )
156 c[0] &= ((m >> v) & 1) ? f[v][0] : ~f[v][0];
157 c[1] &= ((m >> v) & 1) ? f[v][1] : ~f[v][1];
168 for ( i = 0; i < 4; i++ )
170 v = (z >> (16+(i<<2))) & 7;
171 f[i][0] = Truth7[v][0];
172 f[i][1] = Truth7[v][1];
174 If_Dec7ComposeLut4( (
int)(z & 0xffff), f, r );
177 for ( i = 0; i < 3; i++ )
179 v = (z >> (48+(i<<2))) & 7;
180 f[i][0] = Truth7[v][0];
181 f[i][1] = Truth7[v][1];
183 If_Dec7ComposeLut4( (
int)((z >> 32) & 0xffff), f, r );
184 if ( r[0] != t[0] || r[1] != t[1] )
189 printf(
"Verification failed!\n" );
195static inline int If_Dec6CofCount2(
word t )
198 for ( i = 0; i < 16; i++ )
199 Mask |= (1 << ((t >> (i<<2)) & 15));
200 return __builtin_popcount( Mask & 0xffff );
203static inline int If_Dec7CofCount3(
word t[2] )
205 unsigned char * pTruth = (
unsigned char *)t;
207 for ( i = 1; i < 16; i++ )
209 if ( pTruth[i] == pTruth[0] )
213 else if ( pTruth[i] != pTruth[iCof2] )
221static inline word If_Dec6SwapAdjacent(
word t,
int v )
224 return (t & PMasks[v][0]) | ((t & PMasks[v][1]) << (1 << v)) | ((t & PMasks[v][2]) >> (1 << v));
226static inline word If_Dec6MoveTo(
word t,
int v,
int p,
int Pla2Var[6],
int Var2Pla[6] )
228 int iPlace0, iPlace1;
230 while ( Var2Pla[v] !=
p )
232 iPlace0 = Var2Pla[v]-1;
233 iPlace1 = Var2Pla[v];
234 t = If_Dec6SwapAdjacent( t, iPlace0 );
235 Var2Pla[Pla2Var[iPlace0]]++;
236 Var2Pla[Pla2Var[iPlace1]]--;
237 Pla2Var[iPlace0] ^= Pla2Var[iPlace1];
238 Pla2Var[iPlace1] ^= Pla2Var[iPlace0];
239 Pla2Var[iPlace0] ^= Pla2Var[iPlace1];
246static inline void If_Dec7SwapAdjacent(
word t[2],
int v )
250 unsigned Temp = (t[0] >> 32);
251 t[0] = (t[0] & 0xFFFFFFFF) | ((t[1] & 0xFFFFFFFF) << 32);
252 t[1] ^= (t[1] & 0xFFFFFFFF) ^ Temp;
256 t[0] = If_Dec6SwapAdjacent( t[0], v );
257 t[1] = If_Dec6SwapAdjacent( t[1], v );
259static inline void If_Dec7MoveTo(
word t[2],
int v,
int p,
int Pla2Var[7],
int Var2Pla[7] )
261 int iPlace0, iPlace1;
263 while ( Var2Pla[v] !=
p )
265 iPlace0 = Var2Pla[v]-1;
266 iPlace1 = Var2Pla[v];
267 If_Dec7SwapAdjacent( t, iPlace0 );
268 Var2Pla[Pla2Var[iPlace0]]++;
269 Var2Pla[Pla2Var[iPlace1]]--;
270 Pla2Var[iPlace0] ^= Pla2Var[iPlace1];
271 Pla2Var[iPlace1] ^= Pla2Var[iPlace0];
272 Pla2Var[iPlace0] ^= Pla2Var[iPlace1];
278static inline int If_Dec6DeriveCount2(
word t,
int * pCof0,
int * pCof1 )
283 for ( i = 1; i < 16; i++ )
284 if ( *pCof0 != ((t >> (i<<2)) & 15) )
286 *pCof1 = ((t >> (i<<2)) & 15);
291static inline int If_Dec7DeriveCount3(
word t[2],
int * pCof0,
int * pCof1 )
293 unsigned char * pTruth = (
unsigned char *)t;
297 for ( i = 1; i < 16; i++ )
298 if ( *pCof0 != pTruth[i] )
307static inline word If_Dec6Cofactor(
word t,
int iVar,
int fCof1 )
309 assert( iVar >= 0 && iVar < 6 );
311 return (t & Truth6[iVar]) | ((t & Truth6[iVar]) >> (1<<iVar));
313 return (t &~Truth6[iVar]) | ((t &~Truth6[iVar]) << (1<<iVar));
315static word If_Dec6DeriveDisjoint(
word t,
int Pla2Var[6],
int Var2Pla[6] )
318 word z = If_Dec6DeriveCount2( t, &Cof0, &Cof1 );
319 for ( i = 0; i < 4; i++ )
320 z |= (((
word)Pla2Var[i+2]) << (16 + 4*i));
321 z |= ((
word)((Cof1 << 4) | Cof0) << 32);
322 z |= ((
word)((Cof1 << 4) | Cof0) << 40);
323 for ( i = 0; i < 2; i++ )
324 z |= (((
word)Pla2Var[i]) << (48 + 4*i));
325 z |= (((
word)7) << (48 + 4*i++));
329static word If_Dec6DeriveNonDisjoint(
word t,
int s,
int Pla2Var0[6],
int Var2Pla0[6] )
332 int Cof0[2], Cof1[2];
333 int Truth0, Truth1, i;
334 int Pla2Var[6], Var2Pla[6];
335 assert( s >= 2 && s <= 5 );
336 for ( i = 0; i < 6; i++ )
338 Pla2Var[i] = Pla2Var0[i];
339 Var2Pla[i] = Var2Pla0[i];
341 for ( i = s; i < 5; i++ )
343 t = If_Dec6SwapAdjacent( t, i );
344 Var2Pla[Pla2Var[i]]++;
345 Var2Pla[Pla2Var[i+1]]--;
346 Pla2Var[i] ^= Pla2Var[i+1];
347 Pla2Var[i+1] ^= Pla2Var[i];
348 Pla2Var[i] ^= Pla2Var[i+1];
350 c0 = If_Dec6Cofactor( t, 5, 0 );
351 c1 = If_Dec6Cofactor( t, 5, 1 );
352 assert( 2 >= If_Dec6CofCount2(c0) );
353 assert( 2 >= If_Dec6CofCount2(c1) );
354 Truth0 = If_Dec6DeriveCount2( c0, &Cof0[0], &Cof0[1] );
355 Truth1 = If_Dec6DeriveCount2( c1, &Cof1[0], &Cof1[1] );
356 z = ((Truth1 & 0xFF) << 8) | (Truth0 & 0xFF);
357 for ( i = 0; i < 4; i++ )
358 z |= (((
word)Pla2Var[i+2]) << (16 + 4*i));
359 z |= ((
word)((Cof0[1] << 4) | Cof0[0]) << 32);
360 z |= ((
word)((Cof1[1] << 4) | Cof1[0]) << 40);
361 for ( i = 0; i < 2; i++ )
362 z |= (((
word)Pla2Var[i]) << (48 + 4*i));
363 z |= (((
word)7) << (48 + 4*i++));
364 z |= (((
word)Pla2Var[5]) << (48 + 4*i++));
368static word If_Dec7DeriveDisjoint(
word t[2],
int Pla2Var[7],
int Var2Pla[7] )
371 word z = If_Dec7DeriveCount3( t, &Cof0, &Cof1 );
372 for ( i = 0; i < 4; i++ )
373 z |= (((
word)Pla2Var[i+3]) << (16 + 4*i));
374 z |= ((
word)((Cof1 << 8) | Cof0) << 32);
375 for ( i = 0; i < 3; i++ )
376 z |= (((
word)Pla2Var[i]) << (48 + 4*i));
377 z |= (((
word)7) << (48 + 4*i));
381static inline int If_Dec6CountOnes(
word t )
388 return (t &
ABC_CONST(0x00000000FFFFFFFF)) + (t>>32);
390static inline int If_Dec6HasVar(
word t,
int v )
392 return ((t & Truth6[v]) >> (1<<v)) != (t & ~Truth6[v]);
394static inline int If_Dec7HasVar(
word t[2],
int v )
396 assert( v >= 0 && v < 7 );
399 return ((t[0] & Truth6[v]) >> (1<<v)) != (t[0] & ~Truth6[v])
400 || ((t[1] & Truth6[v]) >> (1<<v)) != (t[1] & ~Truth6[v]);
403static inline void If_DecVerifyPerm(
int Pla2Var[6],
int Var2Pla[6] )
406 for ( i = 0; i < 6; i++ )
407 assert( Pla2Var[Var2Pla[i]] == i );
412 int i, v, u, x, Count, Pla2Var[6], Var2Pla[6];
414 for ( i = 0; i < 6; i++ )
416 assert( If_Dec6HasVar( t, i ) );
417 Pla2Var[i] = Var2Pla[i] = i;
421 for ( v = 0; v < 6; v++ )
422 for ( u = v+1; u < 6; u++, i++ )
424 t = If_Dec6MoveTo( t, v, 0, Pla2Var, Var2Pla );
425 t = If_Dec6MoveTo( t, u, 1, Pla2Var, Var2Pla );
427 Count = If_Dec6CofCount2( t );
430 return !fDerive ? 1 : If_Dec6DeriveDisjoint( t, Pla2Var, Var2Pla );
432 if ( !r && (Count == 3 || Count == 4) )
434 for ( x = 0; x < 4; x++ )
436 word c0 = If_Dec6Cofactor( t, x+2, 0 );
437 word c1 = If_Dec6Cofactor( t, x+2, 1 );
438 if ( If_Dec6CofCount2( c0 ) <= 2 && If_Dec6CofCount2( c1 ) <= 2 )
440 r = !fDerive ? 1 : If_Dec6DeriveNonDisjoint( t, x+2, Pla2Var, Var2Pla );
451 word t[2] = {t0[0], t0[1]};
452 int i, v, u, y, Pla2Var[7], Var2Pla[7];
454 for ( i = 0; i < 7; i++ )
462 Pla2Var[i] = Var2Pla[i] = i;
465 for ( v = 0; v < 7; v++ )
466 for ( u = v+1; u < 7; u++ )
467 for ( y = u+1; y < 7; y++ )
469 If_Dec7MoveTo( t, v, 0, Pla2Var, Var2Pla );
470 If_Dec7MoveTo( t, u, 1, Pla2Var, Var2Pla );
471 If_Dec7MoveTo( t, y, 2, Pla2Var, Var2Pla );
473 if ( If_Dec7CofCount3( t ) == 2 )
475 return !fDerive ? 1 : If_Dec7DeriveDisjoint( t, Pla2Var, Var2Pla );
483static inline int If_DecSuppIsMinBase(
int Supp )
485 return (Supp & (Supp+1)) == 0;
487static inline word If_Dec6TruthShrink(
word uTruth,
int nVars,
int nVarsAll,
unsigned Phase )
491 for ( i = 0; i < nVarsAll; i++ )
492 if ( Phase & (1 << i) )
494 for ( k = i-1; k >=
Var; k-- )
495 uTruth = If_Dec6SwapAdjacent( uTruth, k );
503 int v, iVar = 0, uSupp = 0;
505 for ( v = 0; v < nVarsAll; v++ )
506 if ( If_Dec6HasVar( uTruth, v ) )
510 pSupp[iVar] = pSupp[v];
515 if ( If_DecSuppIsMinBase( uSupp ) )
517 return If_Dec6TruthShrink( uTruth, iVar, nVarsAll, uSupp );
520static inline void If_Dec7TruthShrink(
word uTruth[2],
int nVars,
int nVarsAll,
unsigned Phase )
524 for ( i = 0; i < nVarsAll; i++ )
525 if ( Phase & (1 << i) )
527 for ( k = i-1; k >=
Var; k-- )
528 If_Dec7SwapAdjacent( uTruth, k );
535 int v, iVar = 0, uSupp = 0;
537 for ( v = 0; v < nVarsAll; v++ )
538 if ( If_Dec7HasVar( uTruth, v ) )
542 pSupp[iVar] = pSupp[v];
547 if ( If_DecSuppIsMinBase( uSupp ) )
549 If_Dec7TruthShrink( uTruth, iVar, nVarsAll, uSupp );
555static inline int If_Dec6SuppSize(
word t )
558 for ( v = 0; v < 6; v++ )
559 if ( If_Dec6Cofactor(t, v, 0) != If_Dec6Cofactor(t, v, 1) )
563static inline int If_Dec6CheckMux(
word t )
566 for ( v = 0; v < 6; v++ )
567 if ( If_Dec6SuppSize(If_Dec6Cofactor(t, v, 0)) < 5 &&
568 If_Dec6SuppSize(If_Dec6Cofactor(t, v, 1)) < 5 )
574static inline void If_Dec7Cofactor(
word t[2],
int iVar,
int fCof1,
word r[2] )
576 assert( iVar >= 0 && iVar < 7 );
588 r[0] = (t[0] & Truth6[iVar]) | ((t[0] & Truth6[iVar]) >> (1<<iVar));
589 r[1] = (t[1] & Truth6[iVar]) | ((t[1] & Truth6[iVar]) >> (1<<iVar));
593 r[0] = (t[0] &~Truth6[iVar]) | ((t[0] &~Truth6[iVar]) << (1<<iVar));
594 r[1] = (t[1] &~Truth6[iVar]) | ((t[1] &~Truth6[iVar]) << (1<<iVar));
598static inline int If_Dec7SuppSize(
word t[2] )
602 for ( v = 0; v < 7; v++ )
604 If_Dec7Cofactor( t, v, 0, c0 );
605 If_Dec7Cofactor( t, v, 1, c1 );
606 if ( c0[0] != c1[0] || c0[1] != c1[1] )
611static inline int If_Dec7CheckMux(
word t[2] )
615 for ( v = 0; v < 7; v++ )
617 If_Dec7Cofactor( t, v, 0, c0 );
618 If_Dec7Cofactor( t, v, 1, c1 );
619 if ( If_Dec7SuppSize(c0) < 5 && If_Dec7SuppSize(c1) < 5 )
628 int v, vBest = -1, Count0, Count1, CountBest = 1000;
629 for ( v = 0; v < 6; v++ )
631 Count0 = If_Dec6SuppSize( If_Dec6Cofactor(t, v, 0) );
632 Count1 = If_Dec6SuppSize( If_Dec6Cofactor(t, v, 1) );
633 if ( Count0 < 5 && Count1 < 5 && CountBest > Count0 + Count1 )
635 CountBest = Count0 + Count1;
637 Cofs[0] = If_Dec6Cofactor(t, v, 0);
638 Cofs[1] = If_Dec6Cofactor(t, v, 1);
646 int v, vBest = -1, Count0, Count1, CountBest = 1000;
647 for ( v = 0; v < 7; v++ )
649 If_Dec7Cofactor( t, v, 0, c0 );
650 If_Dec7Cofactor( t, v, 1, c1 );
651 Count0 = If_Dec7SuppSize(c0);
652 Count1 = If_Dec7SuppSize(c1);
653 if ( Count0 < 5 && Count1 < 5 && CountBest > Count0 + Count1 )
655 CountBest = Count0 + Count1;
657 c0r[0] = c0[0]; c0r[1] = c0[1];
658 c1r[0] = c1[0]; c1r[1] = c1[1];
678static inline word If_Dec5CofCount2(
word t,
int x,
int y,
int * Pla2Var,
word t0,
int fDerive )
681 assert( x >= 0 && x < 4 );
682 assert( y >= 0 && y < 4 );
683 for ( m = 0; m < 4; m++ )
685 for ( Mask = i = 0; i < 16; i++ )
686 if ( ((i >> x) & 1) == ((m >> 0) & 1) && ((i >> y) & 1) == ((m >> 1) & 1) )
687 Mask |= (1 << ((t >> (i<<1)) & 3));
688 if ( __builtin_popcount( Mask & 0xF ) > 2 )
700 word C2[4], D2[4] = {0}, C1[2], D1[2], C, D, z;
701 int v, zz1 = -1, zz2 = -1;
703 for ( v = 0; v < 4; v++ )
704 if ( v != x && v != y )
706 for ( v = 1; v < 4; v++ )
707 if ( v != x && v != y && v != zz1 )
709 assert( zz1 != -1 && zz2 != -1 );
711 for ( m = 0; m < 4; m++ )
714 for ( Mask = i = 0; i < 16; i++ )
715 if ( ((i >> x) & 1) == ((m >> 0) & 1) && ((i >> y) & 1) == ((m >> 1) & 1) )
716 Mask |= (1 << ((t >> (i<<1)) & 3));
718 if ( __builtin_popcount( Mask & 0xF ) == 1 )
720 C2[m] = F[Abc_Tt6FirstBit( Mask )];
723 else if ( __builtin_popcount( Mask & 0xF ) == 2 )
725 int Bit0 = Abc_Tt6FirstBit( Mask );
726 int Bit1 = Abc_Tt6FirstBit( Mask ^ (((
word)1)<<Bit0) );
727 C2[m] = (F[Bit1] & Truth6[1]) | (F[Bit0] & ~Truth6[1]);
729 for ( Mask = i = 0; i < 16; i++ )
730 if ( ((i >> x) & 1) == ((m >> 0) & 1) && ((i >> y) & 1) == ((m >> 1) & 1) )
731 if ( Bit1 == ((t >> (i<<1)) & 3) )
732 D2[m] |= (((
word)1) << ( (((i >> zz2) & 1) << 1) | ((i >> zz1) & 1) ));
735 D2[m] = Abc_Tt6Stretch( D2[m], 2 );
739 C1[0] = (C2[1] & Truth6[2]) | (C2[0] & ~Truth6[2]);
740 C1[1] = (C2[3] & Truth6[2]) | (C2[2] & ~Truth6[2]);
741 C = (C1[1] & Truth6[3]) | (C1[0] & ~Truth6[3]);
744 D1[0] = (D2[1] & Truth6[2]) | (D2[0] & ~Truth6[2]);
745 D1[1] = (D2[3] & Truth6[2]) | (D2[2] & ~Truth6[2]);
746 D = (D1[1] & Truth6[3]) | (D1[0] & ~Truth6[3]);
754 fHas2 = Abc_TtHasVar(&D, 5, 2);
755 fHas3 = Abc_TtHasVar(&D, 5, 3);
756 if ( fHas2 && fHas3 )
759 z |= (((
word)Pla2Var[zz1+1]) << (16 + 4*0));
760 z |= (((
word)Pla2Var[zz2+1]) << (16 + 4*1));
761 z |= (((
word)Pla2Var[x+1]) << (16 + 4*2));
762 z |= (((
word)Pla2Var[y+1]) << (16 + 4*3));
764 else if ( fHas2 && !fHas3 )
767 z |= (((
word)Pla2Var[zz1+1]) << (16 + 4*0));
768 z |= (((
word)Pla2Var[zz2+1]) << (16 + 4*1));
769 z |= (((
word)Pla2Var[x+1]) << (16 + 4*2));
770 z |= (((
word)6) << (16 + 4*3));
772 else if ( !fHas2 && fHas3 )
774 Abc_TtSwapVars( &D, 5, 2, 3 );
776 z |= (((
word)Pla2Var[zz1+1]) << (16 + 4*0));
777 z |= (((
word)Pla2Var[zz2+1]) << (16 + 4*1));
778 z |= (((
word)Pla2Var[y+1]) << (16 + 4*2));
779 z |= (((
word)6) << (16 + 4*3));
784 z |= (((
word)Pla2Var[zz1+1]) << (16 + 4*0));
785 z |= (((
word)Pla2Var[zz2+1]) << (16 + 4*1));
786 z |= (((
word)6) << (16 + 4*2));
787 z |= (((
word)6) << (16 + 4*3));
791 fHas2 = Abc_TtHasVar(&C, 5, 2);
792 fHas3 = Abc_TtHasVar(&C, 5, 3);
793 if ( fHas2 && fHas3 )
795 z |= ((C & 0xFFFF) << 32);
796 z |= (((
word)Pla2Var[0]) << (48 + 4*0));
797 z |= (((
word)7) << (48 + 4*1));
798 z |= (((
word)Pla2Var[x+1]) << (48 + 4*2));
799 z |= (((
word)Pla2Var[y+1]) << (48 + 4*3));
801 else if ( fHas2 && !fHas3 )
803 z |= ((C & 0xFFFF) << 32);
804 z |= (((
word)Pla2Var[0]) << (48 + 4*0));
805 z |= (((
word)7) << (48 + 4*1));
806 z |= (((
word)Pla2Var[x+1]) << (48 + 4*2));
807 z |= (((
word)6) << (48 + 4*3));
809 else if ( !fHas2 && fHas3 )
811 Abc_TtSwapVars( &C, 5, 2, 3 );
812 z |= ((C & 0xFFFF) << 32);
813 z |= (((
word)Pla2Var[0]) << (48 + 4*0));
814 z |= (((
word)7) << (48 + 4*1));
815 z |= (((
word)Pla2Var[y+1]) << (48 + 4*2));
816 z |= (((
word)6) << (48 + 4*3));
820 z |= ((C & 0xFFFF) << 32);
821 z |= (((
word)Pla2Var[0]) << (48 + 4*0));
822 z |= (((
word)7) << (48 + 4*1));
823 z |= (((
word)6) << (48 + 4*2));
824 z |= (((
word)6) << (48 + 4*3));
859 int Pla2Var[7], Var2Pla[7];
903 for ( i = 0; i < 7; i++ )
904 Pla2Var[i] = Var2Pla[i] = i;
906 for ( v = 0; v < 5; v++ )
908 t = If_Dec6MoveTo( t, v, 0, Pla2Var, Var2Pla );
909 If_DecVerifyPerm( Pla2Var, Var2Pla );
910 for ( i = 0; i < 4; i++ )
911 for ( j = i + 1; j < 4; j++ )
913 word z = If_Dec5CofCount2( t, i, j, Pla2Var, t0, fDerive );
979 z = (
word)(0x17ac & 0xFFFF);
980 z |= (((
word)3) << (16 + 4*0));
981 z |= (((
word)4) << (16 + 4*1));
982 z |= (((
word)1) << (16 + 4*2));
983 z |= (((
word)2) << (16 + 4*3));
985 z |= (((
word)(0x179a & 0xFFFF)) << 32);
986 z |= (((
word)0) << (48 + 4*0));
987 z |= (((
word)7) << (48 + 4*1));
988 z |= (((
word)1) << (48 + 4*2));
989 z |= (((
word)2) << (48 + 4*3));
1039 t[0] = ((
word *)pTruth)[0];
1040 t[1] = ((
word *)pTruth)[1];
1065 for ( v = 0; v < nLeaves; v++ )
1066 if ( !Abc_TtHasVar( (
word *)pTruth, nVars, v ) )
1095 t[0] = ((
word *)pTruth)[0];
1096 t[1] = ((
word *)pTruth)[1];
1121 if ( nLeaves < nVars )
1123 assert( nLeaves == nVars );
1124 if ( Abc_Tt6Check1( ((
word *)pTruth)[0], nLeaves ) )
1130 if ( nLeaves < nVars )
1132 assert( nLeaves == nVars );
1133 if ( Abc_Tt6Check2( ((
word *)pTruth)[0], nLeaves ) )
#define ABC_CONST(number)
PARAMETERS ///.
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void If_Dec7Verify(word t[2], word z)
int If_MatchCheck1(If_Man_t *p, unsigned *pTruth, int nVars, int nLeaves, char *pStr)
int If_Dec7PickBestMux(word t[2], word c0r[2], word c1r[2])
int If_Dec6PickBestMux(word t, word Cofs[2])
word If_Dec6Perform(word t, int fDerive)
void If_Dec6Verify(word t, word z)
int If_MatchCheck2(If_Man_t *p, unsigned *pTruth, int nVars, int nLeaves, char *pStr)
int If_CutPerformCheck07(If_Man_t *p, unsigned *pTruth, int nVars, int nLeaves, char *pStr)
word If_Dec6Truth(word z)
word If_CutPerformDerive07(If_Man_t *p, unsigned *pTruth, int nVars, int nLeaves, char *pStr)
word If_Dec7Perform(word t0[2], int fDerive)
void Kit_DsdPrintFromTruth(unsigned *pTruth, int nVars)
void Extra_PrintBinary(FILE *pFile, unsigned Sign[], int nBits)
void If_DecPrintConfig(word z)
FUNCTION DEFINITIONS ///.
word If_Dec6MinimumBase(word uTruth, int *pSupp, int nVarsAll, int *pnVars)
word If_Dec5Perform(word t, int fDerive)
void If_Dec5PerformTest()
void If_Dec7MinimumBase(word uTruth[2], int *pSupp, int nVarsAll, int *pnVars)
struct If_Man_t_ If_Man_t
BASIC TYPES ///.
unsigned __int64 word
DECLARATIONS ///.