From fcfafb06017e50144966cd4d56dfac77123ae03c Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Mon, 12 Aug 2013 23:27:20 -0700 Subject: Enabling additional matching feature in the LUT mapper. --- src/map/if/ifDec16.c | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) (limited to 'src/map/if/ifDec16.c') diff --git a/src/map/if/ifDec16.c b/src/map/if/ifDec16.c index e349f6eb..729b0489 100644 --- a/src/map/if/ifDec16.c +++ b/src/map/if/ifDec16.c @@ -1749,6 +1749,133 @@ If_Grp_t If_CluCheck( If_Man_t * p, word * pTruth0, int nVars, int iVarStart, in return G1; } + +static inline word Abc_Tt6Cofactor0( word t, int iVar ) +{ + assert( iVar >= 0 && iVar < 6 ); + return (t &~Truth6[iVar]) | ((t &~Truth6[iVar]) << (1<= 0 && iVar < 6 ); + return (t & Truth6[iVar]) | ((t & Truth6[iVar]) >> (1< 4LUT + If_Grp_t G, R; + word Func0, Func1; + G = If_CluCheck( p, (word *)pTruth, nLeaves, 0, 5, 4, &R, &Func0, &Func1, NULL, 0 ); + if ( G.nVars == 0 ) + return 0; + Func0 = If_CluAdjust( Func0, R.nVars ); + Func1 = If_CluAdjust( Func1, G.nVars ); +#if 0 + Kit_DsdPrintFromTruth( pTruth, nVars ); printf( "\n" ); + Kit_DsdPrintFromTruth( (unsigned*)&Func0, R.nVars ); printf( "\n" ); + Kit_DsdPrintFromTruth( (unsigned*)&Func1, G.nVars ); printf( "\n" ); + If_CluPrintGroup( &R ); + If_CluPrintGroup( &G ); +#endif + if ( G.nVars < 5 || (p->pPars->fEnableCheck75 && If_CluCheckDecOut(Func1, 5)) || (p->pPars->fEnableCheck75u && If_CluCheckDecOutU(Func1, 5)) ) + return 1; + return 0; +} +int If_CutPerformCheck54( If_Man_t * p, unsigned * pTruth, int nVars, int nLeaves, char * pStr ) +{ + // 4LUT -> 5LUT + If_Grp_t G, R; + word Func0, Func1; + G = If_CluCheck( p, (word *)pTruth, nLeaves, 0, 4, 5, &R, &Func0, &Func1, NULL, 0 ); + if ( G.nVars == 0 ) + return 0; + Func0 = If_CluAdjust( Func0, R.nVars ); + Func1 = If_CluAdjust( Func1, G.nVars ); +#if 0 + Kit_DsdPrintFromTruth( pTruth, nVars ); printf( "\n" ); + Kit_DsdPrintFromTruth( (unsigned*)&Func0, R.nVars ); printf( "\n" ); + Kit_DsdPrintFromTruth( (unsigned*)&Func1, G.nVars ); printf( "\n" ); + If_CluPrintGroup( &R ); + If_CluPrintGroup( &G ); +#endif + if ( R.nVars < 5 || (p->pPars->fEnableCheck75 && If_CluCheckDecIn(Func0, 5)) || (p->pPars->fEnableCheck75u && If_CluCheckDecInU(Func0, 5)) ) + return 1; + return 0; +} + // returns the best group found If_Grp_t If_CluCheck3( If_Man_t * p, word * pTruth0, int nVars, int nLutLeaf, int nLutLeaf2, int nLutRoot, If_Grp_t * pR, If_Grp_t * pG2, word * pFunc0, word * pFunc1, word * pFunc2 ) -- cgit v1.2.3