62{
78
79 int k, iLit, iLit0, iLit1;
80 if ( nIns == 1 )
81 {
84 assert( Vec_IntSize(vRes) == 0 );
86 {
87 assert( Vec_IntSize(vArg) == nRange );
89 Vec_IntPush( vRes, Abc_LitNot(iLit) );
90 return;
91 }
93 {
94 assert( Vec_IntSize(vArg) == nRange );
96 Vec_IntPush( vRes, iLit );
97 return;
98 }
100 {
101 assert( Vec_IntSize(vArg) == nRange );
102 Wlc_BlastMinus( pNew, Vec_IntArray(vArg), Vec_IntSize(vArg), vRes );
103 return;
104 }
106 {
109 for ( k = 1; k < nRange; k++ )
110 Vec_IntPush( vRes, 0 );
111 return;
112 }
114 {
117 for ( k = 1; k < nRange; k++ )
118 Vec_IntPush( vRes, 0 );
119 return;
120 }
122 {
125 for ( k = 1; k < nRange; k++ )
126 Vec_IntPush( vRes, 0 );
127 return;
128 }
130 {
133 for ( k = 1; k < nRange; k++ )
134 Vec_IntPush( vRes, 0 );
135 return;
136 }
138 {
141 Vec_IntFill( vRes, 1, Abc_LitNot(iLit) );
142 for ( k = 1; k < nRange; k++ )
143 Vec_IntPush( vRes, 0 );
144 return;
145 }
147 return;
148 }
149
150 if ( nIns == 2 )
151 {
155 int nRangeMax = Abc_MaxInt( nRange, Abc_MaxInt(Vec_IntSize(vArg0), Vec_IntSize(vArg1)) );
156 int nSizeArg0 = Vec_IntSize(vArg0);
157 int nSizeArg1 = Vec_IntSize(vArg1);
160 assert( Vec_IntSize(vArg0) == Vec_IntSize(vArg1) );
161 assert( Vec_IntSize(vRes) == 0 );
163 {
168 for ( k = 1; k < nRange; k++ )
169 Vec_IntPush( vRes, 0 );
170 return;
171 }
173 {
178 for ( k = 1; k < nRange; k++ )
179 Vec_IntPush( vRes, 0 );
180 return;
181 }
182
184 {
187 Vec_IntShrink( vRes, nRange );
188 return;
189 }
191 {
194 Vec_IntShrink( vRes, nRange );
195 return;
196 }
198 {
201 Vec_IntShrink( vRes, nRange );
202 return;
203 }
205 {
206 assert( Vec_IntSize(vArg0) == nRange );
208 Vec_IntPush( vRes, Abc_LitNot(
Gia_ManHashXor(pNew, iLit0, iLit1)) );
209 Vec_IntShrink( vRes, nRange );
210 return;
211 }
212
213
214
215
216
217
218
219
221 {
222 iLit = 0;
227 for ( k = 1; k < nRange; k++ )
228 Vec_IntPush( vRes, 0 );
229 return;
230 }
233 {
234 int fSigned = fSign0 && fSign1;
237 assert( Vec_IntSize(vArg0) == Vec_IntSize(vArg1) );
239 if ( fSwap )
241 if ( fSigned )
242 iLit =
Wlc_BlastLessSigned( pNew, Vec_IntArray(vArg0), Vec_IntArray(vArg1), Vec_IntSize(vArg0) );
243 else
244 iLit =
Wlc_BlastLess( pNew, Vec_IntArray(vArg0), Vec_IntArray(vArg1), Vec_IntSize(vArg0) );
245 iLit = Abc_LitNotCond( iLit, fCompl );
246 Vec_IntFill( vRes, 1, iLit );
247 for ( k = 1; k < nRange; k++ )
248 Vec_IntPush( vRes, 0 );
249 return;
250 }
251
252
253
254
255
256
259 {
260 Vec_IntShrink( vArg1, nSizeArg1 );
263 else
264 Wlc_BlastShiftLeft( pNew, Vec_IntArray(vArg0), nRangeMax, Vec_IntArray(vArg1), nSizeArg1, 0, vRes );
265 Vec_IntShrink( vRes, nRange );
266 return;
267 }
268
269
270
271
272
273
274
275
277 {
278
279
280 Vec_IntAppend( vRes, vArg0 );
282 Wlc_BlastAdder( pNew, Vec_IntArray(vRes), Vec_IntArray(vArg1), nRangeMax, 0 );
283 else
284 Wlc_BlastSubtract( pNew, Vec_IntArray(vRes), Vec_IntArray(vArg1), nRangeMax, 1 );
285 Vec_IntShrink( vRes, nRange );
286 return;
287 }
289 {
290 int fBooth = 1;
291 int fCla = 0;
292 int fSigned = fSign0 && fSign1;
293
294 Vec_IntShrink( vArg0, nSizeArg0 );
295 Vec_IntShrink( vArg1, nSizeArg1 );
296
297
298
299
300
301
302
305 if ( fBooth )
306 Wlc_BlastBooth( pNew, Vec_IntArray(vArg0), Vec_IntArray(vArg1), Vec_IntSize(vArg0), Vec_IntSize(vArg1), vRes, fSigned, fCla, NULL, 0 );
307 else
308 Wlc_BlastMultiplier3( pNew, Vec_IntArray(vArg0), Vec_IntArray(vArg1), Vec_IntSize(vArg0), Vec_IntSize(vArg1), vRes, fSigned, fCla, NULL, 0 );
309 if ( nRange > Vec_IntSize(vRes) )
310 Vec_IntFillExtra( vRes, nRange, fSigned ? Vec_IntEntryLast(vRes) : 0 );
311 else
312 Vec_IntShrink( vRes, nRange );
313 assert( Vec_IntSize(vRes) == nRange );
314
315
316
317 return;
318 }
320 {
321 int fDivBy0 = 1;
322 int fSigned = fSign0 && fSign1;
323 if ( fSigned )
325 else
327 Vec_IntShrink( vRes, nRange );
328 if ( !fDivBy0 )
330 return;
331 }
333 {
335 Vec_IntGrow( vTemp, nRangeMax );
336 Vec_IntGrow( vRes, nRangeMax );
337 Vec_IntShrink( vArg1, nSizeArg1 );
338 Wlc_BlastPower( pNew, Vec_IntArray(vArg0), nRangeMax, Vec_IntArray(vArg1), Vec_IntSize(vArg1), vTemp, vRes );
339 Vec_IntShrink( vRes, nRange );
340 return;
341 }
342 }
343
344 if ( nIns == 3 )
345 {
347 {
352 int iCtrl = Vec_IntEntry(vArgS, 0);
353
354
355
356 assert( Vec_IntSize(vArg0) == Vec_IntSize(vArg1) );
357 assert( Vec_IntSize(vArg0) == nRange );
358 assert( Vec_IntSize(vArgS) == 1 );
359 assert( Vec_IntSize(vRes) == 0 );
362 return;
363 }
365 {
366 int i, k, iLit;
372 assert( Vec_IntSize(vArgA) == nRange );
373 assert( Vec_IntSize(vArgB) == Vec_IntSize(vArgA)*Vec_IntSize(vArgS) );
374 assert( Vec_IntSize(vRes) == 0 );
375 for ( i = 0; i < nRange; i++ )
376 {
377 int iCond = 1;
378 Vec_IntClear( vTemp );
380 {
381
382 Vec_IntPush( vTemp, Abc_LitNot(
Gia_ManHashAnd(pNew, iLit, Vec_IntEntry(vArgB, nRange*k+i)) ) );
384 }
385 Vec_IntPush( vTemp, Abc_LitNot(
Gia_ManHashAnd(pNew, iCond, Vec_IntEntry(vArgA, i)) ) );
387 }
388 return;
389 }
390 }
391}
#define ABC_SWAP(Type, a, b)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
int Gia_ManHashAndMulti(Gia_Man_t *p, Vec_Int_t *vLits)
int Gia_ManHashOr(Gia_Man_t *p, int iLit0, int iLit1)
int Gia_ManHashXor(Gia_Man_t *p, int iLit0, int iLit1)
struct Gia_Man_t_ Gia_Man_t
int Gia_ManHashMux(Gia_Man_t *p, int iCtrl, int iData1, int iData0)
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_IntForEachEntryTwo(vVec1, vVec2, Entry1, Entry2, i)
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.
int Wlc_BlastAdder(Gia_Man_t *pNew, int *pAdd0, int *pAdd1, int nBits, int Carry)
void Wlc_BlastDividerSigned(Gia_Man_t *pNew, int *pNum, int nNum, int *pDiv, int nDiv, int fQuo, Vec_Int_t *vRes, int fNonRest)
void Wlc_BlastPower(Gia_Man_t *pNew, int *pNum, int nNum, int *pExp, int nExp, Vec_Int_t *vTemp, Vec_Int_t *vRes)
void Wlc_BlastZeroCondition(Gia_Man_t *pNew, int *pDiv, int nDiv, Vec_Int_t *vRes)
void Wlc_BlastShiftRight(Gia_Man_t *pNew, int *pNum, int nNum, int *pShift, int nShift, int fSticky, Vec_Int_t *vRes)
ABC_NAMESPACE_IMPL_START int Wlc_NtkCountConstBits(int *pArray, int nSize)
DECLARATIONS ///.
void Wlc_BlastBooth(Gia_Man_t *pNew, int *pArgA, int *pArgB, int nArgA, int nArgB, Vec_Int_t *vRes, int fSigned, int fCla, Vec_Wec_t **pvProds, int fVerbose)
int Wlc_BlastLessSigned(Gia_Man_t *pNew, int *pArg0, int *pArg1, int nBits)
void Wlc_BlastMinus(Gia_Man_t *pNew, int *pNum, int nNum, Vec_Int_t *vRes)
void Wlc_BlastMultiplier3(Gia_Man_t *pNew, int *pArgA, int *pArgB, int nArgA, int nArgB, Vec_Int_t *vRes, int fSigned, int fCla, Vec_Wec_t **pvProds, int fVerbose)
void Wlc_BlastShiftLeft(Gia_Man_t *pNew, int *pNum, int nNum, int *pShift, int nShift, int fSticky, Vec_Int_t *vRes)
void Wlc_BlastDividerTop(Gia_Man_t *pNew, int *pNum, int nNum, int *pDiv, int nDiv, int fQuo, Vec_Int_t *vRes, int fNonRest)
void Wlc_BlastSubtract(Gia_Man_t *pNew, int *pAdd0, int *pAdd1, int nBits, int Carry)
int Wlc_BlastLess(Gia_Man_t *pNew, int *pArg0, int *pArg1, int nBits)
int Wlc_BlastReduction(Gia_Man_t *pNew, int *pFans, int nFans, int Type)
ABC_NAMESPACE_IMPL_START void Rtl_VecExtend(Vec_Int_t *p, int nRange, int fSigned)
DECLARATIONS ///.