| 1 | /* |
| 2 | * Copyright (c) 1984, 1986 Regents of the University of California. |
| 3 | * All rights reserved. The Berkeley software License Agreement |
| 4 | * specifies the terms and conditions for redistribution. |
| 5 | * |
| 6 | * @(#)inline.h 7.1 (Berkeley) %G% |
| 7 | */ |
| 8 | |
| 9 | /* |
| 10 | * COMMENTCHAR is the character delimiting comments in the assembler. |
| 11 | * LABELCHAR is the character that separates labels from instructions. |
| 12 | * ARGSEPCHAR is the character that separates arguments in instructions. |
| 13 | */ |
| 14 | #define COMMENTCHAR '#' |
| 15 | #define LABELCHAR ':' |
| 16 | #define ARGSEPCHAR ',' |
| 17 | |
| 18 | /* |
| 19 | * Expansion parameters: |
| 20 | * QUEUESIZE is the number of instructions to be considered for |
| 21 | * integration of argument pushes and pops |
| 22 | * MAXLINELEN is the longest expected input line |
| 23 | * MAXARGS is the maximum number of arguments in an assembly instruction |
| 24 | */ |
| 25 | #define QUEUESIZE 16 |
| 26 | #define MAXLINELEN 1024 |
| 27 | #define MAXARGS 10 |
| 28 | |
| 29 | /* |
| 30 | * The following global variables are used to manipulate the queue of |
| 31 | * recently seen instructions. |
| 32 | * line - The queue of instructions. |
| 33 | * bufhead - Pointer to next availble queue slot. It is not |
| 34 | * considered part of te instruction stream until |
| 35 | * bufhead is advanced. |
| 36 | * buftail - Pointer to last instruction in queue. |
| 37 | * Note that bufhead == buftail implies that the queue is empty. |
| 38 | */ |
| 39 | int bufhead, buftail; |
| 40 | char line[QUEUESIZE][MAXLINELEN]; |
| 41 | |
| 42 | #define SUCC(qindex) ((qindex) + 1 == QUEUESIZE ? 0 : (qindex) + 1) |
| 43 | #define PRED(qindex) ((qindex) - 1 < 0 ? QUEUESIZE - 1 : (qindex) - 1) |
| 44 | |
| 45 | /* |
| 46 | * Hash table headers should be twice as big as the number of patterns. |
| 47 | * They must be a power of two. |
| 48 | */ |
| 49 | #define HSHSIZ 128 |
| 50 | |
| 51 | /* |
| 52 | * These tables specify the substitutions that are to be done. |
| 53 | */ |
| 54 | struct pats { |
| 55 | int args; |
| 56 | char *name; |
| 57 | char *replace; |
| 58 | struct pats *next; |
| 59 | int size; |
| 60 | }; |
| 61 | struct pats *patshdr[HSHSIZ]; |
| 62 | extern struct pats language_ptab[], libc_ptab[], machine_ptab[]; |
| 63 | extern struct pats vax_libc_ptab[], vaxsubset_libc_ptab[]; |
| 64 | extern struct pats vax_ptab[], vaxsubset_ptab[]; |
| 65 | |
| 66 | /* |
| 67 | * This table defines the set of instructions that demark the |
| 68 | * end of a basic block. |
| 69 | */ |
| 70 | struct inststoptbl { |
| 71 | char *name; |
| 72 | struct inststoptbl *next; |
| 73 | int size; |
| 74 | }; |
| 75 | struct inststoptbl *inststoptblhdr[HSHSIZ]; |
| 76 | extern struct inststoptbl inststoptable[]; |
| 77 | |
| 78 | /* |
| 79 | * Miscellaneous functions. |
| 80 | */ |
| 81 | char *newline(), *copyline(), *doreplaceon(); |