ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
acecMult.c File Reference
#include "acecInt.h"
#include "misc/extra/extra.h"
#include "misc/util/utilTruth.h"
Include dependency graph for acecMult.c:

Go to the source code of this file.

Functions

word Extra_TruthCanonNPN3 (word uTruth, int nVars, Vec_Wrd_t *vRes)
 FUNCTION DEFINITIONS ///.
 
void Acec_MultFuncTest6 ()
 
unsigned Extra_TruthCanonNPN2 (unsigned uTruth, int nVars, Vec_Int_t *vRes)
 
void Acec_MultFuncTest5 ()
 
void Acec_MultFuncTest4 ()
 
Vec_Int_tAcec_MultCollectInputs (Vec_Int_t *vPairs, Vec_Int_t *vRanks, int iObj)
 
Vec_Int_tAcec_MultDetectInputs1 (Gia_Man_t *p, Vec_Wec_t *vLeafLits, Vec_Wec_t *vRootLits)
 
Vec_Int_tAcec_MultDetectInputs (Gia_Man_t *p, Vec_Wec_t *vLeafLits, Vec_Wec_t *vRootLits)
 
Vec_Bit_tAcec_MultMarkPPs (Gia_Man_t *p)
 
void Acec_MultFindPPs_rec (Gia_Man_t *p, int iObj, Vec_Int_t *vBold)
 
Vec_Int_tAcec_MultFindPPs (Gia_Man_t *p)
 
Vec_Bit_tAcec_BoothFindPPG (Gia_Man_t *p)
 
void Acec_MultFindPPsTest (Gia_Man_t *p)
 

Variables

ABC_NAMESPACE_IMPL_START unsigned s_Classes4a [96]
 DECLARATIONS ///.
 
unsigned s_Classes4b [384]
 
unsigned s_Classes4c [768]
 

Function Documentation

◆ Acec_BoothFindPPG()

Vec_Bit_t * Acec_BoothFindPPG ( Gia_Man_t * p)

Definition at line 656 of file acecMult.c.

657{
658 Vec_Bit_t * vIgnore = Vec_BitStart( Gia_ManObjNum(p) );
659 Vec_Int_t * vMap = Acec_MultFindPPs( p );
660 int i, Entry;
661 Vec_IntForEachEntry( vMap, Entry, i )
662 Vec_BitWriteEntry( vIgnore, Entry, 1 );
663 Vec_IntFree( vMap );
664 return vIgnore;
665}
Vec_Int_t * Acec_MultFindPPs(Gia_Man_t *p)
Definition acecMult.c:588
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Cube * p
Definition exorList.c:222
typedefABC_NAMESPACE_HEADER_START struct Vec_Bit_t_ Vec_Bit_t
INCLUDES ///.
Definition vecBit.h:42
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
Definition vecInt.h:54
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Acec_MultCollectInputs()

Vec_Int_t * Acec_MultCollectInputs ( Vec_Int_t * vPairs,
Vec_Int_t * vRanks,
int iObj )

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 329 of file acecMult.c.

330{
331 Vec_Int_t * vItems = Vec_IntAlloc( 100 );
332 int k, iObj1, iObj2;
333 // collect all those appearing with this one
334 Vec_IntForEachEntryDouble( vPairs, iObj1, iObj2, k )
335 if ( iObj == iObj1 )
336 Vec_IntPushUnique( vItems, iObj2 );
337 else if ( iObj == iObj2 )
338 Vec_IntPushUnique( vItems, iObj1 );
339 // sort items by rank cost
340 Vec_IntSelectSortCost( Vec_IntArray(vItems), Vec_IntSize(vItems), vRanks );
341 return vItems;
342}
#define Vec_IntForEachEntryDouble(vVec, Entry1, Entry2, i)
Definition vecInt.h:72
Here is the caller graph for this function:

◆ Acec_MultDetectInputs()

Vec_Int_t * Acec_MultDetectInputs ( Gia_Man_t * p,
Vec_Wec_t * vLeafLits,
Vec_Wec_t * vRootLits )

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 431 of file acecMult.c.

432{
433 Vec_Int_t * vInputs = Vec_IntAlloc( 100 );
434 Vec_Int_t * vSupp = Vec_IntAlloc( 100 );
435 Vec_Wrd_t * vTemp = Vec_WrdStart( Gia_ManObjNum(p) );
436 Vec_Int_t * vRanks = Vec_IntStart( Gia_ManObjNum(p) );
437 Vec_Int_t * vCounts = Vec_IntStart( Gia_ManObjNum(p) );
438 Vec_Int_t * vLevel;
439 int i, k, iLit, iObj, j, Entry;
440
441 ABC_FREE( p->pRefs );
443 Gia_ManForEachCiId( p, iObj, i )
444 printf( "%d=%d ", iObj, Gia_ObjRefNumId(p, iObj) );
445 printf( "\n" );
446 Gia_ManForEachAndId( p, iObj )
447 if ( Gia_ObjRefNumId(p, iObj) >= 4 )
448 printf( "%d=%d ", iObj, Gia_ObjRefNumId(p, iObj) );
449 printf( "\n" );
450
451 Vec_WecForEachLevel( vLeafLits, vLevel, i )
452 Vec_IntForEachEntry( vLevel, iLit, k )
453 {
454 word Truth = Gia_ObjComputeTruth6Cis( p, iLit, vSupp, vTemp );
455 if ( Vec_IntSize(vSupp) >= 0 )
456 {
457 printf( "Leaf = %4d : ", Abc_Lit2Var(iLit) );
458 printf( "Rank = %2d ", i );
459 printf( "Supp = %2d ", Vec_IntSize(vSupp) );
460 Extra_PrintHex( stdout, (unsigned*)&Truth, Vec_IntSize(vSupp) );
461 if ( Vec_IntSize(vSupp) == 4 ) printf( " " );
462 if ( Vec_IntSize(vSupp) == 3 ) printf( " " );
463 if ( Vec_IntSize(vSupp) <= 2 ) printf( " " );
464 printf( " " );
465 Vec_IntPrint( vSupp );
466 /*
467 if ( Truth == 0xF335ACC0F335ACC0 )
468 {
469 int iObj = Abc_Lit2Var(iLit);
470 Gia_Man_t * pGia0 = Gia_ManDupAndCones( p, &iObj, 1, 1 );
471 Gia_ManShow( pGia0, NULL, 0, 0, 0 );
472 Gia_ManStop( pGia0 );
473 }
474 */
475 }
476 // support rank counts
477 Vec_IntForEachEntry( vSupp, Entry, j )
478 {
479 Vec_IntAddToEntry( vRanks, Entry, i );
480 Vec_IntAddToEntry( vCounts, Entry, 1 );
481 }
482 if ( k == Vec_IntSize(vLevel)-1 )
483 printf( "\n" );
484 }
485
486 Vec_IntForEachEntry( vCounts, Entry, j )
487 if ( Entry )
488 printf( "%d=%d(%.2f) ", j, Entry, 1.0*Vec_IntEntry(vRanks, j)/Entry );
489 printf( "\n" );
490
491 Vec_IntFree( vSupp );
492 Vec_WrdFree( vTemp );
493 Vec_IntFree( vRanks );
494 Vec_IntFree( vCounts );
495 return vInputs;
496}
#define ABC_FREE(obj)
Definition abc_global.h:267
void Extra_PrintHex(FILE *pFile, unsigned *pTruth, int nVars)
void Gia_ManCreateRefs(Gia_Man_t *p)
Definition giaUtil.c:779
word Gia_ObjComputeTruth6Cis(Gia_Man_t *p, int iLit, Vec_Int_t *vSupp, Vec_Wrd_t *vTemp)
Definition giaTruth.c:345
#define Gia_ManForEachAndId(p, i)
Definition gia.h:1216
#define Gia_ManForEachCiId(p, Id, i)
Definition gia.h:1230
unsigned __int64 word
DECLARATIONS ///.
Definition kitPerm.c:36
#define Vec_WecForEachLevel(vGlob, vVec, i)
MACRO DEFINITIONS ///.
Definition vecWec.h:55
typedefABC_NAMESPACE_HEADER_START struct Vec_Wrd_t_ Vec_Wrd_t
INCLUDES ///.
Definition vecWrd.h:42
Here is the call graph for this function:

◆ Acec_MultDetectInputs1()

Vec_Int_t * Acec_MultDetectInputs1 ( Gia_Man_t * p,
Vec_Wec_t * vLeafLits,
Vec_Wec_t * vRootLits )

Definition at line 343 of file acecMult.c.

344{
345 Vec_Int_t * vInputs = Vec_IntAlloc( 100 );
346 Vec_Int_t * vCounts = Vec_IntStart( Gia_ManObjNum(p) );
347 Vec_Int_t * vRanks = Vec_IntStart( Gia_ManObjNum(p) );
348 Vec_Int_t * vPairs = Vec_IntAlloc( 100 );
349 Vec_Int_t * vItems = Vec_IntAlloc( 100 );
350 Vec_Int_t * vItems0;
351 Vec_Int_t * vItems1;
352 Vec_Int_t * vLevel;
353 int i, k, iLit, iObj, Count;
354 // count how many times each input appears
355 Vec_WecForEachLevel( vLeafLits, vLevel, i )
356 Vec_IntForEachEntry( vLevel, iLit, k )
357 {
358 iObj = Abc_Lit2Var(iLit);
359 Vec_IntAddToEntry( vCounts, Gia_ObjFaninId0(Gia_ManObj(p, iObj), iObj), 1 );
360 Vec_IntAddToEntry( vCounts, Gia_ObjFaninId1(Gia_ManObj(p, iObj), iObj), 1 );
361/*
362 printf( "Rank %2d : Leaf = %4d : (%2d, %2d)\n", i, iObj,
363 Gia_ObjFaninId0(Gia_ManObj(p, iObj), iObj), Gia_ObjFaninId1(Gia_ManObj(p, iObj), iObj) );
364 if ( k == Vec_IntSize(vLevel) - 1 )
365 printf( "\n" );
366*/
367 }
368 // count ranks for each one
369 Vec_WecForEachLevel( vLeafLits, vLevel, i )
370 Vec_IntForEachEntry( vLevel, iLit, k )
371 {
372 iObj = Abc_Lit2Var(iLit);
373 if ( Vec_IntEntry(vCounts, Gia_ObjFaninId0(Gia_ManObj(p, iObj), iObj)) < 2 )
374 {
375 printf( "Skipping %d.\n", iObj );
376 continue;
377 }
378 if ( Vec_IntEntry(vCounts, Gia_ObjFaninId1(Gia_ManObj(p, iObj), iObj)) < 2 )
379 {
380 printf( "Skipping %d.\n", iObj );
381 continue;
382 }
383 Vec_IntAddToEntry( vRanks, Gia_ObjFaninId0(Gia_ManObj(p, iObj), iObj), i );
384 Vec_IntAddToEntry( vRanks, Gia_ObjFaninId1(Gia_ManObj(p, iObj), iObj), i );
385
386 Vec_IntPushTwo( vPairs, Gia_ObjFaninId0(Gia_ManObj(p, iObj), iObj), Gia_ObjFaninId1(Gia_ManObj(p, iObj), iObj) );
387 }
388
389 // print statistics
390 Vec_IntForEachEntry( vCounts, Count, i )
391 {
392 if ( !Count )
393 continue;
394 if ( !Vec_IntEntry(vRanks, i) )
395 continue;
396 Vec_IntPush( vItems, i );
397 printf( "Obj = %3d Occurs = %3d Ranks = %3d\n", i, Count, Vec_IntEntry(vRanks, i) );
398 }
399 // sort items by rank cost
400 Vec_IntSelectSortCost( Vec_IntArray(vItems), Vec_IntSize(vItems), vRanks );
401 // collect all those appearing with the last one
402 vItems0 = Acec_MultCollectInputs( vPairs, vRanks, Vec_IntEntryLast(vItems) );
403 Vec_IntAppend( vInputs, vItems0 );
404 // collect all those appearing with the last one
405 vItems1 = Acec_MultCollectInputs( vPairs, vRanks, Vec_IntEntryLast(vItems0) );
406 Vec_IntAppend( vInputs, vItems1 );
407
408 Vec_IntPrint( vItems0 );
409 Vec_IntPrint( vItems1 );
410
411 Vec_IntFree( vCounts );
412 Vec_IntFree( vRanks );
413 Vec_IntFree( vPairs );
414 Vec_IntFree( vItems );
415 Vec_IntFree( vItems0 );
416 Vec_IntFree( vItems1 );
417 return vInputs;
418}
Vec_Int_t * Acec_MultCollectInputs(Vec_Int_t *vPairs, Vec_Int_t *vRanks, int iObj)
Definition acecMult.c:329
Here is the call graph for this function:

◆ Acec_MultFindPPs()

Vec_Int_t * Acec_MultFindPPs ( Gia_Man_t * p)

Definition at line 588 of file acecMult.c.

589{
590 word Saved[32] = {
591 ABC_CONST(0xF335ACC0F335ACC0),
592 ABC_CONST(0x35C035C035C035C0),
593 ABC_CONST(0xD728D728D728D728),
594 ABC_CONST(0xFD80FD80FD80FD80),
595 ABC_CONST(0xACC0ACC0ACC0ACC0),
596 ABC_CONST(0x7878787878787878),
597 ABC_CONST(0x2828282828282828),
598 ABC_CONST(0xD0D0D0D0D0D0D0D0),
599 ABC_CONST(0x8080808080808080),
600 ABC_CONST(0x8888888888888888),
601 ABC_CONST(0xAAAAAAAAAAAAAAAA),
602 ABC_CONST(0x5555555555555555),
603
604 ABC_CONST(0xD5A8D5A8D5A8D5A8),
605 ABC_CONST(0x2A572A572A572A57),
606 ABC_CONST(0xF3C0F3C0F3C0F3C0),
607 ABC_CONST(0x5858585858585858),
608 ABC_CONST(0xA7A7A7A7A7A7A7A7),
609 ABC_CONST(0x2727272727272727),
610 ABC_CONST(0xD8D8D8D8D8D8D8D8)
611 };
612
613 Vec_Int_t * vBold = Vec_IntAlloc( 100 );
614 Vec_Int_t * vSupp = Vec_IntAlloc( 100 );
615 Vec_Wrd_t * vTemp = Vec_WrdStart( Gia_ManObjNum(p) );
616 int i, iObj, nProds = 0;
618 Gia_ManForEachAndId( p, iObj )
619 {
620 word Truth = Gia_ObjComputeTruth6Cis( p, Abc_Var2Lit(iObj, 0), vSupp, vTemp );
621 if ( Vec_IntSize(vSupp) > 6 )
622 continue;
623 vSupp->nSize = Abc_Tt6MinBase( &Truth, vSupp->pArray, vSupp->nSize );
624 if ( Vec_IntSize(vSupp) > 5 )
625 continue;
626 for ( i = 0; i < 32 && Saved[i]; i++ )
627 {
628 if ( Truth == Saved[i] || Truth == ~Saved[i] )
629 {
630 //printf( "*** Node %d is PP with support %d.\n", iObj, Vec_IntSize(vSupp) );
631 Acec_MultFindPPs_rec( p, iObj, vBold );
632 nProds++;
633 break;
634 }
635 }
636 /*
637 if ( Saved[i] )
638 {
639 printf( "Obj = %4d ", iObj );
640 Extra_PrintHex( stdout, (unsigned*)&Truth, Vec_IntSize(vSupp) );
641 if ( Vec_IntSize(vSupp) == 4 ) printf( " " );
642 if ( Vec_IntSize(vSupp) == 3 ) printf( " " );
643 if ( Vec_IntSize(vSupp) <= 2 ) printf( " " );
644 printf( " " );
645 Vec_IntPrint( vSupp );
646 }
647 */
648 }
650 printf( "Collected %d pps and %d nodes.\n", nProds, Vec_IntSize(vBold) );
651
652 Vec_IntFree( vSupp );
653 Vec_WrdFree( vTemp );
654 return vBold;
655}
#define ABC_CONST(number)
PARAMETERS ///.
Definition abc_global.h:240
void Acec_MultFindPPs_rec(Gia_Man_t *p, int iObj, Vec_Int_t *vBold)
Definition acecMult.c:575
void Gia_ManCleanMark0(Gia_Man_t *p)
Definition giaUtil.c:256
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Acec_MultFindPPs_rec()

void Acec_MultFindPPs_rec ( Gia_Man_t * p,
int iObj,
Vec_Int_t * vBold )

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 575 of file acecMult.c.

576{
577 Gia_Obj_t * pObj;
578 pObj = Gia_ManObj( p, iObj );
579 if ( pObj->fMark0 )
580 return;
581 pObj->fMark0 = 1;
582 if ( !Gia_ObjIsAnd(pObj) )
583 return;
584 Acec_MultFindPPs_rec( p, Gia_ObjFaninId0(pObj, iObj), vBold );
585 Acec_MultFindPPs_rec( p, Gia_ObjFaninId1(pObj, iObj), vBold );
586 Vec_IntPush( vBold, iObj );
587}
struct Gia_Obj_t_ Gia_Obj_t
Definition gia.h:76
unsigned fMark0
Definition gia.h:81
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Acec_MultFindPPsTest()

void Acec_MultFindPPsTest ( Gia_Man_t * p)

Definition at line 666 of file acecMult.c.

667{
668 Vec_Int_t * vBold = Acec_MultFindPPs( p );
669 Gia_ManShow( p, vBold, 1, 0, 0 );
670 Vec_IntFree( vBold );
671}
void Gia_ManShow(Gia_Man_t *pMan, Vec_Int_t *vBold, int fAdders, int fFadds, int fPath)
Definition giaShow.c:1126
Here is the call graph for this function:

◆ Acec_MultFuncTest4()

void Acec_MultFuncTest4 ( )

Definition at line 289 of file acecMult.c.

290{
291 Vec_Int_t * vRes = Vec_IntAlloc( 1000 );
292 int i, Entry;
293
294 unsigned Truth = 0xF3C0;
295// unsigned Truth = 0xF335;
296// unsigned Truth = 0xFD80;
297 //unsigned Truth = 0xD728;
298 //unsigned Truth = 0x35C0;
299 //unsigned Truth = 0xACC0;
300 unsigned Canon = Extra_TruthCanonNPN2( Truth, 4, vRes );
301
302 Extra_PrintHex( stdout, (unsigned*)&Truth, 4 ); printf( "\n" );
303 Extra_PrintHex( stdout, (unsigned*)&Canon, 4 ); printf( "\n" );
304
305 printf( "Members = %d.\n", Vec_IntSize(vRes) );
306 Vec_IntForEachEntry( vRes, Entry, i )
307 {
308 Extra_PrintHex( stdout, (unsigned*)&Entry, 4 );
309 printf( ", " );
310 if ( i % 12 == 11 )
311 printf( "\n" );
312 }
313
314 Vec_IntFree( vRes );
315}
unsigned Extra_TruthCanonNPN2(unsigned uTruth, int nVars, Vec_Int_t *vRes)
Definition acecMult.c:217
Here is the call graph for this function:

◆ Acec_MultFuncTest5()

void Acec_MultFuncTest5 ( )

Definition at line 266 of file acecMult.c.

267{
268 Vec_Int_t * vRes = Vec_IntAlloc( 1000 );
269 int i, Entry;
270
271 unsigned Truth = 0xF335ACC0;
272 unsigned Canon = Extra_TruthCanonNPN2( Truth, 5, vRes );
273
274 Extra_PrintHex( stdout, (unsigned*)&Truth, 5 ); printf( "\n" );
275 Extra_PrintHex( stdout, (unsigned*)&Canon, 5 ); printf( "\n" );
276
277 printf( "Members = %d.\n", Vec_IntSize(vRes) );
278 Vec_IntForEachEntry( vRes, Entry, i )
279 {
280 Extra_PrintHex( stdout, (unsigned*)&Entry, 5 );
281 printf( ", " );
282 if ( i % 8 == 7 )
283 printf( "\n" );
284 }
285
286 Vec_IntFree( vRes );
287}
Here is the call graph for this function:

◆ Acec_MultFuncTest6()

void Acec_MultFuncTest6 ( )

Definition at line 194 of file acecMult.c.

195{
196 Vec_Wrd_t * vRes = Vec_WrdAlloc( 10000 );
197 int i; word Entry;
198
199 word Truth = ABC_CONST(0xfedcba9876543210);
200 word Canon = Extra_TruthCanonNPN3( Truth, 6, vRes );
201
202 Extra_PrintHex( stdout, (unsigned*)&Truth, 6 ); printf( "\n" );
203 Extra_PrintHex( stdout, (unsigned*)&Canon, 6 ); printf( "\n" );
204
205 printf( "Members = %d.\n", Vec_WrdSize(vRes) );
206 Vec_WrdForEachEntry( vRes, Entry, i )
207 {
208 Extra_PrintHex( stdout, (unsigned*)&Entry, 6 );
209 printf( ", " );
210 if ( i % 8 == 7 )
211 printf( "\n" );
212 }
213
214 Vec_WrdFree( vRes );
215}
word Extra_TruthCanonNPN3(word uTruth, int nVars, Vec_Wrd_t *vRes)
FUNCTION DEFINITIONS ///.
Definition acecMult.c:161
#define Vec_WrdForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
Definition vecWrd.h:54
Here is the call graph for this function:

◆ Acec_MultMarkPPs()

Vec_Bit_t * Acec_MultMarkPPs ( Gia_Man_t * p)

Function*************************************************************

Synopsis [Mark nodes whose function is exactly that of a Booth PP.]

Description []

SideEffects []

SeeAlso []

Definition at line 509 of file acecMult.c.

510{
511 word Saved[32] = {
512 ABC_CONST(0xF335ACC0F335ACC0),
513 ABC_CONST(0x35C035C035C035C0),
514 ABC_CONST(0xD728D728D728D728),
515 ABC_CONST(0xFD80FD80FD80FD80),
516 ABC_CONST(0xACC0ACC0ACC0ACC0),
517 ABC_CONST(0x7878787878787878),
518 ABC_CONST(0x2828282828282828),
519 ABC_CONST(0xD0D0D0D0D0D0D0D0),
520 ABC_CONST(0x8080808080808080),
521 ABC_CONST(0x8888888888888888),
522 ABC_CONST(0xAAAAAAAAAAAAAAAA),
523 ABC_CONST(0x5555555555555555),
524
525 ABC_CONST(0xD5A8D5A8D5A8D5A8),
526 ABC_CONST(0x2A572A572A572A57),
527 ABC_CONST(0xF3C0F3C0F3C0F3C0),
528 ABC_CONST(0x5858585858585858),
529 ABC_CONST(0xA7A7A7A7A7A7A7A7),
530 ABC_CONST(0x2727272727272727),
531 ABC_CONST(0xD8D8D8D8D8D8D8D8)
532 };
533
534 Vec_Bit_t * vRes = Vec_BitStart( Gia_ManObjNum(p) );
535 Vec_Wrd_t * vTemp = Vec_WrdStart( Gia_ManObjNum(p) );
536 Vec_Int_t * vSupp = Vec_IntAlloc( 100 );
537 int i, iObj, nProds = 0;
539 Gia_ManForEachAndId( p, iObj )
540 {
541 word Truth = Gia_ObjComputeTruth6Cis( p, Abc_Var2Lit(iObj, 0), vSupp, vTemp );
542 if ( Vec_IntSize(vSupp) > 6 )
543 continue;
544 vSupp->nSize = Abc_Tt6MinBase( &Truth, vSupp->pArray, vSupp->nSize );
545 if ( Vec_IntSize(vSupp) > 5 )
546 continue;
547 for ( i = 0; i < 32 && Saved[i]; i++ )
548 {
549 if ( Truth == Saved[i] || Truth == ~Saved[i] )
550 {
551 Vec_BitWriteEntry( vRes, iObj, 1 );
552 nProds++;
553 break;
554 }
555 }
556 }
558 printf( "Collected %d pps.\n", nProds );
559 Vec_IntFree( vSupp );
560 Vec_WrdFree( vTemp );
561 return vRes;
562}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Extra_TruthCanonNPN2()

unsigned Extra_TruthCanonNPN2 ( unsigned uTruth,
int nVars,
Vec_Int_t * vRes )

Definition at line 217 of file acecMult.c.

218{
219 static int nVarsOld, nPerms;
220 static char ** pPerms = NULL;
221
222 unsigned uTruthMin, uTruthC, uPhase, uPerm;
223 int nMints, k, i;
224
225 if ( pPerms == NULL )
226 {
227 nPerms = Extra_Factorial( nVars );
228 pPerms = Extra_Permutations( nVars );
229 nVarsOld = nVars;
230 }
231 else if ( nVarsOld != nVars )
232 {
233 ABC_FREE( pPerms );
234 nPerms = Extra_Factorial( nVars );
235 pPerms = Extra_Permutations( nVars );
236 nVarsOld = nVars;
237 }
238
239 nMints = (1 << nVars);
240 uTruthC = (unsigned)( (~uTruth) & ((~((unsigned)0)) >> (32-nMints)) );
241 uTruthMin = 0xFFFFFFFF;
242 for ( i = 0; i < nMints; i++ )
243 {
244 uPhase = Extra_TruthPolarize( uTruth, i, nVars );
245 for ( k = 0; k < nPerms; k++ )
246 {
247 uPerm = Extra_TruthPermute( uPhase, pPerms[k], nVars, 0 );
248 if ( !(uPerm & 1) )
249 Vec_IntPushUnique( vRes, uPerm );
250 if ( uTruthMin > uPerm )
251 uTruthMin = uPerm;
252 }
253 uPhase = Extra_TruthPolarize( uTruthC, i, nVars );
254 for ( k = 0; k < nPerms; k++ )
255 {
256 uPerm = Extra_TruthPermute( uPhase, pPerms[k], nVars, 0 );
257 if ( !(uPerm & 1) )
258 Vec_IntPushUnique( vRes, uPerm );
259 if ( uTruthMin > uPerm )
260 uTruthMin = uPerm;
261 }
262 }
263 return uTruthMin;
264}
char ** Extra_Permutations(int n)
int Extra_Factorial(int n)
unsigned Extra_TruthPermute(unsigned Truth, char *pPerms, int nVars, int fReverse)
unsigned Extra_TruthPolarize(unsigned uTruth, int Polarity, int nVars)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Extra_TruthCanonNPN3()

word Extra_TruthCanonNPN3 ( word uTruth,
int nVars,
Vec_Wrd_t * vRes )

FUNCTION DEFINITIONS ///.

Function*************************************************************

Synopsis [Computes NPN-canonical form using brute-force methods.]

Description []

SideEffects []

SeeAlso []

Definition at line 161 of file acecMult.c.

162{
163 int nMints = (1 << nVars);
164 int nPerms = Extra_Factorial( nVars );
165 int * pComp = Extra_GreyCodeSchedule( nVars );
166 int * pPerm = Extra_PermSchedule( nVars );
167 word tCur, tTemp1, tTemp2;
168 word uTruthMin = ABC_CONST(0xFFFFFFFFFFFFFFFF);
169 int i, p, c;
170 Vec_WrdClear( vRes );
171 for ( i = 0; i < 2; i++ )
172 {
173 tCur = i ? ~uTruth : uTruth;
174 tTemp1 = tCur;
175 for ( p = 0; p < nPerms; p++ )
176 {
177 tTemp2 = tCur;
178 for ( c = 0; c < nMints; c++ )
179 {
180 if ( uTruthMin > tCur )
181 uTruthMin = tCur;
182 Vec_WrdPushUnique( vRes, tCur );
183 tCur = Abc_Tt6Flip( tCur, pComp[c] );
184 }
185 assert( tTemp2 == tCur );
186 tCur = Abc_Tt6SwapAdjacent( tCur, pPerm[p] );
187 }
188 assert( tTemp1 == tCur );
189 }
190 ABC_FREE( pComp );
191 ABC_FREE( pPerm );
192 return uTruthMin;
193}
int * Extra_PermSchedule(int n)
int * Extra_GreyCodeSchedule(int n)
#define assert(ex)
Definition util_old.h:213
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ s_Classes4a

ABC_NAMESPACE_IMPL_START unsigned s_Classes4a[96]
Initial value:
= {
0xD728, 0xB748, 0x9F60, 0xD278, 0xB478, 0x96F0, 0xC66C, 0x96CC, 0x9C6C, 0x96AA, 0xA66A, 0x9A6A,
0x28D7, 0x48B7, 0x609F, 0x2D87, 0x4B87, 0x690F, 0x3993, 0x6933, 0x6393, 0x6955, 0x5995, 0x6595,
0xEB14, 0xED12, 0xF906, 0xE1B4, 0xE1D2, 0xF096, 0xC99C, 0xCC96, 0xC9C6, 0xAA96, 0xA99A, 0xA9A6,
0x14EB, 0x12ED, 0x06F9, 0x1E4B, 0x1E2D, 0x0F69, 0x3663, 0x3369, 0x3639, 0x5569, 0x5665, 0x5659,
0x7D82, 0x7B84, 0x6F90, 0x78D2, 0x78B4, 0x69F0, 0x6CC6, 0x69CC, 0x6C9C, 0x69AA, 0x6AA6, 0x6A9A,
0x827D, 0x847B, 0x906F, 0x872D, 0x874B, 0x960F, 0x9339, 0x9633, 0x9363, 0x9655, 0x9559, 0x9565,
0xBE41, 0xDE21, 0xF609, 0xB4E1, 0xD2E1, 0xF069, 0x9CC9, 0xCC69, 0xC6C9, 0xAA69, 0x9AA9, 0xA6A9,
0x41BE, 0x21DE, 0x09F6, 0x4B1E, 0x2D1E, 0x0F96, 0x6336, 0x3396, 0x3936, 0x5596, 0x6556, 0x5956
}

DECLARATIONS ///.

CFile****************************************************************

FileName [acecMult.c]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [CEC for arithmetic circuits.]

Synopsis [Multiplier.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - June 20, 2005.]

Revision [

Id
acecMult.c,v 1.00 2005/06/20 00:00:00 alanmi Exp

]

Definition at line 32 of file acecMult.c.

32 {
33 0xD728, 0xB748, 0x9F60, 0xD278, 0xB478, 0x96F0, 0xC66C, 0x96CC, 0x9C6C, 0x96AA, 0xA66A, 0x9A6A,
34 0x28D7, 0x48B7, 0x609F, 0x2D87, 0x4B87, 0x690F, 0x3993, 0x6933, 0x6393, 0x6955, 0x5995, 0x6595,
35 0xEB14, 0xED12, 0xF906, 0xE1B4, 0xE1D2, 0xF096, 0xC99C, 0xCC96, 0xC9C6, 0xAA96, 0xA99A, 0xA9A6,
36 0x14EB, 0x12ED, 0x06F9, 0x1E4B, 0x1E2D, 0x0F69, 0x3663, 0x3369, 0x3639, 0x5569, 0x5665, 0x5659,
37 0x7D82, 0x7B84, 0x6F90, 0x78D2, 0x78B4, 0x69F0, 0x6CC6, 0x69CC, 0x6C9C, 0x69AA, 0x6AA6, 0x6A9A,
38 0x827D, 0x847B, 0x906F, 0x872D, 0x874B, 0x960F, 0x9339, 0x9633, 0x9363, 0x9655, 0x9559, 0x9565,
39 0xBE41, 0xDE21, 0xF609, 0xB4E1, 0xD2E1, 0xF069, 0x9CC9, 0xCC69, 0xC6C9, 0xAA69, 0x9AA9, 0xA6A9,
40 0x41BE, 0x21DE, 0x09F6, 0x4B1E, 0x2D1E, 0x0F96, 0x6336, 0x3396, 0x3936, 0x5596, 0x6556, 0x5956
41};

◆ s_Classes4b

unsigned s_Classes4b[384]

Definition at line 43 of file acecMult.c.

43 {
44 0x35C0, 0x53A0, 0x1DC0, 0x4788, 0x2788, 0x1BA0, 0x3C50, 0x5A30, 0x1CD0, 0x4878, 0x2878, 0x1AB0,
45 0x34C4, 0x606C, 0x3C44, 0x660C, 0x268C, 0x286C, 0x606A, 0x52A2, 0x486A, 0x468A, 0x660A, 0x5A22,
46 0x3AC0, 0x5CA0, 0x2EC0, 0x7488, 0x7288, 0x4EA0, 0x3CA0, 0x5AC0, 0x2CE0, 0x7848, 0x7828, 0x4AE0,
47 0x38C8, 0x6C60, 0x3C88, 0x66C0, 0x62C8, 0x6C28, 0x6A60, 0x58A8, 0x6A48, 0x64A8, 0x66A0, 0x5A88,
48 0xC530, 0xA350, 0xD10C, 0x8B44, 0x8D22, 0xB10A, 0xC350, 0xA530, 0xD01C, 0x84B4, 0x82D2, 0xB01A,
49 0xC434, 0x909C, 0xC344, 0x990C, 0x8C26, 0x82C6, 0x909A, 0xA252, 0x84A6, 0x8A46, 0x990A, 0xA522,
50 0xCA30, 0xAC50, 0xE20C, 0xB844, 0xD822, 0xE40A, 0xC3A0, 0xA5C0, 0xE02C, 0xB484, 0xD282, 0xE04A,
51 0xC838, 0x9C90, 0xC388, 0x99C0, 0xC862, 0xC682, 0x9A90, 0xA858, 0xA684, 0xA864, 0x99A0, 0xA588,
52 0x530C, 0x350A, 0x4730, 0x1D22, 0x1B44, 0x2750, 0x503C, 0x305A, 0x4370, 0x12D2, 0x14B4, 0x2570,
53 0x434C, 0x06C6, 0x443C, 0x0C66, 0x194C, 0x149C, 0x06A6, 0x252A, 0x129A, 0x192A, 0x0A66, 0x225A,
54 0xA30C, 0xC50A, 0x8B30, 0xD122, 0xB144, 0x8D50, 0xA03C, 0xC05A, 0x83B0, 0xD212, 0xB414, 0x85D0,
55 0x838C, 0xC606, 0x883C, 0xC066, 0x91C4, 0x9C14, 0xA606, 0x858A, 0x9A12, 0x91A2, 0xA066, 0x885A,
56 0x5C03, 0x3A05, 0x7403, 0x2E11, 0x4E11, 0x7205, 0x50C3, 0x30A5, 0x7043, 0x21E1, 0x41E1, 0x7025,
57 0x4C43, 0x09C9, 0x44C3, 0x0C99, 0x4C19, 0x41C9, 0x09A9, 0x2A25, 0x21A9, 0x2A19, 0x0A99, 0x22A5,
58 0xAC03, 0xCA05, 0xB803, 0xE211, 0xE411, 0xD805, 0xA0C3, 0xC0A5, 0xB083, 0xE121, 0xE141, 0xD085,
59 0x8C83, 0xC909, 0x88C3, 0xC099, 0xC491, 0xC941, 0xA909, 0x8A85, 0xA921, 0xA291, 0xA099, 0x88A5,
60 0xC035, 0xA053, 0xC01D, 0x8847, 0x8827, 0xA01B, 0xC305, 0xA503, 0xC10D, 0x8487, 0x8287, 0xA10B,
61 0xC131, 0x9093, 0xC311, 0x9903, 0x8923, 0x8293, 0x9095, 0xA151, 0x8495, 0x8945, 0x9905, 0xA511,
62 0xC03A, 0xA05C, 0xC02E, 0x8874, 0x8872, 0xA04E, 0xC30A, 0xA50C, 0xC20E, 0x8784, 0x8782, 0xA40E,
63 0xC232, 0x9390, 0xC322, 0x9930, 0x9832, 0x9382, 0x9590, 0xA454, 0x9584, 0x9854, 0x9950, 0xA544,
64 0x30C5, 0x50A3, 0x0CD1, 0x448B, 0x228D, 0x0AB1, 0x3C05, 0x5A03, 0x0DC1, 0x484B, 0x282D, 0x0BA1,
65 0x31C1, 0x6063, 0x3C11, 0x6603, 0x2389, 0x2839, 0x6065, 0x51A1, 0x4859, 0x4589, 0x6605, 0x5A11,
66 0x30CA, 0x50AC, 0x0CE2, 0x44B8, 0x22D8, 0x0AE4, 0x3C0A, 0x5A0C, 0x0EC2, 0x4B48, 0x2D28, 0x0EA4,
67 0x32C2, 0x6360, 0x3C22, 0x6630, 0x3298, 0x3928, 0x6560, 0x54A4, 0x5948, 0x5498, 0x6650, 0x5A44,
68 0x0C53, 0x0A35, 0x3047, 0x221D, 0x441B, 0x5027, 0x05C3, 0x03A5, 0x3407, 0x212D, 0x414B, 0x5207,
69 0x1C13, 0x0939, 0x11C3, 0x0399, 0x4613, 0x4163, 0x0959, 0x1A15, 0x2165, 0x2615, 0x0599, 0x11A5,
70 0x0CA3, 0x0AC5, 0x308B, 0x22D1, 0x44B1, 0x508D, 0x0AC3, 0x0CA5, 0x380B, 0x2D21, 0x4B41, 0x580D,
71 0x2C23, 0x3909, 0x22C3, 0x3099, 0x6431, 0x6341, 0x5909, 0x4A45, 0x6521, 0x6251, 0x5099, 0x44A5,
72 0x035C, 0x053A, 0x0374, 0x112E, 0x114E, 0x0572, 0x053C, 0x035A, 0x0734, 0x121E, 0x141E, 0x0752,
73 0x131C, 0x0636, 0x113C, 0x0366, 0x1346, 0x1436, 0x0656, 0x151A, 0x1256, 0x1526, 0x0566, 0x115A,
74 0x03AC, 0x05CA, 0x03B8, 0x11E2, 0x11E4, 0x05D8, 0x0A3C, 0x0C5A, 0x0B38, 0x1E12, 0x1E14, 0x0D58,
75 0x232C, 0x3606, 0x223C, 0x3066, 0x3164, 0x3614, 0x5606, 0x454A, 0x5612, 0x5162, 0x5066, 0x445A
76};

◆ s_Classes4c

unsigned s_Classes4c[768]

Definition at line 78 of file acecMult.c.

78 {
79 0x35C0, 0x53A0, 0x1DC0, 0x4788, 0x2788, 0x1BA0, 0x3C50, 0x5A30, 0x1CD0, 0x4878, 0x2878, 0x1AB0,
80 0x34C4, 0x606C, 0x3C44, 0x660C, 0x268C, 0x286C, 0x606A, 0x52A2, 0x486A, 0x468A, 0x660A, 0x5A22,
81 0xCA3F, 0xAC5F, 0xE23F, 0xB877, 0xD877, 0xE45F, 0xC3AF, 0xA5CF, 0xE32F, 0xB787, 0xD787, 0xE54F,
82 0xCB3B, 0x9F93, 0xC3BB, 0x99F3, 0xD973, 0xD793, 0x9F95, 0xAD5D, 0xB795, 0xB975, 0x99F5, 0xA5DD,
83 0x3AC0, 0x5CA0, 0x2EC0, 0x7488, 0x7288, 0x4EA0, 0x3CA0, 0x5AC0, 0x2CE0, 0x7848, 0x7828, 0x4AE0,
84 0x38C8, 0x6C60, 0x3C88, 0x66C0, 0x62C8, 0x6C28, 0x6A60, 0x58A8, 0x6A48, 0x64A8, 0x66A0, 0x5A88,
85 0xC53F, 0xA35F, 0xD13F, 0x8B77, 0x8D77, 0xB15F, 0xC35F, 0xA53F, 0xD31F, 0x87B7, 0x87D7, 0xB51F,
86 0xC737, 0x939F, 0xC377, 0x993F, 0x9D37, 0x93D7, 0x959F, 0xA757, 0x95B7, 0x9B57, 0x995F, 0xA577,
87 0xC530, 0xA350, 0xD10C, 0x8B44, 0x8D22, 0xB10A, 0xC350, 0xA530, 0xD01C, 0x84B4, 0x82D2, 0xB01A,
88 0xC434, 0x909C, 0xC344, 0x990C, 0x8C26, 0x82C6, 0x909A, 0xA252, 0x84A6, 0x8A46, 0x990A, 0xA522,
89 0x3ACF, 0x5CAF, 0x2EF3, 0x74BB, 0x72DD, 0x4EF5, 0x3CAF, 0x5ACF, 0x2FE3, 0x7B4B, 0x7D2D, 0x4FE5,
90 0x3BCB, 0x6F63, 0x3CBB, 0x66F3, 0x73D9, 0x7D39, 0x6F65, 0x5DAD, 0x7B59, 0x75B9, 0x66F5, 0x5ADD,
91 0xCA30, 0xAC50, 0xE20C, 0xB844, 0xD822, 0xE40A, 0xC3A0, 0xA5C0, 0xE02C, 0xB484, 0xD282, 0xE04A,
92 0xC838, 0x9C90, 0xC388, 0x99C0, 0xC862, 0xC682, 0x9A90, 0xA858, 0xA684, 0xA864, 0x99A0, 0xA588,
93 0x35CF, 0x53AF, 0x1DF3, 0x47BB, 0x27DD, 0x1BF5, 0x3C5F, 0x5A3F, 0x1FD3, 0x4B7B, 0x2D7D, 0x1FB5,
94 0x37C7, 0x636F, 0x3C77, 0x663F, 0x379D, 0x397D, 0x656F, 0x57A7, 0x597B, 0x579B, 0x665F, 0x5A77,
95 0x530C, 0x350A, 0x4730, 0x1D22, 0x1B44, 0x2750, 0x503C, 0x305A, 0x4370, 0x12D2, 0x14B4, 0x2570,
96 0x434C, 0x06C6, 0x443C, 0x0C66, 0x194C, 0x149C, 0x06A6, 0x252A, 0x129A, 0x192A, 0x0A66, 0x225A,
97 0xACF3, 0xCAF5, 0xB8CF, 0xE2DD, 0xE4BB, 0xD8AF, 0xAFC3, 0xCFA5, 0xBC8F, 0xED2D, 0xEB4B, 0xDA8F,
98 0xBCB3, 0xF939, 0xBBC3, 0xF399, 0xE6B3, 0xEB63, 0xF959, 0xDAD5, 0xED65, 0xE6D5, 0xF599, 0xDDA5,
99 0xA30C, 0xC50A, 0x8B30, 0xD122, 0xB144, 0x8D50, 0xA03C, 0xC05A, 0x83B0, 0xD212, 0xB414, 0x85D0,
100 0x838C, 0xC606, 0x883C, 0xC066, 0x91C4, 0x9C14, 0xA606, 0x858A, 0x9A12, 0x91A2, 0xA066, 0x885A,
101 0x5CF3, 0x3AF5, 0x74CF, 0x2EDD, 0x4EBB, 0x72AF, 0x5FC3, 0x3FA5, 0x7C4F, 0x2DED, 0x4BEB, 0x7A2F,
102 0x7C73, 0x39F9, 0x77C3, 0x3F99, 0x6E3B, 0x63EB, 0x59F9, 0x7A75, 0x65ED, 0x6E5D, 0x5F99, 0x77A5,
103 0x5C03, 0x3A05, 0x7403, 0x2E11, 0x4E11, 0x7205, 0x50C3, 0x30A5, 0x7043, 0x21E1, 0x41E1, 0x7025,
104 0x4C43, 0x09C9, 0x44C3, 0x0C99, 0x4C19, 0x41C9, 0x09A9, 0x2A25, 0x21A9, 0x2A19, 0x0A99, 0x22A5,
105 0xA3FC, 0xC5FA, 0x8BFC, 0xD1EE, 0xB1EE, 0x8DFA, 0xAF3C, 0xCF5A, 0x8FBC, 0xDE1E, 0xBE1E, 0x8FDA,
106 0xB3BC, 0xF636, 0xBB3C, 0xF366, 0xB3E6, 0xBE36, 0xF656, 0xD5DA, 0xDE56, 0xD5E6, 0xF566, 0xDD5A,
107 0xAC03, 0xCA05, 0xB803, 0xE211, 0xE411, 0xD805, 0xA0C3, 0xC0A5, 0xB083, 0xE121, 0xE141, 0xD085,
108 0x8C83, 0xC909, 0x88C3, 0xC099, 0xC491, 0xC941, 0xA909, 0x8A85, 0xA921, 0xA291, 0xA099, 0x88A5,
109 0x53FC, 0x35FA, 0x47FC, 0x1DEE, 0x1BEE, 0x27FA, 0x5F3C, 0x3F5A, 0x4F7C, 0x1EDE, 0x1EBE, 0x2F7A,
110 0x737C, 0x36F6, 0x773C, 0x3F66, 0x3B6E, 0x36BE, 0x56F6, 0x757A, 0x56DE, 0x5D6E, 0x5F66, 0x775A,
111 0xC035, 0xA053, 0xC01D, 0x8847, 0x8827, 0xA01B, 0xC305, 0xA503, 0xC10D, 0x8487, 0x8287, 0xA10B,
112 0xC131, 0x9093, 0xC311, 0x9903, 0x8923, 0x8293, 0x9095, 0xA151, 0x8495, 0x8945, 0x9905, 0xA511,
113 0x3FCA, 0x5FAC, 0x3FE2, 0x77B8, 0x77D8, 0x5FE4, 0x3CFA, 0x5AFC, 0x3EF2, 0x7B78, 0x7D78, 0x5EF4,
114 0x3ECE, 0x6F6C, 0x3CEE, 0x66FC, 0x76DC, 0x7D6C, 0x6F6A, 0x5EAE, 0x7B6A, 0x76BA, 0x66FA, 0x5AEE,
115 0xC03A, 0xA05C, 0xC02E, 0x8874, 0x8872, 0xA04E, 0xC30A, 0xA50C, 0xC20E, 0x8784, 0x8782, 0xA40E,
116 0xC232, 0x9390, 0xC322, 0x9930, 0x9832, 0x9382, 0x9590, 0xA454, 0x9584, 0x9854, 0x9950, 0xA544,
117 0x3FC5, 0x5FA3, 0x3FD1, 0x778B, 0x778D, 0x5FB1, 0x3CF5, 0x5AF3, 0x3DF1, 0x787B, 0x787D, 0x5BF1,
118 0x3DCD, 0x6C6F, 0x3CDD, 0x66CF, 0x67CD, 0x6C7D, 0x6A6F, 0x5BAB, 0x6A7B, 0x67AB, 0x66AF, 0x5ABB,
119 0x30C5, 0x50A3, 0x0CD1, 0x448B, 0x228D, 0x0AB1, 0x3C05, 0x5A03, 0x0DC1, 0x484B, 0x282D, 0x0BA1,
120 0x31C1, 0x6063, 0x3C11, 0x6603, 0x2389, 0x2839, 0x6065, 0x51A1, 0x4859, 0x4589, 0x6605, 0x5A11,
121 0xCF3A, 0xAF5C, 0xF32E, 0xBB74, 0xDD72, 0xF54E, 0xC3FA, 0xA5FC, 0xF23E, 0xB7B4, 0xD7D2, 0xF45E,
122 0xCE3E, 0x9F9C, 0xC3EE, 0x99FC, 0xDC76, 0xD7C6, 0x9F9A, 0xAE5E, 0xB7A6, 0xBA76, 0x99FA, 0xA5EE,
123 0x30CA, 0x50AC, 0x0CE2, 0x44B8, 0x22D8, 0x0AE4, 0x3C0A, 0x5A0C, 0x0EC2, 0x4B48, 0x2D28, 0x0EA4,
124 0x32C2, 0x6360, 0x3C22, 0x6630, 0x3298, 0x3928, 0x6560, 0x54A4, 0x5948, 0x5498, 0x6650, 0x5A44,
125 0xCF35, 0xAF53, 0xF31D, 0xBB47, 0xDD27, 0xF51B, 0xC3F5, 0xA5F3, 0xF13D, 0xB4B7, 0xD2D7, 0xF15B,
126 0xCD3D, 0x9C9F, 0xC3DD, 0x99CF, 0xCD67, 0xC6D7, 0x9A9F, 0xAB5B, 0xA6B7, 0xAB67, 0x99AF, 0xA5BB,
127 0x0C53, 0x0A35, 0x3047, 0x221D, 0x441B, 0x5027, 0x05C3, 0x03A5, 0x3407, 0x212D, 0x414B, 0x5207,
128 0x1C13, 0x0939, 0x11C3, 0x0399, 0x4613, 0x4163, 0x0959, 0x1A15, 0x2165, 0x2615, 0x0599, 0x11A5,
129 0xF3AC, 0xF5CA, 0xCFB8, 0xDDE2, 0xBBE4, 0xAFD8, 0xFA3C, 0xFC5A, 0xCBF8, 0xDED2, 0xBEB4, 0xADF8,
130 0xE3EC, 0xF6C6, 0xEE3C, 0xFC66, 0xB9EC, 0xBE9C, 0xF6A6, 0xE5EA, 0xDE9A, 0xD9EA, 0xFA66, 0xEE5A,
131 0x0CA3, 0x0AC5, 0x308B, 0x22D1, 0x44B1, 0x508D, 0x0AC3, 0x0CA5, 0x380B, 0x2D21, 0x4B41, 0x580D,
132 0x2C23, 0x3909, 0x22C3, 0x3099, 0x6431, 0x6341, 0x5909, 0x4A45, 0x6521, 0x6251, 0x5099, 0x44A5,
133 0xF35C, 0xF53A, 0xCF74, 0xDD2E, 0xBB4E, 0xAF72, 0xF53C, 0xF35A, 0xC7F4, 0xD2DE, 0xB4BE, 0xA7F2,
134 0xD3DC, 0xC6F6, 0xDD3C, 0xCF66, 0x9BCE, 0x9CBE, 0xA6F6, 0xB5BA, 0x9ADE, 0x9DAE, 0xAF66, 0xBB5A,
135 0x035C, 0x053A, 0x0374, 0x112E, 0x114E, 0x0572, 0x053C, 0x035A, 0x0734, 0x121E, 0x141E, 0x0752,
136 0x131C, 0x0636, 0x113C, 0x0366, 0x1346, 0x1436, 0x0656, 0x151A, 0x1256, 0x1526, 0x0566, 0x115A,
137 0xFCA3, 0xFAC5, 0xFC8B, 0xEED1, 0xEEB1, 0xFA8D, 0xFAC3, 0xFCA5, 0xF8CB, 0xEDE1, 0xEBE1, 0xF8AD,
138 0xECE3, 0xF9C9, 0xEEC3, 0xFC99, 0xECB9, 0xEBC9, 0xF9A9, 0xEAE5, 0xEDA9, 0xEAD9, 0xFA99, 0xEEA5,
139 0x03AC, 0x05CA, 0x03B8, 0x11E2, 0x11E4, 0x05D8, 0x0A3C, 0x0C5A, 0x0B38, 0x1E12, 0x1E14, 0x0D58,
140 0x232C, 0x3606, 0x223C, 0x3066, 0x3164, 0x3614, 0x5606, 0x454A, 0x5612, 0x5162, 0x5066, 0x445A,
141 0xFC53, 0xFA35, 0xFC47, 0xEE1D, 0xEE1B, 0xFA27, 0xF5C3, 0xF3A5, 0xF4C7, 0xE1ED, 0xE1EB, 0xF2A7,
142 0xDCD3, 0xC9F9, 0xDDC3, 0xCF99, 0xCE9B, 0xC9EB, 0xA9F9, 0xBAB5, 0xA9ED, 0xAE9D, 0xAF99, 0xBBA5
143};