|
|
1.1 ! root 1: /* @(#)machdep2.h 1.1 86/02/03 SMI */ ! 2: ! 3: /* ! 4: * Copyright (c) 1985 by Sun Microsystems, Inc. ! 5: */ ! 6: ! 7: #ifdef VAX ! 8: extern int fregs; ! 9: extern int maxargs; ! 10: #else ! 11: # define SAVEREGION 8 /* number of bytes for save area */ ! 12: #endif ! 13: ! 14: extern SUTYPE fregs; ! 15: ! 16: #ifdef VAX ! 17: # define BYTEOFF(x) ((x)&03) ! 18: #else ! 19: # define BYTEOFF(x) ((x)&01) ! 20: #endif ! 21: # define wdal(k) (BYTEOFF(k)==0) ! 22: # define BITOOR(x) ((x)>>3) /* bit offset to oreg offset */ ! 23: ! 24: ! 25: #ifdef VAX ! 26: # define REGSZ 16 ! 27: # define TMPREG FP ! 28: #else ! 29: # define REGSZ (3*8) /* three banks of eight each */ ! 30: /* # define FREETEMP */ /* define these for temporaries at SP+(offset) */ ! 31: /* # define TMPREG SP */ ! 32: # define TMPREG A6 ! 33: # define TMPMAX (0x7fff*8) /* temps must be addressable by 16-bit offset */ ! 34: /* temp addressing is internally in bits */ ! 35: #endif ! 36: ! 37: #define R2REGS /* permit double indexing */ ! 38: ! 39: # define STOARG(p) /* just evaluate the arguments, and be done with it... */ ! 40: # define STOFARG(p) ! 41: # define STOSTARG(p) ! 42: # define genfcall(a,b) gencall(a,b) ! 43: ! 44: # define NESTCALLS ! 45: ! 46: # define MYREADER(p) myreader(p) ! 47: int optim2(); ! 48: #ifdef VAX ! 49: # define special(a, b) 0 ! 50: #endif ! 51: ! 52: ! 53: #ifndef VAX ! 54: /* shape for constants between -128 and 127 */ ! 55: /* # define SCCON (SPECIAL+100) */ ! 56: /* shape for constants between 0 and 32767 */ ! 57: # define SICON (SPECIAL+101) ! 58: /* shape for constants between 1 and 8 */ ! 59: # define S8CON (SPECIAL+102) ! 60: /* shape for appropriate FLD nodes (should be using MULTILEVEL here, but .. */ ! 61: #define SPEC_FLD (SPECIAL+103) ! 62: #define SPEC_FLT (SPECIAL+104) ! 63: #define SPEC_DFLT (SPECIAL+105) ! 64: #define SBASE (SPECIAL+106) ! 65: #define SXREG (SPECIAL+107) ! 66: #define SNONPOW2 (SPECIAL+108) ! 67: #define SFLOAT_SRCE (SPECIAL+109) ! 68: #define SPEC_PVT (SPECIAL+110) ! 69: #define SAUTOINC (SPECIAL+111) ! 70: #define SZEROLB (SPECIAL+112) ! 71: #define SFZERO (SPECIAL+113) ! 72: ! 73: ! 74: #define fltused _fltused ! 75: extern int fltused, usesky; ! 76: extern int chk_ovfl; ! 77: ! 78: #define R2UPKFLGS(flags,shortx,ibit,scale)\ ! 79: { scale = flags&15;\ ! 80: flags >>= 4;\ ! 81: ibit = flags&1;\ ! 82: flags >>= 1;\ ! 83: shortx = flags&1;\ ! 84: } ! 85: ! 86: #define R2PACKFLGS(flags,shortx,ibit,scale)\ ! 87: { flags = shortx;\ ! 88: flags <<= 1;\ ! 89: flags |= ibit;\ ! 90: flags <<= 4;\ ! 91: flags |= scale;\ ! 92: } ! 93: ! 94: /* ! 95: * this stuff is for dealing with compound su-numbers: they are 4 chars ! 96: * in a struct. Three are currently used. ! 97: * They represent the number of registers of each of the (three) types ! 98: * necessary to carry out a calculation. ! 99: */ ! 100: ! 101: #define SUPRINT( v ) printf(", SU = (%d,%d,%d)\n", v.d, v.a, v.f) ! 102: #define SUTOOBIG( v ) (v.d>fregs.d || v.a>fregs.a || v.f>fregs.f) ! 103: #define SUSUM( v ) (v.d + v.a + v.f) ! 104: #define SUTEST( v ) (SUSUM(v) != 0) ! 105: #define SUGT( a, b) (SUSUM(a) > SUSUM(b)) ! 106: ! 107: ! 108: /* ! 109: * tags for identifying machine-specific code templates in table.c ! 110: */ ! 111: ! 112: #define OP68020 0x80000000 /* match only if(use68020) */ ! 113: #define NO68020 0x40000000 /* match only if(!use68020) */ ! 114: #define OP68881 0x20000000 /* match only if(use68881) */ ! 115: #define NO68881 0x10000000 /* match only if(!use68881) */ ! 116: #define OP68SPEC 0xf0000000 /* mask out all of the above */ ! 117: ! 118: #endif not VAX ! 119: ! 120: #define szty(t) ((t)==DOUBLE? 2 : 1) ! 121: #define needpair(r,t) ((t)==DOUBLE && !iscreg(r)) ! 122: #define rewfld(p) 1 ! 123: #define callreg(p) D0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.