*** empty log message ***
This commit is contained in:
		
							parent
							
								
									b5efab645f
								
							
						
					
					
						commit
						6710f21388
					
				
					 2 changed files with 165 additions and 0 deletions
				
			
		
							
								
								
									
										143
									
								
								mach/ns/ncg/mach.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								mach/ns/ncg/mach.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,143 @@
 | 
				
			||||||
 | 
					con_part(sz, w)
 | 
				
			||||||
 | 
						register int	sz;
 | 
				
			||||||
 | 
						word		w;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						while (part_size % sz) part_size++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (part_size == TEM_WSIZE)
 | 
				
			||||||
 | 
							part_flush();
 | 
				
			||||||
 | 
						if (sz == 1 || sz == 2) {
 | 
				
			||||||
 | 
							w &= (sz == 1 ? 0xFF : 0xFFFF);
 | 
				
			||||||
 | 
							w <<= 8 * part_size;
 | 
				
			||||||
 | 
							part_word |= w;
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							assert(sz == 4);
 | 
				
			||||||
 | 
							part_word = w;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						part_size += sz;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					con_mult(sz)
 | 
				
			||||||
 | 
						word	sz;
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (sz != 4)
 | 
				
			||||||
 | 
							fatal("bad icon/ucon size");
 | 
				
			||||||
 | 
						fprintf(codefile,".long\t%s\n",str);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef REGVARS
 | 
				
			||||||
 | 
					full lbytes;
 | 
				
			||||||
 | 
					struct regadm {
 | 
				
			||||||
 | 
						char *ra_str;
 | 
				
			||||||
 | 
						long ra_off;
 | 
				
			||||||
 | 
					} regadm[4];
 | 
				
			||||||
 | 
					int n_regvars;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					regscore(off,size,typ,score,totyp) long off; {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*This function is copied from pdp/ncg
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * This function is full of magic constants.
 | 
				
			||||||
 | 
						 * They are a result of experimentation.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (size != 2)
 | 
				
			||||||
 | 
							return(-1);
 | 
				
			||||||
 | 
						score -= 1;	/* allow for save/restore */
 | 
				
			||||||
 | 
						if (off>=0)
 | 
				
			||||||
 | 
							score -= 2;
 | 
				
			||||||
 | 
						if (typ==reg_pointer)
 | 
				
			||||||
 | 
							score *= 17;
 | 
				
			||||||
 | 
						else if (typ==reg_loop)
 | 
				
			||||||
 | 
							score = 10*score+50;	/* Guestimate */
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							score *= 10;
 | 
				
			||||||
 | 
						return(score);	/* 10 * estimated # of words of profit */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					i_regsave() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						n_regvars=0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					f_regsave(){
 | 
				
			||||||
 | 
						register i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fprintf(codefile, "enter [");
 | 
				
			||||||
 | 
						if (n_regvars>=1){
 | 
				
			||||||
 | 
							fprintf(codefile,"%s",regadm[0].ra_str);
 | 
				
			||||||
 | 
							for (i=1; i<n_regvars; i++)
 | 
				
			||||||
 | 
								fprintf(codefile,",%s",regadm[0].ra_str);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fprintf(codefile, "], %d\n", lbytes);
 | 
				
			||||||
 | 
						for (i=0;i<n_regvars;i++)
 | 
				
			||||||
 | 
							if (regadm[i].ra_off>=0)
 | 
				
			||||||
 | 
								fprintf(codefile, "movd %ld(fp), %s",
 | 
				
			||||||
 | 
								  regadm[i].ra_off, regadm[i].ra_str);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					regsave(regstr,off,size) char *regstr; long off; {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fprintf(codefile,"\t! Local %ld into %s\n",off,regstr);
 | 
				
			||||||
 | 
						regadm[n_regvars].ra_str = regstr;
 | 
				
			||||||
 | 
						regadm[n_regvars].ra_off = off;
 | 
				
			||||||
 | 
						n_regvars++;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					regreturn() {
 | 
				
			||||||
 | 
						register int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fprintf(codefile, "exit [");
 | 
				
			||||||
 | 
						if (n_regvars>=1){
 | 
				
			||||||
 | 
							fprintf(codefile,"%s",regadm[0].ra_str);
 | 
				
			||||||
 | 
							for (i=1; i<n_regvars; i++)
 | 
				
			||||||
 | 
								fprintf(codefile,",%s",regadm[0].ra_str);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fprintf(codefile, "]\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mes(type) word type ; {
 | 
				
			||||||
 | 
						int argt ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch ( (int)type ) {
 | 
				
			||||||
 | 
						case ms_ext :
 | 
				
			||||||
 | 
							for (;;) {
 | 
				
			||||||
 | 
								switch ( argt=getarg(
 | 
				
			||||||
 | 
								    ptyp(sp_cend)|ptyp(sp_pnam)|sym_ptyp) ) {
 | 
				
			||||||
 | 
								case sp_cend :
 | 
				
			||||||
 | 
									return ;
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									strarg(argt) ;
 | 
				
			||||||
 | 
									fprintf(codefile,".define %s\n",argstr) ;
 | 
				
			||||||
 | 
									break ;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						default :
 | 
				
			||||||
 | 
							while ( getarg(any_ptyp) != sp_cend ) ;
 | 
				
			||||||
 | 
							break ;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					prolog(nlocals) full nlocals; {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef REGVARS
 | 
				
			||||||
 | 
						fprintf(codefile, "enter[], %d\n",nlocals);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						lbytes = nlocals;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char *segname[] = {
 | 
				
			||||||
 | 
						".text",
 | 
				
			||||||
 | 
						".data",
 | 
				
			||||||
 | 
						".data",
 | 
				
			||||||
 | 
						".bss"
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					con_float() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fatal("no reals");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										22
									
								
								mach/ns/ncg/mach.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								mach/ns/ncg/mach.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					#define ex_ap(y)        fprintf(codefile,".extern %s\n",y)
 | 
				
			||||||
 | 
					#define in_ap(y)        /* nothing */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define newilb(x)       fprintf(codefile,"%s:\n",x)
 | 
				
			||||||
 | 
					#define newdlb(x)       fprintf(codefile,"%s:\n",x)
 | 
				
			||||||
 | 
					#define dlbdlb(x,y)     fprintf(codefile,"%s = %s\n",x,y)
 | 
				
			||||||
 | 
					#define newlbss(l,x)    fprintf(codefile,"%s:.space\t%d\n",l,x);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define cst_fmt         "%d"
 | 
				
			||||||
 | 
					#define off_fmt         "%d"
 | 
				
			||||||
 | 
					#define ilb_fmt         "I%03x%x"
 | 
				
			||||||
 | 
					#define dlb_fmt         "_%d"
 | 
				
			||||||
 | 
					#define hol_fmt         "hol%d"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define hol_off         "%d+hol%d"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define con_cst(x)      fprintf(codefile,".long\t%d\n",x)
 | 
				
			||||||
 | 
					#define con_ilb(x)      fprintf(codefile,".long\t%s\n",x)
 | 
				
			||||||
 | 
					#define con_dlb(x)      fprintf(codefile,".long\t%s\n",x)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define id_first        '_'
 | 
				
			||||||
 | 
					#define BSS_INIT        0
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue