Annotation of researchv9/cmd/sun/pcc/regvars.c, revision 1.1.1.1

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     <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.