1 #define SpinVersion "Spin Version 5.1.6 -- 9 May 2008"
2 #define PanSource "buffer.spin"
5 #define ONE_L ((unsigned long) 1)
10 char *TrailFile
= PanSource
; /* default */
21 #define uchar unsigned char
24 #define uint unsigned int
31 #if NCORE>1 && !defined(SEP_STATE)
46 #define NFAIR 2 /* must be >= 2 */
50 #ifdef NP /* includes np_ demon */
53 #define endclaim 3 /* none */
55 typedef struct S_F_MAP
{
56 char *fnm
; int from
; int upto
;
59 #define nstates4 57 /* :init: */
62 0, 226, 228, 229, 230, 231, 231, 227,
63 233, 227, 233, 235, 236, 237, 238, 238,
64 234, 240, 234, 240, 241, 242, 244, 245,
65 246, 247, 248, 248, 243, 250, 243, 250,
66 252, 253, 254, 255, 256, 256, 251, 258,
67 251, 225, 262, 263, 264, 266, 267, 272,
68 273, 273, 265, 278, 265, 278, 282, 260,
70 S_F_MAP src_file4
[] = {
72 { "buffer.spin", 1, 56 },
76 0, 1, 1, 0, 0, 1, 1, 0,
77 1, 1, 0, 1, 0, 0, 1, 1,
78 0, 1, 1, 0, 0, 0, 1, 0,
79 0, 0, 1, 1, 0, 1, 1, 0,
80 1, 0, 0, 0, 1, 1, 0, 1,
81 1, 0, 1, 0, 0, 1, 0, 0,
82 1, 1, 0, 1, 1, 0, 0, 0,
86 #define nstates3 10 /* cleaner */
89 0, 211, 212, 213, 214, 210, 216, 210,
91 S_F_MAP src_file3
[] = {
93 { "buffer.spin", 1, 9 },
97 0, 1, 0, 0, 1, 0, 1, 1,
101 #define nstates2 30 /* reader */
104 0, 177, 179, 181, 182, 183, 184, 185,
105 185, 180, 187, 180, 178, 191, 193, 194,
106 195, 196, 196, 192, 198, 192, 198, 190,
107 200, 200, 172, 202, 172, 202, 0, };
108 S_F_MAP src_file2
[] = {
110 { "buffer.spin", 1, 29 },
113 uchar reached2
[] = {
114 0, 1, 1, 1, 0, 0, 0, 1,
115 1, 0, 1, 1, 0, 1, 1, 0,
116 0, 1, 1, 0, 1, 1, 0, 0,
117 1, 1, 0, 1, 1, 0, 0, };
120 #define nstates1 51 /* tracer */
123 0, 106, 107, 105, 111, 112, 113, 113,
124 110, 115, 109, 118, 118, 119, 119, 117,
125 121, 121, 123, 124, 125, 126, 127, 127,
126 122, 129, 122, 116, 134, 136, 137, 138,
127 139, 139, 135, 141, 135, 141, 142, 145,
128 146, 147, 148, 143, 150, 133, 152, 154,
130 S_F_MAP src_file1
[] = {
132 { "buffer.spin", 1, 50 },
135 uchar reached1
[] = {
136 0, 1, 0, 0, 1, 1, 1, 0,
137 1, 1, 0, 1, 1, 1, 0, 1,
138 1, 0, 1, 0, 0, 0, 1, 1,
139 0, 1, 1, 0, 1, 1, 0, 0,
140 1, 1, 0, 1, 1, 0, 0, 1,
141 0, 1, 0, 0, 1, 0, 1, 0,
145 #define nstates0 31 /* switcher */
148 0, 60, 61, 62, 65, 66, 67, 68,
149 68, 63, 70, 59, 73, 73, 74, 74,
150 72, 76, 71, 79, 80, 83, 84, 85,
151 86, 81, 88, 88, 78, 91, 92, 0, };
152 S_F_MAP src_file0
[] = {
154 { "buffer.spin", 1, 30 },
157 uchar reached0
[] = {
158 0, 1, 0, 0, 1, 0, 1, 1,
159 0, 0, 1, 0, 1, 1, 1, 0,
160 1, 1, 0, 1, 0, 1, 0, 1,
161 0, 0, 1, 0, 0, 1, 0, 0, };
181 #define T_ID unsigned char
203 #define Pinit ((P4 *)this)
204 typedef struct P4
{ /* :init: */
205 unsigned _pid
: 8; /* 0..255 */
206 unsigned _t
: 4; /* proctype */
207 unsigned _p
: 7; /* state */
213 #define Air4 (sizeof(P4) - Offsetof(P4, commit_sum) - 1*sizeof(uchar))
214 #define Pcleaner ((P3 *)this)
215 typedef struct P3
{ /* cleaner */
216 unsigned _pid
: 8; /* 0..255 */
217 unsigned _t
: 4; /* proctype */
218 unsigned _p
: 7; /* state */
220 #define Air3 (sizeof(P3) - 3)
221 #define Preader ((P2 *)this)
222 typedef struct P2
{ /* reader */
223 unsigned _pid
: 8; /* 0..255 */
224 unsigned _t
: 4; /* proctype */
225 unsigned _p
: 7; /* state */
229 #define Air2 (sizeof(P2) - Offsetof(P2, j) - 1*sizeof(uchar))
230 #define Ptracer ((P1 *)this)
231 typedef struct P1
{ /* tracer */
232 unsigned _pid
: 8; /* 0..255 */
233 unsigned _t
: 4; /* proctype */
234 unsigned _p
: 7; /* state */
242 #define Air1 (sizeof(P1) - Offsetof(P1, j) - 1*sizeof(uchar))
243 #define Pswitcher ((P0 *)this)
244 typedef struct P0
{ /* switcher */
245 unsigned _pid
: 8; /* 0..255 */
246 unsigned _t
: 4; /* proctype */
247 unsigned _p
: 7; /* state */
253 #define Air0 (sizeof(P0) - Offsetof(P0, size) - 1*sizeof(uchar))
254 typedef struct P5
{ /* np_ */
255 unsigned _pid
: 8; /* 0..255 */
256 unsigned _t
: 4; /* proctype */
257 unsigned _p
: 7; /* state */
259 #define Air5 (sizeof(P5) - 3)
260 #if defined(BFS) && defined(REACH)
268 typedef struct Trans
{
269 short atom
; /* if &2 = atomic trans; if &8 local */
271 short escp
[HAS_UNLESS
]; /* lists the escape states */
272 short e_trans
; /* if set, this is an escp-trans */
274 short tpe
[2]; /* class of operation (for reduction) */
275 short qu
[6]; /* for conditional selections: qid's */
276 uchar ty
[6]; /* ditto: type's */
278 short om
; /* completion status of preselects */
280 char *tp
; /* src txt of statement */
281 int st
; /* the nextstate */
282 int t_id
; /* transition id, unique within proc */
283 int forw
; /* index forward transition */
284 int back
; /* index return transition */
288 #define qptr(x) (((uchar *)&now)+(int)q_offset[x])
289 #define pptr(x) (((uchar *)&now)+(int)proc_offset[x])
290 extern uchar
*Pptr(int);
291 #define q_sz(x) (((Q0 *)qptr(x))->Qlen)
294 #define VECTORSZ 1024 /* sv size in bytes */
314 #if !defined(SAFETY) && !defined(MA)
319 #if defined(SAFETY) && !defined(HASH64)
332 #if !defined(LC) && defined(SC)
336 #if defined(COLLAPSE2) || defined(COLLAPSE3) || defined(COLLAPSE4)
337 /* accept the above for backward compatibility */
360 #if NCORE>1 && !defined(SEP_STATE)
361 unsigned long *ncomps
; /* in shared memory */
363 unsigned long ncomps
[256+2];
368 #define WS sizeof(void *) /* word size in bytes */
369 typedef struct Stack
{ /* for queues and processes */
390 typedef struct Svtack
{ /* for complete state vector */
395 short o_delta
; /* current size of frame */
396 short m_delta
; /* maximum size of frame */
401 #define StackSize (WS)
407 Trans
***trans
; /* 1 ptr per state per proctype */
410 int depthfound
= -1; /* loop detection */
412 int proc_offset
[MAXPROC
];
415 short proc_offset
[MAXPROC
];
416 short q_offset
[MAXQ
];
418 uchar proc_skip
[MAXPROC
];
420 unsigned long vsize
; /* vector size in bytes */
422 int vprefix
=0, svfd
; /* runtime option -pN */
424 char *tprefix
= "trail"; /* runtime option -tsuffix */
425 short boq
= -1; /* blocked_on_queue status */
426 typedef struct State
{
429 uchar _a_t
; /* cycle detection */
431 uchar _cnt
[NFAIR
]; /* counters, weak fairness */
441 uchar _last
; /* pid executed in last step */
444 #if nstates_event<256
447 unsigned short _event
;
452 uchar commit_count
[2];
460 /* hidden variable: */ uchar deliver
;
461 int _
; /* a predefined write-only variable */
463 #define FORWARD_MOVES "pan.m"
464 #define REVERSE_MOVES "pan.b"
465 #define TRANSITIONS "pan.t"
467 uchar reached5
[3]; /* np_ */
468 uchar
*loopstate5
; /* np_ */
469 #define nstates5 3 /* np_ */
470 #define endstate5 2 /* np_ */
472 #define start5 0 /* np_ */
479 #define ACCEPT_LAB 1 /* at least 1 in np_ */
481 #define ACCEPT_LAB 0 /* user-defined accept labels */
485 #warning -DMEMLIM takes precedence over -DMEMCNT
489 #warning using minimal value -DMEMCNT=20 (=1MB)
498 #error excessive value for MEMCNT
500 #define MEMLIM (1<<(MEMCNT-20))
506 #if NCORE>1 && !defined(MEMLIM)
507 #define MEMLIM (2048) /* need a default, using 2 GB */
509 #define PROG_LAB 0 /* progress labels */
523 typedef struct Q0
{ /* generic q */
524 uchar Qlen
; /* q_size */
528 /** function prototypes **/
529 char *emalloc(unsigned long);
530 char *Malloc(unsigned long);
531 int Boundcheck(int, int, int, int, Trans
*);
532 int addqueue(int, int);
533 /* int atoi(char *); */
534 /* int abort(void); */
536 int delproc(int, int);
538 int hstore(char *, int);
540 int gstore(char *, int, uchar
);
542 int q_cond(short, Trans
*);
546 int qrecv(int, int, int, int);
548 /* void *sbrk(int); */
550 void assert(int, char *, int, int, Trans
*);
551 void c_chandump(int);
552 void c_globals(void);
553 void c_locals(int, int);
554 void checkcycles(void);
555 void crack(int, int, Trans
*, short *);
556 void d_sfh(const char *, int);
557 void sfh(const char *, int);
558 void d_hash(uchar
*, int);
559 void s_hash(uchar
*, int);
560 void r_hash(uchar
*, int);
566 void imed(Trans
*, int, int, int);
567 void new_state(void);
569 void putpeg(int, int);
572 void retrans(int, int, int, short *, uchar
*, uchar
*);
574 void setq_claim(int, int, char *, int, char *);
575 void sv_restor(void);
577 void tagtable(int, int, int, short *, uchar
*);
578 void do_dfs(int, int, int, short *, uchar
*, uchar
*);
580 void unrecv(int, int, int, int, int);
582 void wrap_stats(void);
583 #if defined(FULLSTACK) && defined(BITSTATE)
584 int onstack_now(void);
585 void onstack_init(void);
586 void onstack_put(void);
587 void onstack_zap(void);
590 int q_S_check(int, int);
591 int q_R_check(int, int);
592 uchar q_claim
[MAXQ
+1];
593 char *q_name
[MAXQ
+1];
594 char *p_name
[MAXPROC
+1];
596 void qsend(int, int, int);
597 #define Addproc(x) addproc(x)
This page took 0.043243 seconds and 4 git commands to generate.