diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2014-02-16 19:30:38 -0800 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2014-02-16 19:30:38 -0800 |
commit | 46532e6c2f3d0dabdb03daad5c55f6f732311797 (patch) | |
tree | 8ce2a3bd42c7cf9ed19ef035eecc50bfa4d65eea /src/misc/vec | |
parent | ea1baf6f70baec775086b0bff57a27f720ca870d (diff) | |
download | abc-46532e6c2f3d0dabdb03daad5c55f6f732311797.tar.gz abc-46532e6c2f3d0dabdb03daad5c55f6f732311797.tar.bz2 abc-46532e6c2f3d0dabdb03daad5c55f6f732311797.zip |
Significant improvement to LUT mappers (if, &if).
Diffstat (limited to 'src/misc/vec')
-rw-r--r-- | src/misc/vec/vecMem.h | 39 |
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 |