|
|
1.1 ! root 1: # include "cpass1.h" ! 2: #ifndef lint ! 3: static char sccsid[] = "@(#)regvars.c 1.1 86/02/03 Copyr 1985 Sun Micro"; ! 4: #endif ! 5: ! 6: /* ! 7: * Copyright (c) 1985 by Sun Microsystems, Inc. ! 8: */ ! 9: ! 10: /* ! 11: * Register variable allocation: ! 12: * ! 13: * regvar_init() Initialize register variable allocation ! 14: * regvar_alloc(type) Allocate register for variable of given type ! 15: * regvar_avail(type) Is register available for var of given type ! 16: */ ! 17: ! 18: long regvar; ! 19: ! 20: #ifdef sun >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! 21: ! 22: void ! 23: regvar_init() ! 24: { ! 25: SETD(regvar, MAX_DVAR); ! 26: SETA(regvar, MAX_AVAR); ! 27: SETF(regvar, MAX_FVAR); ! 28: minrvar = regvar; ! 29: } ! 30: ! 31: int ! 32: regvar_alloc(type) ! 33: TWORD type; ! 34: { ! 35: int rvar; ! 36: if ( ISPTR(type) ) { ! 37: /* ! 38: * allocate address register ! 39: */ ! 40: rvar = NEXTA(regvar); ! 41: SETA(regvar, rvar-1); ! 42: if (NEXTA(regvar) < NEXTA(minrvar)) { ! 43: SETA(minrvar, NEXTA(regvar)); ! 44: } ! 45: } else if ( use68881 && ISFLOATING(type) ) { ! 46: /* ! 47: * allocate floating point register ! 48: */ ! 49: rvar = NEXTF(regvar); ! 50: SETF(regvar, rvar-1); ! 51: if (NEXTF(regvar) < NEXTF(minrvar)) { ! 52: SETF(minrvar, NEXTF(regvar)); ! 53: } ! 54: } else { ! 55: /* ! 56: * allocate data register ! 57: */ ! 58: rvar = NEXTD(regvar); ! 59: SETD(regvar, rvar-1); ! 60: if (NEXTD(regvar) < NEXTD(minrvar)) { ! 61: SETD(minrvar, NEXTD(regvar)); ! 62: } ! 63: } ! 64: return(rvar); ! 65: } ! 66: ! 67: int ! 68: regvar_avail(type) ! 69: { ! 70: if ( ISPTR(type) ) { ! 71: return( NEXTA(regvar) >= MIN_AVAR ); ! 72: } ! 73: if ( use68881 && ISFLOATING(type) ) { ! 74: return( NEXTF(regvar) >= MIN_FVAR ); ! 75: } ! 76: return( NEXTD(regvar) >= MIN_DVAR && cisreg(type) ); ! 77: } ! 78: ! 79: #else VAX ========================================= ! 80: ! 81: void ! 82: regvar_init() ! 83: { ! 84: minrvar = regvar = MAXRVAR; ! 85: } ! 86: ! 87: int ! 88: regvar_alloc(type) ! 89: TWORD type; ! 90: { ! 91: int rvar; ! 92: rvar = regvar--; ! 93: if( regvar < minrvar ) ! 94: minrvar = regvar; ! 95: return(rvar); ! 96: } ! 97: ! 98: int ! 99: regvar_avail(type) ! 100: { ! 101: return( regvar >= MINRVAR && cisreg( type ) ); ! 102: } ! 103: ! 104: #endif VAX <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.