Pristine Ack-5.5
[Ack-5.5.git] / mach / proto / ncg / state.c
1 #ifndef NORCSID
2 static char rcsid[] = "$Id: state.c,v 0.3 1994/06/24 13:28:10 ceriel Exp $";
3 #endif
4
5 #include "assert.h"
6 #include "param.h"
7 #include "tables.h"
8 #include "types.h"
9 #include <cgg_cg.h>
10 #include "data.h"
11 #include "result.h"
12 #include "state.h"
13 #include "extern.h"
14
15 /*
16  * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
17  * See the copyright notice in the ACK home directory, in the file "Copyright".
18  *
19  * Author: Hans van Staveren
20  */
21
22 extern int nstab;       /* salloc.c */
23
24 savestatus(sp) register state_p sp; {
25
26         sp->st_sh = stackheight;
27         bmove((short *)fakestack,(short *)sp->st_fs,stackheight*sizeof(token_t));
28         sp->st_na = nallreg;
29         bmove((short *)allreg,(short *)sp->st_ar,nallreg*sizeof(int));
30         sp->st_ct = curtoken;
31         bmove((short *)dollar,(short *)sp->st_do,LONGESTPATTERN*sizeof(result_t));
32         bmove((short *)machregs,(short *)sp->st_mr,NREGS*sizeof(struct reginfo));
33         sp->st_ne = nemlines;
34         bmove((short *)emlines,(short *)sp->st_el,nemlines*sizeof(struct emline));
35         sp->st_em = emp;
36         sp->st_se = saveemp;
37         sp->st_tl = tokpatlen;
38         sp->st_ns = nstab;
39 }
40
41 restorestatus(sp) register state_p sp; {
42
43         stackheight = sp->st_sh;
44         bmove((short *)sp->st_fs,(short *)fakestack,stackheight*sizeof(token_t));
45         nallreg = sp->st_na;
46         bmove((short *)sp->st_ar,(short *)allreg,nallreg*sizeof(int));
47         curtoken = sp->st_ct;
48         bmove((short *)sp->st_do,(short *)dollar,LONGESTPATTERN*sizeof(result_t));
49         bmove((short *)sp->st_mr,(short *)machregs,NREGS*sizeof(struct reginfo));
50         nemlines = sp->st_ne;
51         bmove((short *)sp->st_el,(short *)emlines,nemlines*sizeof(struct emline));
52         emp = sp->st_em;
53         saveemp = sp->st_se;
54         tokpatlen = sp->st_tl;
55         popstr(sp->st_ns);
56 }
57
58 bmove(from,to,nbytes) register short *from,*to; register nbytes; {
59
60         if (nbytes<=0)
61                 return;
62         assert(sizeof(short)==2 && (nbytes&1)==0);
63         nbytes>>=1;
64         do
65                 *to++ = *from++;
66         while (--nbytes);
67 }