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…
	
	Add table
		
		Reference in a new issue