if (ISZERO(r)) return bddtrue; if (ISONE(r)) return bddfalse;
if (ISCONST(r)) return 1 - r;
    int not_rec(int r) {        BddCacheDataI entry;        int res;        if (ISZERO(r))            return bddtrue;        if (ISONE(r))            return bddfalse;        entry = BddCache_lookupI(applycache, NOTHASH(r));        if (entry.a == r && entry.c == bddop_not) {            if (CACHESTATS)                cachestats.opHit++;            return entry.res;        }        if (CACHESTATS)            cachestats.opMiss++;        PUSHREF(not_rec(LOW(r)));        PUSHREF(not_rec(HIGH(r)));        res = bdd_makenode(LEVEL(r), READREF(2), READREF(1));        POPREF(2);        entry.a = r;        entry.c = bddop_not;        entry.res = res;        return res;    }