56 pFan0 = Gia_Regular(pFan0);
57 pFan1 = Gia_Regular(pFan1);
58 if ( Gia_ObjId(
p, pFan0) > Gia_ObjId(
p, pFan1) )
62 pDat0 = Gia_Regular(pDat0);
63 pDat1 = Gia_Regular(pDat1);
64 pCtrl = Gia_Regular(pCtrl);
65 if ( !Gia_ObjIsAnd(pDat0) || !Gia_ObjIsAnd(pDat1) )
67 if ( Gia_ObjFaninId0p(
p, pDat0) != Gia_ObjFaninId0p(
p, pDat1) ||
68 Gia_ObjFaninId1p(
p, pDat0) != Gia_ObjFaninId1p(
p, pDat1) )
70 if ( Gia_ObjFaninId0p(
p, pDat0) != Gia_ObjId(
p, pFan0) ||
71 Gia_ObjFaninId1p(
p, pDat0) != Gia_ObjId(
p, pFan1) )
73 pIns[0] = Gia_ObjId(
p, pFan0);
74 pIns[1] = Gia_ObjId(
p, pFan1);
75 pIns[2] = Gia_ObjId(
p, pCtrl);
82 if ( !Gia_ObjIsAnd(pObj) )
84 if ( !Gia_ObjFaninC0(pObj) || !Gia_ObjFaninC1(pObj) )
86 pFan0 = Gia_ObjFanin0(pObj);
87 pFan1 = Gia_ObjFanin1(pObj);
88 if ( !Gia_ObjIsAnd(pFan0) || !Gia_ObjIsAnd(pFan1) )
92 pIns[3] = Gia_ObjId(
p, Gia_ObjFanin1(pFan0));
93 pIns[4] = Gia_ObjId(
p, Gia_ObjFanin1(pFan1));
98 pIns[3] = Gia_ObjId(
p, Gia_ObjFanin1(pFan0));
99 pIns[4] = Gia_ObjId(
p, Gia_ObjFanin0(pFan1));
104 pIns[3] = Gia_ObjId(
p, Gia_ObjFanin0(pFan0));
105 pIns[4] = Gia_ObjId(
p, Gia_ObjFanin1(pFan1));
110 pIns[3] = Gia_ObjId(
p, Gia_ObjFanin0(pFan0));
111 pIns[4] = Gia_ObjId(
p, Gia_ObjFanin0(pFan1));
121 pFan0 = Gia_Regular(pFan0);
122 pFan1 = Gia_Regular(pFan1);
145 if ( !Gia_ObjIsAnd(pObj) )
149 pIns[0] = Gia_ObjId(
p, Gia_Regular(pFan0));
150 pIns[1] = Gia_ObjId(
p, Gia_Regular(pFan1));
153 pIns[4] = Gia_ObjId(
p, Gia_ObjFanin1(pObj));
158 pIns[0] = Gia_ObjId(
p, Gia_Regular(pFan0));
159 pIns[1] = Gia_ObjId(
p, Gia_Regular(pFan1));
162 pIns[4] = Gia_ObjId(
p, Gia_ObjFanin0(pObj));
172 pFan0 = Gia_Regular(pFan0);
173 pFan1 = Gia_Regular(pFan1);
176 pIns[2] = Gia_ObjId(
p, pFan1);
181 pIns[2] = Gia_ObjId(
p, pFan0);
206 printf(
"obj = %4d : b0 = %4d b1 = %4d b2 = %4d a0 = %4d a1 = %4d\n",
207 i, pIns[0], pIns[1], pIns[2], pIns[3], pIns[4] );
225 unsigned T = 0xF335ACC0;
229 for ( a = 0; a < 2; a++ )
231 unsigned A = s_Truths5[a];
232 for ( b = 0; b < 3; b++ )
234 unsigned B = s_Truths5[2+b];
235 for ( c = 0; c < 3; c++ )
if ( c != b )
237 unsigned C = s_Truths5[2+c];
238 Vec_IntPush( vRes, A & B & C );
239 Vec_IntPush( vRes, A & B & ~C );
243 printf(
"Size = %d.\n", Vec_IntSize(vRes) );
244 for ( i = 0; i < (1 << Vec_IntSize(vRes)); i++ )
248 if ( Abc_TtCountOnes( (
word)i ) >= 8 )
250 for ( f = k = 0; k < Vec_IntSize(vRes); k++ )
251 if ( ((i >> k) & 1) )
252 F[f++] = Vec_IntEntry(vRes, k);
254 unsigned S1 = (F[0] & F[1]) | (F[0] & F[2]) | (F[1] & F[2]);
255 unsigned C1 = F[0] ^ F[1] ^ F[2];
256 unsigned S2 = (F[3] & F[4]) | (F[3] & F[5]) | (F[4] & F[5]);
257 unsigned C2 = F[3] ^ F[4] ^ F[5];
258 unsigned S3 = (F[6] & S1) | (F[6] & S2) | (S1 & S2);
259 unsigned C3 = F[6] ^ S1 ^ S2;
260 unsigned S4 = (C1 & C2) | (C1 & C3) | (C2 & C3);
261 unsigned C4 = C1 ^ C2 ^ C3;
266 for ( y = 0; y < 3; y++ )
268 printf(
"Found!\n" );
271 printf(
"Tried = %d.\n", Count );
276 unsigned T = 0xF335ACC0;
278 for ( i = 0; i < 4; i++ )
280 unsigned x = i%2 ? Abc_Tt5Cofactor1(T, 0) : Abc_Tt5Cofactor0(T, 0);
281 unsigned y = i/2 ? Abc_Tt5Cofactor1(x, 1) : Abc_Tt5Cofactor0(x, 1);
#define ABC_SWAP(Type, a, b)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_NAMESPACE_IMPL_START int Acec_DetectBoothXorMux(Gia_Man_t *p, Gia_Obj_t *pMux, Gia_Obj_t *pXor, int pIns[3])
DECLARATIONS ///.
int Acec_DetectBoothTwo(Gia_Man_t *p, Gia_Obj_t *pObj, int pIns[5])
void Acec_DetectBoothTest(Gia_Man_t *p)
int Acec_DetectBoothXorFanin(Gia_Man_t *p, Gia_Obj_t *pObj, int pIns[5])
int Acec_DetectBoothOne(Gia_Man_t *p, Gia_Obj_t *pObj, int pIns[5])
int Acec_DetectBoothTwoXor(Gia_Man_t *p, Gia_Obj_t *pObj, int pIns[5])
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Gia_Obj_t * Gia_ObjRecognizeMux(Gia_Obj_t *pNode, Gia_Obj_t **ppNodeT, Gia_Obj_t **ppNodeE)
#define Gia_ManForEachAnd(p, pObj, i)
struct Gia_Obj_t_ Gia_Obj_t
int Gia_ObjIsMuxType(Gia_Obj_t *pNode)
struct Gia_Man_t_ Gia_Man_t
int Gia_ObjRecognizeExor(Gia_Obj_t *pObj, Gia_Obj_t **ppFan0, Gia_Obj_t **ppFan1)
unsigned __int64 word
DECLARATIONS ///.