Added floating point stuff
This commit is contained in:
		
							parent
							
								
									3627b9a16c
								
							
						
					
					
						commit
						9cc60526b7
					
				
					 3 changed files with 199 additions and 192 deletions
				
			
		|  | @ -3,5 +3,4 @@ | |||
|  * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * See the copyright notice in the ACK home directory, in the file "Copyright". | ||||
|  */ | ||||
| /* #define FPPSIM	/* define when using fpp simulator */ | ||||
| /* #define IEEEFLOAT	/* define if it must use IEEE format */ | ||||
| /* #define NOFLOAT	/* define when not using fpp simulator */ | ||||
|  |  | |||
|  | @ -14,17 +14,6 @@ static char rcsid[] = "$Header$"; | |||
| 
 | ||||
| #include "fppsim.h" | ||||
| 
 | ||||
| #ifdef IEEEFLOAT | ||||
| #include "FP.h" | ||||
| #include "trp.c" | ||||
| #include "fcompact.c" | ||||
| #include "dbl_extract.c" | ||||
| #ifdef	PRT_EXP_DEBUG | ||||
| #include "prt_extend.c" | ||||
| #endif | ||||
| #endif IEEEFLOAT | ||||
| 
 | ||||
| 
 | ||||
| con_part(sz,w) register sz; word w; { | ||||
| 
 | ||||
| 	while (part_size % sz) | ||||
|  | @ -50,70 +39,124 @@ con_mult(sz) word sz; { | |||
| 	fprintf(codefile,".data4 %s\n",str); | ||||
| } | ||||
| 
 | ||||
| #ifdef IEEEFLOAT | ||||
| dbl_adjust(fl) | ||||
| my_dbl	*fl; | ||||
| { | ||||
| 	EXTEND	buf; | ||||
| #ifdef NOFLOAT | ||||
| con_float() { | ||||
| 
 | ||||
| 		/* special routine to strip SGL_BIAS */ | ||||
| 	dbl_extract(fl,&buf); | ||||
| 		/* standard routine to add DBL_BIAS */ | ||||
| 	fcompact(&buf,fl,sizeof(double)); | ||||
| static int been_here; | ||||
| 	if (argval != 4 && argval != 8) | ||||
| 		fatal("bad fcon size"); | ||||
| 	fputs(".data4\t", codefile); | ||||
| 	if (argval == 8) | ||||
| 		fputs("0,", codefile); | ||||
| 	fputs("0 !dummy float\n", codefile); | ||||
| 	if ( !been_here++) | ||||
| 	{ | ||||
| 	fputs("Warning : dummy float-constant(s)\n", stderr); | ||||
| 	} | ||||
| } | ||||
| #endif IEEEFLOAT | ||||
| #else | ||||
| #define IEEEFLOAT | ||||
| 
 | ||||
| con_float() | ||||
| { | ||||
| 	register word	sz; | ||||
| 	register long	*l; | ||||
| #ifdef FPPSIM | ||||
| con_float() { | ||||
| 	double f; | ||||
| 	double atof(); | ||||
| 	float fl; | ||||
| 	int i; | ||||
| #ifndef OWNFLOAT | ||||
| 	double f1; | ||||
| 	double frexp(), modf(); | ||||
| 	int j; | ||||
| 	int sign = 0; | ||||
| 	int fraction[4] ; | ||||
| #else OWNFLOAT | ||||
| 	char *p; | ||||
| #endif OWNFLOAT | ||||
| 
 | ||||
| 	if (argval!= 4 && argval!= 8)	{ | ||||
| 		fprintf(stderr,"float constant size = %d\n",argval); | ||||
| 		fatal("bad fcon size"); | ||||
| 	} | ||||
| 	fprintf(codefile,"!float %s sz %d\n", str, argval); | ||||
| 	f = atof(str); | ||||
| #ifdef OWNFLOAT | ||||
| 	if (argval == 4) { | ||||
| 		fl = f; | ||||
| 		p = (char *) &fl; | ||||
| 	} | ||||
| 	else { | ||||
| 		p = (char *) &f; | ||||
| 	} | ||||
| 	fprintf(codefile, ".data1 0%o", *p++ & 0377); | ||||
| 	for (i = argval-1; i; i--) { | ||||
| 		fprintf(codefile,",0%o", *p++ & 0377); | ||||
| 	} | ||||
| #else OWNFLOAT | ||||
| 	f = frexp(f, &i); | ||||
| 	if (f < 0) { | ||||
| 		f = -f; | ||||
| 		sign = 1; | ||||
| 	} | ||||
| 	if (f == 0) { | ||||
| 		if (argval == 8) fprintf(codefile, ".data2 0, 0\n"); | ||||
| 		fprintf(codefile, ".data2 0, 0\n"); | ||||
| 		return; | ||||
| 	} | ||||
| 	while (f < 0.5) { | ||||
| 		f += f; | ||||
| 		i --; | ||||
| 	} | ||||
| 	f = modf(2 * f, &f1); /* hidden bit */ | ||||
| #ifdef IEEEFLOAT | ||||
| 	register my_dbl	*md; | ||||
| 	if (argval == 4) { | ||||
| #endif IEEEFLOAT | ||||
| 		 double	d, atof(); | ||||
| #else not FPPSIM | ||||
| 	static int been_here; | ||||
| #endif | ||||
| 
 | ||||
| 	sz = argval; | ||||
| 	if (sz!= 4 && sz!= 8) { | ||||
| 		char	mesg[128]; | ||||
| 		sprintf(mesg,"con_float(): bad fcon size %d %ld\nstr: %s\n\0", | ||||
| 				sz,sz,str); | ||||
| 		fatal(mesg); | ||||
| 	} | ||||
| 
 | ||||
| #ifdef FPPSIM | ||||
| 	d = atof(str); | ||||
| 	l = (long *) &d; | ||||
| 
 | ||||
| 		i = (i + 128) & 0377; | ||||
| 		fraction[0] = (sign << 15) | (i << 7); | ||||
| 		for (j = 6; j>= 0; j--) { | ||||
| 			if (f >= 0.5) fraction[0] |= (1 << j); | ||||
| 			f = modf(2*f, &f1); | ||||
| 		} | ||||
| #ifdef IEEEFLOAT | ||||
| 	if (sz == 8)	{ | ||||
| 		/* ATOF() RETURNS THE PROPER FORMAT FOR A FLOAT */ | ||||
| 		/* BUT NOT FOR A DOUBLE. CORRECT THE FORMAT.	*/ | ||||
| 		md = (my_dbl *) &d; | ||||
| 		dbl_adjust(md); | ||||
| 	} | ||||
| 	else { | ||||
| 		i = (i + 1024) & 03777; | ||||
| 		fraction[0] = (sign << 15) | (i << 4); | ||||
| 		for (j = 3; j>= 0; j--) { | ||||
| 			if (f >= 0.5) fraction[0] |= (1 << j); | ||||
| 			f = modf(2*f, &f1); | ||||
| 		} | ||||
| 	} | ||||
| #endif IEEEFLOAT | ||||
| 
 | ||||
| 	while ( sz ) { | ||||
| 		fprintf(codefile,"\t.data2 0x%x,0x%x !float test %s\n", | ||||
| 			(int)(*l)&0xFFFF,(int)(*l>>16)&0xFFFF,str); | ||||
| 		sz -=4 ; | ||||
| 		l++; | ||||
| 	for (i = 1; i < argval / 2; i++) { | ||||
| 		fraction[i] = 0; | ||||
| 		for (j = 15; j>= 0; j--) { | ||||
| 			if (f >= 0.5) fraction[i] |= (1 << j); | ||||
| 			f = modf(2*f, &f1); | ||||
| 		} | ||||
| 	} | ||||
| #else not FPPSIM | ||||
| 	if (! been_here) { | ||||
| 		been_here = 1; | ||||
| 		fprintf(stderr,"warning: dummy floating constant(s)\n"); | ||||
| 	if (f >= 0.5) { | ||||
| 		for (i = argval/2 - 1; i >= 0; i--) { | ||||
| 			for (j = 0; j < 16; j++) { | ||||
| 				if (fraction[i] & (1 << j)) { | ||||
| 					fraction[i] &= ~(1 << j); | ||||
| 				} | ||||
| 				else { | ||||
| 					fraction[i] |= (1 << j); | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| 			if (j != 16) break; | ||||
| 		} | ||||
| 	} | ||||
| 	while (sz) { | ||||
| 		fprintf(codefile,"\t.data4 0 !dummy float\n"); | ||||
| 		sz -= 4; | ||||
| 	for (i = 0; i < argval/2; i++) { | ||||
| 		fprintf(codefile, | ||||
| 			i != 0 ? ", 0%o, 0%o" : ".data1 0%o, 0%o",  | ||||
| 			(fraction[i]>>8)&0377, | ||||
| 			fraction[i]&0377); | ||||
| 	} | ||||
| #endif | ||||
| #endif OWNFLOAT | ||||
| 	putc('\n', codefile); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #ifdef REGVARS | ||||
| 
 | ||||
|  |  | |||
|  | @ -30,7 +30,6 @@ | |||
|  */ | ||||
| 
 | ||||
| #define REGVARS | ||||
| #include "fppsim.h" | ||||
| 
 | ||||
| EM_WSIZE = 2 | ||||
| EM_PSIZE = 4 | ||||
|  | @ -1011,60 +1010,31 @@ adu | | | | adi $1 | | |||
| sbu | | | | sbi $1 | | ||||
| slu | | | | sli $1 | | ||||
| 
 | ||||
| #ifdef FPPSIM | ||||
| /* Floating point stuff */ | ||||
| adf $1==4	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .adf4"		    | | asp 8 lfr 4 | | ||||
| adf $1==8	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .adf8"		    | | asp 16 lfr 4 loi 8 | | ||||
| sbf $1==4	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .sbf4"		    | | asp 8 lfr 4 | | ||||
| sbf $1==8	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .sbf8"		    | | asp 16 lfr 4 loi 8 | | ||||
| mlf $1==4	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .mlf4"		    | | asp 8 lfr 4 | | ||||
| mlf $1==8	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .mlf8"		    | | asp 16 lfr 4 loi 8 | | ||||
| dvf $1==4	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .dvf4"		    | | asp 8 lfr 4 | | ||||
| dvf $1==8	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .dvf8"		    | | asp 16 lfr 4 loi 8 | | ||||
| ngf $1==4	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .ngf4"		    | | asp 4 lfr 4 | | ||||
| ngf $1==8	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .ngf8"		    |  |  asp 8 lfr 4 loi 8 | | ||||
| fif $1==4	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .fif4"		    |  | asp 8 lfr 4 loi 8 | | ||||
| fif $1==8	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .fif8"		    |  | asp 16 lfr 4 loi 16 | | ||||
| adf $1==4       | | | | cal ".adf4" asp 4 | | ||||
| adf $1==8       | | | | cal ".adf8" asp 8 | | ||||
| sbf $1==4       | | | | cal ".sbf4" asp 4 | | ||||
| sbf $1==8       | | | | cal ".sbf8" asp 8 | | ||||
| mlf $1==4       | | | | cal ".mlf4" asp 4 | | ||||
| mlf $1==8       | | | | cal ".mlf8" asp 8 | | ||||
| dvf $1==4       | | | | cal ".dvf4" asp 4 | | ||||
| dvf $1==8       | | | | cal ".dvf8" asp 8 | | ||||
| ngf $1==4       | | | | cal ".ngf4" | | ||||
| ngf $1==8       | | | | cal ".ngf8" | | ||||
| fif $1==4       | | | | cal ".fif4" | | ||||
| fif $1==8       | | | | cal ".fif8" | | ||||
| fef $1==4	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .fef4"		    |  |  asp 4 lfr 4 loi 8 | | ||||
| 			"move.l (sp)+,d0" | ||||
| 			"clr.w -(sp)" | ||||
| 			"move.l d0,-(sp)"	| | cal ".fef4" | | ||||
| fef $1==8	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .fef8"		    |  |  asp 8 lfr 4 loi 12 | | ||||
| #else not FPPSIM | ||||
| fef		| | | | loc 18 trp | | ||||
| fif		| | | | loc 18 trp | | ||||
| ngf		| | | | loc 18 trp | | ||||
| adf		| | | | loc 18 trp | | ||||
| sbf		| | | | loc 18 trp | | ||||
| mlf		| | | | loc 18 trp | | ||||
| dvf		| | | | loc 18 trp | | ||||
| #endif FPPSIM | ||||
| 
 | ||||
| 			"move.l (sp)+,d0" | ||||
| 			"move.l (sp)+,d1" | ||||
| 			"clr.w -(sp)" | ||||
| 			"move.l d1,-(sp)" | ||||
| 			"move.l d0,-(sp)"	| | cal ".fef8" | | ||||
| 
 | ||||
| 
 | ||||
| /* G R O U P  VI :   P O I N T E R  A R I T H M E T I C  */ | ||||
|  | @ -1373,97 +1343,93 @@ loc loc loc cuu $2 == 1 && $3 == 4 && $1 > 0 && $1 < 128 | | | | ldc $1 | | |||
| 
 | ||||
| /* Floating point stuff */ | ||||
| 
 | ||||
| #ifdef FPPSYM | ||||
| loc loc cif	$1==2 && $2==4 | | | ||||
| /* | ||||
|  * Floating point stuff | ||||
|  * | ||||
|  * Conversion | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| loc loc cif	$1==2 && $2==4 | | | | loc $1 cal ".cif4" | | ||||
| loc loc cif	$1==2 && $2==8 | ANY | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"jsr .cif4"		      | | asp 4 lfr 4 | | ||||
| loc loc cif	$1==2 && $2==8 | | | ||||
| 			"clr.l	-(sp)" | ||||
| 			"move.w %[1],-(sp)" | ||||
| 						| | loc $1 cal ".cif8" | | ||||
| loc loc cif	$1==4 && $2==4 | | | | loc $1 cal ".cif4" asp 2 | | ||||
| loc loc cif	$1==4 && $2==8 | ANY4 | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"jsr .cif8"		  | | asp 4 lfr 4 loi 8 | | ||||
| loc loc cif	$1==4 && $2==4 | | | ||||
| 			"clr.w	-(sp)" | ||||
| 			"move.l %[1],-(sp)" | ||||
| 						| | loc $1 cal ".cif8" | | ||||
| loc loc cuf	$1==2 && $2==4 | | | | loc $1 cal ".cuf4" | | ||||
| loc loc cuf	$1==2 && $2==8 | ANY | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"jsr .cif4"		      | | asp 6 lfr 4 | | ||||
| loc loc cif	$1==4 && $2==8 | | | ||||
| 			"clr.l	-(sp)" | ||||
| 			"move.w %[1],-(sp)" | ||||
| 						| | loc $1 cal ".cuf8" | | ||||
| loc loc cuf	$1==4 && $2==4 | | | | loc $1 cal ".cuf4" asp 2 | | ||||
| loc loc cuf	$1==4 && $2==8 | ANY4 | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"jsr .cif8"		  | | asp 6 lfr 4 loi 8 | | ||||
| loc loc cuf	$1==2 && $2==4 | | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"jsr .cuf4"		      | | asp 4 lfr 4 | | ||||
| loc loc cuf	$1==2 && $2==8 | | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"jsr .cuf8"		  | | asp 4 lfr 4 loi 8 | | ||||
| loc loc cuf	$1==4 && $2==4 | | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"jsr .cuf4"		      | | asp 6 lfr 4 | | ||||
| loc loc cuf	$1==4 && $2==8 | | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"jsr .cuf8"		  | | asp 6 lfr 4 loi 8 | | ||||
| 			"clr.w	-(sp)" | ||||
| 			"move.l %[1],-(sp)" | ||||
| 						| | loc $1 cal ".cuf8" | | ||||
| loc loc cfi	$1==4 && $2==2 | | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"move.w #$2,-(sp)" | ||||
| 			"jsr .cfi"		      | | asp 8 lfr 2 | | ||||
| 						| | cal ".cfi" asp 6 | | ||||
| loc loc cfi	$1==4 && $2==4 | | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"move.w #$2,-(sp)" | ||||
| 			"jsr .cfi"		      | | asp 8 lfr 4 | | ||||
| 						| | cal ".cfi" asp 4 | | ||||
| loc loc cfi	$1==8 && $2==2 | | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"move.w #$2,-(sp)" | ||||
| 			"jsr .cfi"		      | | asp 12 lfr 2 | | ||||
| 						| | cal ".cfi" asp 10 | | ||||
| loc loc cfi	$1==8 && $2==4 | | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"move.w #$2,-(sp)" | ||||
| 			"jsr .cfi"		      | | asp 12 lfr 4 | | ||||
| 						| | cal ".cfi" asp 8 | | ||||
| loc loc cfu	$1==4 && $2==2 | | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"move.w #$2,-(sp)" | ||||
| 			"jsr .cfu"		      | | asp 8 lfr 2 | | ||||
| 						| | cal ".cfu" asp 6 | | ||||
| loc loc cfu	$1==4 && $2==4 | | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"move.w #$2,-(sp)" | ||||
| 			"jsr .cfu"		      | | asp 8 lfr 4 | | ||||
| 						| | cal ".cfu" asp 4 | | ||||
| loc loc cfu	$1==8 && $2==2 | | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"move.w #$2,-(sp)" | ||||
| 			"jsr .cfu"		      | | asp 12 lfr 2 | | ||||
| 						| | cal ".cfu" asp 10 | | ||||
| loc loc cfu	$1==8 && $2==4 | | | ||||
| 			remove(ALL) | ||||
| 			"move.w #$1,-(sp)" | ||||
| 			"move.w #$2,-(sp)" | ||||
| 			"jsr .cfu"		      | | asp 12 lfr 4 | | ||||
| 						| | cal ".cfu" asp 8 | | ||||
| loc loc cff	$1==8 && $2==4 | | | ||||
| 			remove(ALL) | ||||
| 			"jsr .cff4"		      | | asp 8 lfr 4 | | ||||
| 						| | cal ".cff4" asp 4 | | ||||
| loc loc cff	$1==4 && $2==8 | ANY4 | | ||||
| 			remove(ALL) | ||||
| 			"clr.l -(sp)" | ||||
| 			"move.l %[1],-(sp)"	| | cal ".cff8" | | ||||
| loc loc cff	$1==4 && $2==8 | | | ||||
| 			remove(ALL) | ||||
| 			"jsr .cff8"		| | asp 4 lfr 4 loi 8 | | ||||
| #else not FPPSIM | ||||
| cif		| | | | loc 18 trp | | ||||
| cfi		| | | | loc 18 trp | | ||||
| cuf		| | | | loc 18 trp | | ||||
| cfu		| | | | loc 18 trp | | ||||
| cff		| | | | loc 18 trp | | ||||
| #endif FPPSIM | ||||
| 
 | ||||
| 			"move.l (sp),ax" | ||||
| 			"clr.l -(sp)" | ||||
| 			"move.l ax,(sp)"	| | cal ".cff8" | | ||||
| 
 | ||||
| /* G R O U P  IX :   L O G I C A L  */ | ||||
| 
 | ||||
| and defined($1) && $1 == 2 | ANY DATASCR | | ||||
| and $1 == 2 | ANY DATASCR | | ||||
| 				"and %[1],%[2]" | ||||
| 				setcc(%[2]) | ||||
| 				erase(%[2])	| %[2] | | (2,2)+%[1] | ||||
|  | @ -1492,7 +1458,7 @@ lil and sil $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG + IMMEDIATE | | |||
| /* Note that the contents of an address register may not be used as | ||||
|  * operand of a and, or etc. instruction | ||||
|  */ | ||||
| and defined($1) && $1 == 4   | ANY4-ADDREG DATASCR4 | | ||||
| and $1 == 4   | ANY4-ADDREG DATASCR4 | | ||||
| 				"and.l %[1],%[2]" | ||||
| 				erase(%[2]) | ||||
| 				setcc(%[2])		| %[2] | | (2,3)+%[1] | ||||
|  | @ -1512,7 +1478,7 @@ ldl and sdl $1 == $3 && $2 == 4 && inreg($1) < 2 | DATAREG4+EXTENDED4+DOUBLE | | |||
| lde and sde $1 == $3 && $2 == 4 | DATAREG4+EXTENDED4+DOUBLE | | ||||
| 				remove(MEM_ALL) | ||||
| 				"and.l %[1],$1"	| | | | ||||
| and defined($1) && $1 > 4    | STACK | | ||||
| and $1 > 4    | STACK | | ||||
| 				allocate(DATAREG4,ADDREG,DATAREG) | ||||
| 				"move.l #$1/2-1,%[a]" | ||||
| 				"move.l sp,%[b]" | ||||
|  | @ -1523,15 +1489,15 @@ and defined($1) && $1 > 4    | STACK | | |||
| 				"dbf %[a],1b"		| | | | ||||
| and !defined($1)	      | DATASCR STACK | | ||||
| 				allocate(ADDREG,DATAREG) | ||||
| 				"move.l sp,%[a]" | ||||
| 				"sub.w #1,%[1]" | ||||
| 				"lea 0(sp,%[1]),%[a]" | ||||
| 				"asr #1,%[1]" | ||||
| 				"sub.w #1,%[1]" | ||||
| 				"1:" | ||||
| 				"move.w (sp)+,%[b]" | ||||
| 				"and %[b],(%[a])+" | ||||
| 				"dbf %[1],1b" | ||||
| 				erase(%[1])		| | | | ||||
| ior defined($1) && $1 == 2 | ANY DATASCR | | ||||
| ior $1 == 2 | ANY DATASCR | | ||||
| 				"or %[1],%[2]" | ||||
| 				erase(%[2]) | ||||
| 				setcc(%[2])	| %[2] | | (2,2)+%[1] | ||||
|  | @ -1556,7 +1522,7 @@ lil ior sil $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG+IMMEDIATE | | |||
| loe loc ior ste $3 == 2 && $1 == $4 | | | ||||
| 				remove(MEM_ALL) | ||||
| 				"or.w #$2,$1"		| | |	(7,11) | ||||
| ior defined($1) && $1 == 4   | ANY4-ADDREG DATASCR4 | | ||||
| ior $1 == 4   | ANY4-ADDREG DATASCR4 | | ||||
| 				"or.l %[1],%[2]" | ||||
| 				erase(%[2]) | ||||
| 				setcc(%[2])		| %[2] | |(2,3)+%[1] | ||||
|  | @ -1576,7 +1542,7 @@ ldl ior sdl $1 == $3 && $2 == 4 && inreg($1) < 2 | DATAREG4+EXTENDED4+DOUBLE | | |||
| lde ior sde $1 == $3 && $2 == 4 | DATAREG4+EXTENDED4+DOUBLE | | ||||
| 				remove(MEM_ALL) | ||||
| 				"or.l %[1],$1"	| | | | ||||
| ior defined($1) && $1 > 4    | STACK | | ||||
| ior $1 > 4    | STACK | | ||||
| 				allocate(DATAREG4,ADDREG,DATAREG) | ||||
| 				"move.l #$1/2-1,%[a]" | ||||
| 				"move.l sp,%[b]" | ||||
|  | @ -1587,15 +1553,15 @@ ior defined($1) && $1 > 4    | STACK | | |||
| 				"dbf %[a],1b"		| | | | ||||
| ior !defined($1)	      | DATASCR STACK | | ||||
| 				allocate(ADDREG,DATAREG) | ||||
| 				"move.l sp,%[a]" | ||||
| 				"sub.w #1,%[1]" | ||||
| 				"lea 0(sp,%[1]),%[a]" | ||||
| 				"asr #1,%[1]" | ||||
| 				"sub.w #1,%[1]" | ||||
| 				"1:" | ||||
| 				"move.w (sp)+,%[b]" | ||||
| 				"or %[b],(%[a])+" | ||||
| 				"dbf %[1],1b" | ||||
| 				erase(%[1])		| | | | ||||
| xor defined($1) && $1 == 2 | DATAREG DATASCR | | ||||
| xor $1 == 2 | DATAREG DATASCR | | ||||
| 				"eor %[1],%[2]" | ||||
| 				erase(%[2]) | ||||
| 				setcc(%[2])	| %[2] | | (2,2)+%[1] | ||||
|  | @ -1623,7 +1589,7 @@ lil xor sil $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG+IMMEDIATE | | |||
| 				allocate(ADDREG={DISPL4,LB,$1}) | ||||
| 				remove(MEM_ALL) | ||||
| 				"eor.w %[1],(%[a])"	| | | | ||||
| xor defined($1) && $1 == 4   | DATAREG4+EXTENDED4 DATASCR4 | | ||||
| xor $1 == 4   | DATAREG4+EXTENDED4 DATASCR4 | | ||||
| 				"eor.l %[1],%[2]" | ||||
| 				erase(%[2]) | ||||
| 				setcc(%[2])		| %[2] | | (2,3)+%[1] | ||||
|  | @ -1643,7 +1609,7 @@ ldl xor sdl $1 == $3 && $2 == 4 && inreg($1) < 2 | DATAREG4+EXTENDED4+DOUBLE | | |||
| lde xor sde $1 == $3 && $2 == 4 | DATAREG4+EXTENDED4+DOUBLE | | ||||
| 				remove(MEM_ALL) | ||||
| 				"eor.l %[1],$1"	| | | | ||||
| xor defined($1) && $1 > 4    | STACK | | ||||
| xor $1 > 4    | STACK | | ||||
| 				allocate(DATAREG4,ADDREG,DATAREG) | ||||
| 				"move.l #$1/2-1,%[a]" | ||||
| 				"move.l sp,%[b]" | ||||
|  | @ -1654,46 +1620,46 @@ xor defined($1) && $1 > 4    | STACK | | |||
| 				"dbf %[a],1b"		| | | | ||||
| xor !defined($1)	      | DATASCR STACK | | ||||
| 				allocate(ADDREG,DATAREG) | ||||
| 				"move.l sp,%[a]" | ||||
| 				"sub.w #1,%[1]" | ||||
| 				"lea 0(sp,%[1]),%[a]" | ||||
| 				"asr #1,%[1]" | ||||
| 				"sub.w #1,%[1]" | ||||
| 				"1:" | ||||
| 				"move.w (sp)+,%[b]" | ||||
| 				"eor %[b],(%[a])+" | ||||
| 				"dbf %[1],1b" | ||||
| 				erase(%[1])		| | | | ||||
| com defined($1) && $1 == 2 | DATASCR |	"not %[1]" | ||||
| com $1 == 2 | DATASCR |	"not %[1]" | ||||
| 					erase(%[1]) | ||||
| 					setcc(%[1])	| %[1] | | | ||||
| com defined($1) && $1 == 4 | DATASCR4 |	"not.l %[1]" | ||||
| com $1 == 4 | DATASCR4 |	"not.l %[1]" | ||||
| 					erase(%[1]) | ||||
| 					setcc(%[1])	| %[1] | | | ||||
| com defined($1) && $1 > 4  | STACK |	allocate(DATAREG4,ADDREG) | ||||
| com $1 > 4  | STACK |	allocate(DATAREG4,ADDREG) | ||||
| 					"move.l #$1/2-1,%[a]" | ||||
| 					"move.l sp,%[b]" | ||||
| 					"1:" | ||||
| 					"not (%[b])+" | ||||
| 					"dbf %[a],1b"	| | | | ||||
| com !defined($1) |  DATASCR STACK |	allocate(ADDREG) | ||||
| 					"sub.w #1,%[1]" | ||||
| 					"asr #1,%[1]" | ||||
| 					"sub.w #1,%[1]" | ||||
| 					"move.w sp,%[a]" | ||||
| 					"1:" | ||||
| 					"not (%[a])+" | ||||
| 					"dbf %[1],1b"	| | | | ||||
| rol defined($1) && $1 == 2 | DATAREG DATASCR | | ||||
| rol $1 == 2 | DATAREG DATASCR | | ||||
| 					"rol %[1],%[2]" | ||||
| 					erase(%[2]) | ||||
| 					setcc(%[2])	| %[2] | | | ||||
| rol defined($1) && $1 == 4 | DATAREG DATASCR4 | | ||||
| rol $1 == 4 | DATAREG DATASCR4 | | ||||
| 					"rol.l %[1],%[2]" | ||||
| 					erase(%[2]) | ||||
| 					setcc(%[2])	| %[2] | | | ||||
| ror defined($1) && $1 == 2 | DATAREG DATASCR | | ||||
| ror $1 == 2 | DATAREG DATASCR | | ||||
| 					"ror %[1],%[2]" | ||||
| 					erase(%[2]) | ||||
| 					setcc(%[2])	| %[2] | | | ||||
| ror defined($1) && $1 == 4 | DATAREG DATASCR4 | | ||||
| ror $1 == 4 | DATAREG DATASCR4 | | ||||
| 					"ror.l %[1],%[2]" | ||||
| 					erase(%[2]) | ||||
| 					setcc(%[2])	| %[2] | | | ||||
|  | @ -1842,18 +1808,17 @@ cms !defined($1) | ANY |	remove(ALL) | |||
| cmp | |				remove(ALL) | ||||
| 				"jsr .cmp" | ||||
| 						| D1 | | | ||||
| /* floating point */ | ||||
| /* | ||||
|  * Floating point | ||||
|  * Comparision | ||||
|  */ | ||||
| 
 | ||||
| #ifdef FPPSIM | ||||
| cmf $1==4	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .cmf4"		       | | asp 8 lfr 2 | | ||||
| 					       | | cal ".cmf4" asp 8 lfr 2 | | ||||
| cmf $1==8	| | | ||||
| 			remove(ALL) | ||||
| 			"jsr .cmf8"		       | | asp 16 lfr 2 | | ||||
| #else | ||||
| cmf		| | | | loc 18 trp | | ||||
| #endif | ||||
| 					       | | cal ".cmf8" asp 16 lfr 2 | | ||||
| 
 | ||||
| cmi tlt and $1==2 && $3==2 | ANY DATAREG DATASCR | | ||||
| 				"cmp %[1],%[2]" | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue