123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
- /* $Id$ */
- /*
- * pattern contains the optimization patterns in an apparently
- * unordered fashion. All patterns follow each other unaligned.
- * Each pattern looks as follows:
- * Byte 0: high byte of hash value associated with this pattern.
- * Byte 1-2: index of next pattern with same low byte of hash value.
- * Byte 3- : pattern and replacement.
- * First comes the pattern length
- * then the pattern opcodes,
- * then a boolean expression,
- * then the one-byte replacement length
- * then the intermixed pattern opcodes and operands or
- * 0 followed by the one-byte special optimization expression.
- * If the DIAGOPT option is set, the optimization is followed
- * by the line number in the tables.
- */
- #undef ALLOWSPECIAL /* Special optimizations allowed */
- #define PO_HASH 0
- #define PO_NEXT 1
- #define PO_MATCH 3
- struct exprnode {
- short ex_operator;
- short ex_lnode;
- short ex_rnode;
- };
- typedef struct exprnode expr_t;
- typedef struct exprnode *expr_p;
- /*
- * contents of .ex_operator
- */
- #define EX_CON 0
- #define EX_ARG 1
- #define EX_CMPEQ 2
- #define EX_CMPNE 3
- #define EX_CMPGT 4
- #define EX_CMPGE 5
- #define EX_CMPLT 6
- #define EX_CMPLE 7
- #define EX_OR2 8
- #define EX_AND2 9
- #define EX_OR1 10
- #define EX_XOR1 11
- #define EX_AND1 12
- #define EX_PLUS 13
- #define EX_MINUS 14
- #define EX_TIMES 15
- #define EX_DIVIDE 16
- #define EX_MOD 17
- #define EX_LSHIFT 18
- #define EX_RSHIFT 19
- #define EX_UMINUS 20
- #define EX_NOT 21
- #define EX_COMP 22
- #define EX_ROM 23
- #define EX_NOTREG 24
- #define EX_POINTERSIZE 25
- #define EX_WORDSIZE 26
- #define EX_DEFINED 27
- #define EX_SAMESIGN 28
- #define EX_SFIT 29
- #define EX_UFIT 30
- #define EX_ROTATE 31
- #define N_EX_OPS 32 /* must be one higher then previous */
- /*
- * Definition of special opcodes used in patterns
- */
- #define op_pfirst op_LLP
- #define op_LLP (op_last+1)
- #define op_LEP (op_last+2)
- #define op_SLP (op_last+3)
- #define op_SEP (op_last+4)
- #define op_plast op_SEP
- /*
- * Definition of the structure in which instruction operands
- * are kept during pattern matching.
- */
- typedef struct eval eval_t;
- typedef struct eval *eval_p;
- struct eval {
- short e_typ;
- union {
- offset e_con;
- num_p e_np;
- } e_v;
- };
- /*
- * contents of .e_typ
- */
- #define EV_UNDEF 0
- #define EV_CONST 1
- #define EV_NUMLAB 2
- #define EV_FRAG 3 /* and all higher numbers */
- typedef struct iarg iarg_t;
- typedef struct iarg *iarg_p;
- struct iarg {
- eval_t ia_ev;
- sym_p ia_sp;
- };
- /*
- * The next extern declarations refer to data generated by mktab
- */
- extern byte pattern[];
- extern short lastind;
- extern iarg_t iargs[];
- extern byte nparam[];
- extern bool nonumlab[];
- extern bool onlyconst[];
- extern expr_t enodes[];
|