state.c 1.8 KB

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