summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/aig/gia/gia.h2
-rw-r--r--src/aig/gia/giaUtil.c34
2 files changed, 20 insertions, 16 deletions
diff --git a/src/aig/gia/gia.h b/src/aig/gia/gia.h
index f427b670..aebcc7eb 100644
--- a/src/aig/gia/gia.h
+++ b/src/aig/gia/gia.h
@@ -945,7 +945,7 @@ extern Vec_Int_t * Gia_VtaConvertToGla( Gia_Man_t * p, Vec_Int_t * vVta
extern Vec_Int_t * Gia_VtaConvertFromGla( Gia_Man_t * p, Vec_Int_t * vGla, int nFrames );
extern Vec_Int_t * Gia_FlaConvertToGla( Gia_Man_t * p, Vec_Int_t * vFla );
extern Vec_Int_t * Gia_GlaConvertToFla( Gia_Man_t * p, Vec_Int_t * vGla );
-extern unsigned * Gia_ManComputePoTt( Gia_Man_t * p, Gia_Obj_t * pObj );
+extern unsigned * Gia_ObjComputeTruthTable( Gia_Man_t * p, Gia_Obj_t * pObj );
/*=== giaCTas.c ===========================================================*/
typedef struct Tas_Man_t_ Tas_Man_t;
diff --git a/src/aig/gia/giaUtil.c b/src/aig/gia/giaUtil.c
index bef6c229..6e2c49ff 100644
--- a/src/aig/gia/giaUtil.c
+++ b/src/aig/gia/giaUtil.c
@@ -1510,15 +1510,15 @@ unsigned * Gia_ManComputePoTruthTables( Gia_Man_t * p, int nBytesMax )
SeeAlso []
***********************************************************************/
-int Gia_ManComputePoTt_rec( Gia_Man_t * p, Gia_Obj_t * pObj )
+int Gia_ObjComputeTruthTable_rec( Gia_Man_t * p, Gia_Obj_t * pObj )
{
word * pTruth0, * pTruth1, * pTruth, * pTruthL;
if ( Gia_ObjIsTravIdCurrent(p, pObj) )
return pObj->Value;
Gia_ObjSetTravIdCurrent(p, pObj);
assert( Gia_ObjIsAnd(pObj) );
- pTruth0 = Vec_WrdArray(p->vTtMemory) + p->nTtWords * Gia_ManComputePoTt_rec( p, Gia_ObjFanin0(pObj) );
- pTruth1 = Vec_WrdArray(p->vTtMemory) + p->nTtWords * Gia_ManComputePoTt_rec( p, Gia_ObjFanin1(pObj) );
+ pTruth0 = Vec_WrdArray(p->vTtMemory) + p->nTtWords * Gia_ObjComputeTruthTable_rec( p, Gia_ObjFanin0(pObj) );
+ pTruth1 = Vec_WrdArray(p->vTtMemory) + p->nTtWords * Gia_ObjComputeTruthTable_rec( p, Gia_ObjFanin1(pObj) );
assert( p->nTtWords * p->iTtNum < Vec_WrdSize(p->vTtMemory) );
pTruth = Vec_WrdArray(p->vTtMemory) + p->nTtWords * p->iTtNum++;
pTruthL = Vec_WrdArray(p->vTtMemory) + p->nTtWords * p->iTtNum;
@@ -1542,13 +1542,12 @@ int Gia_ManComputePoTt_rec( Gia_Man_t * p, Gia_Obj_t * pObj )
}
return p->iTtNum-1;
}
-unsigned * Gia_ManComputePoTt( Gia_Man_t * p, Gia_Obj_t * pObj )
+unsigned * Gia_ObjComputeTruthTable( Gia_Man_t * p, Gia_Obj_t * pObj )
{
Gia_Obj_t * pTemp;
word * pTruth;
int i, k;
// this procedure works only for primary outputs
- assert( Gia_ObjIsCo(pObj) );
if ( p->vTtMemory == NULL )
{
word Truth6[7] = {
@@ -1584,16 +1583,21 @@ unsigned * Gia_ManComputePoTt( Gia_Man_t * p, Gia_Obj_t * pObj )
}
p->iTtNum = 7;
// compute truth table for the fanin node
- pTruth = Vec_WrdArray(p->vTtMemory) + p->nTtWords * Gia_ManComputePoTt_rec(p, Gia_ObjFanin0(pObj));
- // complement if needed
- if ( Gia_ObjFaninC0(pObj) )
+ if ( Gia_ObjIsCo(pObj) )
{
- word * pTemp = pTruth;
- assert( p->nTtWords * p->iTtNum < Vec_WrdSize(p->vTtMemory) );
- pTruth = Vec_WrdArray(p->vTtMemory) + p->nTtWords * p->iTtNum;
- for ( k = 0; k < p->nTtWords; k++ )
- pTruth[k] = ~pTemp[k];
+ pTruth = Vec_WrdArray(p->vTtMemory) + p->nTtWords * Gia_ObjComputeTruthTable_rec(p, Gia_ObjFanin0(pObj));
+ // complement if needed
+ if ( Gia_ObjFaninC0(pObj) )
+ {
+ word * pTemp = pTruth;
+ assert( p->nTtWords * p->iTtNum < Vec_WrdSize(p->vTtMemory) );
+ pTruth = Vec_WrdArray(p->vTtMemory) + p->nTtWords * p->iTtNum;
+ for ( k = 0; k < p->nTtWords; k++ )
+ pTruth[k] = ~pTemp[k];
+ }
}
+ else
+ pTruth = Vec_WrdArray(p->vTtMemory) + p->nTtWords * Gia_ObjComputeTruthTable_rec(p, pObj);
return (unsigned *)pTruth;
}
@@ -1608,7 +1612,7 @@ unsigned * Gia_ManComputePoTt( Gia_Man_t * p, Gia_Obj_t * pObj )
SeeAlso []
***********************************************************************/
-void Gia_ManComputePoTtTest( Gia_Man_t * p )
+void Gia_ObjComputeTruthTableTest( Gia_Man_t * p )
{
Gia_Obj_t * pObj;
unsigned * pTruth;
@@ -1616,7 +1620,7 @@ void Gia_ManComputePoTtTest( Gia_Man_t * p )
int i;
Gia_ManForEachPo( p, pObj, i )
{
- pTruth = Gia_ManComputePoTt( p, pObj );
+ pTruth = Gia_ObjComputeTruthTable( p, pObj );
// Extra_PrintHex( stdout, pTruth, Gia_ManPiNum(p) ); printf( "\n" );
}
Abc_PrintTime( 1, "Time", clock() - clk );