From 21e6a59ed8574efb07b3700c0ab7ad35ff06b96d Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Sun, 11 Nov 2012 13:26:36 -0800 Subject: Improved DSD. --- src/misc/util/utilTruth.h | 49 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-) (limited to 'src/misc') diff --git a/src/misc/util/utilTruth.h b/src/misc/util/utilTruth.h index 9281d6f8..eaaa7d2f 100644 --- a/src/misc/util/utilTruth.h +++ b/src/misc/util/utilTruth.h @@ -234,7 +234,6 @@ static inline void Abc_TtElemInit( word ** pTtElems, int nVars ) pTtElems[i][k] = (k & (1 << (i-6))) ? ~(word)0 : 0; } - /**Function************************************************************* Synopsis [] @@ -257,6 +256,50 @@ static inline word Abc_Tt6Cofactor1( word t, int iVar ) return (t & s_Truths6[iVar]) | ((t & s_Truths6[iVar]) >> (1< 5 ) + { + word * pLimit = pIn + nWords; + int i, iStep = Abc_TtWordNum(iVar); + for ( ; pIn < pLimit; pIn += 2*iStep, pOut += 2*iStep ) + for ( i = 0; i < iStep; i++ ) + { + pOut[i] = pIn[i]; + pOut[i + iStep] = pIn[i]; + } + } +} +static inline void Abc_TtCofactor1p( word * pOut, word * pIn, int nWords, int iVar ) +{ + if ( nWords == 1 ) + pOut[0] = (pIn[0] & s_Truths6[iVar]) | ((pIn[0] & s_Truths6[iVar]) >> (1 << iVar)); + else if ( iVar <= 5 ) + { + int w, shift = (1 << iVar); + for ( w = 0; w < nWords; w++ ) + pOut[w] = (pIn[w] & s_Truths6[iVar]) | ((pIn[w] & s_Truths6[iVar]) >> shift); + } + else // if ( iVar > 5 ) + { + word * pLimit = pIn + nWords; + int i, iStep = Abc_TtWordNum(iVar); + for ( ; pIn < pLimit; pIn += 2*iStep, pOut += 2*iStep ) + for ( i = 0; i < iStep; i++ ) + { + pOut[i] = pIn[i + iStep]; + pOut[i + iStep] = pIn[i + iStep]; + } + } +} static inline void Abc_TtCofactor0( word * pTruth, int nWords, int iVar ) { if ( nWords == 1 ) @@ -274,7 +317,7 @@ static inline void Abc_TtCofactor0( word * pTruth, int nWords, int iVar ) for ( ; pTruth < pLimit; pTruth += 2*iStep ) for ( i = 0; i < iStep; i++ ) pTruth[i + iStep] = pTruth[i]; - } + } } static inline void Abc_TtCofactor1( word * pTruth, int nWords, int iVar ) { @@ -293,7 +336,7 @@ static inline void Abc_TtCofactor1( word * pTruth, int nWords, int iVar ) for ( ; pTruth < pLimit; pTruth += 2*iStep ) for ( i = 0; i < iStep; i++ ) pTruth[i] = pTruth[i + iStep]; - } + } } /**Function************************************************************* -- cgit v1.2.3