Changed procedure prolog to use PR* routines.
This commit is contained in:
parent
14a3683f85
commit
5894adfd67
1 changed files with 48 additions and 4 deletions
|
@ -71,7 +71,13 @@ con_float() {
|
||||||
|
|
||||||
#ifdef REGVARS
|
#ifdef REGVARS
|
||||||
|
|
||||||
char Rstring[10] = "RT";
|
char Rstring[10];
|
||||||
|
full lbytes;
|
||||||
|
struct regadm {
|
||||||
|
char *ra_str;
|
||||||
|
long ra_off;
|
||||||
|
} regadm[2];
|
||||||
|
int nregvars;
|
||||||
|
|
||||||
regscore(off,size,typ,score,totyp) long off; {
|
regscore(off,size,typ,score,totyp) long off; {
|
||||||
|
|
||||||
|
@ -91,20 +97,54 @@ regscore(off,size,typ,score,totyp) long off; {
|
||||||
|
|
||||||
i_regsave() {
|
i_regsave() {
|
||||||
|
|
||||||
Rstring[2] = 0;
|
Rstring[0] = 0;
|
||||||
|
nregvars=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
f_regsave() {}
|
f_regsave() {
|
||||||
|
register i;
|
||||||
|
|
||||||
|
if (nregvars==0 || lbytes==0) {
|
||||||
|
#ifdef REGPATCH
|
||||||
|
fprintf(codefile,"mov r2,-(sp)\nmov r4,-(sp)\n");
|
||||||
|
#endif
|
||||||
|
fprintf(codefile,"mov r5,-(sp)\nmov sp,r5\n");
|
||||||
|
if (lbytes == 2)
|
||||||
|
fprintf(codefile,"tst -(sp)\n");
|
||||||
|
else if (lbytes!=0)
|
||||||
|
fprintf(codefile,"sub $0%o,sp\n",lbytes);
|
||||||
|
for (i=0;i<nregvars;i++)
|
||||||
|
fprintf(codefile,"mov %s,-(sp)\n",regadm[i].ra_str);
|
||||||
|
} else {
|
||||||
|
if (lbytes>6) {
|
||||||
|
fprintf(codefile,"mov $0%o,r0\n",lbytes);
|
||||||
|
fprintf(codefile,"jsr r5,PR%s\n",Rstring);
|
||||||
|
} else {
|
||||||
|
fprintf(codefile,"jsr r5,PR%d%s\n",lbytes,Rstring);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i=0;i<nregvars;i++)
|
||||||
|
if (regadm[i].ra_off>=0)
|
||||||
|
fprintf(codefile,"mov 0%lo(r5),%s\n",regadm[i].ra_off,
|
||||||
|
regadm[i].ra_str);
|
||||||
|
}
|
||||||
|
|
||||||
regsave(regstr,off,size) char *regstr; long off; {
|
regsave(regstr,off,size) char *regstr; long off; {
|
||||||
|
|
||||||
fprintf(codefile,"/ Local %ld into %s\n",off,regstr);
|
fprintf(codefile,"/ Local %ld into %s\n",off,regstr);
|
||||||
|
/* commented away
|
||||||
#ifndef REGPATCH
|
#ifndef REGPATCH
|
||||||
fprintf(codefile,"mov %s,-(sp)\n",regstr);
|
fprintf(codefile,"mov %s,-(sp)\n",regstr);
|
||||||
#endif
|
#endif
|
||||||
strcat(Rstring,regstr);
|
strcat(Rstring,regstr);
|
||||||
if (off>=0)
|
if (off>=0)
|
||||||
fprintf(codefile,"mov 0%lo(r5),%s\n",off,regstr);
|
fprintf(codefile,"mov 0%lo(r5),%s\n",off,regstr);
|
||||||
|
end of commented away */
|
||||||
|
|
||||||
|
strcat(Rstring,regstr);
|
||||||
|
regadm[nregvars].ra_str = regstr;
|
||||||
|
regadm[nregvars].ra_off = off;
|
||||||
|
nregvars++;
|
||||||
}
|
}
|
||||||
|
|
||||||
regreturn() {
|
regreturn() {
|
||||||
|
@ -112,7 +152,7 @@ regreturn() {
|
||||||
#ifdef REGPATCH
|
#ifdef REGPATCH
|
||||||
fprintf(codefile,"jmp eret\n");
|
fprintf(codefile,"jmp eret\n");
|
||||||
#else
|
#else
|
||||||
fprintf(codefile,"jmp %s\n",Rstring);
|
fprintf(codefile,"jmp RT%s\n",Rstring);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,6 +160,7 @@ regreturn() {
|
||||||
|
|
||||||
prolog(nlocals) full nlocals; {
|
prolog(nlocals) full nlocals; {
|
||||||
|
|
||||||
|
#ifndef REGVARS
|
||||||
#ifdef REGPATCH
|
#ifdef REGPATCH
|
||||||
fprintf(codefile,"mov r2,-(sp)\nmov r4,-(sp)\n");
|
fprintf(codefile,"mov r2,-(sp)\nmov r4,-(sp)\n");
|
||||||
#endif
|
#endif
|
||||||
|
@ -130,6 +171,9 @@ prolog(nlocals) full nlocals; {
|
||||||
fprintf(codefile,"tst -(sp)\n");
|
fprintf(codefile,"tst -(sp)\n");
|
||||||
else
|
else
|
||||||
fprintf(codefile,"sub $0%o,sp\n",nlocals);
|
fprintf(codefile,"sub $0%o,sp\n",nlocals);
|
||||||
|
#else
|
||||||
|
lbytes = nlocals;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
dlbdlb(as,ls) string as,ls; {
|
dlbdlb(as,ls) string as,ls; {
|
||||||
|
|
Loading…
Reference in a new issue