projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
BSD 3 development
[unix-history]
/
usr
/
src
/
cmd
/
mip
/
pftn.c
diff --git
a/usr/src/cmd/mip/pftn.c
b/usr/src/cmd/mip/pftn.c
index
0a2dbc7
..
0227862
100644
(file)
--- a/
usr/src/cmd/mip/pftn.c
+++ b/
usr/src/cmd/mip/pftn.c
@@
-1,4
+1,5
@@
# include "mfile1"
# include "mfile1"
+# include <a.out.h>
struct instk {
int in_sz; /* size of array element */
struct instk {
int in_sz; /* size of array element */
@@
-21,6
+22,7
@@
struct symtab *relook();
int ddebug = 0;
int ddebug = 0;
+int gdebug;
defid( q, class ) NODE *q; {
register struct symtab *p;
defid( q, class ) NODE *q; {
register struct symtab *p;
@@
-293,6
+295,7
@@
defid( q, class ) NODE *q; {
break;
case REGISTER:
p->offset = regvar--;
break;
case REGISTER:
p->offset = regvar--;
+ if( type==FLOAT || type==DOUBLE) p->offset = regvar--;
if( blevel == 1 ) p->sflags |= SSET;
if( regvar < minrvar ) minrvar = regvar;
break;
if( blevel == 1 ) p->sflags |= SSET;
if( regvar < minrvar ) minrvar = regvar;
break;
@@
-300,7
+303,9
@@
defid( q, class ) NODE *q; {
/* user-supplied routine to fix up new definitions */
/* user-supplied routine to fix up new definitions */
+#ifndef LINT
FIXDEF(p);
FIXDEF(p);
+#endif
if( ddebug ) printf( " dimoff, sizoff, offset: %d, %d, %d\n", p->dimoff, p->sizoff, p->offset );
if( ddebug ) printf( " dimoff, sizoff, offset: %d, %d, %d\n", p->dimoff, p->sizoff, p->offset );
@@
-351,6
+356,11
@@
dclargs(){
q->rval = j;
defid( q, PARAM );
}
q->rval = j;
defid( q, PARAM );
}
+#ifndef LINT
+ pstab(p->sname, N_PSYM);
+ if (gdebug) printf("0,%d,%d\n", p->stype, argoff/SZCHAR);
+ poffs(N_RSYM, p);
+#endif
oalloc( p, &argoff ); /* always set aside space, even for register arguments */
}
cendarg();
oalloc( p, &argoff ); /* always set aside space, even for register arguments */
}
cendarg();
@@
-1366,6
+1376,9
@@
fixtype( p, class ) register NODE *p; {
uerror( "function illegal in structure or union" );
type = INCREF(type);
}
uerror( "function illegal in structure or union" );
type = INCREF(type);
}
+
+ if( class==REGISTER && type==FLOAT) type = DOUBLE;
+
p->type = type;
}
p->type = type;
}
@@
-1430,7
+1443,15
@@
fixclass( class, type ) TWORD type; {
case REGISTER:
if( blevel == 0 ) uerror( "illegal register declaration" );
case REGISTER:
if( blevel == 0 ) uerror( "illegal register declaration" );
- else if( regvar >= MINRVAR && cisreg( type ) ) return( class );
+ switch( type ) {
+ case FLOAT:
+ case DOUBLE:
+ if( (regvar-1) >= MINRVAR && cisreg( type ) ) return ( class );
+ break;
+ default:
+ if( regvar >= MINRVAR && cisreg( type ) ) return ( class );
+ break;
+ }
if( blevel == 1 ) return( PARAM );
else return( AUTO );
if( blevel == 1 ) return( PARAM );
else return( AUTO );