43 { 0x33333333, 0xAAAAAAAA },
44 { 0x55555555, 0xCCCCCCCC },
45 { 0x0F0F0F0F, 0xF0F0F0F0 },
46 { 0x00FF00FF, 0xFF00FF00 },
47 { 0x0000FFFF, 0xFFFF0000 }
83 for ( i = 0; i < nVars; i++ )
87 for ( k = 0; k <
nWords; k++ )
92 for ( k = 0; k <
nWords; k++ )
93 if ( k & (1 << (i-5)) )
94 pRes[i][k] = ~(
unsigned)0;
116 static unsigned PMasks[4][3] = {
117 { 0x99999999, 0x22222222, 0x44444444 },
118 { 0xC3C3C3C3, 0x0C0C0C0C, 0x30303030 },
119 { 0xF00FF00F, 0x00F000F0, 0x0F000F00 },
120 { 0xFF0000FF, 0x0000FF00, 0x00FF0000 }
123 int i, k, Step, Shift;
125 assert( iVar < nVars - 1 );
129 for ( i = 0; i <
nWords; i++ )
130 pOut[i] = (pIn[i] & PMasks[iVar][0]) | ((pIn[i] & PMasks[iVar][1]) << Shift) | ((pIn[i] & PMasks[iVar][2]) >> Shift);
134 Step = (1 << (iVar - 5));
135 for ( k = 0; k <
nWords; k += 4*Step )
137 for ( i = 0; i < Step; i++ )
139 for ( i = 0; i < Step; i++ )
140 pOut[Step+i] = pIn[2*Step+i];
141 for ( i = 0; i < Step; i++ )
142 pOut[2*Step+i] = pIn[Step+i];
143 for ( i = 0; i < Step; i++ )
144 pOut[3*Step+i] = pIn[3*Step+i];
151 for ( i = 0; i <
nWords; i += 2 )
153 pOut[i] = (pIn[i] & 0x0000FFFF) | ((pIn[i+1] & 0x0000FFFF) << 16);
154 pOut[i+1] = (pIn[i+1] & 0xFFFF0000) | ((pIn[i] & 0xFFFF0000) >> 16);
173 int nWords = (nVars <= 5)? 1 : (1 << (nVars-5));
176 assert( Start < nVars - 1 );
180 for ( i = 0; i <
nWords; i++ )
181 pOut[i] = (pIn[i] & 0x99999999) | ((pIn[i] & 0x22222222) << 1) | ((pIn[i] & 0x44444444) >> 1);
184 for ( i = 0; i <
nWords; i++ )
185 pOut[i] = (pIn[i] & 0xC3C3C3C3) | ((pIn[i] & 0x0C0C0C0C) << 2) | ((pIn[i] & 0x30303030) >> 2);
188 for ( i = 0; i <
nWords; i++ )
189 pOut[i] = (pIn[i] & 0xF00FF00F) | ((pIn[i] & 0x00F000F0) << 4) | ((pIn[i] & 0x0F000F00) >> 4);
192 for ( i = 0; i <
nWords; i++ )
193 pOut[i] = (pIn[i] & 0xFF0000FF) | ((pIn[i] & 0x0000FF00) << 8) | ((pIn[i] & 0x00FF0000) >> 8);
196 for ( i = 0; i <
nWords; i += 2 )
198 pOut[i] = (pIn[i] & 0x0000FFFF) | ((pIn[i+1] & 0x0000FFFF) << 16);
199 pOut[i+1] = (pIn[i+1] & 0xFFFF0000) | ((pIn[i] & 0xFFFF0000) >> 16);
203 Step = (1 << (Start - 5));
204 for ( k = 0; k <
nWords; k += 4*Step )
206 for ( i = 0; i < Step; i++ )
208 for ( i = 0; i < Step; i++ )
209 pOut[Step+i] = pIn[2*Step+i];
210 for ( i = 0; i < Step; i++ )
211 pOut[2*Step+i] = pIn[Step+i];
212 for ( i = 0; i < Step; i++ )
213 pOut[3*Step+i] = pIn[3*Step+i];
238 for ( i = nVarsAll - 1; i >= 0; i-- )
239 if ( Phase & (1 << i) )
241 for ( k = Var; k < i; k++ )
244 pTemp = pIn; pIn = pOut; pOut = pTemp;
251 if ( !(Counter & 1) )
268 void Extra_TruthShrink(
unsigned * pOut,
unsigned * pIn,
int nVars,
int nVarsAll,
unsigned Phase )
272 for ( i = 0; i < nVarsAll; i++ )
273 if ( Phase & (1 << i) )
275 for ( k = i-1; k >=
Var; k-- )
278 pTemp = pIn; pIn = pOut; pOut = pTemp;
310 for ( i = 0; i <
nWords; i++ )
311 if ( (pTruth[i] & 0x55555555) != ((pTruth[i] & 0xAAAAAAAA) >> 1) )
315 for ( i = 0; i <
nWords; i++ )
316 if ( (pTruth[i] & 0x33333333) != ((pTruth[i] & 0xCCCCCCCC) >> 2) )
320 for ( i = 0; i <
nWords; i++ )
321 if ( (pTruth[i] & 0x0F0F0F0F) != ((pTruth[i] & 0xF0F0F0F0) >> 4) )
325 for ( i = 0; i <
nWords; i++ )
326 if ( (pTruth[i] & 0x00FF00FF) != ((pTruth[i] & 0xFF00FF00) >> 8) )
330 for ( i = 0; i <
nWords; i++ )
331 if ( (pTruth[i] & 0x0000FFFF) != ((pTruth[i] & 0xFFFF0000) >> 16) )
335 Step = (1 << (iVar - 5));
336 for ( k = 0; k <
nWords; k += 2*Step )
338 for ( i = 0; i < Step; i++ )
339 if ( pTruth[i] != pTruth[Step+i] )
361 for ( i = 0; i < nVars; i++ )
380 for ( i = 0; i < nVars; i++ )
408 for ( i = 0; i <
nWords; i++ )
409 pTruth[i] = (pTruth[i] & 0xAAAAAAAA) | ((pTruth[i] & 0xAAAAAAAA) >> 1);
412 for ( i = 0; i <
nWords; i++ )
413 pTruth[i] = (pTruth[i] & 0xCCCCCCCC) | ((pTruth[i] & 0xCCCCCCCC) >> 2);
416 for ( i = 0; i <
nWords; i++ )
417 pTruth[i] = (pTruth[i] & 0xF0F0F0F0) | ((pTruth[i] & 0xF0F0F0F0) >> 4);
420 for ( i = 0; i <
nWords; i++ )
421 pTruth[i] = (pTruth[i] & 0xFF00FF00) | ((pTruth[i] & 0xFF00FF00) >> 8);
424 for ( i = 0; i <
nWords; i++ )
425 pTruth[i] = (pTruth[i] & 0xFFFF0000) | ((pTruth[i] & 0xFFFF0000) >> 16);
428 Step = (1 << (iVar - 5));
429 for ( k = 0; k <
nWords; k += 2*Step )
431 for ( i = 0; i < Step; i++ )
432 pTruth[i] = pTruth[Step+i];
459 for ( i = 0; i <
nWords; i++ )
460 pTruth[i] = (pTruth[i] & 0x55555555) | ((pTruth[i] & 0x55555555) << 1);
463 for ( i = 0; i <
nWords; i++ )
464 pTruth[i] = (pTruth[i] & 0x33333333) | ((pTruth[i] & 0x33333333) << 2);
467 for ( i = 0; i <
nWords; i++ )
468 pTruth[i] = (pTruth[i] & 0x0F0F0F0F) | ((pTruth[i] & 0x0F0F0F0F) << 4);
471 for ( i = 0; i <
nWords; i++ )
472 pTruth[i] = (pTruth[i] & 0x00FF00FF) | ((pTruth[i] & 0x00FF00FF) << 8);
475 for ( i = 0; i <
nWords; i++ )
476 pTruth[i] = (pTruth[i] & 0x0000FFFF) | ((pTruth[i] & 0x0000FFFF) << 16);
479 Step = (1 << (iVar - 5));
480 for ( k = 0; k <
nWords; k += 2*Step )
482 for ( i = 0; i < Step; i++ )
483 pTruth[Step+i] = pTruth[i];
511 for ( i = 0; i <
nWords; i++ )
512 pTruth[i] |= ((pTruth[i] & 0xAAAAAAAA) >> 1) | ((pTruth[i] & 0x55555555) << 1);
515 for ( i = 0; i <
nWords; i++ )
516 pTruth[i] |= ((pTruth[i] & 0xCCCCCCCC) >> 2) | ((pTruth[i] & 0x33333333) << 2);
519 for ( i = 0; i <
nWords; i++ )
520 pTruth[i] |= ((pTruth[i] & 0xF0F0F0F0) >> 4) | ((pTruth[i] & 0x0F0F0F0F) << 4);
523 for ( i = 0; i <
nWords; i++ )
524 pTruth[i] |= ((pTruth[i] & 0xFF00FF00) >> 8) | ((pTruth[i] & 0x00FF00FF) << 8);
527 for ( i = 0; i <
nWords; i++ )
528 pTruth[i] |= ((pTruth[i] & 0xFFFF0000) >> 16) | ((pTruth[i] & 0x0000FFFF) << 16);
531 Step = (1 << (iVar - 5));
532 for ( k = 0; k <
nWords; k += 2*Step )
534 for ( i = 0; i < Step; i++ )
536 pTruth[i] |= pTruth[Step+i];
537 pTruth[Step+i] = pTruth[i];
565 for ( i = 0; i <
nWords; i++ )
566 pTruth[i] &= ((pTruth[i] & 0xAAAAAAAA) >> 1) | ((pTruth[i] & 0x55555555) << 1);
569 for ( i = 0; i <
nWords; i++ )
570 pTruth[i] &= ((pTruth[i] & 0xCCCCCCCC) >> 2) | ((pTruth[i] & 0x33333333) << 2);
573 for ( i = 0; i <
nWords; i++ )
574 pTruth[i] &= ((pTruth[i] & 0xF0F0F0F0) >> 4) | ((pTruth[i] & 0x0F0F0F0F) << 4);
577 for ( i = 0; i <
nWords; i++ )
578 pTruth[i] &= ((pTruth[i] & 0xFF00FF00) >> 8) | ((pTruth[i] & 0x00FF00FF) << 8);
581 for ( i = 0; i <
nWords; i++ )
582 pTruth[i] &= ((pTruth[i] & 0xFFFF0000) >> 16) | ((pTruth[i] & 0x0000FFFF) << 16);
585 Step = (1 << (iVar - 5));
586 for ( k = 0; k <
nWords; k += 2*Step )
588 for ( i = 0; i < Step; i++ )
590 pTruth[i] &= pTruth[Step+i];
591 pTruth[Step+i] = pTruth[i];
611 void Extra_TruthMux(
unsigned * pOut,
unsigned * pCof0,
unsigned * pCof1,
int nVars,
int iVar )
620 for ( i = 0; i <
nWords; i++ )
621 pOut[i] = (pCof0[i] & 0x55555555) | (pCof1[i] & 0xAAAAAAAA);
624 for ( i = 0; i <
nWords; i++ )
625 pOut[i] = (pCof0[i] & 0x33333333) | (pCof1[i] & 0xCCCCCCCC);
628 for ( i = 0; i <
nWords; i++ )
629 pOut[i] = (pCof0[i] & 0x0F0F0F0F) | (pCof1[i] & 0xF0F0F0F0);
632 for ( i = 0; i <
nWords; i++ )
633 pOut[i] = (pCof0[i] & 0x00FF00FF) | (pCof1[i] & 0xFF00FF00);
636 for ( i = 0; i <
nWords; i++ )
637 pOut[i] = (pCof0[i] & 0x0000FFFF) | (pCof1[i] & 0xFFFF0000);
640 Step = (1 << (iVar - 5));
641 for ( k = 0; k <
nWords; k += 2*Step )
643 for ( i = 0; i < Step; i++ )
646 pOut[Step+i] = pCof1[Step+i];
667 static unsigned uTemp0[16], uTemp1[16];
694 static unsigned uTemp0[16], uTemp1[16];
729 for ( i = 0; i <
nWords; i++ )
730 pTruth[i] = ((pTruth[i] & 0x55555555) << 1) | ((pTruth[i] & 0xAAAAAAAA) >> 1);
733 for ( i = 0; i <
nWords; i++ )
734 pTruth[i] = ((pTruth[i] & 0x33333333) << 2) | ((pTruth[i] & 0xCCCCCCCC) >> 2);
737 for ( i = 0; i <
nWords; i++ )
738 pTruth[i] = ((pTruth[i] & 0x0F0F0F0F) << 4) | ((pTruth[i] & 0xF0F0F0F0) >> 4);
741 for ( i = 0; i <
nWords; i++ )
742 pTruth[i] = ((pTruth[i] & 0x00FF00FF) << 8) | ((pTruth[i] & 0xFF00FF00) >> 8);
745 for ( i = 0; i <
nWords; i++ )
746 pTruth[i] = ((pTruth[i] & 0x0000FFFF) << 16) | ((pTruth[i] & 0xFFFF0000) >> 16);
749 Step = (1 << (iVar - 5));
750 for ( k = 0; k <
nWords; k += 2*Step )
752 for ( i = 0; i < Step; i++ )
755 pTruth[i] = pTruth[Step+i];
756 pTruth[Step+i] = Temp;
777 static unsigned uCofactor[16];
778 int i, ValueCur, ValueMin, VarMin;
779 unsigned uSupp0, uSupp1;
784 for ( i = 0; i < nVars; i++ )
800 if ( ValueMin > ValueCur && nVars0 <= 5 && nVars1 <= 5 )
832 memset( pStore, 0,
sizeof(
short) * 2 * nVars );
864 for ( k = 0; k <
nWords; k++ )
867 for ( i = 5; i < nVars; i++ )
868 if ( k & (1 << (i-5)) )
874 for ( k = 0; k < nWords/2; k++ )
876 pStore[2*0+0] +=
Extra_WordCountOnes( (pTruth[0] & 0x55555555) | ((pTruth[1] & 0x55555555) << 1) );
877 pStore[2*0+1] +=
Extra_WordCountOnes( (pTruth[0] & 0xAAAAAAAA) | ((pTruth[1] & 0xAAAAAAAA) >> 1) );
878 pStore[2*1+0] +=
Extra_WordCountOnes( (pTruth[0] & 0x33333333) | ((pTruth[1] & 0x33333333) << 2) );
879 pStore[2*1+1] +=
Extra_WordCountOnes( (pTruth[0] & 0xCCCCCCCC) | ((pTruth[1] & 0xCCCCCCCC) >> 2) );
880 pStore[2*2+0] +=
Extra_WordCountOnes( (pTruth[0] & 0x0F0F0F0F) | ((pTruth[1] & 0x0F0F0F0F) << 4) );
881 pStore[2*2+1] +=
Extra_WordCountOnes( (pTruth[0] & 0xF0F0F0F0) | ((pTruth[1] & 0xF0F0F0F0) >> 4) );
882 pStore[2*3+0] +=
Extra_WordCountOnes( (pTruth[0] & 0x00FF00FF) | ((pTruth[1] & 0x00FF00FF) << 8) );
883 pStore[2*3+1] +=
Extra_WordCountOnes( (pTruth[0] & 0xFF00FF00) | ((pTruth[1] & 0xFF00FF00) >> 8) );
884 pStore[2*4+0] +=
Extra_WordCountOnes( (pTruth[0] & 0x0000FFFF) | ((pTruth[1] & 0x0000FFFF) << 16) );
885 pStore[2*4+1] +=
Extra_WordCountOnes( (pTruth[0] & 0xFFFF0000) | ((pTruth[1] & 0xFFFF0000) >> 16) );
906 static int HashPrimes[1024] = { 2, 3, 5,
907 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,
908 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191,
909 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283,
910 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401,
911 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509,
912 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631,
913 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751,
914 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877,
915 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997,
916 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091,
917 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193,
918 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291,
919 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423,
920 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493,
921 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601,
922 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699,
923 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811,
924 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931,
925 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029,
926 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137,
927 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267,
928 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357,
929 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459,
930 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593,
931 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693,
932 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791,
933 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903,
934 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023,
935 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167,
936 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271,
937 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373,
938 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511,
939 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607,
940 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709,
941 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833,
942 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931,
943 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057,
944 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177,
945 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283,
946 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423,
947 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547,
948 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657,
949 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789,
950 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931,
951 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011,
952 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147,
953 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279,
954 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, 5407, 5413,
955 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507,
956 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, 5641, 5647,
957 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, 5717, 5737, 5741, 5743,
958 5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857,
959 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007,
960 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121,
961 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247,
962 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343,
963 6353, 6359, 6361, 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473,
964 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599, 6607,
965 6619, 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733,
966 6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841, 6857,
967 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971,
968 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103,
969 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229,
970 7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369,
971 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517,
972 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, 7573, 7577, 7583, 7589, 7591, 7603,
973 7607, 7621, 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723,
974 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873,
975 7877, 7879, 7883, 7901, 7907, 7919, 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009,
976 8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087, 8089, 8093, 8101, 8111, 8117, 8123,
982 for ( i = 0; i <
nWords; i++ )
983 uHashKey ^= HashPrimes[i] * pIn[i];
1001 unsigned * pIn = pInOut, * pOut = pAux, * pTemp;
1003 int i, Temp, fChange,
Counter, nOnes;
1004 unsigned uCanonPhase;
1009 if ( (nOnes > nWords * 16) || ((nOnes == nWords * 16) && (pIn[0] & 1)) )
1011 uCanonPhase |= (1 << nVars);
1019 for ( i = 0; i < nVars; i++ )
1021 if ( pStore[2*i+0] <= pStore[2*i+1] )
1023 uCanonPhase |= (1 << i);
1024 Temp = pStore[2*i+0];
1025 pStore[2*i+0] = pStore[2*i+1];
1026 pStore[2*i+1] = Temp;
1037 for ( i = 0; i < nVars-1; i++ )
1039 if ( pStore[2*i] <= pStore[2*(i+1)] )
1044 Temp = pCanonPerm[i];
1045 pCanonPerm[i] = pCanonPerm[i+1];
1046 pCanonPerm[i+1] = Temp;
1049 pStore[2*i] = pStore[2*(i+1)];
1050 pStore[2*(i+1)] = Temp;
1052 Temp = pStore[2*i+1];
1053 pStore[2*i+1] = pStore[2*(i+1)+1];
1054 pStore[2*(i+1)+1] = Temp;
1057 pTemp = pIn; pIn = pOut; pOut = pTemp;
1059 }
while ( fChange );
#define ABC_NAMESPACE_IMPL_END
#define ABC_NAMESPACE_IMPL_START