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