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