--- /dev/null
+/* $Header$ */
+
+#ifndef NDEBUG
+#define assert(x) if (!(x)) badassertion("x",__FILE__,__LINE__)
+#else
+#define assert(x) /* nothing */
+#endif
--- /dev/null
+/* $Header$ */
+
+#define _COST_
+
+typedef struct cost {
+ int ct_space;
+ int ct_time;
+} cost_t,*cost_p;
--- /dev/null
+/* $Header$ */
+
+typedef struct expr {
+ int ex_typ;
+ short ex_regset[SZOFSET(MAXREGS)];
+ int ex_index;
+} expr_t,*expr_p;
+
+#define TYPINT 1
+#define TYPBOOL 2
+#define TYPADDR 3
+#define TYPREG 4
+
+/* When the type is register the regset contains the set of
+ possible registers for checking purposes only.
+*/
--- /dev/null
+/* $Header$ */
+
+extern int wordsize;
+extern int pointersize;
+extern int nregs;
+extern int nprops;
+extern int ntokens;
+extern int nsets;
+extern int ninstr;
+extern int empatlen;
+extern int emmnem[];
+extern int empatexpr;
+extern int codeindex;
+extern int tokpatlen;
+extern int tokpatro[];
+extern int tokpatset[];
+extern int nallreg;
+extern int allreg[];
+extern int cursetno;
+extern int allsetno;
+extern int inproc;
+extern int callproc;
+extern int procarg[2];
+extern int fc1,fc2,fc3,fc4;
+extern int maxmembers;
+extern int regclass;
+extern int maxtokensize;
+
+extern char *mystrcpy();
+extern char *myalloc();
--- /dev/null
+/* $Header$ */
+
+#ifndef _COST_
+#include "cost.h"
+#endif
+
+#define AD_RO 01 /* Read only operand */
+#define AD_WO 02 /* Write only operand */
+#define AD_RW 03 /* Read-write operand */
+#define AD_RWMASK 03 /* Mask to select these possiblities */
+
+#define AD_CC 04 /* Condition codes set to this one */
+
+typedef struct operand {
+ struct operand *o_next;
+ short o_setno;
+ short o_adorn;
+} operand;
+
+typedef struct instruction {
+ char *i_name;
+ short i_asname;
+ short i_nops;
+ operand *i_oplist;
+ struct varinfo *i_erases;
+ cost_t i_cost;
+} instr_t,*instr_p;
+
+extern instr_t l_instr[];
+
+/*
+ * The read only information on the operands is not used at the moment.
+ * Predicted future use:
+ * When using :ro data it is possible to use a register in its stead
+ * if it contains the same information and is allowed as an operand
+ * in this place. Too difficult for now.
+ */
--- /dev/null
+/* $Header$ */
+
+typedef struct iocc {
+ short in_set[SETSIZE];
+ int in_index;
+} iocc_t,*iocc_p;
--- /dev/null
+/* $Header$ */
+
+typedef enum {
+ justlooking,mustexist,newsymbol,makeexist
+} lookupstyle;
+
+typedef enum {
+ symany,symkeyw,symconst,symsconst,symprop,symreg,symtok,symset,symproc
+} symtype;
+
+typedef struct symbol {
+ struct symbol *sy_next; /* pointer to hashchain */
+ char *sy_name; /* symbol */
+ symtype sy_type; /* type */
+ union {
+ long syv_cstval;
+ int syv_stringno;
+ int syv_keywno;
+ int syv_propno;
+ int syv_regno;
+ int syv_tokno;
+ int syv_setno;
+ int syv_procoff;
+ } sy_value;
+} symbol;
+
+#define NSYMHASH 61
+extern symbol *symhash[NSYMHASH]; /* chained hashtable */
+extern symbol *lookup();
--- /dev/null
+/* $Header$ */
+
+/*
+ * Miscellaneous sizes, tunable
+ */
+
+#define MAXREGS 40
+#define MAXPROPS 30
+#define MAXTOKENS 60
+#define MAXATT 3
+#define MAXSETS 100
+#define MAXINSTR 100
+#define MAXSTRINGS 250
+#define MAXNODES 300
+#define EMPATMAX 20
+#define MAXPATTERNS 20
+#define MAXALLREG 5
+#define MAXINSTANCES 300
+#define MAXMOVES 20
+#define MAXTESTS 10
+#define MAXSTACKS 30
+#define MAXCOERCS 25
+#define MAXSPLCOERC 20
+#define MAXSPLIT 2
+#define MAXPATBYTES 7000
+#define MAXREGVAR 8
+#define MAXSOURCELINES 4000
+
+/* end of tunable constants */
+
+#define TOKPATMAX 7
+
+#define SZOFSET(n) (((n)+15)/16)
+
+#define SETSIZE SZOFSET(MAXREGS+MAXTOKENS)
+
+#define NEXT(n,max,string) (n<max? n++ : tabovf(string))
+#define NEW(x,y) x=(y*)myalloc(sizeof(*(x)))
--- /dev/null
+/* $Header$ */
+
+typedef struct propinfo {
+ int pr_size;
+ short pr_regset[SZOFSET(MAXREGS)];
+} propinfo;
+
+extern struct propinfo l_props[];
--- /dev/null
+/* $Header$ */
+
+#define INSMOVE (-1)
+#define INSTEST (-2)
+#define INSPRETURN (-3)
+#define INSTLAB (-4)
+#define INSSETCC (-5)
+#define INSERASE (-6)
--- /dev/null
+/* $Header$ */
+
+#define _REGINFO_
+typedef struct reginfo {
+ char *ri_name;
+ char *ri_repr;
+ int ri_size;
+ int ri_class;
+ int ri_rregvar;
+ int ri_memb[2];
+} reginfo;
+
+extern struct reginfo l_regs[];
--- /dev/null
+/* $Header$ */
+
+#define ANY_REGVAR 0x1
+#define SL_REGVAR 0x2
+#define DL_REGVAR 0x4
+
+extern int rvused;
+extern int nregvar[4];
+extern int rvsize[4];
+extern int rvnumbers[4][MAXREGVAR];
--- /dev/null
+/* $Header$ */
+
+#define BIS(sp,n) (sp)[(n)>>4] |= 1<<((n)&0xF)
+#define BIC(sp,n) (sp)[(n)>>4] &= ~(1<<((n)&0xF))
+#define BIT(sp,n) (((sp)[(n)>>4]&(1<<((n)&0xF)))!=0)
--- /dev/null
+/* $Header$ */
+
+#ifndef _COST_
+#include "cost.h"
+#endif
+
+
+typedef struct token {
+ char *tk_name;
+ int tk_size;
+ cost_t tk_cost;
+ struct {
+ int ta_type; /* -1 is int, -2 is addr, >=0 is propno */
+ char *ta_name;
+ } tk_att[MAXATT];
+ int tk_format;
+} token_t,*token_p;
+
+extern token_p l_tokens[MAXTOKENS];
--- /dev/null
+/* $Header$ */
+
+#define VI_NSTR 1
+#define VI_NINT 3
+
+typedef struct varinfo {
+ struct varinfo *vi_next;
+ char *vi_str[VI_NSTR];
+ int vi_int[VI_NINT];
+ struct varinfo *vi_vi;
+} varinfo;
+
+#define VI_NULL (struct varinfo *) 0