1 /* mac2defs.h 1.2 86/02/04 */ 2 3 /* 4 * Tahoe Registers 5 */ 6 7 /* 8 * Scratch registers 9 */ 10 #define R0 0 11 #define R1 1 12 #define R2 2 13 #define R3 3 14 #define R4 4 15 #define R5 5 16 17 /* 18 * Register variables 19 */ 20 #define R6 6 21 #define R7 7 22 #define R8 8 23 #define R9 9 24 #define R10 10 25 #define R11 11 26 #define R12 12 27 28 /* 29 * Special purpose registers 30 */ 31 #define FP 13 /* frame pointer */ 32 #define SP 14 /* stack pointer */ 33 #define PC 15 /* program counter */ 34 35 /* 36 * Floating registers 37 */ 38 #define ACC 16 /* accumulator */ 39 40 #define TMPREG FP /* reg off which temporaries are referenced */ 41 #define REGSZ 16 /* size of register set */ 42 43 #define R2REGS 1 /* permit double indexing */ 44 45 extern int fregs; 46 extern int maxargs; 47 48 #define BYTEOFF(x) ((x)&03) 49 #define wdal(k) (BYTEOFF(k)==0) /* word align */ 50 #define BITOOR(x) ((x)>>3) /* bit offset to oreg offset */ 51 52 /* 53 * Some macros used in store(): 54 * just evaluate the arguments, and be done with it... 55 */ 56 #define STOARG(p) 57 #define STOFARG(p) 58 #define STOSTARG(p) 59 60 /* 61 * Some short routines that get called an awful lot are actually macros. 62 */ 63 #if defined(FORT) || defined(SPRECC) 64 #define szty(t) ((t) == DOUBLE ? 2 : 1) 65 #else 66 #define szty(t) (((t) == DOUBLE || (t) == FLOAT) ? 2 : 1) 67 #endif 68 #define shltype(o, p) \ 69 ((o) == REG || (o) == NAME || (o) == ICON || \ 70 (o) == OREG || ((o) == UNARY MUL && shumul((p)->in.left))) 71 #define ncopy(q, p) ((q)->in = (p)->in) 72 73 #define MYREADER(p) myreader(p) 74 int optim2(); 75 #define SIREG (SPECIAL|6) /* indexed OREG */ 76 int special(); /* additional special shapes */ 77 #define callchk(p) if ((p)->in.op != FORTCALL) allchk() 78