From: John W. <joe...@us...> - 2004-10-14 23:03:18
|
Update of /cvsroot/javabdd/JavaBDD/buddy/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2350/buddy/src Modified Files: bddop.c Log Message: Small cleanups. Index: bddop.c =================================================================== RCS file: /cvsroot/javabdd/JavaBDD/buddy/src/bddop.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** bddop.c 2 Oct 2004 08:13:34 -0000 1.6 --- bddop.c 14 Oct 2004 23:03:00 -0000 1.7 *************** *** 853,859 **** while (s_top != s_ptr) { ! int hash, lev; BDD l1, r1, res1; BddCacheData3 *entry; outer: r1 = *(--s_ptr); --- 853,860 ---- while (s_top != s_ptr) { ! int lev; BDD l1, r1, res1; BddCacheData3 *entry; + int entryNum; outer: r1 = *(--s_ptr); *************** *** 876,880 **** #endif ! entry = BddCache_lookup(&andcache, ANDHASH(l1,r1)); if (entry->a == l1 && entry->b == r1) { #ifdef CACHESTATS --- 877,882 ---- #endif ! entryNum = ANDHASH(l1,r1) % andcache.tablesize; ! entry = &andcache.table[entryNum]; if (entry->a == l1 && entry->b == r1) { #ifdef CACHESTATS *************** *** 888,892 **** *s_ptr++ = l1; *s_ptr++ = r1; ! *s_ptr++ = (int)(entry - andcache.table); if (LEVEL(l1) == LEVEL(r1)) { *s_ptr++ = LEVEL(l1); --- 890,894 ---- *s_ptr++ = l1; *s_ptr++ = r1; ! *s_ptr++ = entryNum; if (LEVEL(l1) == LEVEL(r1)) { *s_ptr++ = LEVEL(l1); *************** *** 926,933 **** goto outer; } ! hash = *(--s_ptr); r1 = *(--s_ptr); l1 = *(--s_ptr); ! entry = &andcache.table[hash]; res1 = bdd_makenode(lev, READREF(2), READREF(1)); POPREF(2); --- 928,935 ---- goto outer; } ! entryNum = *(--s_ptr); r1 = *(--s_ptr); l1 = *(--s_ptr); ! entry = &andcache.table[entryNum]; res1 = bdd_makenode(lev, READREF(2), READREF(1)); POPREF(2); *************** *** 2664,2667 **** --- 2666,2670 ---- } + /* An iterative version of relprod. */ static int relprod_itr(int l0, int r0) { *************** *** 2669,2679 **** int* s_top; int* s_ptr; s_top = s_ptr = alloca(bddvarnum * sizeof(int) * 9); *s_ptr++ = l0; *s_ptr++ = r0; while (s_top != s_ptr) { ! int hash, lev, l1, r1, res1; BddCacheData4 *entry; outer: r1 = *(--s_ptr); --- 2672,2693 ---- int* s_top; int* s_ptr; + #if defined(USE_ALLOCA) s_top = s_ptr = alloca(bddvarnum * sizeof(int) * 9); + #else + if (gstack_size < bddvarnum) { + if (gstack != NULL) free(gstack); + if ((gstack=NEW(int,bddvarnum*9)) == NULL) + bdd_error(BDD_MEMORY); + gstack_size = bddvarnum; + } + s_top = s_ptr = gstack; + #endif *s_ptr++ = l0; *s_ptr++ = r0; while (s_top != s_ptr) { ! int lev, l1, r1, res1; BddCacheData4 *entry; + int entryNum; outer: r1 = *(--s_ptr); *************** *** 2707,2711 **** applyop = bddop_or; } else { ! entry = BddCache_lookup(&appexcache, APPEXHASH(l1,r1,bddop_and)); if (entry->a == l1 && entry->b == r1 && entry->r.c == appexid) { #ifdef CACHESTATS --- 2721,2726 ---- applyop = bddop_or; } else { ! entryNum = APPEXHASH(l1,r1,bddop_and) % appexcache.tablesize; ! entry = &appexcache.table[entryNum]; if (entry->a == l1 && entry->b == r1 && entry->r.c == appexid) { #ifdef CACHESTATS *************** *** 2719,2723 **** *s_ptr++ = l1; *s_ptr++ = r1; ! *s_ptr++ = (int)(entry - appexcache.table); if (LEVEL(l1) == LEVEL(r1)) { *s_ptr++ = LEVEL(l1); --- 2734,2738 ---- *s_ptr++ = l1; *s_ptr++ = r1; ! *s_ptr++ = entryNum; if (LEVEL(l1) == LEVEL(r1)) { *s_ptr++ = LEVEL(l1); *************** *** 2758,2765 **** goto outer; } ! hash = *(--s_ptr); ! r1 = *(--s_ptr); ! l1 = *(--s_ptr); ! entry = &appexcache.table[hash]; if (INVARSET(lev)) { #if defined(SPECIALIZE_OR) --- 2773,2780 ---- goto outer; } ! entryNum = *(--s_ptr); ! r1 = *(--s_ptr); ! l1 = *(--s_ptr); ! entry = &appexcache.table[entryNum]; if (INVARSET(lev)) { #if defined(SPECIALIZE_OR) |