summaryrefslogtreecommitdiffstats
path: root/src/map/if/ifDsd.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2014-02-28 21:14:22 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2014-02-28 21:14:22 -0800
commit8f4854890c60188639b4c0d1dc105a9fcb81a727 (patch)
tree891e2fa7e5f716fe8873533b767973542700afda /src/map/if/ifDsd.c
parent3d6eac52abb1fd05a0c954f00dd5b8b855765f6e (diff)
downloadabc-8f4854890c60188639b4c0d1dc105a9fcb81a727.tar.gz
abc-8f4854890c60188639b4c0d1dc105a9fcb81a727.tar.bz2
abc-8f4854890c60188639b4c0d1dc105a9fcb81a727.zip
Changes to LUT mappers.
Diffstat (limited to 'src/map/if/ifDsd.c')
-rw-r--r--src/map/if/ifDsd.c112
1 files changed, 56 insertions, 56 deletions
diff --git a/src/map/if/ifDsd.c b/src/map/if/ifDsd.c
index a72362d7..a059b668 100644
--- a/src/map/if/ifDsd.c
+++ b/src/map/if/ifDsd.c
@@ -383,6 +383,61 @@ void If_DsdManPrint( If_DsdMan_t * p, char * pFileName, int fVerbose )
if ( pFileName )
fclose( pFile );
}
+
+/**Function*************************************************************
+
+ Synopsis [Sorting DSD literals.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int If_DsdObjCompare( Vec_Ptr_t * p, int iLit0, int iLit1 )
+{
+ If_DsdObj_t * p0 = If_DsdVecObj(p, Abc_Lit2Var(iLit0));
+ If_DsdObj_t * p1 = If_DsdVecObj(p, Abc_Lit2Var(iLit1));
+ int i, Res;
+ if ( If_DsdObjType(p0) < If_DsdObjType(p1) )
+ return -1;
+ if ( If_DsdObjType(p0) > If_DsdObjType(p1) )
+ return 1;
+ if ( If_DsdObjType(p0) < IF_DSD_AND )
+ return 0;
+ if ( If_DsdObjFaninNum(p0) < If_DsdObjFaninNum(p1) )
+ return -1;
+ if ( If_DsdObjFaninNum(p0) > If_DsdObjFaninNum(p1) )
+ return 1;
+ for ( i = 0; i < If_DsdObjFaninNum(p0); i++ )
+ {
+ Res = If_DsdObjCompare( p, If_DsdObjFaninLit(p0, i), If_DsdObjFaninLit(p1, i) );
+ if ( Res != 0 )
+ return Res;
+ }
+ if ( Abc_LitIsCompl(iLit0) < Abc_LitIsCompl(iLit1) )
+ return -1;
+ if ( Abc_LitIsCompl(iLit0) > Abc_LitIsCompl(iLit1) )
+ return 1;
+ return 0;
+}
+void If_DsdObjSort( Vec_Ptr_t * p, int * pLits, int nLits, int * pPerm )
+{
+ int i, j, best_i;
+ for ( i = 0; i < nLits-1; i++ )
+ {
+ best_i = i;
+ for ( j = i+1; j < nLits; j++ )
+ if ( If_DsdObjCompare(p, pLits[best_i], pLits[j]) == 1 )
+ best_i = j;
+ if ( i == best_i )
+ continue;
+ ABC_SWAP( int, pLits[i], pLits[best_i] );
+ if ( pPerm )
+ ABC_SWAP( int, pPerm[i], pPerm[best_i] );
+ }
+}
/**Function*************************************************************
@@ -470,7 +525,7 @@ int If_DsdObjFindOrAdd( If_DsdMan_t * p, int Type, int * pLits, int nLits, word
unsigned * pSpot = If_DsdObjHashLookup( p, Type, pLits, nLits, truthId );
abctime clk;
if ( *pSpot )
- return *pSpot;
+ return (int)*pSpot;
clk = Abc_Clock();
if ( truthId >= 0 && truthId == Vec_PtrSize(p->vTtDecs) )
{
@@ -709,61 +764,6 @@ word * If_DsdManComputeTruth( If_DsdMan_t * p, int iDsd, unsigned char * pPermLi
assert( nSupp == If_DsdVecObjSuppSize(p->vObjs, Abc_Lit2Var(iDsd)) );
return pRes;
}
-
-/**Function*************************************************************
-
- Synopsis [Sorting DSD literals.]
-
- Description []
-
- SideEffects []
-
- SeeAlso []
-
-***********************************************************************/
-int If_DsdObjCompare( Vec_Ptr_t * p, int iLit0, int iLit1 )
-{
- If_DsdObj_t * p0 = If_DsdVecObj(p, Abc_Lit2Var(iLit0));
- If_DsdObj_t * p1 = If_DsdVecObj(p, Abc_Lit2Var(iLit1));
- int i, Res;
- if ( If_DsdObjType(p0) < If_DsdObjType(p1) )
- return -1;
- if ( If_DsdObjType(p0) > If_DsdObjType(p1) )
- return 1;
- if ( If_DsdObjType(p0) < IF_DSD_AND )
- return 0;
- if ( If_DsdObjFaninNum(p0) < If_DsdObjFaninNum(p1) )
- return -1;
- if ( If_DsdObjFaninNum(p0) > If_DsdObjFaninNum(p1) )
- return 1;
- for ( i = 0; i < If_DsdObjFaninNum(p0); i++ )
- {
- Res = If_DsdObjCompare( p, If_DsdObjFaninLit(p0, i), If_DsdObjFaninLit(p1, i) );
- if ( Res != 0 )
- return Res;
- }
- if ( Abc_LitIsCompl(iLit0) < Abc_LitIsCompl(iLit1) )
- return -1;
- if ( Abc_LitIsCompl(iLit0) > Abc_LitIsCompl(iLit1) )
- return 1;
- return 0;
-}
-void If_DsdObjSort( Vec_Ptr_t * p, int * pLits, int nLits, int * pPerm )
-{
- int i, j, best_i;
- for ( i = 0; i < nLits-1; i++ )
- {
- best_i = i;
- for ( j = i+1; j < nLits; j++ )
- if ( If_DsdObjCompare(p, pLits[best_i], pLits[j]) == 1 )
- best_i = j;
- if ( i == best_i )
- continue;
- ABC_SWAP( int, pLits[i], pLits[best_i] );
- if ( pPerm )
- ABC_SWAP( int, pPerm[i], pPerm[best_i] );
- }
-}
/**Function*************************************************************