Initial revision
This commit is contained in:
		
							parent
							
								
									24af0db0e5
								
							
						
					
					
						commit
						2ef7ee3efc
					
				
					 1 changed files with 130 additions and 0 deletions
				
			
		
							
								
								
									
										130
									
								
								mach/pdp/cg/peep.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								mach/pdp/cg/peep.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,130 @@ | |||
| #include <stdio.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  * Author: Hans van Staveren | ||||
|  */ | ||||
| 
 | ||||
| char buf[512]; | ||||
| 
 | ||||
| main() { | ||||
| 	register n,sa; | ||||
| 	register char *p; | ||||
| 
 | ||||
| 	sa=0; | ||||
| 	for (;;) { | ||||
| 		getline(buf); | ||||
| 		if (n=stackadjust()) { | ||||
| 			sa += n; | ||||
| 			continue; | ||||
| 		} | ||||
| 		if (nullinstruction()) | ||||
| 			continue; | ||||
| 		if (sa) { | ||||
| 			if (buf[0]=='t' && buf[1]=='s' && buf[2]=='t' && buf[3]==' ') { | ||||
| 				sa -= 2; | ||||
| 				buf[0]='m'; | ||||
| 				buf[1]='o'; | ||||
| 				buf[2]='v'; | ||||
| 				strcat(buf,",(sp)+"); | ||||
| 			} else if (buf[0]=='m' && buf[1]=='o' && buf[2]=='v' && | ||||
| 			    buf[3]==' ' && (p=index(&buf[5],','))!=0 && | ||||
| 			    p[1]=='-' && p[2]=='(' && p[3]=='s') { | ||||
| 				sa -= 2; | ||||
| 				p[1]=' '; | ||||
| 			} | ||||
| 		} | ||||
| 		switch(sa) { | ||||
| 		case 0:break; | ||||
| 		case 2:puts("tst (sp)+");sa=0;break; | ||||
| 		case 4:puts("cmp (sp)+,(sp)+");sa=0;break; | ||||
| 		case 6:puts("add $6.,sp");sa=0;break; | ||||
| 		} | ||||
| 		puts(buf); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| getline(buf) register char *buf; { | ||||
| 	register c; | ||||
| 
 | ||||
| 	while ((c=getchar())==' ' || c=='\t') | ||||
| 		; | ||||
| 	if (c==EOF) | ||||
| 		exit(0); | ||||
| 	do *buf++=c; | ||||
| 	while ((c=getchar())!='\n'); | ||||
| 	*buf=0; | ||||
| } | ||||
| 
 | ||||
| stackadjust() { | ||||
| 
 | ||||
| 	if (buf[0]=='t' && | ||||
| 	    buf[1]=='s' && | ||||
| 	    buf[2]=='t' && | ||||
| 	    buf[3]==' ' && | ||||
| 	    buf[4]=='(' && | ||||
| 	    buf[5]=='s' && | ||||
| 	    buf[6]=='p' && | ||||
| 	    buf[7]==')' && | ||||
| 	    buf[8]=='+') return(2); | ||||
| 	if (buf[0]=='c' && | ||||
| 	    buf[1]=='m' && | ||||
| 	    buf[2]=='p' && | ||||
| 	    buf[3]==' ' && | ||||
| 	    buf[4]=='(' && | ||||
| 	    buf[5]=='s' && | ||||
| 	    buf[6]=='p' && | ||||
| 	    buf[7]==')' && | ||||
| 	    buf[8]=='+' && | ||||
| 	    buf[9]==',' && | ||||
| 	    buf[10]=='(' && | ||||
| 	    buf[11]=='s' && | ||||
| 	    buf[12]=='p' && | ||||
| 	    buf[13]==')' && | ||||
| 	    buf[14]=='+') return(4); | ||||
| 	if (buf[0]=='a' && | ||||
| 	    buf[1]=='d' && | ||||
| 	    buf[2]=='d' && | ||||
| 	    buf[3]==' ' && | ||||
| 	    buf[4]=='$' && | ||||
| 	    buf[5]=='6' && | ||||
| 	    buf[6]=='.' && | ||||
| 	    buf[7]==',' && | ||||
| 	    buf[8]=='s' && | ||||
| 	    buf[9]=='p' && | ||||
| 	    buf[10]==0) return(6); | ||||
| 	return(0); | ||||
| } | ||||
| 
 | ||||
| nullinstruction() { | ||||
| 	register char *p; | ||||
| 
 | ||||
| 	if (buf[4]=='$' && buf[5]=='0' && buf[6]=='.' && buf[7]==',') { | ||||
| 		p=index(buf,'-'); | ||||
| 		if (p!=0 && p[1]=='(') | ||||
| 			return(0); | ||||
| 		p=index(buf,'+'); | ||||
| 		if (p!=0 && p[-1]==')') | ||||
| 			return(0); | ||||
| 		if (buf[0]=='b' && buf[1]=='i' && (buf[2]=='s' || buf[2]=='c')) | ||||
| 			return(1); | ||||
| 		if (buf[0]=='a' && buf[1]=='d' && buf[2]=='d') | ||||
| 			return(1); | ||||
| 		if (buf[0]=='s' && buf[1]=='u' && buf[2]=='b') | ||||
| 			return(1); | ||||
| 	} | ||||
| 	return(0); | ||||
| } | ||||
		Loading…
	
	Add table
		
		Reference in a new issue