diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/aig/gia/giaBalance2.c | 11 | ||||
-rw-r--r-- | src/aig/gia/giaMf.c | 11 | ||||
-rw-r--r-- | src/map/if/ifDelay.c | 1 | ||||
-rw-r--r-- | src/map/if/ifMan.c | 2 | ||||
-rw-r--r-- | src/misc/util/utilTruth.h | 53 |
5 files changed, 67 insertions, 11 deletions
diff --git a/src/aig/gia/giaBalance2.c b/src/aig/gia/giaBalance2.c index 550df2bd..73d2a6fb 100644 --- a/src/aig/gia/giaBalance2.c +++ b/src/aig/gia/giaBalance2.c @@ -34,13 +34,14 @@ ABC_NAMESPACE_IMPL_START #define BAL_CUT_MAX 8 #define BAL_SUPER 50 #define BAL_NO_LEAF 31 +#define BAL_NO_FUNC 134217727 // (1<<27)-1 typedef struct Bal_Cut_t_ Bal_Cut_t; struct Bal_Cut_t_ { word Sign; // signature int Delay; // delay - unsigned iFunc : 27; // function + unsigned iFunc : 27; // function (BAL_NO_FUNC) unsigned nLeaves : 5; // leaf number (Bal_NO_LEAF) int pLeaves[BAL_LEAF_MAX]; // leaves }; @@ -235,7 +236,7 @@ static inline int Bal_CutMergeOrder( Bal_Cut_t * pCut0, Bal_Cut_t * pCut1, Bal_C pC[i] = pC0[i]; } pCut->nLeaves = nLutSize; - pCut->iFunc = -1; + pCut->iFunc = BAL_NO_FUNC; pCut->Sign = pCut0->Sign | pCut1->Sign; pCut->Delay = Abc_MaxInt( pCut0->Delay, pCut1->Delay ); return 1; @@ -268,7 +269,7 @@ FlushCut0: while ( i < nSize0 ) pC[c++] = pC0[i++]; pCut->nLeaves = c; - pCut->iFunc = -1; + pCut->iFunc = BAL_NO_FUNC; pCut->Sign = pCut0->Sign | pCut1->Sign; pCut->Delay = Abc_MaxInt( pCut0->Delay, pCut1->Delay ); return 1; @@ -278,7 +279,7 @@ FlushCut1: while ( k < nSize1 ) pC[c++] = pC1[k++]; pCut->nLeaves = c; - pCut->iFunc = -1; + pCut->iFunc = BAL_NO_FUNC; pCut->Sign = pCut0->Sign | pCut1->Sign; pCut->Delay = Abc_MaxInt( pCut0->Delay, pCut1->Delay ); return 1; @@ -303,7 +304,7 @@ static inline int Bal_CutMergeOrderMux( Bal_Cut_t * pCut0, Bal_Cut_t * pCut1, Ba if (x2 == xMin) i2++; } pCut->nLeaves = c; - pCut->iFunc = -1; + pCut->iFunc = BAL_NO_FUNC; pCut->Sign = pCut0->Sign | pCut1->Sign | pCut2->Sign; pCut->Delay = Abc_MaxInt( pCut0->Delay, Abc_MaxInt(pCut1->Delay, pCut2->Delay) ); return 1; diff --git a/src/aig/gia/giaMf.c b/src/aig/gia/giaMf.c index da571904..331612a2 100644 --- a/src/aig/gia/giaMf.c +++ b/src/aig/gia/giaMf.c @@ -35,6 +35,7 @@ ABC_NAMESPACE_IMPL_START #define MF_LOG_PAGE 12 #define MF_NO_LEAF 31 #define MF_TT_WORDS ((MF_LEAF_MAX > 6) ? 1 << (MF_LEAF_MAX-6) : 1) +#define MF_NO_FUNC 134217727 // (1<<27)-1 typedef struct Mf_Cut_t_ Mf_Cut_t; struct Mf_Cut_t_ @@ -42,7 +43,7 @@ struct Mf_Cut_t_ word Sign; // signature int Delay; // delay float Flow; // flow - unsigned iFunc : 27; // function + unsigned iFunc : 27; // function (MF_NO_FUNC) unsigned nLeaves : 5; // leaf number (MF_NO_LEAF) int pLeaves[MF_LEAF_MAX+1]; // leaves }; @@ -785,7 +786,7 @@ static inline int Mf_CutMergeOrder( Mf_Cut_t * pCut0, Mf_Cut_t * pCut1, Mf_Cut_t pC[i] = pC0[i]; } pCut->nLeaves = nLutSize; - pCut->iFunc = -1; + pCut->iFunc = MF_NO_FUNC; pCut->Sign = pCut0->Sign | pCut1->Sign; return 1; } @@ -819,7 +820,7 @@ FlushCut0: while ( i < nSize0 ) pC[c++] = pC0[i++]; pCut->nLeaves = c; - pCut->iFunc = -1; + pCut->iFunc = MF_NO_FUNC; pCut->Sign = pCut0->Sign | pCut1->Sign; return 1; @@ -828,7 +829,7 @@ FlushCut1: while ( k < nSize1 ) pC[c++] = pC1[k++]; pCut->nLeaves = c; - pCut->iFunc = -1; + pCut->iFunc = MF_NO_FUNC; pCut->Sign = pCut0->Sign | pCut1->Sign; return 1; } @@ -852,7 +853,7 @@ static inline int Mf_CutMergeOrderMux( Mf_Cut_t * pCut0, Mf_Cut_t * pCut1, Mf_Cu if (x2 == xMin) i2++; } pCut->nLeaves = c; - pCut->iFunc = -1; + pCut->iFunc = MF_NO_FUNC; pCut->Sign = pCut0->Sign | pCut1->Sign | pCut2->Sign; return 1; } diff --git a/src/map/if/ifDelay.c b/src/map/if/ifDelay.c index bf143ce5..da4801b4 100644 --- a/src/map/if/ifDelay.c +++ b/src/map/if/ifDelay.c @@ -20,6 +20,7 @@ #include "if.h" #include "ifCount.h" +#include "bool/kit/kit.h" ABC_NAMESPACE_IMPL_START diff --git a/src/map/if/ifMan.c b/src/map/if/ifMan.c index 26989420..43f7b7e0 100644 --- a/src/map/if/ifMan.c +++ b/src/map/if/ifMan.c @@ -79,7 +79,7 @@ If_Man_t * If_ManStart( If_Par_t * pPars ) for ( v = 0; v < 6; v++ ) p->vTtIsops[v] = p->vTtIsops[6]; } - if ( p->pPars->fDelayOpt || pPars->nGateSize > 0 || p->pPars->fDsdBalance ); + if ( pPars->fDelayOpt || pPars->nGateSize > 0 || pPars->fDsdBalance ) { p->vCover = Vec_IntAlloc( 0 ); p->vArray = Vec_IntAlloc( 1000 ); diff --git a/src/misc/util/utilTruth.h b/src/misc/util/utilTruth.h index a45f62ea..ee1784fb 100644 --- a/src/misc/util/utilTruth.h +++ b/src/misc/util/utilTruth.h @@ -53,6 +53,15 @@ static word s_Truths6Neg[6] = { ABC_CONST(0x00000000FFFFFFFF) }; +static word s_TruthXors[6] = { + ABC_CONST(0x0000000000000000), + ABC_CONST(0x6666666666666666), + ABC_CONST(0x6969696969696969), + ABC_CONST(0x6996699669966996), + ABC_CONST(0x6996966969969669), + ABC_CONST(0x6996966996696996) +}; + static word s_PMasks[5][3] = { { ABC_CONST(0x9999999999999999), ABC_CONST(0x2222222222222222), ABC_CONST(0x4444444444444444) }, { ABC_CONST(0xC3C3C3C3C3C3C3C3), ABC_CONST(0x0C0C0C0C0C0C0C0C), ABC_CONST(0x3030303030303030) }, @@ -163,6 +172,19 @@ static inline int Abc_TtHexDigitNum( int nVars ) { return nVars <= 2 ? 1 : 1 << /**Function************************************************************* + Synopsis [Bit mask.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +static inline word Abc_Tt6Mask( int nBits ) { assert( nBits >= 0 && nBits <= 64 ); return (~(word)0) >> (64-nBits); } + +/**Function************************************************************* + Synopsis [] Description [] @@ -949,6 +971,37 @@ static inline int Abc_Tt6SupportAndSize( word t, int nVars, int * pSuppSize ) /**Function************************************************************* + Synopsis [Detecting elementary functions.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +static inline int Abc_TtOnlyOneOne( word t ) +{ + if ( t == 0 ) + return 0; + return (t & (t-1)) == 0; +} +static inline int Gia_ManTtIsAndType( word t, int nVars ) +{ + return Abc_TtOnlyOneOne( t & Abc_Tt6Mask(1 << nVars) ); +} +static inline int Gia_ManTtIsOrType( word t, int nVars ) +{ + return Abc_TtOnlyOneOne( ~t & Abc_Tt6Mask(1 << nVars) ); +} +static inline int Gia_ManTtIsXorType( word t, int nVars ) +{ + return ((((t & 1) ? ~t : t) ^ s_TruthXors[nVars]) & Abc_Tt6Mask(1 << nVars)) == 0; +} + + +/**Function************************************************************* + Synopsis [] Description [] |