summaryrefslogtreecommitdiffstats
path: root/src/misc/vec/vecMem.h
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2014-02-16 19:30:38 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2014-02-16 19:30:38 -0800
commit46532e6c2f3d0dabdb03daad5c55f6f732311797 (patch)
tree8ce2a3bd42c7cf9ed19ef035eecc50bfa4d65eea /src/misc/vec/vecMem.h
parentea1baf6f70baec775086b0bff57a27f720ca870d (diff)
downloadabc-46532e6c2f3d0dabdb03daad5c55f6f732311797.tar.gz
abc-46532e6c2f3d0dabdb03daad5c55f6f732311797.tar.bz2
abc-46532e6c2f3d0dabdb03daad5c55f6f732311797.zip
Significant improvement to LUT mappers (if, &if).
Diffstat (limited to 'src/misc/vec/vecMem.h')
-rw-r--r--src/misc/vec/vecMem.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/misc/vec/vecMem.h b/src/misc/vec/vecMem.h
index cba76a59..3f1b4517 100644
--- a/src/misc/vec/vecMem.h
+++ b/src/misc/vec/vecMem.h
@@ -310,6 +310,8 @@ static inline void Vec_MemHashAlloc( Vec_Mem_t * p, int nTableSize )
}
static inline void Vec_MemHashFree( Vec_Mem_t * p )
{
+ if ( p == NULL )
+ return;
Vec_IntFreeP( &p->vTable );
Vec_IntFreeP( &p->vNexts );
}
@@ -362,6 +364,43 @@ static int Vec_MemHashInsert( Vec_Mem_t * p, word * pEntry )
}
+/**Function*************************************************************
+
+ Synopsis [Allocates memory vector for storing truth tables.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+static inline Vec_Mem_t * Vec_MemAllocForTT( int nVars )
+{
+ int Value, nWords = (nVars <= 6 ? 1 : (1 << (nVars - 6)));
+ word * uTruth = ABC_ALLOC( word, nWords );
+ Vec_Mem_t * vTtMem = Vec_MemAlloc( nWords, 12 );
+ Vec_MemHashAlloc( vTtMem, 10000 );
+ memset( uTruth, 0x00, sizeof(word) * nWords );
+ Value = Vec_MemHashInsert( vTtMem, uTruth ); assert( Value == 0 );
+ memset( uTruth, 0xAA, sizeof(word) * nWords );
+ Value = Vec_MemHashInsert( vTtMem, uTruth ); assert( Value == 1 );
+ ABC_FREE( uTruth );
+ return vTtMem;
+}
+static inline void Vec_MemDumpTruthTables( Vec_Mem_t * p, char * pName, int nLutSize )
+{
+ FILE * pFile;
+ char pFileName[1000];
+ sprintf( pFileName, "tt_%s_%02d.txt", pName, nLutSize );
+ pFile = fopen( pFileName, "wb" );
+ Vec_MemDump( pFile, p );
+ fclose( pFile );
+ printf( "Dumped %d %d-var truth tables into file \"%s\" (%.2f MB).\n",
+ Vec_MemEntryNum(p), nLutSize, pFileName,
+ 8.0 * Vec_MemEntryNum(p) * Vec_MemEntrySize(p) / (1 << 20) );
+}
+
ABC_NAMESPACE_HEADER_END
#endif