booth.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. #include <local.h>
  2. #ifdef extern
  3. #define INIT(x) = x
  4. #else
  5. #define INIT(x) /* empty */
  6. #endif
  7. #if BIGMACHINE
  8. #define BORS(x,y) x
  9. #else
  10. #define BORS(x,y) y
  11. #endif
  12. /* Tunable constants */
  13. #define MAXALLREG 5 /* Maximum number of allocates per rule */
  14. #define MAXREGS BORS(36,32) /* Total number of registers */
  15. #define MAXREGVARS 8 /* Maximum regvars per type */
  16. #define MAXPROPS 16 /* Total number of register properties */
  17. #define MAXTOKENS BORS(75,32) /* Different kind of tokens */
  18. #define MAXSETS BORS(100,80) /* Number of tokenexpressions definable */
  19. #define MAXEMPATLEN 25 /* Maximum length of EM-pattern/replacement */
  20. #define TOKENSIZE 5 /* Maximum number of fields in token struct */
  21. #define MAXINSTANCE BORS(250,120) /* Maximum number of different tokeninstances */
  22. #define MAXSTRINGS BORS(800,400)/* Maximum number of different codestrings */
  23. #define MAXPATTERN BORS(8000,6000) /* Maximum number of bytes in pattern[] */
  24. #define MAXNODES BORS(500,400) /* Maximum number of expression nodes */
  25. #define MAXMEMBERS 2 /* Maximum number of subregisters per reg */
  26. #define NMOVES BORS(50,30) /* Maximum number of move definitions */
  27. #define MAXC1 20 /* Maximum of coercions type 1 */
  28. #define MAXC2 20 /* Maximum of coercions type 2 */
  29. #define MAXC3 20 /* Maximum of coercions type 3 */
  30. #define MAXSPLIT 4 /* Maximum degree of split */
  31. #define MAXNSTR 40 /* Maximum consecutive strings in coderule */
  32. extern char *hname INIT("tables.h");
  33. extern char *cname INIT("tables.c");
  34. extern char *iname; /* stdin */
  35. /* Derived constants */
  36. #define SETSIZE ((MAXREGS+1+MAXTOKENS+15)>>4)
  37. #define PROPSETSIZE ((MAXPROPS+15)>>4)
  38. #define BMASK 0377
  39. #define BSHIFT 8
  40. #define TRUE 1
  41. #define FALSE 0
  42. #define MAXPATLEN 7 /* Maximum length of tokenpatterns */
  43. typedef char byte;
  44. typedef char * string;
  45. extern char *myalloc();
  46. #include <cg_pattern.h>
  47. typedef struct list1str {
  48. struct list1str *l1next;
  49. string l1name;
  50. } *list1;
  51. typedef struct list2str {
  52. struct list2str *l2next;
  53. list1 l2list;
  54. } *list2;
  55. typedef struct list3str {
  56. struct list3str *l3next;
  57. list2 l3list;
  58. } *list3;
  59. typedef struct reginfo {
  60. string rname;
  61. string rrepr;
  62. int rsize;
  63. int rmembers[MAXMEMBERS];
  64. int rregvar;
  65. short rprop[PROPSETSIZE];
  66. } *reginfo;
  67. typedef struct tokeninfo {
  68. string t_name;
  69. list2 t_struct;
  70. struct {
  71. int t_type;
  72. string t_sname;
  73. } t_fields[TOKENSIZE-1];
  74. int t_size;
  75. cost_t t_cost;
  76. int t_format;
  77. } token_t,*token_p;
  78. typedef struct ident {
  79. struct ident *i_next;
  80. string i_name;
  81. int i_type;
  82. # define IREG 1
  83. # define IPRP 2
  84. # define ITOK 3
  85. # define IEXP 4
  86. union {
  87. int i_regno;
  88. int i_prpno;
  89. int i_tokno;
  90. int i_expno;
  91. } i_i;
  92. } ident_t,*ident_p;
  93. #define ITABSIZE 32
  94. extern ident_p identtab[ITABSIZE];
  95. #define LOOKUP 0
  96. #define HALFWAY 1
  97. #define ENTER 2
  98. #define JUSTLOOKING 3
  99. typedef struct expr {
  100. int expr_typ;
  101. # define TYPINT 1
  102. # define TYPREG 2
  103. # define TYPSTR 3
  104. # define TYPBOOL 4
  105. int expr_index;
  106. } expr_t,*expr_p;
  107. extern unsigned cc1 INIT(1),cc2 INIT(1),cc3 INIT(1),cc4 INIT(1);
  108. extern node_t nodes[MAXNODES];
  109. extern node_p lastnode INIT(nodes+1);
  110. extern string codestrings[MAXSTRINGS];
  111. extern int ncodestrings;
  112. extern int strar[MAXNSTR];
  113. extern int nstr;
  114. extern int pathash[256];
  115. extern reginfo machregs[MAXREGS];
  116. extern char stregclass[MAXREGS];
  117. extern int nmachregs INIT(1);
  118. extern int nregclasses INIT(1);
  119. extern int maxmembers;
  120. extern struct {
  121. ident_p propname;
  122. set_t propset;
  123. } machprops[MAXPROPS];
  124. extern int nprops;
  125. extern token_t machtokens[MAXTOKENS];
  126. extern int nmachtokens INIT(1);
  127. extern set_t machsets[MAXSETS];
  128. extern int nmachsets;
  129. extern int patmnem[MAXEMPATLEN];
  130. extern int empatlen;
  131. extern int maxempatlen;
  132. extern int empatexpr;
  133. extern int maxrule INIT(1);
  134. extern int pattokexp[MAXPATLEN];
  135. extern int tokpatlen;
  136. extern int lookident; /* lexical analyzer flag */
  137. extern list3 structpool;
  138. extern int nallreg;
  139. extern int allreg[MAXALLREG];
  140. extern int maxallreg;
  141. extern int lino;
  142. extern int nerrors;
  143. extern int curtokexp;
  144. extern expr_t arexp[TOKENSIZE];
  145. extern int narexp;
  146. extern inst_t arinstance[MAXINSTANCE];
  147. extern int narinstance INIT(1);
  148. extern move_t machmoves[NMOVES];
  149. extern int nmoves;
  150. extern byte pattern[MAXPATTERN];
  151. extern int npatbytes;
  152. extern int prevind;
  153. extern int rulecount; /* Temporary index for ... construct */
  154. extern int ncoderules;
  155. extern int codebytes;
  156. extern FILE *cfile;
  157. extern FILE *hfile;
  158. extern int maxtokensize;
  159. extern int dealflag;
  160. extern int emrepllen;
  161. extern int replmnem[MAXEMPATLEN];
  162. extern int tokrepllen;
  163. extern int replinst[MAXPATLEN];
  164. extern int replexpr[MAXPATLEN];
  165. extern c1_t c1coercs[MAXC1];
  166. extern c2_t c2coercs[MAXC2];
  167. extern c3_t c3coercs[MAXC3];
  168. extern int nc1,nc2,nc3;
  169. extern int maxsplit;
  170. extern int wsize INIT(-1);
  171. extern int psize INIT(-1);
  172. extern int bsize INIT(-1);
  173. extern char *fmt;
  174. extern int cchandled;
  175. extern int ccspoiled;
  176. extern int ccregexpr;
  177. extern int ccinstanceno;
  178. extern int cocopropno;
  179. extern int cocosetno;
  180. extern int allexpno;
  181. extern int rvused; /* regvars used */
  182. extern int nregvar[4]; /* # of register variables of all kinds */
  183. extern int rvnumbers[4][MAXREGVARS]; /* The register numbers */
  184. #define chktabsiz(size,maxsize,which) if(size>=maxsize) tabovf(which)
  185. #define MUST1BEINT(e) int exp1=e.expr_index;tstint(e)
  186. #define MUST2BEINT(e1,e2) int exp1=e1.expr_index,exp2=e2.expr_index;tstint(e1);tstint(e2)
  187. #define MUST1BEBOOL(e) int exp1=e.expr_index;tstbool(e)
  188. #define MUST2BEBOOL(e1,e2) int exp1=e1.expr_index,exp2=e2.expr_index;tstbool(e1);tstbool(e2)
  189. ident_p ilookup(string name, int enterf);
  190. list2 lookstruct(list2 ll);
  191. string scopy(string s);
  192. unsigned hash(string name);
  193. int argtyp(int mn);
  194. int findstructel(int number, string name, int *t);
  195. int eqregclass(int r1, int r2);
  196. void inbetween();
  197. int strlookup(string s);
  198. void tabovf(string tablename);
  199. int max(int a, int b);
  200. int structsize(list2 s);
  201. void setfields(token_p tp, string format);
  202. void tstint(expr_t e);
  203. void outbyte(int n);
  204. void out(int n);
  205. void patbyte(int n);
  206. void patshort(int n);
  207. void pat(int n);
  208. int mlookup(char *name);
  209. ident_p ilookup(string name, int enterf);
  210. int exprlookup(set_t sett);
  211. void tstbool(expr_t e);
  212. int stringno(string s);
  213. int lookup(int comm, int operator, int lnode, int rnode);
  214. void chkregexp(int number);
  215. int commontype(expr_t e1, expr_t e2);
  216. int instno(inst_t inst);
  217. void yyerror(char *, ...);
  218. int yyparse(void);
  219. int yylex(void);