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) 06/05/86 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(); 82