1219b2ee8SDavid du Colombier /***** spin: pangen3.h *****/ 2219b2ee8SDavid du Colombier 3*de2caf28SDavid du Colombier /* 4*de2caf28SDavid du Colombier * This file is part of the public release of Spin. It is subject to the 5*de2caf28SDavid du Colombier * terms in the LICENSE file that is included in this source directory. 6*de2caf28SDavid du Colombier * Tool documentation is available at http://spinroot.com 7*de2caf28SDavid du Colombier */ 8219b2ee8SDavid du Colombier 9*de2caf28SDavid du Colombier static const char *Head0[] = { 10312a1df1SDavid du Colombier "#if defined(BFS) && defined(REACH)", 11312a1df1SDavid du Colombier " #undef REACH", /* redundant with bfs */ 12312a1df1SDavid du Colombier "#endif", 13219b2ee8SDavid du Colombier "#ifdef VERI", 14219b2ee8SDavid du Colombier " #define BASE 1", 15219b2ee8SDavid du Colombier "#else", 16219b2ee8SDavid du Colombier " #define BASE 0", 17219b2ee8SDavid du Colombier "#endif", 187dd7cddfSDavid du Colombier "typedef struct Trans {", 197dd7cddfSDavid du Colombier " short atom; /* if &2 = atomic trans; if &8 local */", 207dd7cddfSDavid du Colombier "#ifdef HAS_UNLESS", 217dd7cddfSDavid du Colombier " short escp[HAS_UNLESS]; /* lists the escape states */", 227dd7cddfSDavid du Colombier " short e_trans; /* if set, this is an escp-trans */", 237dd7cddfSDavid du Colombier "#endif", 247dd7cddfSDavid du Colombier " short tpe[2]; /* class of operation (for reduction) */", 257dd7cddfSDavid du Colombier " short qu[6]; /* for conditional selections: qid's */", 267dd7cddfSDavid du Colombier " uchar ty[6]; /* ditto: type's */", 277dd7cddfSDavid du Colombier "#ifdef NIBIS", 287dd7cddfSDavid du Colombier " short om; /* completion status of preselects */", 297dd7cddfSDavid du Colombier "#endif", 307dd7cddfSDavid du Colombier " char *tp; /* src txt of statement */", 31312a1df1SDavid du Colombier " int st; /* the nextstate */", 327dd7cddfSDavid du Colombier " int t_id; /* transition id, unique within proc */", 337dd7cddfSDavid du Colombier " int forw; /* index forward transition */", 347dd7cddfSDavid du Colombier " int back; /* index return transition */", 357dd7cddfSDavid du Colombier " struct Trans *nxt;", 367dd7cddfSDavid du Colombier "} Trans;\n", 3700d97012SDavid du Colombier 3800d97012SDavid du Colombier "#ifdef TRIX", 3900d97012SDavid du Colombier " #define qptr(x) (channels[x]->body)", 4000d97012SDavid du Colombier " #define pptr(x) (processes[x]->body)", 4100d97012SDavid du Colombier "#else", 42f3793cddSDavid du Colombier " #define qptr(x) (((uchar *)&now)+(int)q_offset[x])", 43f3793cddSDavid du Colombier " #define pptr(x) (((uchar *)&now)+(int)proc_offset[x])", 447dd7cddfSDavid du Colombier /* " #define Pptr(x) ((proc_offset[x])?pptr(x):noptr)", */ 4500d97012SDavid du Colombier "#endif", 467dd7cddfSDavid du Colombier "extern uchar *Pptr(int);", 4700d97012SDavid du Colombier "extern uchar *Qptr(int);", 487dd7cddfSDavid du Colombier 4900d97012SDavid du Colombier "#define q_sz(x) (((Q0 *)qptr(x))->Qlen)", 5000d97012SDavid du Colombier "", 5100d97012SDavid du Colombier "#ifdef TRIX", 5200d97012SDavid du Colombier " #ifdef VECTORSZ", 5300d97012SDavid du Colombier " #undef VECTORSZ", /* backward compatibility */ 5400d97012SDavid du Colombier " #endif", 5500d97012SDavid du Colombier " #if WS==4", 5600d97012SDavid du Colombier " #define VECTORSZ 2056 /* ((MAXPROC+MAXQ+4)*sizeof(uchar *)) */", 5700d97012SDavid du Colombier " #else", 5800d97012SDavid du Colombier " #define VECTORSZ 4112 /* the formula causes probs in preprocessing */", 5900d97012SDavid du Colombier " #endif", 6000d97012SDavid du Colombier "#else", 617dd7cddfSDavid du Colombier " #ifndef VECTORSZ", 627dd7cddfSDavid du Colombier " #define VECTORSZ 1024 /* sv size in bytes */", 6300d97012SDavid du Colombier " #endif", 647dd7cddfSDavid du Colombier "#endif\n", 65*de2caf28SDavid du Colombier "#define MAXQ 255", 66*de2caf28SDavid du Colombier "#define MAXPROC 255", 67*de2caf28SDavid du Colombier "", 687dd7cddfSDavid du Colombier 0, 697dd7cddfSDavid du Colombier }; 707dd7cddfSDavid du Colombier 71*de2caf28SDavid du Colombier static const char *Header[] = { 72219b2ee8SDavid du Colombier "#ifdef VERBOSE", 73312a1df1SDavid du Colombier " #ifndef CHECK", 74219b2ee8SDavid du Colombier " #define CHECK", 75312a1df1SDavid du Colombier " #endif", 76312a1df1SDavid du Colombier " #ifndef DEBUG", 77219b2ee8SDavid du Colombier " #define DEBUG", 78219b2ee8SDavid du Colombier " #endif", 79312a1df1SDavid du Colombier "#endif", 807dd7cddfSDavid du Colombier "#ifdef SAFETY", 817dd7cddfSDavid du Colombier " #ifndef NOFAIR", 827dd7cddfSDavid du Colombier " #define NOFAIR", 83219b2ee8SDavid du Colombier " #endif", 847dd7cddfSDavid du Colombier "#endif", 85*de2caf28SDavid du Colombier #if 0 86*de2caf28SDavid du Colombier NOREDUCE BITSTATE SAFETY MA WS>4 87*de2caf28SDavid du Colombier CNTRSTACK: - + + d - 88*de2caf28SDavid du Colombier FULLSTACK: + d - - d 89*de2caf28SDavid du Colombier - + d d d 90*de2caf28SDavid du Colombier - + + d + 91*de2caf28SDavid du Colombier - - d d d 92*de2caf28SDavid du Colombier Neither: + d + d d 93*de2caf28SDavid du Colombier + d d + d 94*de2caf28SDavid du Colombier #endif 957dd7cddfSDavid du Colombier "#ifdef NOREDUCE", 96312a1df1SDavid du Colombier " #ifndef XUSAFE", 977dd7cddfSDavid du Colombier " #define XUSAFE", 98312a1df1SDavid du Colombier " #endif", 997dd7cddfSDavid du Colombier " #if !defined(SAFETY) && !defined(MA)", 100*de2caf28SDavid du Colombier " #define FULLSTACK", /* => NOREDUCE && !SAFETY && !MA */ 1017dd7cddfSDavid du Colombier " #endif", 1027dd7cddfSDavid du Colombier "#else", 103219b2ee8SDavid du Colombier " #ifdef BITSTATE", 104*de2caf28SDavid du Colombier " #if defined(SAFETY) && WS<=4", 105*de2caf28SDavid du Colombier " #define CNTRSTACK", /* => !NOREDUCE && BITSTATE && SAFETY && WS<=4 */ 106219b2ee8SDavid du Colombier " #else", 107*de2caf28SDavid du Colombier " #define FULLSTACK", /* => !NOREDUCE && BITSTATE && (!SAFETY || WS>4) */ 108219b2ee8SDavid du Colombier " #endif", 1097dd7cddfSDavid du Colombier " #else", 110*de2caf28SDavid du Colombier " #define FULLSTACK", /* => !NOREDUCE && !BITSTATE */ 1117dd7cddfSDavid du Colombier " #endif", 112219b2ee8SDavid du Colombier "#endif", 113219b2ee8SDavid du Colombier "#ifdef BITSTATE", 114312a1df1SDavid du Colombier " #ifndef NOCOMP", 115219b2ee8SDavid du Colombier " #define NOCOMP", 116312a1df1SDavid du Colombier " #endif", 1177dd7cddfSDavid du Colombier " #if !defined(LC) && defined(SC)", 1187dd7cddfSDavid du Colombier " #define LC", 1197dd7cddfSDavid du Colombier " #endif", 120219b2ee8SDavid du Colombier "#endif", 1217dd7cddfSDavid du Colombier "#if defined(COLLAPSE2) || defined(COLLAPSE3) || defined(COLLAPSE4)", 1227dd7cddfSDavid du Colombier " /* accept the above for backward compatibility */", 1237dd7cddfSDavid du Colombier " #define COLLAPSE", 1247dd7cddfSDavid du Colombier "#endif", 1257dd7cddfSDavid du Colombier "#ifdef HC", 126312a1df1SDavid du Colombier " #undef HC", 127312a1df1SDavid du Colombier " #define HC4", 1287dd7cddfSDavid du Colombier "#endif", 129*de2caf28SDavid du Colombier "#if defined(HC0) || defined(HC1) || defined(HC2) || defined(HC3) || defined(HC4)", 130*de2caf28SDavid du Colombier " #define HC 4", /* 2x32 bits */ 131*de2caf28SDavid du Colombier "#endif", /* really only one hashcompact mode, not 5 */ 13200d97012SDavid du Colombier "", 13300d97012SDavid du Colombier "typedef struct _Stack { /* for queues and processes */", 1347dd7cddfSDavid du Colombier "#if VECTORSZ>32000", 1357dd7cddfSDavid du Colombier " int o_delta;", 13600d97012SDavid du Colombier " #ifndef TRIX", 1377dd7cddfSDavid du Colombier " int o_offset;", 1387dd7cddfSDavid du Colombier " int o_skip;", 13900d97012SDavid du Colombier " #endif", 1407dd7cddfSDavid du Colombier " int o_delqs;", 1417dd7cddfSDavid du Colombier "#else", 142219b2ee8SDavid du Colombier " short o_delta;", 14300d97012SDavid du Colombier " #ifndef TRIX", 144219b2ee8SDavid du Colombier " short o_offset;", 145219b2ee8SDavid du Colombier " short o_skip;", 14600d97012SDavid du Colombier " #endif", 147219b2ee8SDavid du Colombier " short o_delqs;", 1487dd7cddfSDavid du Colombier "#endif", 1497dd7cddfSDavid du Colombier " short o_boq;", 15000d97012SDavid du Colombier "#ifdef TRIX", 15100d97012SDavid du Colombier " short parent;", 15200d97012SDavid du Colombier " char *b_ptr;", /* used in delq/q_restor and delproc/p_restor */ 15300d97012SDavid du Colombier "#else", 15400d97012SDavid du Colombier " char *body;", /* full copy of state vector in non-trix mode */ 15500d97012SDavid du Colombier "#endif", 156219b2ee8SDavid du Colombier "#ifndef XUSAFE", 157219b2ee8SDavid du Colombier " char *o_name;", 158219b2ee8SDavid du Colombier "#endif", 15900d97012SDavid du Colombier " struct _Stack *nxt;", 16000d97012SDavid du Colombier " struct _Stack *lst;", 16100d97012SDavid du Colombier "} _Stack;\n", 162219b2ee8SDavid du Colombier "typedef struct Svtack { /* for complete state vector */", 1637dd7cddfSDavid du Colombier "#if VECTORSZ>32000", 1647dd7cddfSDavid du Colombier " int o_delta;", 1657dd7cddfSDavid du Colombier " int m_delta;", 1667dd7cddfSDavid du Colombier "#else", 167219b2ee8SDavid du Colombier " short o_delta; /* current size of frame */", 168219b2ee8SDavid du Colombier " short m_delta; /* maximum size of frame */", 1697dd7cddfSDavid du Colombier "#endif", 170219b2ee8SDavid du Colombier "#if SYNC", 171219b2ee8SDavid du Colombier " short o_boq;", 172219b2ee8SDavid du Colombier "#endif", 173312a1df1SDavid du Colombier 0, 174312a1df1SDavid du Colombier }; 175312a1df1SDavid du Colombier 176*de2caf28SDavid du Colombier static const char *Header0[] = { 177219b2ee8SDavid du Colombier " char *body;", 178219b2ee8SDavid du Colombier " struct Svtack *nxt;", 179219b2ee8SDavid du Colombier " struct Svtack *lst;", 180219b2ee8SDavid du Colombier "} Svtack;\n", 1817dd7cddfSDavid du Colombier 0, 1827dd7cddfSDavid du Colombier }; 1837dd7cddfSDavid du Colombier 184*de2caf28SDavid du Colombier static const char *Head1[] = { 185219b2ee8SDavid du Colombier "typedef struct State {", 186219b2ee8SDavid du Colombier " uchar _nr_pr;", 187219b2ee8SDavid du Colombier " uchar _nr_qs;", 188219b2ee8SDavid du Colombier " uchar _a_t; /* cycle detection */", 1897dd7cddfSDavid du Colombier #if 0 1907dd7cddfSDavid du Colombier in _a_t: bits 0,4, and 5 =(1|16|32) are set during a 2nd dfs 1917dd7cddfSDavid du Colombier bit 1 is used as the A-bit for fairness 1927dd7cddfSDavid du Colombier bit 7 (128) is the proviso bit, for reduced 2nd dfs (acceptance) 1937dd7cddfSDavid du Colombier #endif 1947dd7cddfSDavid du Colombier "#ifndef NOFAIR", 195219b2ee8SDavid du Colombier " uchar _cnt[NFAIR]; /* counters, weak fairness */", 1967dd7cddfSDavid du Colombier "#endif", 1977dd7cddfSDavid du Colombier 1987dd7cddfSDavid du Colombier "#ifndef NOVSZ", 1997dd7cddfSDavid du Colombier #ifdef SOLARIS 2007dd7cddfSDavid du Colombier "#if 0", 2017dd7cddfSDavid du Colombier /* v3.4 2027dd7cddfSDavid du Colombier * noticed alignment problems with some Solaris 2037dd7cddfSDavid du Colombier * compilers, if widest field isn't wordsized 2047dd7cddfSDavid du Colombier */ 2057dd7cddfSDavid du Colombier #else 2067dd7cddfSDavid du Colombier "#if VECTORSZ<65536", 2077dd7cddfSDavid du Colombier #endif 2087dd7cddfSDavid du Colombier " unsigned short _vsz;", 2097dd7cddfSDavid du Colombier "#else", 210*de2caf28SDavid du Colombier " ulong _vsz;", 2117dd7cddfSDavid du Colombier "#endif", 2127dd7cddfSDavid du Colombier "#endif", 2137dd7cddfSDavid du Colombier 214*de2caf28SDavid du Colombier "#ifdef HAS_LAST", /* cannot go before _cnt - see h_store() */ 2157dd7cddfSDavid du Colombier " uchar _last; /* pid executed in last step */", 2167dd7cddfSDavid du Colombier "#endif", 21700d97012SDavid du Colombier 21800d97012SDavid du Colombier "#if defined(BITSTATE) && defined(BCS) && defined(STORE_CTX)", 21900d97012SDavid du Colombier " uchar _ctx; /* nr of context switches so far */", 22000d97012SDavid du Colombier "#endif", 221*de2caf28SDavid du Colombier "#if defined(BFS_PAR) && defined(L_BOUND)", 222*de2caf28SDavid du Colombier " uchar _l_bnd; /* bounded liveness */", 223*de2caf28SDavid du Colombier " uchar *_l_sds; /* seed state */", 224*de2caf28SDavid du Colombier "#endif", 2257dd7cddfSDavid du Colombier "#ifdef EVENT_TRACE", 2267dd7cddfSDavid du Colombier " #if nstates_event<256", 2277dd7cddfSDavid du Colombier " uchar _event;", 2287dd7cddfSDavid du Colombier " #else", 2297dd7cddfSDavid du Colombier " unsigned short _event;", 2307dd7cddfSDavid du Colombier " #endif", 231219b2ee8SDavid du Colombier "#endif", 232219b2ee8SDavid du Colombier 0, 233219b2ee8SDavid du Colombier }; 234219b2ee8SDavid du Colombier 235*de2caf28SDavid du Colombier static const char *Addp0[] = { 236219b2ee8SDavid du Colombier /* addproc(....parlist... */ ")", 237*de2caf28SDavid du Colombier "{ int j = 0, h = now._nr_pr;", 238312a1df1SDavid du Colombier "#ifndef NOCOMP", 239312a1df1SDavid du Colombier " int k;", 240312a1df1SDavid du Colombier "#endif", 241*de2caf28SDavid du Colombier " uchar *o_this = _this;\n", 242219b2ee8SDavid du Colombier "#ifndef INLINE", 243219b2ee8SDavid du Colombier " if (TstOnly) return (h < MAXPROC);", 244219b2ee8SDavid du Colombier "#endif", 2457dd7cddfSDavid du Colombier "#ifndef NOBOUNDCHECK", 2467dd7cddfSDavid du Colombier " /* redefine Index only within this procedure */", 2477dd7cddfSDavid du Colombier " #undef Index", 2487dd7cddfSDavid du Colombier " #define Index(x, y) Boundcheck(x, y, 0, 0, 0)", 2497dd7cddfSDavid du Colombier "#endif", 250219b2ee8SDavid du Colombier " if (h >= MAXPROC)", 251219b2ee8SDavid du Colombier " Uerror(\"too many processes\");", 25200d97012SDavid du Colombier "#ifdef V_TRIX", 25300d97012SDavid du Colombier " printf(\"%%4d: add process %%d\\n\", depth, h);", 25400d97012SDavid du Colombier "#endif", 255219b2ee8SDavid du Colombier " switch (n) {", 256219b2ee8SDavid du Colombier " case 0: j = sizeof(P0); break;", 257219b2ee8SDavid du Colombier 0, 258219b2ee8SDavid du Colombier }; 259219b2ee8SDavid du Colombier 260*de2caf28SDavid du Colombier static const char *Addp1[] = { 261219b2ee8SDavid du Colombier " default: Uerror(\"bad proc - addproc\");", 262219b2ee8SDavid du Colombier " }", 263*de2caf28SDavid du Colombier " #ifdef BFS_PAR", 264*de2caf28SDavid du Colombier " bfs_prepmask(1); /* addproc */", 265*de2caf28SDavid du Colombier " #endif", 26600d97012SDavid du Colombier 26700d97012SDavid du Colombier "#ifdef TRIX", 268*de2caf28SDavid du Colombier " vsize += sizeof(H_el *);", 26900d97012SDavid du Colombier "#else", 2707dd7cddfSDavid du Colombier " if (vsize%%WS)", 271219b2ee8SDavid du Colombier " proc_skip[h] = WS-(vsize%%WS);", 272219b2ee8SDavid du Colombier " else", 273219b2ee8SDavid du Colombier " proc_skip[h] = 0;", 274*de2caf28SDavid du Colombier " #if !defined(NOCOMP) && !defined(HC)", 275f3793cddSDavid du Colombier " for (k = vsize + (int) proc_skip[h]; k > vsize; k--)", 2767dd7cddfSDavid du Colombier " Mask[k-1] = 1; /* align */", 277219b2ee8SDavid du Colombier " #endif", 278f3793cddSDavid du Colombier " vsize += (int) proc_skip[h];", 279219b2ee8SDavid du Colombier " proc_offset[h] = vsize;", 28000d97012SDavid du Colombier " vsize += j;", 28100d97012SDavid du Colombier " #if defined(SVDUMP) && defined(VERBOSE)", 2827dd7cddfSDavid du Colombier " if (vprefix > 0)", 2837dd7cddfSDavid du Colombier " { int dummy = 0;", 2847dd7cddfSDavid du Colombier " write(svfd, (uchar *) &dummy, sizeof(int)); /* mark */", 2857dd7cddfSDavid du Colombier " write(svfd, (uchar *) &h, sizeof(int));", 2867dd7cddfSDavid du Colombier " write(svfd, (uchar *) &n, sizeof(int));", 287f3793cddSDavid du Colombier " #if VECTORSZ>32000", 2887dd7cddfSDavid du Colombier " write(svfd, (uchar *) &proc_offset[h], sizeof(int));", 28900d97012SDavid du Colombier " write(svfd, (uchar *) &now, vprefix-4*sizeof(int)); /* padd */", 290f3793cddSDavid du Colombier " #else", 291f3793cddSDavid du Colombier " write(svfd, (uchar *) &proc_offset[h], sizeof(short));", 29200d97012SDavid du Colombier " write(svfd, (uchar *) &now, vprefix-3*sizeof(int)-sizeof(short)); /* padd */", 293f3793cddSDavid du Colombier " #endif", 2947dd7cddfSDavid du Colombier " }", 2957dd7cddfSDavid du Colombier " #endif", 29600d97012SDavid du Colombier "#endif", 29700d97012SDavid du Colombier 298219b2ee8SDavid du Colombier " now._nr_pr += 1;", 29900d97012SDavid du Colombier "#if defined(BCS) && defined(CONSERVATIVE)", 30000d97012SDavid du Colombier " if (now._nr_pr >= CONSERVATIVE*8)", 30100d97012SDavid du Colombier " { printf(\"pan: error: too many processes -- recompile with \");", 30200d97012SDavid du Colombier " printf(\"-DCONSERVATIVE=%%d\\n\", CONSERVATIVE+1);", 30300d97012SDavid du Colombier " pan_exit(1);", 30400d97012SDavid du Colombier " }", 30500d97012SDavid du Colombier "#endif", 3067dd7cddfSDavid du Colombier " if (fairness && ((int) now._nr_pr + 1 >= (8*NFAIR)/2))", 307312a1df1SDavid du Colombier " { printf(\"pan: error: too many processes -- current\");", 3087dd7cddfSDavid du Colombier " printf(\" max is %%d procs (-DNFAIR=%%d)\\n\",", 3097dd7cddfSDavid du Colombier " (8*NFAIR)/2 - 2, NFAIR);", 3107dd7cddfSDavid du Colombier " printf(\"\\trecompile with -DNFAIR=%%d\\n\",", 3117dd7cddfSDavid du Colombier " NFAIR+1);", 312312a1df1SDavid du Colombier " pan_exit(1);", 313219b2ee8SDavid du Colombier " }", 3147dd7cddfSDavid du Colombier "#ifndef NOVSZ", 3157dd7cddfSDavid du Colombier " now._vsz = vsize;", 3167dd7cddfSDavid du Colombier "#endif", 31700d97012SDavid du Colombier " hmax = max(hmax, vsize);", 31800d97012SDavid du Colombier 31900d97012SDavid du Colombier "#ifdef TRIX", 32000d97012SDavid du Colombier " #ifndef BFS", 32100d97012SDavid du Colombier " if (freebodies)", 32200d97012SDavid du Colombier " { processes[h] = freebodies;", 32300d97012SDavid du Colombier " freebodies = freebodies->nxt;", 32400d97012SDavid du Colombier " } else", 32500d97012SDavid du Colombier " { processes[h] = (TRIX_v6 *) emalloc(sizeof(TRIX_v6));", 32600d97012SDavid du Colombier " processes[h]->body = (uchar *) emalloc(Maxbody * sizeof(char));", 32700d97012SDavid du Colombier " }", 32800d97012SDavid du Colombier " processes[h]->modified = 1; /* addproc */", 32900d97012SDavid du Colombier " #endif", 33000d97012SDavid du Colombier " processes[h]->psize = j;", 33100d97012SDavid du Colombier " processes[h]->parent_pid = calling_pid;", 33200d97012SDavid du Colombier " processes[h]->nxt = (TRIX_v6 *) 0;", 33300d97012SDavid du Colombier "#else", 334*de2caf28SDavid du Colombier " #if !defined(NOCOMP) && !defined(HC)", 335219b2ee8SDavid du Colombier " for (k = 1; k <= Air[n]; k++)", 3367dd7cddfSDavid du Colombier " Mask[vsize - k] = 1; /* pad */", 337219b2ee8SDavid du Colombier " Mask[vsize-j] = 1; /* _pid */", 338219b2ee8SDavid du Colombier " #endif", 339*de2caf28SDavid du Colombier " #ifdef BFS_PAR", 340*de2caf28SDavid du Colombier " bfs_fixmask(1); /* addproc */", 341*de2caf28SDavid du Colombier " #endif", 342219b2ee8SDavid du Colombier " if (vsize >= VECTORSZ)", 3437dd7cddfSDavid du Colombier " { printf(\"pan: error, VECTORSZ too small, recompile pan.c\");", 34400d97012SDavid du Colombier " printf(\" with -DVECTORSZ=N with N>%%d\\n\", (int) vsize);", 3457dd7cddfSDavid du Colombier " Uerror(\"aborting\");", 3467dd7cddfSDavid du Colombier " }", 34700d97012SDavid du Colombier "#endif", 34800d97012SDavid du Colombier 349219b2ee8SDavid du Colombier " memset((char *)pptr(h), 0, j);", 350*de2caf28SDavid du Colombier " _this = pptr(h);", 351219b2ee8SDavid du Colombier " if (BASE > 0 && h > 0)", 352*de2caf28SDavid du Colombier " { ((P0 *)_this)->_pid = h-BASE;", 353*de2caf28SDavid du Colombier " } else", 354*de2caf28SDavid du Colombier " { ((P0 *)_this)->_pid = h;", 355*de2caf28SDavid du Colombier " }", 356219b2ee8SDavid du Colombier " switch (n) {", 357219b2ee8SDavid du Colombier 0, 358219b2ee8SDavid du Colombier }; 359219b2ee8SDavid du Colombier 360*de2caf28SDavid du Colombier static const char *Addq0[] = { 361*de2caf28SDavid du Colombier "", 362219b2ee8SDavid du Colombier "int", 36300d97012SDavid du Colombier "addqueue(int calling_pid, int n, int is_rv)", 364312a1df1SDavid du Colombier "{ int j=0, i = now._nr_qs;", 36500d97012SDavid du Colombier "#if !defined(NOCOMP) && !defined(TRIX)", 366312a1df1SDavid du Colombier " int k;", 367312a1df1SDavid du Colombier "#endif", 368219b2ee8SDavid du Colombier " if (i >= MAXQ)", 369219b2ee8SDavid du Colombier " Uerror(\"too many queues\");", 37000d97012SDavid du Colombier "#ifdef V_TRIX", 37100d97012SDavid du Colombier " printf(\"%%4d: add queue %%d\\n\", depth, i);", 37200d97012SDavid du Colombier "#endif", 373219b2ee8SDavid du Colombier " switch (n) {", 374219b2ee8SDavid du Colombier 0, 375219b2ee8SDavid du Colombier }; 376219b2ee8SDavid du Colombier 377*de2caf28SDavid du Colombier static const char *Addq1[] = { 378219b2ee8SDavid du Colombier " default: Uerror(\"bad queue - addqueue\");", 379219b2ee8SDavid du Colombier " }", 380*de2caf28SDavid du Colombier " #ifdef BFS_PAR", 381*de2caf28SDavid du Colombier " bfs_prepmask(2); /* addqueue */", 382*de2caf28SDavid du Colombier " #endif", 38300d97012SDavid du Colombier 38400d97012SDavid du Colombier "#ifdef TRIX", 385*de2caf28SDavid du Colombier " vsize += sizeof(H_el *);", 38600d97012SDavid du Colombier "#else", 3877dd7cddfSDavid du Colombier " if (vsize%%WS)", 388219b2ee8SDavid du Colombier " q_skip[i] = WS-(vsize%%WS);", 389219b2ee8SDavid du Colombier " else", 390219b2ee8SDavid du Colombier " q_skip[i] = 0;", 391*de2caf28SDavid du Colombier " #if !defined(NOCOMP) && !defined(HC)", 392312a1df1SDavid du Colombier " k = vsize;", 393312a1df1SDavid du Colombier " #ifndef BFS", 394312a1df1SDavid du Colombier " if (is_rv) k += j;", 395312a1df1SDavid du Colombier " #endif", 396f3793cddSDavid du Colombier " for (k += (int) q_skip[i]; k > vsize; k--)", 397312a1df1SDavid du Colombier " Mask[k-1] = 1;", 398219b2ee8SDavid du Colombier " #endif", 399f3793cddSDavid du Colombier " vsize += (int) q_skip[i];", 400219b2ee8SDavid du Colombier " q_offset[i] = vsize;", 401219b2ee8SDavid du Colombier " vsize += j;", 402*de2caf28SDavid du Colombier " #ifdef BFS_PAR", 403*de2caf28SDavid du Colombier " bfs_fixmask(2); /* addqueue */", 404*de2caf28SDavid du Colombier " #endif", 40500d97012SDavid du Colombier "#endif", 40600d97012SDavid du Colombier 40700d97012SDavid du Colombier " now._nr_qs += 1;", 4087dd7cddfSDavid du Colombier "#ifndef NOVSZ", 4097dd7cddfSDavid du Colombier " now._vsz = vsize;", 4107dd7cddfSDavid du Colombier "#endif", 411219b2ee8SDavid du Colombier " hmax = max(hmax, vsize);", 41200d97012SDavid du Colombier 41300d97012SDavid du Colombier "#ifdef TRIX", 41400d97012SDavid du Colombier " #ifndef BFS", 41500d97012SDavid du Colombier " if (freebodies)", 41600d97012SDavid du Colombier " { channels[i] = freebodies;", 41700d97012SDavid du Colombier " freebodies = freebodies->nxt;", 41800d97012SDavid du Colombier " } else", 41900d97012SDavid du Colombier " { channels[i] = (TRIX_v6 *) emalloc(sizeof(TRIX_v6));", 42000d97012SDavid du Colombier " channels[i]->body = (uchar *) emalloc(Maxbody * sizeof(char));", 42100d97012SDavid du Colombier " }", 42200d97012SDavid du Colombier " channels[i]->modified = 1; /* addq */", 42300d97012SDavid du Colombier " #endif", 42400d97012SDavid du Colombier " channels[i]->psize = j;", 42500d97012SDavid du Colombier " channels[i]->parent_pid = calling_pid;", 42600d97012SDavid du Colombier " channels[i]->nxt = (TRIX_v6 *) 0;", 42700d97012SDavid du Colombier "#else", 428219b2ee8SDavid du Colombier " if (vsize >= VECTORSZ)", 429219b2ee8SDavid du Colombier " Uerror(\"VECTORSZ is too small, edit pan.h\");", 43000d97012SDavid du Colombier "#endif", 43100d97012SDavid du Colombier 43200d97012SDavid du Colombier " if (j > 0)", /* zero if there are no queues */ 43300d97012SDavid du Colombier " { memset((char *)qptr(i), 0, j);", 43400d97012SDavid du Colombier " }", 435219b2ee8SDavid du Colombier " ((Q0 *)qptr(i))->_t = n;", 436219b2ee8SDavid du Colombier " return i+1;", 437219b2ee8SDavid du Colombier "}\n", 438219b2ee8SDavid du Colombier 0, 439219b2ee8SDavid du Colombier }; 440219b2ee8SDavid du Colombier 441*de2caf28SDavid du Colombier static const char *Addq11[] = { 442312a1df1SDavid du Colombier "{ int j; uchar *z;\n", 443312a1df1SDavid du Colombier "#ifdef HAS_SORTED", 444312a1df1SDavid du Colombier " int k;", 445312a1df1SDavid du Colombier "#endif", 446219b2ee8SDavid du Colombier " if (!into--)", 447219b2ee8SDavid du Colombier " uerror(\"ref to uninitialized chan name (sending)\");", 4487dd7cddfSDavid du Colombier " if (into >= (int) now._nr_qs || into < 0)", 449219b2ee8SDavid du Colombier " Uerror(\"qsend bad queue#\");", 45000d97012SDavid du Colombier "#if defined(TRIX) && !defined(BFS)", 45100d97012SDavid du Colombier " #ifndef TRIX_ORIG", 45200d97012SDavid du Colombier " (trpt+1)->q_bup = now._ids_[now._nr_pr+into];", 45300d97012SDavid du Colombier " #ifdef V_TRIX", 45400d97012SDavid du Colombier " printf(\"%%4d: channel %%d s save %%p from %%d\\n\",", 45500d97012SDavid du Colombier " depth, into, (trpt+1)->q_bup, now._nr_pr+into);", 45600d97012SDavid du Colombier " #endif", 45700d97012SDavid du Colombier " #endif", 45800d97012SDavid du Colombier " channels[into]->modified = 1; /* qsend */", 45900d97012SDavid du Colombier " #ifdef V_TRIX", 46000d97012SDavid du Colombier " printf(\"%%4d: channel %%d modified\\n\", depth, into);", 46100d97012SDavid du Colombier " #endif", 46200d97012SDavid du Colombier "#endif", 463219b2ee8SDavid du Colombier " z = qptr(into);", 464219b2ee8SDavid du Colombier " j = ((Q0 *)qptr(into))->Qlen;", 465219b2ee8SDavid du Colombier " switch (((Q0 *)qptr(into))->_t) {", 466219b2ee8SDavid du Colombier 0, 467219b2ee8SDavid du Colombier }; 468219b2ee8SDavid du Colombier 469*de2caf28SDavid du Colombier static const char *Addq2[] = { 470219b2ee8SDavid du Colombier " case 0: printf(\"queue %%d was deleted\\n\", into+1);", 471219b2ee8SDavid du Colombier " default: Uerror(\"bad queue - qsend\");", 472219b2ee8SDavid du Colombier " }", 4737dd7cddfSDavid du Colombier "#ifdef EVENT_TRACE", 4747dd7cddfSDavid du Colombier " if (in_s_scope(into+1))", 4757dd7cddfSDavid du Colombier " require('s', into);", 4767dd7cddfSDavid du Colombier "#endif", 477312a1df1SDavid du Colombier "}", 478312a1df1SDavid du Colombier "#endif\n", 479219b2ee8SDavid du Colombier "#if SYNC", 480219b2ee8SDavid du Colombier "int", 481219b2ee8SDavid du Colombier "q_zero(int from)", 482219b2ee8SDavid du Colombier "{ if (!from--)", 483312a1df1SDavid du Colombier " { uerror(\"ref to uninitialized chan name (q_zero)\");", 484312a1df1SDavid du Colombier " return 0;", 485312a1df1SDavid du Colombier " }", 486219b2ee8SDavid du Colombier " switch(((Q0 *)qptr(from))->_t) {", 487219b2ee8SDavid du Colombier 0, 488219b2ee8SDavid du Colombier }; 489219b2ee8SDavid du Colombier 490*de2caf28SDavid du Colombier static const char *Addq3[] = { 491219b2ee8SDavid du Colombier " case 0: printf(\"queue %%d was deleted\\n\", from+1);", 492219b2ee8SDavid du Colombier " }", 493219b2ee8SDavid du Colombier " Uerror(\"bad queue q-zero\");", 494312a1df1SDavid du Colombier " return -1;", 495219b2ee8SDavid du Colombier "}", 496219b2ee8SDavid du Colombier "int", 497219b2ee8SDavid du Colombier "not_RV(int from)", 498219b2ee8SDavid du Colombier "{ if (q_zero(from))", 4997dd7cddfSDavid du Colombier " { printf(\"==>> a test of the contents of a rv \");", 5007dd7cddfSDavid du Colombier " printf(\"channel always returns FALSE\\n\");", 501219b2ee8SDavid du Colombier " uerror(\"error to poll rendezvous channel\");", 502219b2ee8SDavid du Colombier " }", 503219b2ee8SDavid du Colombier " return 1;", 504219b2ee8SDavid du Colombier "}", 505219b2ee8SDavid du Colombier "#endif", 506219b2ee8SDavid du Colombier "#ifndef XUSAFE", 507219b2ee8SDavid du Colombier "void", 508219b2ee8SDavid du Colombier "setq_claim(int x, int m, char *s, int y, char *p)", 509219b2ee8SDavid du Colombier "{ if (x == 0)", 510219b2ee8SDavid du Colombier " uerror(\"x[rs] claim on uninitialized channel\");", 511219b2ee8SDavid du Colombier " if (x < 0 || x > MAXQ)", 512219b2ee8SDavid du Colombier " Uerror(\"cannot happen setq_claim\");", 513219b2ee8SDavid du Colombier " q_claim[x] |= m;", 514219b2ee8SDavid du Colombier " p_name[y] = p;", 515219b2ee8SDavid du Colombier " q_name[x] = s;", 516219b2ee8SDavid du Colombier " if (m&2) q_S_check(x, y);", 517219b2ee8SDavid du Colombier " if (m&1) q_R_check(x, y);", 518219b2ee8SDavid du Colombier "}", 519219b2ee8SDavid du Colombier "short q_sender[MAXQ+1];", 520219b2ee8SDavid du Colombier "int", 521219b2ee8SDavid du Colombier "q_S_check(int x, int who)", 522219b2ee8SDavid du Colombier "{ if (!q_sender[x])", 523219b2ee8SDavid du Colombier " { q_sender[x] = who+1;", 524219b2ee8SDavid du Colombier "#if SYNC", 525219b2ee8SDavid du Colombier " if (q_zero(x))", 5267dd7cddfSDavid du Colombier " { printf(\"chan %%s (%%d), \",", 5277dd7cddfSDavid du Colombier " q_name[x], x-1);", 5287dd7cddfSDavid du Colombier " printf(\"sndr proc %%s (%%d)\\n\",", 5297dd7cddfSDavid du Colombier " p_name[who], who);", 5307dd7cddfSDavid du Colombier " uerror(\"xs chans cannot be used for rv\");", 531219b2ee8SDavid du Colombier " }", 532219b2ee8SDavid du Colombier "#endif", 533219b2ee8SDavid du Colombier " } else", 534219b2ee8SDavid du Colombier " if (q_sender[x] != who+1)", 5357dd7cddfSDavid du Colombier " { printf(\"pan: xs assertion violated: \");", 5367dd7cddfSDavid du Colombier " printf(\"access to chan <%%s> (%%d)\\npan: by \",", 537219b2ee8SDavid du Colombier " q_name[x], x-1);", 538312a1df1SDavid du Colombier " if (q_sender[x] > 0 && p_name[q_sender[x]-1])", 539312a1df1SDavid du Colombier " printf(\"%%s (proc %%d) and by \",", 540312a1df1SDavid du Colombier " p_name[q_sender[x]-1], q_sender[x]-1);", 541312a1df1SDavid du Colombier " printf(\"%%s (proc %%d)\\n\",", 542219b2ee8SDavid du Colombier " p_name[who], who);", 543219b2ee8SDavid du Colombier " uerror(\"error, partial order reduction invalid\");", 544219b2ee8SDavid du Colombier " }", 545219b2ee8SDavid du Colombier " return 1;", 546219b2ee8SDavid du Colombier "}", 547219b2ee8SDavid du Colombier "short q_recver[MAXQ+1];", 548219b2ee8SDavid du Colombier "int", 549219b2ee8SDavid du Colombier "q_R_check(int x, int who)", 550*de2caf28SDavid du Colombier "{", 551*de2caf28SDavid du Colombier "#ifdef VERBOSE", 552*de2caf28SDavid du Colombier " printf(\"q_R_check x=%%d who=%%d\\n\", x, who);", 553*de2caf28SDavid du Colombier "#endif", 554*de2caf28SDavid du Colombier " if (!q_recver[x])", 555219b2ee8SDavid du Colombier " { q_recver[x] = who+1;", 556219b2ee8SDavid du Colombier "#if SYNC", 557219b2ee8SDavid du Colombier " if (q_zero(x))", 5587dd7cddfSDavid du Colombier " { printf(\"chan %%s (%%d), \",", 5597dd7cddfSDavid du Colombier " q_name[x], x-1);", 5607dd7cddfSDavid du Colombier " printf(\"recv proc %%s (%%d)\\n\",", 5617dd7cddfSDavid du Colombier " p_name[who], who);", 5627dd7cddfSDavid du Colombier " uerror(\"xr chans cannot be used for rv\");", 563219b2ee8SDavid du Colombier " }", 564219b2ee8SDavid du Colombier "#endif", 565219b2ee8SDavid du Colombier " } else", 566219b2ee8SDavid du Colombier " if (q_recver[x] != who+1)", 5677dd7cddfSDavid du Colombier " { printf(\"pan: xr assertion violated: \");", 568312a1df1SDavid du Colombier " printf(\"access to chan %%s (%%d)\\npan: \",", 569219b2ee8SDavid du Colombier " q_name[x], x-1);", 570312a1df1SDavid du Colombier " if (q_recver[x] > 0 && p_name[q_recver[x]-1])", 571312a1df1SDavid du Colombier " printf(\"by %%s (proc %%d) and \",", 5727dd7cddfSDavid du Colombier " p_name[q_recver[x]-1], q_recver[x]-1);", 573312a1df1SDavid du Colombier " printf(\"by %%s (proc %%d)\\n\",", 574219b2ee8SDavid du Colombier " p_name[who], who);", 575219b2ee8SDavid du Colombier " uerror(\"error, partial order reduction invalid\");", 576219b2ee8SDavid du Colombier " }", 577219b2ee8SDavid du Colombier " return 1;", 578219b2ee8SDavid du Colombier "}", 579219b2ee8SDavid du Colombier "#endif", 580219b2ee8SDavid du Colombier "int", 581219b2ee8SDavid du Colombier "q_len(int x)", 582219b2ee8SDavid du Colombier "{ if (!x--)", 583219b2ee8SDavid du Colombier " uerror(\"ref to uninitialized chan name (len)\");", 584219b2ee8SDavid du Colombier " return ((Q0 *)qptr(x))->Qlen;", 585219b2ee8SDavid du Colombier "}\n", 586219b2ee8SDavid du Colombier "int", 587219b2ee8SDavid du Colombier "q_full(int from)", 588219b2ee8SDavid du Colombier "{ if (!from--)", 589219b2ee8SDavid du Colombier " uerror(\"ref to uninitialized chan name (qfull)\");", 590219b2ee8SDavid du Colombier " switch(((Q0 *)qptr(from))->_t) {", 591219b2ee8SDavid du Colombier 0, 592219b2ee8SDavid du Colombier }; 593219b2ee8SDavid du Colombier 594*de2caf28SDavid du Colombier static const char *Addq4[] = { 595219b2ee8SDavid du Colombier " case 0: printf(\"queue %%d was deleted\\n\", from+1);", 596219b2ee8SDavid du Colombier " }", 597219b2ee8SDavid du Colombier " Uerror(\"bad queue - q_full\");", 598219b2ee8SDavid du Colombier " return 0;", 599219b2ee8SDavid du Colombier "}\n", 6007dd7cddfSDavid du Colombier "#ifdef HAS_UNLESS", 6017dd7cddfSDavid du Colombier "int", 6027dd7cddfSDavid du Colombier "q_e_f(int from)", 6037dd7cddfSDavid du Colombier "{ /* empty or full */", 6047dd7cddfSDavid du Colombier " return !q_len(from) || q_full(from);", 6057dd7cddfSDavid du Colombier "}", 6067dd7cddfSDavid du Colombier "#endif", 607312a1df1SDavid du Colombier "#if NQS>0", 608219b2ee8SDavid du Colombier "int", 609219b2ee8SDavid du Colombier "qrecv(int from, int slot, int fld, int done)", 610219b2ee8SDavid du Colombier "{ uchar *z;", 611219b2ee8SDavid du Colombier " int j, k, r=0;\n", 612219b2ee8SDavid du Colombier " if (!from--)", 613219b2ee8SDavid du Colombier " uerror(\"ref to uninitialized chan name (receiving)\");", 61400d97012SDavid du Colombier "#if defined(TRIX) && !defined(BFS)", 61500d97012SDavid du Colombier " #ifndef TRIX_ORIG", 61600d97012SDavid du Colombier " (trpt+1)->q_bup = now._ids_[now._nr_pr+from];", 61700d97012SDavid du Colombier " #ifdef V_TRIX", 61800d97012SDavid du Colombier " printf(\"%%4d: channel %%d r save %%p from %%d\\n\",", 61900d97012SDavid du Colombier " depth, from, (trpt+1)->q_bup, now._nr_pr+from);", 62000d97012SDavid du Colombier " #endif", 62100d97012SDavid du Colombier " #endif", 62200d97012SDavid du Colombier " channels[from]->modified = 1; /* qrecv */", 62300d97012SDavid du Colombier " #ifdef V_TRIX", 62400d97012SDavid du Colombier " printf(\"%%4d: channel %%d modified\\n\", depth, from);", 62500d97012SDavid du Colombier " #endif", 62600d97012SDavid du Colombier "#endif", 6277dd7cddfSDavid du Colombier " if (from >= (int) now._nr_qs || from < 0)", 628219b2ee8SDavid du Colombier " Uerror(\"qrecv bad queue#\");", 629219b2ee8SDavid du Colombier " z = qptr(from);", 6307dd7cddfSDavid du Colombier "#ifdef EVENT_TRACE", 6317dd7cddfSDavid du Colombier " if (done && (in_r_scope(from+1)))", 6327dd7cddfSDavid du Colombier " require('r', from);", 6337dd7cddfSDavid du Colombier "#endif", 634219b2ee8SDavid du Colombier " switch (((Q0 *)qptr(from))->_t) {", 635219b2ee8SDavid du Colombier 0, 636219b2ee8SDavid du Colombier }; 637219b2ee8SDavid du Colombier 638*de2caf28SDavid du Colombier static const char *Addq5[] = { 639219b2ee8SDavid du Colombier " case 0: printf(\"queue %%d was deleted\\n\", from+1);", 640219b2ee8SDavid du Colombier " default: Uerror(\"bad queue - qrecv\");", 641219b2ee8SDavid du Colombier " }", 642219b2ee8SDavid du Colombier " return r;", 643312a1df1SDavid du Colombier "}", 644312a1df1SDavid du Colombier "#endif\n", 6457dd7cddfSDavid du Colombier "#ifndef BITSTATE", 6467dd7cddfSDavid du Colombier " #ifdef COLLAPSE", 6477dd7cddfSDavid du Colombier "long", 6487dd7cddfSDavid du Colombier "col_q(int i, char *z)", 649312a1df1SDavid du Colombier "{ int j=0, k;", 6507dd7cddfSDavid du Colombier " char *x, *y;", 6517dd7cddfSDavid du Colombier " Q0 *ptr = (Q0 *) qptr(i);", 6527dd7cddfSDavid du Colombier " switch (ptr->_t) {", 653219b2ee8SDavid du Colombier 0, 654219b2ee8SDavid du Colombier }; 655219b2ee8SDavid du Colombier 656*de2caf28SDavid du Colombier static const char *Code0[] = { 657*de2caf28SDavid du Colombier "#ifdef INIT_STATE", 658*de2caf28SDavid du Colombier "void", /* Bocchino */ 659*de2caf28SDavid du Colombier "init_state(State state)" 660*de2caf28SDavid du Colombier "{ state._nr_pr = 0;", 661*de2caf28SDavid du Colombier " state._nr_qs = 0;", 662*de2caf28SDavid du Colombier " state._a_t = 0;", 663*de2caf28SDavid du Colombier "#ifndef NOFAIR", 664*de2caf28SDavid du Colombier " memset(&state._cnt, 0, sizeof(state._cnt));", 665*de2caf28SDavid du Colombier "#endif", 666*de2caf28SDavid du Colombier "#ifndef NOVSZ", 667*de2caf28SDavid du Colombier " state._vsz = 0;", 668*de2caf28SDavid du Colombier "#endif", 669*de2caf28SDavid du Colombier "#ifdef HAS_LAST", 670*de2caf28SDavid du Colombier " state._last = 0;", 671*de2caf28SDavid du Colombier "#endif", 672*de2caf28SDavid du Colombier "#if defined(BITSTATE) && defined(BCS) && defined(STORE_CTX)", 673*de2caf28SDavid du Colombier " state._ctx = 0;", 674*de2caf28SDavid du Colombier "#endif", 675*de2caf28SDavid du Colombier "#if defined(BFS_PAR) && defined(L_BOUND)", 676*de2caf28SDavid du Colombier " state._l_bnd = 0;", 677*de2caf28SDavid du Colombier " state._l_sds = 0;", 678*de2caf28SDavid du Colombier "#endif", 679*de2caf28SDavid du Colombier "#ifdef EVENT_TRACE", 680*de2caf28SDavid du Colombier " state_event = 0;", 681*de2caf28SDavid du Colombier "#endif", 682*de2caf28SDavid du Colombier "#ifdef TRIX", 683*de2caf28SDavid du Colombier " memset(&state._ids_, 0, sizeof(state._ids_));", 684*de2caf28SDavid du Colombier "#else", 685*de2caf28SDavid du Colombier " memset(&state.sv, 0, sizeof(state.sv));", 686*de2caf28SDavid du Colombier "#endif", 687*de2caf28SDavid du Colombier "}", 688*de2caf28SDavid du Colombier "#endif", 689*de2caf28SDavid du Colombier "", 690219b2ee8SDavid du Colombier "void", 691219b2ee8SDavid du Colombier "run(void)", 692312a1df1SDavid du Colombier "{ /* int i; */", 693*de2caf28SDavid du Colombier "#ifdef INIT_STATE", 694*de2caf28SDavid du Colombier " init_state(now);", 695*de2caf28SDavid du Colombier "#else", 696219b2ee8SDavid du Colombier " memset((char *)&now, 0, sizeof(State));", 697*de2caf28SDavid du Colombier "#endif", 698*de2caf28SDavid du Colombier " vsize = (ulong) (sizeof(State) - VECTORSZ);", 6997dd7cddfSDavid du Colombier "#ifndef NOVSZ", 7007dd7cddfSDavid du Colombier " now._vsz = vsize;", 7017dd7cddfSDavid du Colombier "#endif", 70200d97012SDavid du Colombier "#ifdef TRIX", 70300d97012SDavid du Colombier " if (VECTORSZ != sizeof(now._ids_))", 70400d97012SDavid du Colombier " { printf(\"VECTORSZ is %%d, but should be %%d in this mode\\n\",", 705*de2caf28SDavid du Colombier " VECTORSZ, (int) sizeof(now._ids_));", 70600d97012SDavid du Colombier " Uerror(\"VECTORSZ set incorrectly, recompile Spin (not pan.c)\");", 70700d97012SDavid du Colombier " }", 70800d97012SDavid du Colombier "#endif", 7097dd7cddfSDavid du Colombier "/* optional provisioning statements, e.g. to */", 7107dd7cddfSDavid du Colombier "/* set hidden variables, used as constants */", 7117dd7cddfSDavid du Colombier "#ifdef PROV", 7127dd7cddfSDavid du Colombier "#include PROV", 7137dd7cddfSDavid du Colombier "#endif", 714219b2ee8SDavid du Colombier " settable();", 715219b2ee8SDavid du Colombier 0, 716219b2ee8SDavid du Colombier }; 717219b2ee8SDavid du Colombier 718*de2caf28SDavid du Colombier static const char *R0[] = { 71900d97012SDavid du Colombier " Maxbody = max(Maxbody, ((int) sizeof(P%d)));", 720219b2ee8SDavid du Colombier " reached[%d] = reached%d;", 721*de2caf28SDavid du Colombier " accpstate[%d] = (uchar *) emalloc(_nstates%d);", 722*de2caf28SDavid du Colombier " progstate[%d] = (uchar *) emalloc(_nstates%d);", 723*de2caf28SDavid du Colombier " loopstate%d = loopstate[%d] = (uchar *) emalloc(_nstates%d);", 724*de2caf28SDavid du Colombier " stopstate[%d] = (uchar *) emalloc(_nstates%d);", 725*de2caf28SDavid du Colombier " visstate[%d] = (uchar *) emalloc(_nstates%d);", 726*de2caf28SDavid du Colombier " mapstate[%d] = (short *) emalloc(_nstates%d * sizeof(short));", 727*de2caf28SDavid du Colombier " stopstate[%d][_endstate%d] = 1;", 728219b2ee8SDavid du Colombier 0, 729219b2ee8SDavid du Colombier }; 730219b2ee8SDavid du Colombier 731*de2caf28SDavid du Colombier static const char *R00[] = { 732*de2caf28SDavid du Colombier " NrStates[%d] = _nstates%d;", 733219b2ee8SDavid du Colombier 0, 734219b2ee8SDavid du Colombier }; 735219b2ee8SDavid du Colombier 736*de2caf28SDavid du Colombier static const char *R0a[] = { 737*de2caf28SDavid du Colombier " retrans(%d, _nstates%d, _start%d, src_ln%d, reached%d, loopstate%d);", 738*de2caf28SDavid du Colombier 0, 739*de2caf28SDavid du Colombier }; 740*de2caf28SDavid du Colombier 741*de2caf28SDavid du Colombier static const char *Code1[] = { 7427dd7cddfSDavid du Colombier "#ifdef NP", 7437dd7cddfSDavid du Colombier " #define ACCEPT_LAB 1 /* at least 1 in np_ */", 7447dd7cddfSDavid du Colombier "#else", 7457dd7cddfSDavid du Colombier " #define ACCEPT_LAB %d /* user-defined accept labels */", 7467dd7cddfSDavid du Colombier "#endif", 74700d97012SDavid du Colombier "#ifdef MEMCNT", 74800d97012SDavid du Colombier " #ifdef MEMLIM", 74900d97012SDavid du Colombier " #warning -DMEMLIM takes precedence over -DMEMCNT", 75000d97012SDavid du Colombier " #undef MEMCNT", 75100d97012SDavid du Colombier " #else", 75200d97012SDavid du Colombier " #if MEMCNT<20", 75300d97012SDavid du Colombier " #warning using minimal value -DMEMCNT=20 (=1MB)", 75400d97012SDavid du Colombier " #define MEMLIM (1)", 75500d97012SDavid du Colombier " #undef MEMCNT", 75600d97012SDavid du Colombier " #else", 75700d97012SDavid du Colombier " #if MEMCNT==20", 75800d97012SDavid du Colombier " #define MEMLIM (1)", 75900d97012SDavid du Colombier " #undef MEMCNT", 76000d97012SDavid du Colombier " #else", 76100d97012SDavid du Colombier " #if MEMCNT>=50", 76200d97012SDavid du Colombier " #error excessive value for MEMCNT", 76300d97012SDavid du Colombier " #else", 76400d97012SDavid du Colombier " #define MEMLIM (1<<(MEMCNT-20))", 76500d97012SDavid du Colombier " #endif", 76600d97012SDavid du Colombier " #endif", 76700d97012SDavid du Colombier " #endif", 76800d97012SDavid du Colombier " #endif", 76900d97012SDavid du Colombier "#endif", 77000d97012SDavid du Colombier 77100d97012SDavid du Colombier "#if NCORE>1 && !defined(MEMLIM)", 77200d97012SDavid du Colombier " #define MEMLIM (2048) /* need a default, using 2 GB */", 77300d97012SDavid du Colombier "#endif", 774219b2ee8SDavid du Colombier 0, 775219b2ee8SDavid du Colombier }; 776219b2ee8SDavid du Colombier 777*de2caf28SDavid du Colombier static const char *Code3[] = { 778219b2ee8SDavid du Colombier "#define PROG_LAB %d /* progress labels */", 779219b2ee8SDavid du Colombier 0, 780219b2ee8SDavid du Colombier }; 781219b2ee8SDavid du Colombier 782*de2caf28SDavid du Colombier static const char *R2[] = { 783219b2ee8SDavid du Colombier "uchar *accpstate[%d];", 784219b2ee8SDavid du Colombier "uchar *progstate[%d];", 78500d97012SDavid du Colombier "uchar *loopstate[%d];", 786219b2ee8SDavid du Colombier "uchar *reached[%d];", 787219b2ee8SDavid du Colombier "uchar *stopstate[%d];", 7887dd7cddfSDavid du Colombier "uchar *visstate[%d];", 789312a1df1SDavid du Colombier "short *mapstate[%d];", 790312a1df1SDavid du Colombier "#ifdef HAS_CODE", 791312a1df1SDavid du Colombier " int NrStates[%d];", 792312a1df1SDavid du Colombier "#endif", 793219b2ee8SDavid du Colombier 0, 794219b2ee8SDavid du Colombier }; 795*de2caf28SDavid du Colombier static const char *R3[] = { 79600d97012SDavid du Colombier " Maxbody = max(Maxbody, ((int) sizeof(Q%d)));", 797219b2ee8SDavid du Colombier 0, 798219b2ee8SDavid du Colombier }; 799*de2caf28SDavid du Colombier static const char *R4[] = { 800*de2caf28SDavid du Colombier " r_ck(reached%d, _nstates%d, %d, src_ln%d, src_file%d);", 801219b2ee8SDavid du Colombier 0, 802219b2ee8SDavid du Colombier }; 803*de2caf28SDavid du Colombier static const char *R5[] = { 804219b2ee8SDavid du Colombier " case %d: j = sizeof(P%d); break;", 805219b2ee8SDavid du Colombier 0, 806219b2ee8SDavid du Colombier }; 807*de2caf28SDavid du Colombier static const char *R6[] = { 808219b2ee8SDavid du Colombier " }", 809*de2caf28SDavid du Colombier " _this = o_this;", 81000d97012SDavid du Colombier "#ifdef TRIX", 81100d97012SDavid du Colombier " re_mark_all(1); /* addproc */", 81200d97012SDavid du Colombier "#endif", 813219b2ee8SDavid du Colombier " return h-BASE;", 8147dd7cddfSDavid du Colombier "#ifndef NOBOUNDCHECK", 8157dd7cddfSDavid du Colombier " #undef Index", 8167dd7cddfSDavid du Colombier " #define Index(x, y) Boundcheck(x, y, II, tt, t)", 8177dd7cddfSDavid du Colombier "#endif", 818219b2ee8SDavid du Colombier "}\n", 8197dd7cddfSDavid du Colombier "#if defined(BITSTATE) && defined(COLLAPSE)", 8207dd7cddfSDavid du Colombier " /* just to allow compilation, to generate the error */", 8217dd7cddfSDavid du Colombier " long col_p(int i, char *z) { return 0; }", 8227dd7cddfSDavid du Colombier " long col_q(int i, char *z) { return 0; }", 8237dd7cddfSDavid du Colombier "#endif", 8247dd7cddfSDavid du Colombier "#ifndef BITSTATE", 8257dd7cddfSDavid du Colombier " #ifdef COLLAPSE", 8267dd7cddfSDavid du Colombier "long", 8277dd7cddfSDavid du Colombier "col_p(int i, char *z)", 828*de2caf28SDavid du Colombier "{ int j, k; ulong ordinal(char *, long, short);", 8297dd7cddfSDavid du Colombier " char *x, *y;", 8307dd7cddfSDavid du Colombier " P0 *ptr = (P0 *) pptr(i);", 8317dd7cddfSDavid du Colombier " switch (ptr->_t) {", 8327dd7cddfSDavid du Colombier " case 0: j = sizeof(P0); break;", 833219b2ee8SDavid du Colombier 0, 834219b2ee8SDavid du Colombier }; 835*de2caf28SDavid du Colombier static const char *R7a[] = { 836*de2caf28SDavid du Colombier "void\nre_mark_all(int whichway)", 837*de2caf28SDavid du Colombier "{ int j;", 838*de2caf28SDavid du Colombier " #ifdef V_TRIX", 839*de2caf28SDavid du Colombier " printf(\"%%d: re_mark_all channels %%d\\n\", depth, whichway);", 840*de2caf28SDavid du Colombier " #endif", 841*de2caf28SDavid du Colombier " #ifndef BFS", 842*de2caf28SDavid du Colombier " for (j = 0; j < now._nr_qs; j++)", 843*de2caf28SDavid du Colombier " channels[j]->modified = 1; /* channel index moved */", 844*de2caf28SDavid du Colombier " #endif", 845*de2caf28SDavid du Colombier " #ifndef TRIX_ORIG", 846*de2caf28SDavid du Colombier " if (whichway > 0)", 847*de2caf28SDavid du Colombier " { for (j = now._nr_pr + now._nr_qs - 1; j >= now._nr_pr; j--)", 848*de2caf28SDavid du Colombier " now._ids_[j] = now._ids_[j-1];", 849*de2caf28SDavid du Colombier " } else", 850*de2caf28SDavid du Colombier " { for (j = now._nr_pr; j < now._nr_pr + now._nr_qs; j++)", 851*de2caf28SDavid du Colombier " now._ids_[j] = now._ids_[j+1];", 852*de2caf28SDavid du Colombier " }", 853*de2caf28SDavid du Colombier " #endif", 854*de2caf28SDavid du Colombier "}", 855*de2caf28SDavid du Colombier 0, 856*de2caf28SDavid du Colombier }; 857*de2caf28SDavid du Colombier 858*de2caf28SDavid du Colombier static const char *R7b[] = { 859*de2caf28SDavid du Colombier "#ifdef BFS_PAR", 860*de2caf28SDavid du Colombier "void", 861*de2caf28SDavid du Colombier "bfs_prepmask(int caller)", 862*de2caf28SDavid du Colombier "{", 863*de2caf28SDavid du Colombier "#if !defined(NOCOMP) && !defined(HC)", 864*de2caf28SDavid du Colombier " memcpy((char *) &tmp_msk, (const char *) Mask, sizeof(State));", 865*de2caf28SDavid du Colombier " Mask = (uchar *) &tmp_msk;", 866*de2caf28SDavid du Colombier "#endif", 867*de2caf28SDavid du Colombier " switch (caller) {", 868*de2caf28SDavid du Colombier " case 1: /* addproc */", 869*de2caf28SDavid du Colombier "#if VECTORSZ>32000", 870*de2caf28SDavid du Colombier " memcpy((char *) P_o_tmp, (const char *) proc_offset, MAXPROC*sizeof(int));", 871*de2caf28SDavid du Colombier "#else", 872*de2caf28SDavid du Colombier " memcpy((char *) P_o_tmp, (const char *) proc_offset, MAXPROC*sizeof(short));", 873*de2caf28SDavid du Colombier "#endif", 874*de2caf28SDavid du Colombier " memcpy((char *) P_s_tmp, (const char *) proc_skip, MAXPROC*sizeof(uchar));", 875*de2caf28SDavid du Colombier " proc_offset = P_o_tmp;", 876*de2caf28SDavid du Colombier " proc_skip = (uchar *) &P_s_tmp[0];", 877*de2caf28SDavid du Colombier " break;", 878*de2caf28SDavid du Colombier " case 2: /* addqueue */", 879*de2caf28SDavid du Colombier "#if VECTORSZ>32000", 880*de2caf28SDavid du Colombier " memcpy((char *) Q_o_tmp, (const char *) q_offset, MAXQ*sizeof(int));", 881*de2caf28SDavid du Colombier "#else", 882*de2caf28SDavid du Colombier " memcpy((char *) Q_o_tmp, (const char *) q_offset, MAXQ*sizeof(short));", 883*de2caf28SDavid du Colombier "#endif", 884*de2caf28SDavid du Colombier " memcpy((char *) Q_s_tmp, (const char *) q_skip, MAXQ*sizeof(uchar));", 885*de2caf28SDavid du Colombier " q_offset = Q_o_tmp;", 886*de2caf28SDavid du Colombier " q_skip = (uchar *) &Q_s_tmp[0];", 887*de2caf28SDavid du Colombier " break;", 888*de2caf28SDavid du Colombier " case 3: /* no nothing */", 889*de2caf28SDavid du Colombier " break;", 890*de2caf28SDavid du Colombier " default: /* cannot happen */", 891*de2caf28SDavid du Colombier " Uerror(\"no good\");", 892*de2caf28SDavid du Colombier " break;", 893*de2caf28SDavid du Colombier " }", 894*de2caf28SDavid du Colombier "}", 895*de2caf28SDavid du Colombier "", 896*de2caf28SDavid du Colombier "typedef struct BFS_saves BFS_saves;", 897*de2caf28SDavid du Colombier "struct BFS_saves {", 898*de2caf28SDavid du Colombier " char *m;", 899*de2caf28SDavid du Colombier " BFS_saves *nxt;", 900*de2caf28SDavid du Colombier "} *bfs_save_po,", 901*de2caf28SDavid du Colombier " *bfs_save_ps,", 902*de2caf28SDavid du Colombier "#if !defined(NOCOMP) && !defined(HC)", 903*de2caf28SDavid du Colombier " *bfs_save_mask,", 904*de2caf28SDavid du Colombier "#endif", 905*de2caf28SDavid du Colombier " *bfs_save_qo,", 906*de2caf28SDavid du Colombier " *bfs_save_qs;", 907*de2caf28SDavid du Colombier "", 908*de2caf28SDavid du Colombier "extern volatile uchar *sh_malloc(ulong);", 909*de2caf28SDavid du Colombier "static int bfs_runs; /* 0 before local heaps are initialized */", 910*de2caf28SDavid du Colombier "", 911*de2caf28SDavid du Colombier "void", 912*de2caf28SDavid du Colombier "bfs_swoosh(BFS_saves **where, char **what, int howmuch)", 913*de2caf28SDavid du Colombier "{ BFS_saves *m;", 914*de2caf28SDavid du Colombier " for (m = *where; m; m = m->nxt)", 915*de2caf28SDavid du Colombier " { if (memcmp(m->m, *what, howmuch) == 0)", 916*de2caf28SDavid du Colombier " { *what = m->m;", 917*de2caf28SDavid du Colombier " return;", 918*de2caf28SDavid du Colombier " } }", 919*de2caf28SDavid du Colombier " m = (BFS_saves *) emalloc(sizeof(BFS_saves));", 920*de2caf28SDavid du Colombier " if (bfs_runs)", 921*de2caf28SDavid du Colombier " { m->m = (char *) sh_malloc(howmuch);", 922*de2caf28SDavid du Colombier " } else", 923*de2caf28SDavid du Colombier " { m->m = (char *) sh_pre_malloc(howmuch);", 924*de2caf28SDavid du Colombier " }", 925*de2caf28SDavid du Colombier " memcpy(m->m, *what, howmuch);", 926*de2caf28SDavid du Colombier " m->nxt = *where;", 927*de2caf28SDavid du Colombier " *where = m;", 928*de2caf28SDavid du Colombier " *what = m->m;", 929*de2caf28SDavid du Colombier "}", 930*de2caf28SDavid du Colombier "", 931*de2caf28SDavid du Colombier "void", 932*de2caf28SDavid du Colombier "bfs_fixmask(int caller)", /* 1=addproc, 2=addqueue */ 933*de2caf28SDavid du Colombier "{", 934*de2caf28SDavid du Colombier "#if !defined(NOCOMP) && !defined(HC)", 935*de2caf28SDavid du Colombier " bfs_swoosh(&bfs_save_mask, (char **) &Mask, sizeof(State));", 936*de2caf28SDavid du Colombier "#endif", 937*de2caf28SDavid du Colombier "#ifndef TRIX", 938*de2caf28SDavid du Colombier " switch (caller) {", 939*de2caf28SDavid du Colombier " case 1: /* addproc */", 940*de2caf28SDavid du Colombier " #if VECTORSZ>32000", 941*de2caf28SDavid du Colombier " bfs_swoosh(&bfs_save_po, (char **) &proc_offset, MAXPROC*sizeof(int));", 942*de2caf28SDavid du Colombier " #else", 943*de2caf28SDavid du Colombier " bfs_swoosh(&bfs_save_po, (char **) &proc_offset, MAXPROC*sizeof(short));", 944*de2caf28SDavid du Colombier " #endif", 945*de2caf28SDavid du Colombier " bfs_swoosh(&bfs_save_ps, (char **) &proc_skip, MAXPROC*sizeof(uchar));", 946*de2caf28SDavid du Colombier " break;", 947*de2caf28SDavid du Colombier " case 2: /* addqueue */", 948*de2caf28SDavid du Colombier " #if VECTORSZ>32000", 949*de2caf28SDavid du Colombier " bfs_swoosh(&bfs_save_qo, (char **) &q_offset, MAXQ*sizeof(int));", 950*de2caf28SDavid du Colombier " #else", 951*de2caf28SDavid du Colombier " bfs_swoosh(&bfs_save_qo, (char **) &q_offset, MAXQ*sizeof(short));", 952*de2caf28SDavid du Colombier " #endif", 953*de2caf28SDavid du Colombier " bfs_swoosh(&bfs_save_qs, (char **) &q_skip, MAXQ*sizeof(uchar));", 954*de2caf28SDavid du Colombier " break;", 955*de2caf28SDavid du Colombier " case 3: /* do nothing */", 956*de2caf28SDavid du Colombier " break;", 957*de2caf28SDavid du Colombier " default:", 958*de2caf28SDavid du Colombier " Uerror(\"double plus ungood\");", 959*de2caf28SDavid du Colombier " break;", 960*de2caf28SDavid du Colombier " }", 961*de2caf28SDavid du Colombier "#endif", 962*de2caf28SDavid du Colombier "}", 963*de2caf28SDavid du Colombier "#endif", 964*de2caf28SDavid du Colombier 0, 965*de2caf28SDavid du Colombier }; 966*de2caf28SDavid du Colombier static const char *R8a[] = { 9677dd7cddfSDavid du Colombier " default: Uerror(\"bad proctype - collapse\");", 9687dd7cddfSDavid du Colombier " }", 9697dd7cddfSDavid du Colombier " if (z) x = z; else x = scratch;", 9707dd7cddfSDavid du Colombier " y = (char *) ptr; k = proc_offset[i];", 971*de2caf28SDavid du Colombier "", 972*de2caf28SDavid du Colombier "#if !defined(NOCOMP) && !defined(HC)", 9737dd7cddfSDavid du Colombier " for ( ; j > 0; j--, y++)", 9747dd7cddfSDavid du Colombier " if (!Mask[k++]) *x++ = *y;", 975*de2caf28SDavid du Colombier "#else", 976*de2caf28SDavid du Colombier " memcpy(x, y, j);", 977*de2caf28SDavid du Colombier " x += j;", 978*de2caf28SDavid du Colombier "#endif", 9797dd7cddfSDavid du Colombier " for (j = 0; j < WS-1; j++)", 9807dd7cddfSDavid du Colombier " *x++ = 0;", 9817dd7cddfSDavid du Colombier " x -= j;", 982312a1df1SDavid du Colombier " if (z) return (long) (x - z);", 983312a1df1SDavid du Colombier " return ordinal(scratch, x-scratch, (short) (2+ptr->_t));", 9847dd7cddfSDavid du Colombier "}", 9857dd7cddfSDavid du Colombier " #endif", 9867dd7cddfSDavid du Colombier "#endif", 9877dd7cddfSDavid du Colombier 0, 9887dd7cddfSDavid du Colombier }; 989*de2caf28SDavid du Colombier static const char *R8b[] = { 9907dd7cddfSDavid du Colombier " default: Uerror(\"bad qtype - collapse\");", 9917dd7cddfSDavid du Colombier " }", 9927dd7cddfSDavid du Colombier " if (z) x = z; else x = scratch;", 9937dd7cddfSDavid du Colombier " y = (char *) ptr; k = q_offset[i];", 9947dd7cddfSDavid du Colombier 995*de2caf28SDavid du Colombier "#if NQS > 0", 9967dd7cddfSDavid du Colombier " /* no need to store the empty slots at the end */", 9977dd7cddfSDavid du Colombier " j -= (q_max[ptr->_t] - ptr->Qlen) * ((j - 2)/q_max[ptr->_t]);", 998*de2caf28SDavid du Colombier "#endif", 999*de2caf28SDavid du Colombier "", 1000*de2caf28SDavid du Colombier "#if !defined(NOCOMP) && !defined(HC)", 10017dd7cddfSDavid du Colombier " for ( ; j > 0; j--, y++)", 10027dd7cddfSDavid du Colombier " if (!Mask[k++]) *x++ = *y;", 1003*de2caf28SDavid du Colombier "#else", 1004*de2caf28SDavid du Colombier " memcpy(x, y, j);", 1005*de2caf28SDavid du Colombier " x += j;", 1006*de2caf28SDavid du Colombier "#endif", 10077dd7cddfSDavid du Colombier " for (j = 0; j < WS-1; j++)", 10087dd7cddfSDavid du Colombier " *x++ = 0;", 10097dd7cddfSDavid du Colombier " x -= j;", 1010312a1df1SDavid du Colombier " if (z) return (long) (x - z);", 10117dd7cddfSDavid du Colombier " return ordinal(scratch, x-scratch, 1); /* chan */", 10127dd7cddfSDavid du Colombier "}", 10137dd7cddfSDavid du Colombier " #endif", 10147dd7cddfSDavid du Colombier "#endif", 10157dd7cddfSDavid du Colombier 0, 10167dd7cddfSDavid du Colombier }; 1017312a1df1SDavid du Colombier 1018*de2caf28SDavid du Colombier static const char *R12[] = { 1019219b2ee8SDavid du Colombier "\t\tcase %d: r = ((Q%d *)z)->contents[slot].fld%d; break;", 1020219b2ee8SDavid du Colombier 0, 1021219b2ee8SDavid du Colombier }; 1022*de2caf28SDavid du Colombier 1023*de2caf28SDavid du Colombier const char *R13_[] = { 1024219b2ee8SDavid du Colombier "int ", 1025219b2ee8SDavid du Colombier "unsend(int into)", 1026312a1df1SDavid du Colombier "{ int _m=0, j; uchar *z;\n", 1027312a1df1SDavid du Colombier "#ifdef HAS_SORTED", 1028312a1df1SDavid du Colombier " int k;", 1029312a1df1SDavid du Colombier "#endif", 10307dd7cddfSDavid du Colombier " if (!into--)", 10317dd7cddfSDavid du Colombier " uerror(\"ref to uninitialized chan (unsend)\");", 103200d97012SDavid du Colombier "#if defined(TRIX) && !defined(BFS)", 103300d97012SDavid du Colombier " #ifndef TRIX_ORIG", 103400d97012SDavid du Colombier " now._ids_[now._nr_pr+into] = trpt->q_bup;", 103500d97012SDavid du Colombier " #ifdef V_TRIX", 103600d97012SDavid du Colombier " printf(\"%%4d: channel %%d s restore %%p into %%d\\n\",", 103700d97012SDavid du Colombier " depth, into, trpt->q_bup, now._nr_pr+into);", 103800d97012SDavid du Colombier " #endif", 103900d97012SDavid du Colombier " #else", 104000d97012SDavid du Colombier " channels[into]->modified = 1; /* unsend */", 104100d97012SDavid du Colombier " #ifdef V_TRIX", 104200d97012SDavid du Colombier " printf(\"%%4d: channel %%d unmodify\\n\", depth, into);", 104300d97012SDavid du Colombier " #endif", 104400d97012SDavid du Colombier " #endif", 104500d97012SDavid du Colombier "#endif", 1046219b2ee8SDavid du Colombier " z = qptr(into);", 1047219b2ee8SDavid du Colombier " j = ((Q0 *)z)->Qlen;", 1048219b2ee8SDavid du Colombier " ((Q0 *)z)->Qlen = --j;", 1049219b2ee8SDavid du Colombier " switch (((Q0 *)qptr(into))->_t) {", 1050219b2ee8SDavid du Colombier 0, 1051219b2ee8SDavid du Colombier }; 1052*de2caf28SDavid du Colombier const char *R14_[] = { 1053219b2ee8SDavid du Colombier " default: Uerror(\"bad queue - unsend\");", 1054219b2ee8SDavid du Colombier " }", 1055312a1df1SDavid du Colombier " return _m;", 1056219b2ee8SDavid du Colombier "}\n", 1057219b2ee8SDavid du Colombier "void", 1058219b2ee8SDavid du Colombier "unrecv(int from, int slot, int fld, int fldvar, int strt)", 1059219b2ee8SDavid du Colombier "{ int j; uchar *z;\n", 10607dd7cddfSDavid du Colombier " if (!from--)", 10617dd7cddfSDavid du Colombier " uerror(\"ref to uninitialized chan (unrecv)\");", 106200d97012SDavid du Colombier "#if defined(TRIX) && !defined(BFS)", 106300d97012SDavid du Colombier " #ifndef TRIX_ORIG", 106400d97012SDavid du Colombier " now._ids_[now._nr_pr+from] = trpt->q_bup;", 106500d97012SDavid du Colombier " #ifdef V_TRIX", 106600d97012SDavid du Colombier " printf(\"%%4d: channel %%d r restore %%p into %%d\\n\",", 106700d97012SDavid du Colombier " depth, from, trpt->q_bup, now._nr_pr+from);", 106800d97012SDavid du Colombier " #endif", 106900d97012SDavid du Colombier " #else", 107000d97012SDavid du Colombier " channels[from]->modified = 1; /* unrecv */", 107100d97012SDavid du Colombier " #ifdef V_TRIX", 107200d97012SDavid du Colombier " printf(\"%%4d: channel %%d unmodify\\n\", depth, from);", 107300d97012SDavid du Colombier " #endif", 107400d97012SDavid du Colombier " #endif", 107500d97012SDavid du Colombier "#endif", 1076219b2ee8SDavid du Colombier " z = qptr(from);", 1077219b2ee8SDavid du Colombier " j = ((Q0 *)z)->Qlen;", 1078219b2ee8SDavid du Colombier " if (strt) ((Q0 *)z)->Qlen = j+1;", 1079219b2ee8SDavid du Colombier " switch (((Q0 *)qptr(from))->_t) {", 1080219b2ee8SDavid du Colombier 0, 1081219b2ee8SDavid du Colombier }; 1082*de2caf28SDavid du Colombier const char *R15_[] = { 1083219b2ee8SDavid du Colombier " default: Uerror(\"bad queue - qrecv\");", 1084219b2ee8SDavid du Colombier " }", 1085219b2ee8SDavid du Colombier "}", 1086219b2ee8SDavid du Colombier 0, 1087219b2ee8SDavid du Colombier }; 1088*de2caf28SDavid du Colombier static const char *Proto[] = { 1089219b2ee8SDavid du Colombier "", 1090219b2ee8SDavid du Colombier "/** function prototypes **/", 1091*de2caf28SDavid du Colombier "char *emalloc(ulong);", 1092*de2caf28SDavid du Colombier "char *Malloc(ulong);", 1093219b2ee8SDavid du Colombier "int Boundcheck(int, int, int, int, Trans *);", 109400d97012SDavid du Colombier "int addqueue(int, int, int);", 10957dd7cddfSDavid du Colombier "/* int atoi(char *); */", 1096f3793cddSDavid du Colombier "/* int abort(void); */", 1097f3793cddSDavid du Colombier "int close(int);", /* should probably remove this */ 1098f3793cddSDavid du Colombier #if 0 1099312a1df1SDavid du Colombier "#ifndef SC", 1100219b2ee8SDavid du Colombier " int creat(char *, unsigned short);", 11017dd7cddfSDavid du Colombier " int write(int, void *, unsigned);", 1102312a1df1SDavid du Colombier "#endif", 1103f3793cddSDavid du Colombier #endif 1104219b2ee8SDavid du Colombier "int delproc(int, int);", 1105219b2ee8SDavid du Colombier "int endstate(void);", 1106*de2caf28SDavid du Colombier "int find_claim(char *);", 1107*de2caf28SDavid du Colombier "int h_store(char *, int);", 1108*de2caf28SDavid du Colombier "int pan_rand(void);", 11097dd7cddfSDavid du Colombier "int q_cond(short, Trans *);", 1110219b2ee8SDavid du Colombier "int q_full(int);", 1111219b2ee8SDavid du Colombier "int q_len(int);", 1112219b2ee8SDavid du Colombier "int q_zero(int);", 1113219b2ee8SDavid du Colombier "int qrecv(int, int, int, int);", 1114219b2ee8SDavid du Colombier "int unsend(int);", 1115312a1df1SDavid du Colombier "/* void *sbrk(int); */", 111600d97012SDavid du Colombier "void spin_assert(int, char *, int, int, Trans *);", 1117*de2caf28SDavid du Colombier "#ifdef BFS_PAR", 1118*de2caf28SDavid du Colombier "void bfs_printf(const char *, ...);", 1119*de2caf28SDavid du Colombier "volatile uchar *sh_pre_malloc(ulong);", 1120*de2caf28SDavid du Colombier "#endif", 1121312a1df1SDavid du Colombier "void c_chandump(int);", 1122312a1df1SDavid du Colombier "void c_globals(void);", 1123312a1df1SDavid du Colombier "void c_locals(int, int);", 1124219b2ee8SDavid du Colombier "void checkcycles(void);", 1125219b2ee8SDavid du Colombier "void crack(int, int, Trans *, short *);", 1126*de2caf28SDavid du Colombier "void d_sfh(uchar *, int);", 11277dd7cddfSDavid du Colombier "void d_hash(uchar *, int);", 1128*de2caf28SDavid du Colombier "void m_hash(uchar *, int);", 1129312a1df1SDavid du Colombier "void s_hash(uchar *, int);", 1130219b2ee8SDavid du Colombier "void delq(int);", 113100d97012SDavid du Colombier "void dot_crack(int, int, Trans *);", 1132219b2ee8SDavid du Colombier "void do_reach(void);", 1133312a1df1SDavid du Colombier "void pan_exit(int);", 1134219b2ee8SDavid du Colombier "void exit(int);", 1135*de2caf28SDavid du Colombier "#ifdef BFS_PAR", 1136*de2caf28SDavid du Colombier " void bfs_setup_mem(void);", 1137*de2caf28SDavid du Colombier "#endif", 1138*de2caf28SDavid du Colombier "#ifdef BITSTATE", 1139*de2caf28SDavid du Colombier " void sinit(void);", 1140*de2caf28SDavid du Colombier "#else", 1141219b2ee8SDavid du Colombier " void hinit(void);", 1142*de2caf28SDavid du Colombier "#endif", 1143312a1df1SDavid du Colombier "void imed(Trans *, int, int, int);", 1144219b2ee8SDavid du Colombier "void new_state(void);", 1145219b2ee8SDavid du Colombier "void p_restor(int);", 1146219b2ee8SDavid du Colombier "void putpeg(int, int);", 1147219b2ee8SDavid du Colombier "void putrail(void);", 1148219b2ee8SDavid du Colombier "void q_restor(void);", 114900d97012SDavid du Colombier "void retrans(int, int, int, short *, uchar *, uchar *);", 1150*de2caf28SDavid du Colombier "void select_claim(int);", 1151219b2ee8SDavid du Colombier "void settable(void);", 1152219b2ee8SDavid du Colombier "void setq_claim(int, int, char *, int, char *);", 11537dd7cddfSDavid du Colombier "void sv_restor(void);", 1154312a1df1SDavid du Colombier "void sv_save(void);", 1155219b2ee8SDavid du Colombier "void tagtable(int, int, int, short *, uchar *);", 115600d97012SDavid du Colombier "void do_dfs(int, int, int, short *, uchar *, uchar *);", 1157219b2ee8SDavid du Colombier "void unrecv(int, int, int, int, int);", 1158219b2ee8SDavid du Colombier "void usage(FILE *);", 1159*de2caf28SDavid du Colombier "void wrap_stats(void);\n", 1160*de2caf28SDavid du Colombier "#ifdef MA", 1161*de2caf28SDavid du Colombier " int g_store(char *, int, uchar);", 1162*de2caf28SDavid du Colombier "#endif", 1163219b2ee8SDavid du Colombier "#if defined(FULLSTACK) && defined(BITSTATE)", 1164219b2ee8SDavid du Colombier " int onstack_now(void);", 1165219b2ee8SDavid du Colombier " void onstack_init(void);", 1166219b2ee8SDavid du Colombier " void onstack_put(void);", 1167219b2ee8SDavid du Colombier " void onstack_zap(void);", 1168219b2ee8SDavid du Colombier "#endif", 1169219b2ee8SDavid du Colombier "#ifndef XUSAFE", 11707dd7cddfSDavid du Colombier " int q_S_check(int, int);", 11717dd7cddfSDavid du Colombier " int q_R_check(int, int);", 1172*de2caf28SDavid du Colombier " extern uchar q_claim[MAXQ+1];", 1173*de2caf28SDavid du Colombier " extern char *q_name[MAXQ+1];", 1174*de2caf28SDavid du Colombier " extern char *p_name[MAXPROC+1];", 1175219b2ee8SDavid du Colombier "#endif", 1176*de2caf28SDavid du Colombier "", 1177*de2caf28SDavid du Colombier "#ifndef NO_V_PROVISO", 1178*de2caf28SDavid du Colombier " #define V_PROVISO", 1179*de2caf28SDavid du Colombier "#endif", 1180*de2caf28SDavid du Colombier "#if !defined(NO_RESIZE) && !defined(AUTO_RESIZE) && !defined(BITSTATE) && !defined(SPACE) && !defined(USE_TDH) && NCORE==1", 1181*de2caf28SDavid du Colombier " #define AUTO_RESIZE", 1182*de2caf28SDavid du Colombier "#endif", 1183*de2caf28SDavid du Colombier "", 1184*de2caf28SDavid du Colombier "typedef struct Trail Trail;", 1185*de2caf28SDavid du Colombier "typedef struct H_el H_el;", 1186*de2caf28SDavid du Colombier "", 1187*de2caf28SDavid du Colombier "struct H_el {", 1188*de2caf28SDavid du Colombier " H_el *nxt;", 1189*de2caf28SDavid du Colombier " #ifdef FULLSTACK", 1190*de2caf28SDavid du Colombier " unsigned int tagged;", 1191*de2caf28SDavid du Colombier " #if defined(BITSTATE) && !defined(NOREDUCE) && !defined(SAFETY)", 1192*de2caf28SDavid du Colombier " unsigned int proviso;", /* uses just 1 bit 0/1 */ 1193*de2caf28SDavid du Colombier " #endif", 1194*de2caf28SDavid du Colombier " #endif", 1195*de2caf28SDavid du Colombier " #if defined(CHECK) || (defined(COLLAPSE) && !defined(FULLSTACK))", 1196*de2caf28SDavid du Colombier " ulong st_id;", 1197*de2caf28SDavid du Colombier " #endif", 1198*de2caf28SDavid du Colombier " #if !defined(SAFETY) || defined(REACH)", 1199*de2caf28SDavid du Colombier " uint D;", 1200*de2caf28SDavid du Colombier " #endif", 1201*de2caf28SDavid du Colombier " #ifdef BCS", 1202*de2caf28SDavid du Colombier " #ifndef CONSERVATIVE", 1203*de2caf28SDavid du Colombier " #define CONSERVATIVE 1 /* good for up to 8 processes */", 1204*de2caf28SDavid du Colombier " #endif", 1205*de2caf28SDavid du Colombier " #ifdef CONSERVATIVE", 1206*de2caf28SDavid du Colombier " #if CONSERVATIVE <= 0 || CONSERVATIVE>32", 1207*de2caf28SDavid du Colombier " #error sensible values for CONSERVATIVE are 1..32 (256/8 = 32)", 1208*de2caf28SDavid du Colombier " #endif", 1209*de2caf28SDavid du Colombier " uchar ctx_pid[CONSERVATIVE];", /* pids setting lowest value */ 1210*de2caf28SDavid du Colombier " #endif", 1211*de2caf28SDavid du Colombier " uchar ctx_low;", /* lowest nr of context switches seen so far */ 1212*de2caf28SDavid du Colombier " #endif", 1213*de2caf28SDavid du Colombier " #if NCORE>1", 1214*de2caf28SDavid du Colombier " /* could cost 1 extra word: 4 bytes if 32-bit and 8 bytes if 64-bit */", 1215*de2caf28SDavid du Colombier " #ifdef V_PROVISO", 1216*de2caf28SDavid du Colombier " uchar cpu_id; /* id of cpu that created the state */", 1217*de2caf28SDavid du Colombier " #endif", 1218*de2caf28SDavid du Colombier " #endif", 1219*de2caf28SDavid du Colombier " #ifdef COLLAPSE", 1220*de2caf28SDavid du Colombier " #if VECTORSZ<65536", 1221*de2caf28SDavid du Colombier " ushort ln;", /* length of vector */ 1222*de2caf28SDavid du Colombier " #else", 1223*de2caf28SDavid du Colombier " ulong ln;", /* length of vector */ 1224*de2caf28SDavid du Colombier " #endif", 1225*de2caf28SDavid du Colombier " #endif", 1226*de2caf28SDavid du Colombier " #if defined(AUTO_RESIZE) && !defined(BITSTATE)", 1227*de2caf28SDavid du Colombier " ulong m_K1;", 1228*de2caf28SDavid du Colombier " #endif", 1229*de2caf28SDavid du Colombier " ulong state;", 1230*de2caf28SDavid du Colombier "};", 1231*de2caf28SDavid du Colombier "", 1232*de2caf28SDavid du Colombier "#ifdef BFS_PAR", 1233*de2caf28SDavid du Colombier "typedef struct BFS_Trail BFS_Trail;", 1234*de2caf28SDavid du Colombier "struct BFS_Trail {", 1235*de2caf28SDavid du Colombier " H_el *ostate;", 1236*de2caf28SDavid du Colombier " int st;", 1237*de2caf28SDavid du Colombier " int o_tt;", 1238*de2caf28SDavid du Colombier " T_ID t_id;", /* could be uint, ushort, or uchar */ 1239*de2caf28SDavid du Colombier " uchar pr;", 1240*de2caf28SDavid du Colombier " uchar o_pm;", 1241*de2caf28SDavid du Colombier " uchar tau;", 1242*de2caf28SDavid du Colombier "};", 1243*de2caf28SDavid du Colombier " #if SYNC>0", 1244*de2caf28SDavid du Colombier " #undef BFS_NOTRAIL", /* just in case it was used */ 1245*de2caf28SDavid du Colombier " #endif", 1246*de2caf28SDavid du Colombier "#endif", 1247*de2caf28SDavid du Colombier "", 1248*de2caf28SDavid du Colombier "#ifdef RHASH", 1249*de2caf28SDavid du Colombier " #ifndef PERMUTED", 1250*de2caf28SDavid du Colombier " #define PERMUTED", 1251*de2caf28SDavid du Colombier " #endif", 1252*de2caf28SDavid du Colombier "#endif", 1253*de2caf28SDavid du Colombier "", 1254*de2caf28SDavid du Colombier "struct Trail {", 1255*de2caf28SDavid du Colombier " int st; /* current state */", 1256*de2caf28SDavid du Colombier " int o_tt;", 1257*de2caf28SDavid du Colombier "#ifdef PERMUTED", 1258*de2caf28SDavid du Colombier " uint seed;", 1259*de2caf28SDavid du Colombier " uchar oII;", 1260*de2caf28SDavid du Colombier "#endif", 1261*de2caf28SDavid du Colombier " uchar pr; /* process id */", 1262*de2caf28SDavid du Colombier " uchar tau; /* 8 bit-flags */", 1263*de2caf28SDavid du Colombier " uchar o_pm; /* 8 more bit-flags */", 1264*de2caf28SDavid du Colombier "", 1265*de2caf28SDavid du Colombier " #if 0", 1266*de2caf28SDavid du Colombier " Meaning of bit-flags on tau and o_pm:", 1267*de2caf28SDavid du Colombier " tau&1 -> timeout enabled", 1268*de2caf28SDavid du Colombier " tau&2 -> request to enable timeout 1 level up (in claim)", 1269*de2caf28SDavid du Colombier " tau&4 -> current transition is a claim move", 1270*de2caf28SDavid du Colombier " tau&8 -> current transition is an atomic move", 1271*de2caf28SDavid du Colombier " tau&16 -> last move was truncated on stack", 1272*de2caf28SDavid du Colombier " tau&32 -> current transition is a preselected move", 1273*de2caf28SDavid du Colombier " tau&64 -> at least one next state is not on the stack", 1274*de2caf28SDavid du Colombier " tau&128 -> current transition is a stutter move", 1275*de2caf28SDavid du Colombier 1276*de2caf28SDavid du Colombier " o_pm&1 -> the current pid moved -- implements else", 1277*de2caf28SDavid du Colombier " o_pm&2 -> this is an acceptance state", 1278*de2caf28SDavid du Colombier " o_pm&4 -> this is a progress state", 1279*de2caf28SDavid du Colombier " o_pm&8 -> fairness alg rule 1 undo mark", 1280*de2caf28SDavid du Colombier " o_pm&16 -> fairness alg rule 3 undo mark", 1281*de2caf28SDavid du Colombier " o_pm&32 -> fairness alg rule 2 undo mark", 1282*de2caf28SDavid du Colombier " o_pm&64 -> the current proc applied rule2", 1283*de2caf28SDavid du Colombier " o_pm&128 -> a fairness, dummy move - all procs blocked", 1284*de2caf28SDavid du Colombier " #endif", 1285*de2caf28SDavid du Colombier "", 1286*de2caf28SDavid du Colombier " #ifdef NSUCC", 1287*de2caf28SDavid du Colombier " uchar n_succ; /* nr of successor states */", 1288*de2caf28SDavid du Colombier " #endif", 1289*de2caf28SDavid du Colombier " #if defined(FULLSTACK) && defined(MA) && !defined(BFS)", 1290*de2caf28SDavid du Colombier " uchar proviso;", 1291*de2caf28SDavid du Colombier " #endif", 1292*de2caf28SDavid du Colombier " #ifndef BFS", 1293*de2caf28SDavid du Colombier " uchar o_n, o_ot; /* to save locals */", 1294*de2caf28SDavid du Colombier " #endif", 1295*de2caf28SDavid du Colombier " uchar o_m;", 1296*de2caf28SDavid du Colombier " #ifdef EVENT_TRACE", 1297*de2caf28SDavid du Colombier " #if nstates_event<256", 1298*de2caf28SDavid du Colombier " uchar o_event;", 1299*de2caf28SDavid du Colombier " #else", 1300*de2caf28SDavid du Colombier " unsigned short o_event;", 1301*de2caf28SDavid du Colombier " #endif", 1302*de2caf28SDavid du Colombier " #endif", 1303*de2caf28SDavid du Colombier " #ifndef BFS", 1304*de2caf28SDavid du Colombier " short o_To;", 1305*de2caf28SDavid du Colombier " #if defined(T_RAND) || defined(RANDOMIZE)", 1306*de2caf28SDavid du Colombier " short oo_i;", 1307*de2caf28SDavid du Colombier " #endif", 1308*de2caf28SDavid du Colombier " #endif", 1309*de2caf28SDavid du Colombier " #if defined(HAS_UNLESS) && !defined(BFS)", 1310*de2caf28SDavid du Colombier " int e_state; /* if escape trans - state of origin */", 1311*de2caf28SDavid du Colombier " #endif", 1312*de2caf28SDavid du Colombier " #if (defined(FULLSTACK) && !defined(MA)) || defined(BFS) || (NCORE>1)", 1313*de2caf28SDavid du Colombier " H_el *ostate; /* pointer to stored state */", 1314*de2caf28SDavid du Colombier " #endif", 1315*de2caf28SDavid du Colombier /* CNTRSTACK when !NOREDUCE && BITSTATE && SAFETY && WS<=4, uses LL[] */ 1316*de2caf28SDavid du Colombier " #if defined(CNTRSTACK) && !defined(BFS)", 1317*de2caf28SDavid du Colombier " long j6, j7;", 1318*de2caf28SDavid du Colombier " #endif", 1319*de2caf28SDavid du Colombier " Trans *o_t;", /* transition fct, next state */ 1320*de2caf28SDavid du Colombier 1321*de2caf28SDavid du Colombier " #if !defined(BFS) && !defined(TRIX_ORIG)", 1322*de2caf28SDavid du Colombier " char *p_bup;", 1323*de2caf28SDavid du Colombier " char *q_bup;", 1324*de2caf28SDavid du Colombier " #endif", 1325*de2caf28SDavid du Colombier 1326*de2caf28SDavid du Colombier " #ifdef BCS", 1327*de2caf28SDavid du Colombier " unsigned short sched_limit;", 1328*de2caf28SDavid du Colombier " unsigned char bcs; /* phase 1 or 2, or forced 4 */", 1329*de2caf28SDavid du Colombier " unsigned char b_pno; /* preferred pid */", 1330*de2caf28SDavid du Colombier " #endif", 1331*de2caf28SDavid du Colombier 1332*de2caf28SDavid du Colombier " #ifdef P_RAND", /* process scheduling randomization */ 1333*de2caf28SDavid du Colombier " unsigned char p_left; /* nr of procs left to explore */", 1334*de2caf28SDavid du Colombier " short p_skip; /* to find starting point in list */", 1335*de2caf28SDavid du Colombier " #endif", 1336*de2caf28SDavid du Colombier 1337*de2caf28SDavid du Colombier " #ifdef HAS_SORTED", 1338*de2caf28SDavid du Colombier " short ipt;", /* insertion slot in q */ 1339*de2caf28SDavid du Colombier " #endif", 1340*de2caf28SDavid du Colombier " #ifdef HAS_PRIORITY", 1341*de2caf28SDavid du Colombier " short o_priority;", 1342*de2caf28SDavid du Colombier " #endif", 1343*de2caf28SDavid du Colombier " union {", 1344*de2caf28SDavid du Colombier " int oval;", /* single backup value of variable */ 1345*de2caf28SDavid du Colombier " int *ovals;", /* ptr to multiple values */ 1346*de2caf28SDavid du Colombier " } bup;", 1347*de2caf28SDavid du Colombier "}; /* end of struct Trail */", 1348*de2caf28SDavid du Colombier "", 1349*de2caf28SDavid du Colombier "#ifdef BFS", /* breadth-first search */ 1350*de2caf28SDavid du Colombier " #define Q_PROVISO", 1351*de2caf28SDavid du Colombier " #ifndef INLINE_REV", 1352*de2caf28SDavid du Colombier " #define INLINE_REV", 1353*de2caf28SDavid du Colombier " #endif", 1354*de2caf28SDavid du Colombier "", 1355*de2caf28SDavid du Colombier "typedef struct SV_Hold {", 1356*de2caf28SDavid du Colombier " State *sv;", 1357*de2caf28SDavid du Colombier " #ifndef BFS_PAR", 1358*de2caf28SDavid du Colombier " int sz;", 1359*de2caf28SDavid du Colombier " #endif", 1360*de2caf28SDavid du Colombier " struct SV_Hold *nxt;", 1361*de2caf28SDavid du Colombier "} SV_Hold;", 1362*de2caf28SDavid du Colombier "#if !defined(BFS_PAR) || NRUNS>0", 1363*de2caf28SDavid du Colombier " typedef struct EV_Hold {", 1364*de2caf28SDavid du Colombier " #if !defined(BFS_PAR) || (!defined(NOCOMP) && !defined(HC) && NRUNS>0)", 1365*de2caf28SDavid du Colombier " char *sv; /* Mask */", 1366*de2caf28SDavid du Colombier " #endif", 1367*de2caf28SDavid du Colombier " #if VECTORSZ<65536", 1368*de2caf28SDavid du Colombier " ushort sz; /* vsize */", 1369*de2caf28SDavid du Colombier " #else", 1370*de2caf28SDavid du Colombier " ulong sz;", 1371*de2caf28SDavid du Colombier " #endif", 1372*de2caf28SDavid du Colombier " #ifdef BFS_PAR", 1373*de2caf28SDavid du Colombier " uchar owner;", 1374*de2caf28SDavid du Colombier " #endif", 1375*de2caf28SDavid du Colombier " uchar nrpr;", 1376*de2caf28SDavid du Colombier " uchar nrqs;", 1377*de2caf28SDavid du Colombier " #if !defined(BFS_PAR) || (!defined(TRIX) && NRUNS>0)", 1378*de2caf28SDavid du Colombier " char *po, *qo;", 1379*de2caf28SDavid du Colombier " char *ps, *qs;", 1380*de2caf28SDavid du Colombier " #endif", 1381*de2caf28SDavid du Colombier " struct EV_Hold *nxt;", 1382*de2caf28SDavid du Colombier " } EV_Hold;", 1383*de2caf28SDavid du Colombier "#endif", 1384*de2caf28SDavid du Colombier "typedef struct BFS_State {", 1385*de2caf28SDavid du Colombier " #ifdef BFS_PAR", 1386*de2caf28SDavid du Colombier " BFS_Trail *t_info;", 1387*de2caf28SDavid du Colombier " State *osv;", 1388*de2caf28SDavid du Colombier " #else", 1389*de2caf28SDavid du Colombier " Trail *frame;", 1390*de2caf28SDavid du Colombier " SV_Hold *onow;", 1391*de2caf28SDavid du Colombier " #endif", 1392*de2caf28SDavid du Colombier " #if !defined(BFS_PAR) || NRUNS>0", 1393*de2caf28SDavid du Colombier " EV_Hold *omask;", 1394*de2caf28SDavid du Colombier " #endif", 1395*de2caf28SDavid du Colombier " #if defined(Q_PROVISO) && !defined(NOREDUCE)", 1396*de2caf28SDavid du Colombier " H_el *lstate;", 1397*de2caf28SDavid du Colombier " #endif", 1398*de2caf28SDavid du Colombier " #if !defined(BFS_PAR) || SYNC>0", 1399*de2caf28SDavid du Colombier " short boq;", 1400*de2caf28SDavid du Colombier " #endif", 1401*de2caf28SDavid du Colombier " #ifdef VERBOSE", 1402*de2caf28SDavid du Colombier " ulong nr;", 1403*de2caf28SDavid du Colombier " #endif", 1404*de2caf28SDavid du Colombier " #ifndef BFS_PAR", /* new 6.2.4, 3 dec 2012 */ 1405*de2caf28SDavid du Colombier " struct BFS_State *nxt;", 1406*de2caf28SDavid du Colombier " #endif", 1407*de2caf28SDavid du Colombier "} BFS_State;", 1408*de2caf28SDavid du Colombier "#endif\n", 1409219b2ee8SDavid du Colombier 0, 1410219b2ee8SDavid du Colombier }; 14117dd7cddfSDavid du Colombier 1412*de2caf28SDavid du Colombier static const char *SvMap[] = { 14137dd7cddfSDavid du Colombier "void", 14147dd7cddfSDavid du Colombier "to_compile(void)", 1415*de2caf28SDavid du Colombier "{ char ctd[2048], carg[128];", 14167dd7cddfSDavid du Colombier "#ifdef BITSTATE", 14177dd7cddfSDavid du Colombier " strcpy(ctd, \"-DBITSTATE \");", 14187dd7cddfSDavid du Colombier "#else", 14197dd7cddfSDavid du Colombier " strcpy(ctd, \"\");", 14207dd7cddfSDavid du Colombier "#endif", 1421*de2caf28SDavid du Colombier "#ifdef BFS_PAR", 1422*de2caf28SDavid du Colombier " strcat(ctd, \"-DBFS_PAR \");", 1423*de2caf28SDavid du Colombier "#endif", 14247dd7cddfSDavid du Colombier "#ifdef NOVSZ", 14257dd7cddfSDavid du Colombier " strcat(ctd, \"-DNOVSZ \");", 14267dd7cddfSDavid du Colombier "#endif", 1427*de2caf28SDavid du Colombier "#ifdef RHASH", 1428*de2caf28SDavid du Colombier " strcat(ctd, \"-DRHASH \");", 1429*de2caf28SDavid du Colombier "#else", 1430*de2caf28SDavid du Colombier " #ifdef PERMUTED", 1431*de2caf28SDavid du Colombier " strcat(ctd, \"-DPERMUTED \");", 1432*de2caf28SDavid du Colombier " #endif", 1433*de2caf28SDavid du Colombier "#endif", 1434*de2caf28SDavid du Colombier "#ifdef P_REVERSE", 1435*de2caf28SDavid du Colombier " strcat(ctd, \"-DP_REVERSE \");", 143600d97012SDavid du Colombier "#endif", 143700d97012SDavid du Colombier "#ifdef T_REVERSE", 143800d97012SDavid du Colombier " strcat(ctd, \"-DT_REVERSE \");", 143900d97012SDavid du Colombier "#endif", 144000d97012SDavid du Colombier "#ifdef T_RAND", 144100d97012SDavid du Colombier " #if T_RAND>0", 144200d97012SDavid du Colombier " sprintf(carg, \"-DT_RAND=%%d \", T_RAND);", 144300d97012SDavid du Colombier " strcat(ctd, carg);", 144400d97012SDavid du Colombier " #else", 144500d97012SDavid du Colombier " strcat(ctd, \"-DT_RAND \");", 144600d97012SDavid du Colombier " #endif", 144700d97012SDavid du Colombier "#endif", 144800d97012SDavid du Colombier "#ifdef P_RAND", 144900d97012SDavid du Colombier " #if P_RAND>0", 145000d97012SDavid du Colombier " sprintf(carg, \"-DP_RAND=%%d \", P_RAND);", 145100d97012SDavid du Colombier " strcat(ctd, carg);", 145200d97012SDavid du Colombier " #else", 145300d97012SDavid du Colombier " strcat(ctd, \"-DP_RAND \");", 145400d97012SDavid du Colombier " #endif", 145500d97012SDavid du Colombier "#endif", 145600d97012SDavid du Colombier "#ifdef BCS", 145700d97012SDavid du Colombier " sprintf(carg, \"-DBCS=%%d \", BCS);", 145800d97012SDavid du Colombier " strcat(ctd, carg);", 145900d97012SDavid du Colombier "#endif", 146000d97012SDavid du Colombier "#ifdef BFS", 146100d97012SDavid du Colombier " strcat(ctd, \"-DBFS \");", 146200d97012SDavid du Colombier "#endif", 14637dd7cddfSDavid du Colombier "#ifdef MEMLIM", 14647dd7cddfSDavid du Colombier " sprintf(carg, \"-DMEMLIM=%%d \", MEMLIM);", 14657dd7cddfSDavid du Colombier " strcat(ctd, carg);", 1466312a1df1SDavid du Colombier "#else", 1467312a1df1SDavid du Colombier "#ifdef MEMCNT", 1468312a1df1SDavid du Colombier " sprintf(carg, \"-DMEMCNT=%%d \", MEMCNT);", 1469312a1df1SDavid du Colombier " strcat(ctd, carg);", 1470312a1df1SDavid du Colombier "#endif", 14717dd7cddfSDavid du Colombier "#endif", 14727dd7cddfSDavid du Colombier "#ifdef NOCLAIM", 14737dd7cddfSDavid du Colombier " strcat(ctd, \"-DNOCLAIM \");", 14747dd7cddfSDavid du Colombier "#endif", 14757dd7cddfSDavid du Colombier "#ifdef SAFETY", 14767dd7cddfSDavid du Colombier " strcat(ctd, \"-DSAFETY \");", 14777dd7cddfSDavid du Colombier "#else", 14787dd7cddfSDavid du Colombier "#ifdef NOFAIR", 14797dd7cddfSDavid du Colombier " strcat(ctd, \"-DNOFAIR \");", 14807dd7cddfSDavid du Colombier "#else", 14817dd7cddfSDavid du Colombier "#ifdef NFAIR", 14827dd7cddfSDavid du Colombier " if (NFAIR != 2)", 14837dd7cddfSDavid du Colombier " { sprintf(carg, \"-DNFAIR=%%d \", NFAIR);", 14847dd7cddfSDavid du Colombier " strcat(ctd, carg);", 14857dd7cddfSDavid du Colombier " }", 14867dd7cddfSDavid du Colombier "#endif", 14877dd7cddfSDavid du Colombier "#endif", 14887dd7cddfSDavid du Colombier "#endif", 14897dd7cddfSDavid du Colombier "#ifdef NOREDUCE", 14907dd7cddfSDavid du Colombier " strcat(ctd, \"-DNOREDUCE \");", 14917dd7cddfSDavid du Colombier "#else", 14927dd7cddfSDavid du Colombier "#ifdef XUSAFE", 14937dd7cddfSDavid du Colombier " strcat(ctd, \"-DXUSAFE \");", 14947dd7cddfSDavid du Colombier "#endif", 14957dd7cddfSDavid du Colombier "#endif", 14967dd7cddfSDavid du Colombier "#ifdef NP", 14977dd7cddfSDavid du Colombier " strcat(ctd, \"-DNP \");", 14987dd7cddfSDavid du Colombier "#endif", 14997dd7cddfSDavid du Colombier "#ifdef PEG", 15007dd7cddfSDavid du Colombier " strcat(ctd, \"-DPEG \");", 15017dd7cddfSDavid du Colombier "#endif", 15027dd7cddfSDavid du Colombier "#ifdef VAR_RANGES", 15037dd7cddfSDavid du Colombier " strcat(ctd, \"-DVAR_RANGES \");", 15047dd7cddfSDavid du Colombier "#endif", 1505*de2caf28SDavid du Colombier "#ifdef HC", 1506*de2caf28SDavid du Colombier " strcat(ctd, \"-DHC \");", 15077dd7cddfSDavid du Colombier "#endif", 15087dd7cddfSDavid du Colombier "#ifdef CHECK", 15097dd7cddfSDavid du Colombier " strcat(ctd, \"-DCHECK \");", 15107dd7cddfSDavid du Colombier "#endif", 15117dd7cddfSDavid du Colombier "#ifdef CTL", 15127dd7cddfSDavid du Colombier " strcat(ctd, \"-DCTL \");", 15137dd7cddfSDavid du Colombier "#endif", 151400d97012SDavid du Colombier "#ifdef TRIX", 151500d97012SDavid du Colombier " strcat(ctd, \"-DTRIX \");", 151600d97012SDavid du Colombier "#endif", 15177dd7cddfSDavid du Colombier "#ifdef NIBIS", 15187dd7cddfSDavid du Colombier " strcat(ctd, \"-DNIBIS \");", 15197dd7cddfSDavid du Colombier "#endif", 15207dd7cddfSDavid du Colombier "#ifdef NOBOUNDCHECK", 15217dd7cddfSDavid du Colombier " strcat(ctd, \"-DNOBOUNDCHECK \");", 15227dd7cddfSDavid du Colombier "#endif", 15237dd7cddfSDavid du Colombier "#ifdef NOSTUTTER", 15247dd7cddfSDavid du Colombier " strcat(ctd, \"-DNOSTUTTER \");", 15257dd7cddfSDavid du Colombier "#endif", 15267dd7cddfSDavid du Colombier "#ifdef REACH", 15277dd7cddfSDavid du Colombier " strcat(ctd, \"-DREACH \");", 15287dd7cddfSDavid du Colombier "#endif", 15297dd7cddfSDavid du Colombier "#ifdef PRINTF", 15307dd7cddfSDavid du Colombier " strcat(ctd, \"-DPRINTF \");", 15317dd7cddfSDavid du Colombier "#endif", 15327dd7cddfSDavid du Colombier "#ifdef COLLAPSE", 15337dd7cddfSDavid du Colombier " strcat(ctd, \"-DCOLLAPSE \");", 15347dd7cddfSDavid du Colombier "#endif", 1535312a1df1SDavid du Colombier "#ifdef MA", 1536312a1df1SDavid du Colombier " sprintf(carg, \"-DMA=%%d \", MA);", 1537312a1df1SDavid du Colombier " strcat(ctd, carg);", 1538312a1df1SDavid du Colombier "#endif", 15397dd7cddfSDavid du Colombier "#ifdef SVDUMP", 15407dd7cddfSDavid du Colombier " strcat(ctd, \"-DSVDUMP \");", 15417dd7cddfSDavid du Colombier "#endif", 154200d97012SDavid du Colombier "#if defined(VECTORSZ) && !defined(TRIX)", 15437dd7cddfSDavid du Colombier " if (VECTORSZ != 1024)", 15447dd7cddfSDavid du Colombier " { sprintf(carg, \"-DVECTORSZ=%%d \", VECTORSZ);", 15457dd7cddfSDavid du Colombier " strcat(ctd, carg);", 15467dd7cddfSDavid du Colombier " }", 15477dd7cddfSDavid du Colombier "#endif", 15487dd7cddfSDavid du Colombier "#ifdef VERBOSE", 15497dd7cddfSDavid du Colombier " strcat(ctd, \"-DVERBOSE \");", 15507dd7cddfSDavid du Colombier "#endif", 15517dd7cddfSDavid du Colombier "#ifdef CHECK", 15527dd7cddfSDavid du Colombier " strcat(ctd, \"-DCHECK \");", 15537dd7cddfSDavid du Colombier "#endif", 15547dd7cddfSDavid du Colombier "#ifdef SDUMP", 15557dd7cddfSDavid du Colombier " strcat(ctd, \"-DSDUMP \");", 15567dd7cddfSDavid du Colombier "#endif", 155700d97012SDavid du Colombier "#if NCORE>1", 155800d97012SDavid du Colombier " sprintf(carg, \"-DNCORE=%%d \", NCORE);", 155900d97012SDavid du Colombier " strcat(ctd, carg);", 156000d97012SDavid du Colombier "#endif", 156100d97012SDavid du Colombier "#ifdef VMAX", 156200d97012SDavid du Colombier " if (VMAX != 256)", 156300d97012SDavid du Colombier " { sprintf(carg, \"-DVMAX=%%d \", VMAX);", 156400d97012SDavid du Colombier " strcat(ctd, carg);", 156500d97012SDavid du Colombier " }", 156600d97012SDavid du Colombier "#endif", 156700d97012SDavid du Colombier "#ifdef PMAX", 156800d97012SDavid du Colombier " if (PMAX != 16)", 156900d97012SDavid du Colombier " { sprintf(carg, \"-DPMAX=%%d \", PMAX);", 157000d97012SDavid du Colombier " strcat(ctd, carg);", 157100d97012SDavid du Colombier " }", 157200d97012SDavid du Colombier "#endif", 157300d97012SDavid du Colombier "#ifdef QMAX", 157400d97012SDavid du Colombier " if (QMAX != 16)", 157500d97012SDavid du Colombier " { sprintf(carg, \"-DQMAX=%%d \", QMAX);", 157600d97012SDavid du Colombier " strcat(ctd, carg);", 157700d97012SDavid du Colombier " }", 157800d97012SDavid du Colombier "#endif", 157900d97012SDavid du Colombier "#ifdef SET_WQ_SIZE", 158000d97012SDavid du Colombier " sprintf(carg, \"-DSET_WQ_SIZE=%%d \", SET_WQ_SIZE);", 158100d97012SDavid du Colombier " strcat(ctd, carg);", 15827dd7cddfSDavid du Colombier "#endif", 1583312a1df1SDavid du Colombier " printf(\"Compiled as: cc -o pan %%span.c\\n\", ctd);", 15847dd7cddfSDavid du Colombier "}", 15857dd7cddfSDavid du Colombier 0, 15867dd7cddfSDavid du Colombier }; 1587