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