00001 00019 #include "fpgaInt.h" 00020 00021 #ifdef MAP_ALLOCATE_FANOUT 00022 00026 00030 00042 void Fpga_NodeAddFaninFanout( Fpga_Node_t * pFanin, Fpga_Node_t * pFanout ) 00043 { 00044 Fpga_Node_t * pPivot; 00045 00046 // pFanins is a fanin of pFanout 00047 assert( !Fpga_IsComplement(pFanin) ); 00048 assert( !Fpga_IsComplement(pFanout) ); 00049 assert( Fpga_Regular(pFanout->p1) == pFanin || Fpga_Regular(pFanout->p2) == pFanin ); 00050 00051 pPivot = pFanin->pFanPivot; 00052 if ( pPivot == NULL ) 00053 { 00054 pFanin->pFanPivot = pFanout; 00055 return; 00056 } 00057 00058 if ( Fpga_Regular(pPivot->p1) == pFanin ) 00059 { 00060 if ( Fpga_Regular(pFanout->p1) == pFanin ) 00061 { 00062 pFanout->pFanFanin1 = pPivot->pFanFanin1; 00063 pPivot->pFanFanin1 = pFanout; 00064 } 00065 else // if ( Fpga_Regular(pFanout->p2) == pFanin ) 00066 { 00067 pFanout->pFanFanin2 = pPivot->pFanFanin1; 00068 pPivot->pFanFanin1 = pFanout; 00069 } 00070 } 00071 else // if ( Fpga_Regular(pPivot->p2) == pFanin ) 00072 { 00073 assert( Fpga_Regular(pPivot->p2) == pFanin ); 00074 if ( Fpga_Regular(pFanout->p1) == pFanin ) 00075 { 00076 pFanout->pFanFanin1 = pPivot->pFanFanin2; 00077 pPivot->pFanFanin2 = pFanout; 00078 } 00079 else // if ( Fpga_Regular(pFanout->p2) == pFanin ) 00080 { 00081 pFanout->pFanFanin2 = pPivot->pFanFanin2; 00082 pPivot->pFanFanin2 = pFanout; 00083 } 00084 } 00085 } 00086 00098 void Fpga_NodeRemoveFaninFanout( Fpga_Node_t * pFanin, Fpga_Node_t * pFanoutToRemove ) 00099 { 00100 Fpga_Node_t * pFanout, * pFanout2, ** ppFanList; 00101 // start the linked list of fanouts 00102 ppFanList = &pFanin->pFanPivot; 00103 // go through the fanouts 00104 Fpga_NodeForEachFanoutSafe( pFanin, pFanout, pFanout2 ) 00105 { 00106 // skip the fanout-to-remove 00107 if ( pFanout == pFanoutToRemove ) 00108 continue; 00109 // add useful fanouts to the list 00110 *ppFanList = pFanout; 00111 ppFanList = Fpga_NodeReadNextFanoutPlace( pFanin, pFanout ); 00112 } 00113 *ppFanList = NULL; 00114 } 00115 00127 int Fpga_NodeGetFanoutNum( Fpga_Node_t * pNode ) 00128 { 00129 Fpga_Node_t * pFanout; 00130 int Counter = 0; 00131 Fpga_NodeForEachFanout( pNode, pFanout ) 00132 Counter++; 00133 return Counter; 00134 } 00135 00139 00140 #endif 00141