ack/h/cgg_cg.h

168 lines
4.2 KiB
C

/*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright".
*/
/* $Header$ */
/* offsets of interesting fields in EM-pattern */
#define PO_HASH 0
#define PO_NEXT 1
#define PO_MATCH 3
#define ILLHASH 0177777
/* Commands for codegenerator, in low order 5 bits of byte */
#define DO_NEXTEM 0
#define DO_MATCH 1
#define DO_XMATCH 2
#define DO_XXMATCH 3
#define DO_REMOVE 4
#define DO_DEALLOCATE 5
#define DO_REALLOCATE 6
#define DO_ALLOCATE 7
#define DO_MOVE 10
#define DO_ERASE 11
#define DO_TOKREPLACE 12
#define DO_EMREPLACE 13
#define DO_COST 14
#define DO_RETURN 15
#define DO_COERC 16
#define DO_PRETURN 17
#define DO_RREMOVE 18
#define DO_INSTR 19
#define DO_TEST 20
#define DO_DLINE 21
#define DO_SETCC 22
#define DO_TOSTACK 23
#define DO_KILLREG 24
#define DO_LABDEF 25
#ifndef MAXATT
#define MAXATT TOKENSIZE
#endif
typedef struct instance {
short in_which;
# define IN_COPY 1
# define IN_MEMB 2
# define IN_RIDENT 3
# define IN_ALLOC 4
# define IN_DESCR 5
# define IN_S_DESCR 6
# define IN_D_DESCR 7
short in_info[MAXATT+1];
} inst_t,*inst_p;
typedef struct set {
short set_size;
short set_val[SETSIZE];
} set_t,*set_p;
typedef struct {
short m_set1; /* number of tokenexpr in move: from */
short m_expr1; /* optional expression */
short m_set2; /* number of tokenexpr in move: to */
short m_expr2; /* optional expression */
short m_cindex; /* code index to really do it */
} move_t, *move_p;
typedef struct {
short t_set; /* number of tokenexpr in test */
short t_expr; /* optional expression */
short t_cindex; /* code index to really do it */
} test_t, *test_p;
struct exprnode {
short ex_operator;
short ex_lnode;
short ex_rnode;
};
typedef struct exprnode node_t;
typedef struct exprnode *node_p;
/*
* contents of .ex_operator
*/
#define EX_TOKFIELD 0
#define EX_ARG 1
#define EX_CON 2
#define EX_ALLREG 3
#define EX_SAMESIGN 4
#define EX_SFIT 5
#define EX_UFIT 6
#define EX_ROM 7
#define EX_NCPEQ 8
#define EX_SCPEQ 9
#define EX_RCPEQ 10
#define EX_NCPNE 11
#define EX_SCPNE 12
#define EX_RCPNE 13
#define EX_NCPGT 14
#define EX_NCPGE 15
#define EX_NCPLT 16
#define EX_NCPLE 17
#define EX_OR2 18
#define EX_AND2 19
#define EX_PLUS 20
#define EX_CAT 21
#define EX_MINUS 22
#define EX_TIMES 23
#define EX_DIVIDE 24
#define EX_MOD 25
#define EX_LSHIFT 26
#define EX_RSHIFT 27
#define EX_NOT 28
#define EX_COMP 29
#define EX_STRING 31
#define EX_DEFINED 32
#define EX_SUBREG 33
#define EX_TOSTRING 34
#define EX_UMINUS 35
#define EX_REG 36
#define EX_LOWW 37
#define EX_HIGHW 38
#define EX_INREG 39
#define EX_REGVAR 40
#define EX_OR 41
#define EX_XOR 42
#define EX_AND 43
#define EX_ISROM 44
#define EX_TOPELTSIZE 45
#define EX_FALLTHROUGH 46
typedef struct { /* to stack coercions */
short c1_texpno; /* token expression number */
short c1_expr; /* boolean expression */
short c1_prop; /* property of register needed */
short c1_codep; /* code index */
} c1_t,*c1_p;
#ifdef MAXSPLIT
typedef struct { /* splitting coercions */
short c2_texpno; /* token expression number */
short c2_expr; /* optional boolean expression */
short c2_nsplit; /* split factor */
short c2_repl[MAXSPLIT];/* replacement instances */
short c2_codep; /* code index */
} c2_t,*c2_p;
#endif MAXSPLIT
typedef struct { /* one to one coercions */
short c3_texpno; /* token expression number */
short c3_expr; /* boolean expression */
short c3_prop; /* property of register needed */
short c3_repl; /* replacement instance */
short c3_codep; /* code index */
} c3_t,*c3_p;
#define getint(a,b) \
if ((a=((*(b)++)&BMASK)) >= 128) {\
a = ((a-128)<<BSHIFT) | (*(b)++&BMASK); \
}