99 unsigned * pTruth, * pTruth0, * pTruth1;
101 assert( !Hop_IsComplement(pObj) );
102 if ( !Hop_ObjIsNode(pObj) || !Hop_ObjIsMarkA(pObj) )
103 return (
unsigned *)pObj->
pData;
108 pTruth = Vec_IntFetch( vTruth,
nWords );
109 if ( Hop_ObjIsExor(pObj) )
110 for ( i = 0; i <
nWords; i++ )
111 pTruth[i] = pTruth0[i] ^ pTruth1[i];
112 else if ( !Hop_ObjFaninC0(pObj) && !Hop_ObjFaninC1(pObj) )
113 for ( i = 0; i <
nWords; i++ )
114 pTruth[i] = pTruth0[i] & pTruth1[i];
115 else if ( !Hop_ObjFaninC0(pObj) && Hop_ObjFaninC1(pObj) )
116 for ( i = 0; i <
nWords; i++ )
117 pTruth[i] = pTruth0[i] & ~pTruth1[i];
118 else if ( Hop_ObjFaninC0(pObj) && !Hop_ObjFaninC1(pObj) )
119 for ( i = 0; i <
nWords; i++ )
120 pTruth[i] = ~pTruth0[i] & pTruth1[i];
122 for ( i = 0; i <
nWords; i++ )
123 pTruth[i] = ~pTruth0[i] & ~pTruth1[i];
124 assert( Hop_ObjIsMarkA(pObj) );
125 Hop_ObjClearMarkA( pObj );
126 pObj->
pData = pTruth;
145 static unsigned uTruths[8][8] = {
146 { 0xAAAAAAAA,0xAAAAAAAA,0xAAAAAAAA,0xAAAAAAAA,0xAAAAAAAA,0xAAAAAAAA,0xAAAAAAAA,0xAAAAAAAA },
147 { 0xCCCCCCCC,0xCCCCCCCC,0xCCCCCCCC,0xCCCCCCCC,0xCCCCCCCC,0xCCCCCCCC,0xCCCCCCCC,0xCCCCCCCC },
148 { 0xF0F0F0F0,0xF0F0F0F0,0xF0F0F0F0,0xF0F0F0F0,0xF0F0F0F0,0xF0F0F0F0,0xF0F0F0F0,0xF0F0F0F0 },
149 { 0xFF00FF00,0xFF00FF00,0xFF00FF00,0xFF00FF00,0xFF00FF00,0xFF00FF00,0xFF00FF00,0xFF00FF00 },
150 { 0xFFFF0000,0xFFFF0000,0xFFFF0000,0xFFFF0000,0xFFFF0000,0xFFFF0000,0xFFFF0000,0xFFFF0000 },
151 { 0x00000000,0xFFFFFFFF,0x00000000,0xFFFFFFFF,0x00000000,0xFFFFFFFF,0x00000000,0xFFFFFFFF },
152 { 0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF },
153 { 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF }
156 unsigned * pTruth, * pTruth2;
162 vTtElems = Vec_PtrAllocTruthTables( nVars );
169 nWords = Hop_TruthWordNum( nVars );
170 Vec_IntClear( vTruth );
171 Vec_IntGrow( vTruth,
nWords * (nNodes+1) );
172 pTruth = Vec_IntFetch( vTruth,
nWords );
174 if ( Hop_ObjIsConst1( Hop_Regular(pRoot) ) )
177 if ( Hop_IsComplement(pRoot) )
178 Hop_ManTruthClear( pTruth, nVars );
180 Hop_ManTruthFill( pTruth, nVars );
184 assert( nVars <= Hop_ManPiNum(
p) );
189 for ( i = 0; i < nVars; i++ )
191 pObj = Hop_ManPi(
p, i );
193 pObj->
pData = Vec_PtrEntry(vTtElems, nVars-1-i);
195 pObj->
pData = (
void *)uTruths[nVars-1-i];
201 for ( i = 0; i < nVars; i++ )
203 pObj = Hop_ManPi(
p, i );
205 pObj->
pData = Vec_PtrEntry(vTtElems, i);
207 pObj->
pData = (
void *)uTruths[i];
213 Hop_ManTruthCopy( pTruth, pTruth2, nVars );
214 if ( Hop_IsComplement(pRoot) )
215 Hop_ManTruthNot( pTruth, pTruth, nVars );
217 Vec_PtrFree( vTtElems );