summaryrefslogtreecommitdiffstats
path: root/src/map/amap
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2017-06-29 17:58:43 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2017-06-29 17:58:43 -0700
commita1dd7e3fb04660e025f8cb37eb2636d3d700c3ac (patch)
tree7410f5a40db666375e3536622b154ddc135e7485 /src/map/amap
parent96c5b56245c526b9373e0290cbc72191d475c12f (diff)
downloadabc-a1dd7e3fb04660e025f8cb37eb2636d3d700c3ac.tar.gz
abc-a1dd7e3fb04660e025f8cb37eb2636d3d700c3ac.tar.bz2
abc-a1dd7e3fb04660e025f8cb37eb2636d3d700c3ac.zip
Saturating floating point computation.
Diffstat (limited to 'src/map/amap')
-rw-r--r--src/map/amap/amapMatch.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/map/amap/amapMatch.c b/src/map/amap/amapMatch.c
index 8b08c993..85e03056 100644
--- a/src/map/amap/amapMatch.c
+++ b/src/map/amap/amapMatch.c
@@ -387,6 +387,7 @@ static inline void Amap_ManMatchGetFlows( Amap_Man_t * p, Amap_Mat_t * pM )
Amap_Mat_t * pMFanin;
Amap_Obj_t * pFanin;
Amap_Gat_t * pGate;
+ float AddOn;
int i;
pGate = Amap_LibGate( p->pLib, pM->pSet->iGate );
assert( pGate->nPins == pM->pCut->nFans );
@@ -399,10 +400,15 @@ static inline void Amap_ManMatchGetFlows( Amap_Man_t * p, Amap_Mat_t * pM )
pMFanin = &pFanin->Best;
pM->Delay = Abc_MaxInt( pM->Delay, pMFanin->Delay );
pM->AveFan += Amap_ObjRefsTotal(pFanin);
- if ( Amap_ObjRefsTotal(pFanin) == 0 )
- pM->Area += pMFanin->Area;
- else
- pM->Area += pMFanin->Area / pFanin->EstRefs;
+// if ( Amap_ObjRefsTotal(pFanin) == 0 )
+// pM->Area += pMFanin->Area;
+// else
+// pM->Area += pMFanin->Area / pFanin->EstRefs;
+ AddOn = Amap_ObjRefsTotal(pFanin) == 0 ? pMFanin->Area : pMFanin->Area / pFanin->EstRefs;
+ if ( pM->Area >= (float)1e32 || AddOn >= (float)1e32 )
+ pM->Area = (float)1e32;
+ else
+ pM->Area += AddOn;
}
pM->AveFan /= pGate->nPins;
pM->Delay += 1.0;