30 extern char *
Dau_DsdMerge(
char * pDsd0i,
int * pPerm0,
char * pDsd1i,
int * pPerm1,
int fCompl0,
int fCompl1,
int nVars );
50 uWord = (uWord & 0x55555555) + ((uWord>>1) & 0x55555555);
51 uWord = (uWord & 0x33333333) + ((uWord>>2) & 0x33333333);
52 uWord = (uWord & 0x0F0F0F0F) + ((uWord>>4) & 0x0F0F0F0F);
53 uWord = (uWord & 0x00FF00FF) + ((uWord>>8) & 0x00FF00FF);
54 return (uWord & 0x0000FFFF) + (uWord>>16);
70 static float Pin2Pin[2][3] = { {1.0, 1.0, 1.0}, {1.0, 1.0, 0.0} };
78 Delay =
IF_MAX( Delay, Pin2Pin[fCarry][i] + DelayCur );
100 int fFunc0R, fFunc1R;
101 int i, k, v, iCutDsd, fChange;
109 else if ( Mode == 1 )
112 if ( Mode && pObj->
nRefs > 0 )
138 Abc_Print( 1,
"If_ObjPerformMappingAnd(): Warning! Delay of node %d (%f) exceeds the required times (%f).\n",
347 if ( pCut->
Delay == -1 )
384 if ( Mode && pObj->
nRefs > 0 )
387 Abc_Print( 1,
"The best cut is useless.\n" );
416 if ( Mode && pObj->
nRefs > 0 )
420 for ( pTemp = pObj; pTemp; pTemp = pTemp->
pEquiv )
474 if ( Mode && pObj->
nRefs > 0 )
498 assert( Mode >= 0 && Mode <= 2 );
564 char Symb = fPreprocess?
'P' : ((Mode == 0)?
'D' : ((Mode == 1)?
'F' :
'A'));
565 Abc_Print( 1,
"%c: Del = %7.2f. Ar = %9.1f. Edge = %8d. ",
int If_DsdManCheckDec(If_DsdMan_t *p, int iDsd)
float If_CutPowerFlow(If_Man_t *p, If_Cut_t *pCut, If_Obj_t *pRoot)
int If_DsdManCompute(If_DsdMan_t *p, word *pTruth, int nLeaves, unsigned char *pPerm, char *pLutStruct)
int If_CutMerge(If_Man_t *p, If_Cut_t *pCut0, If_Cut_t *pCut1, If_Cut_t *pCut)
Vec_Str_t * vTtVars[IF_MAX_FUNC_LUTSIZE+1]
#define If_ManForEachNode(p, pObj, i)
void Tim_ManIncrementTravId(Tim_Man_t *p)
DECLARATIONS ///.
float If_CutAreaDeref(If_Man_t *p, If_Cut_t *pCut)
float If_CutAreaFlow(If_Man_t *p, If_Cut_t *pCut)
Vec_Int_t * vTtDecs[IF_MAX_FUNC_LUTSIZE+1]
int If_CluCheckDecOut(word t, int nVars)
static int If_ObjIsAnd(If_Obj_t *pObj)
#define If_CutForEachLeaf(p, pCut, pLeaf, i)
static int If_ObjIsCo(If_Obj_t *pObj)
void If_ManComputeRequired(If_Man_t *p)
void Tim_ManSetCoArrival(Tim_Man_t *p, int iCo, float Delay)
static void If_CutCopy(If_Man_t *p, If_Cut_t *pDst, If_Cut_t *pSrc)
float If_CutDelaySpecial(If_Man_t *p, If_Cut_t *pCut, int fCarry)
static If_Obj_t * If_ObjFanin0(If_Obj_t *pObj)
Vec_Str_t * vTtPerms[IF_MAX_FUNC_LUTSIZE+1]
static int If_ObjIsCi(If_Obj_t *pObj)
static If_Cut_t * If_ObjCutBest(If_Obj_t *pObj)
int(* pFuncCost)(If_Man_t *, If_Cut_t *)
static int Abc_TtProcessBiDec(word *pTruth, int nVars, int nSuppLim)
static int If_WordCountOnes(unsigned uWord)
FUNCTION DEFINITIONS ///.
float If_CutEdgeDerefed(If_Man_t *p, If_Cut_t *pCut)
static abctime Abc_Clock()
static int Abc_MaxInt(int a, int b)
static void Vec_StrPush(Vec_Str_t *p, char Entry)
int(* pFuncUser)(If_Man_t *, If_Obj_t *, If_Cut_t *)
ABC_NAMESPACE_IMPL_START void If_ManCacheRecord(If_Man_t *p, int iDsd0, int iDsd1, int nShared, int iDsd)
DECLARATIONS ///.
void If_ObjPerformMappingAnd(If_Man_t *p, If_Obj_t *pObj, int Mode, int fPreprocess, int fFirst)
for(p=first;p->value< newval;p=p->next)
#define ABC_SWAP(Type, a, b)
#define If_ObjForEachCut(pObj, pCut, i)
static void Abc_PrintTime(int level, const char *pStr, abctime time)
#define If_ManForEachObj(p, pObj, i)
static void Vec_IntWriteEntry(Vec_Int_t *p, int i, int Entry)
static word * If_CutTruthW(If_Man_t *p, If_Cut_t *pCut)
If_Set_t * If_ManSetupNodeCutSet(If_Man_t *p, If_Obj_t *pObj)
static void Vec_StrWriteEntry(Vec_Str_t *p, int i, char Entry)
static char Vec_StrEntry(Vec_Str_t *p, int i)
int If_CutDelayRecCost3(If_Man_t *p, If_Cut_t *pCut, If_Obj_t *pObj)
static word * If_CutTruthWR(If_Man_t *p, If_Cut_t *pCut)
static int Vec_IntEntry(Vec_Int_t *p, int i)
unsigned __int64 word
DECLARATIONS ///.
#define ABC_NAMESPACE_IMPL_END
void If_ManSetupCutTriv(If_Man_t *p, If_Cut_t *pCut, int ObjId)
float If_CutAreaDerefed(If_Man_t *p, If_Cut_t *pCut)
static unsigned * If_CutTruth(If_Man_t *p, If_Cut_t *pCut)
int If_CluCheckDecInAny(word t, int nVars)
static void Vec_IntPush(Vec_Int_t *p, int Entry)
static void If_ObjSetArrTime(If_Obj_t *pObj, float ArrTime)
int If_CutMergeOrdered(If_Man_t *p, If_Cut_t *pCut0, If_Cut_t *pCut1, If_Cut_t *pCut)
static void Abc_Print(int level, const char *format,...)
int If_CutSopBalanceEval(If_Man_t *p, If_Cut_t *pCut, Vec_Int_t *vAig)
int If_CutComputeTruth(If_Man_t *p, If_Cut_t *pCut, If_Cut_t *pCut0, If_Cut_t *pCut1, int fCompl0, int fCompl1)
int If_DsdManSuppSize(If_DsdMan_t *p, int iDsd)
static float If_ObjArrTime(If_Obj_t *pObj)
#define ABC_NAMESPACE_IMPL_START
static int Vec_StrSize(Vec_Str_t *p)
static int If_CutDsdLit(If_Man_t *p, If_Cut_t *pCut)
static ABC_NAMESPACE_IMPL_START word Truth[8]
DECLARATIONS ///.
Vec_Int_t * vTtDsds[IF_MAX_FUNC_LUTSIZE+1]
static int Vec_IntSize(Vec_Int_t *p)
float If_CutDelay(If_Man_t *p, If_Obj_t *pObj, If_Cut_t *pCut)
int(* pFuncCell)(If_Man_t *, unsigned *, int, int, char *)
int If_CutFilter(If_Set_t *pCutSet, If_Cut_t *pCut, int fSaveCut0)
static int If_ObjIsConst1(If_Obj_t *pObj)
static int Abc_TtCheckCondDep(word *pTruth, int nVars, int nSuppLim)
static int Abc_Lit2Var(int Lit)
#define ABC_INFINITY
MACRO DEFINITIONS ///.
int If_CutDsdBalanceEval(If_Man_t *p, If_Cut_t *pCut, Vec_Int_t *vAig)
int If_CutLutBalanceEval(If_Man_t *p, If_Cut_t *pCut)
static char * If_CutDsdPerm(If_Man_t *p, If_Cut_t *pCut)
float Tim_ManGetCiArrival(Tim_Man_t *p, int iCi)
float If_CutAreaRef(If_Man_t *p, If_Cut_t *pCut)
ABC_NAMESPACE_IMPL_START char * Dau_DsdMerge(char *pDsd0i, int *pPerm0, char *pDsd1i, int *pPerm1, int fCompl0, int fCompl1, int nVars)
DECLARATIONS ///.
float If_CutEdgeFlow(If_Man_t *p, If_Cut_t *pCut)
int If_DsdManReadMark(If_DsdMan_t *p, int iDsd)
void If_CutSort(If_Man_t *p, If_Set_t *pCutSet, If_Cut_t *pCut)
int If_CutComputeTruthPerm(If_Man_t *p, If_Cut_t *pCut, If_Cut_t *pCut0, If_Cut_t *pCut1, int fCompl0, int fCompl1)
float If_CutPowerDerefed(If_Man_t *p, If_Cut_t *pCut, If_Obj_t *pRoot)
int If_CutDelaySop(If_Man_t *p, If_Cut_t *pCut)
void If_ManDerefNodeCutSet(If_Man_t *p, If_Obj_t *pObj)
void If_ManDerefChoiceCutSet(If_Man_t *p, If_Obj_t *pObj)
void If_ObjPerformMappingChoice(If_Man_t *p, If_Obj_t *pObj, int Mode, int fPreprocess)
int If_ManPerformMappingRound(If_Man_t *p, int nCutsUsed, int Mode, int fPreprocess, int fFirst, char *pLabel)