floating point stuff added
This commit is contained in:
parent
022cb596be
commit
ca9a6feeb0
2 changed files with 195 additions and 32 deletions
|
@ -23,6 +23,19 @@ static char rcsid[] = "$Header$";
|
||||||
* machine dependent back end routines for the Motorola 68000
|
* machine dependent back end routines for the Motorola 68000
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define IEEEFLOAT
|
||||||
|
|
||||||
|
#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)
|
||||||
|
@ -48,18 +61,53 @@ con_mult(sz) word sz; {
|
||||||
fprintf(codefile,".long %s\n",str);
|
fprintf(codefile,".long %s\n",str);
|
||||||
}
|
}
|
||||||
|
|
||||||
con_float() {
|
#ifdef IEEEFLOAT
|
||||||
|
dbl_adjust(fl)
|
||||||
static int been_here;
|
my_dbl *fl;
|
||||||
if (argval != 4 && argval != 8)
|
|
||||||
fatal("bad fcon size");
|
|
||||||
fprintf(codefile,".long\t");
|
|
||||||
if (argval == 8)
|
|
||||||
fprintf(codefile,"F_DUM,");
|
|
||||||
fprintf(codefile,"F_DUM\n");
|
|
||||||
if ( !been_here++)
|
|
||||||
{
|
{
|
||||||
fprintf(stderr,"Warning : dummy float-constant(s)\n");
|
EXTEND buf;
|
||||||
|
|
||||||
|
/* special routine to strip SGL_BIAS */
|
||||||
|
dbl_extract(fl,&buf);
|
||||||
|
/* standard routine to add DBL_BIAS */
|
||||||
|
fcompact(&buf,fl,sizeof(double));
|
||||||
|
}
|
||||||
|
#endif IEEEFLOAT
|
||||||
|
|
||||||
|
con_float()
|
||||||
|
{
|
||||||
|
register word sz;
|
||||||
|
register long *l;
|
||||||
|
#ifdef IEEEFLOAT
|
||||||
|
register my_dbl *md;
|
||||||
|
#endif IEEEFLOAT
|
||||||
|
double d;
|
||||||
|
char mesg[128];
|
||||||
|
|
||||||
|
sz = argval;
|
||||||
|
if (sz!= 4 && sz!= 8) {
|
||||||
|
sprintf(mesg,"con_float(): bad fcon size %d %D\nstr: %s\n\0",
|
||||||
|
sz,sz,str);
|
||||||
|
fatal(mesg);
|
||||||
|
}
|
||||||
|
|
||||||
|
d = atof(str);
|
||||||
|
l = (long *) &d;
|
||||||
|
|
||||||
|
#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);
|
||||||
|
}
|
||||||
|
#endif IEEEFLOAT
|
||||||
|
|
||||||
|
while ( sz ) {
|
||||||
|
fprintf(codefile,"\t.word 0x%x,0x%x !float test %s\n",
|
||||||
|
(int)(*l)&0xFFFF,(int)(*l>>16)&0xFFFF,str);
|
||||||
|
sz -=4 ;
|
||||||
|
l++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1035,6 +1035,50 @@ adu | | | | adi $1 |
|
||||||
sbu | | | | sbi $1 |
|
sbu | | | | sbi $1 |
|
||||||
slu | | | | sli $1 |
|
slu | | | | sli $1 |
|
||||||
|
|
||||||
|
/* 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 16 lfr 4 loi 8 |
|
||||||
|
fif $1==4 | |
|
||||||
|
remove(ALL)
|
||||||
|
"jsr .fif4" | | asp 16 lfr 4 loi 8 |
|
||||||
|
fif $1==8 | |
|
||||||
|
remove(ALL)
|
||||||
|
"jsr .fif8" | | asp 16 lfr 4 loi 16 |
|
||||||
|
fef $1==4 | |
|
||||||
|
remove(ALL)
|
||||||
|
"jsr .fef4" | | asp 4 lfr 4 loi 8 |
|
||||||
|
fef $1==8 | |
|
||||||
|
remove(ALL)
|
||||||
|
"jsr .fef8" | | asp 8 lfr 4 loi 12 |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* 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 */
|
||||||
|
@ -1249,6 +1293,7 @@ zer $1 > 12 | | remove(ALL)
|
||||||
"1:"
|
"1:"
|
||||||
"clr -(sp)"
|
"clr -(sp)"
|
||||||
"dbf %[a],1b" | | |
|
"dbf %[a],1b" | | |
|
||||||
|
zrf | | | | zer $1 |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1298,6 +1343,88 @@ loc loc ciu $1==4 && $2==2 | DATAREG4 | | %[1.1] | |
|
||||||
loc loc cui $1==4 && $2==2 | DATAREG4 | | %[1.1] | |
|
loc loc cui $1==4 && $2==2 | DATAREG4 | | %[1.1] | |
|
||||||
... | ANY | | | |
|
... | ANY | | | |
|
||||||
|
|
||||||
|
/* Floating point stuff */
|
||||||
|
|
||||||
|
loc loc cif $1==2 && $2==4 | |
|
||||||
|
remove(ALL)
|
||||||
|
"move.w #$1,-(sp)"
|
||||||
|
"jsr .cif4" | | asp 4 lfr 4 |
|
||||||
|
loc loc cif $1==2 && $2==8 | |
|
||||||
|
remove(ALL)
|
||||||
|
"move.w #$1,-(sp)"
|
||||||
|
"jsr .cif8" | | asp 4 lfr 4 loi 8 |
|
||||||
|
loc loc cif $1==4 && $2==4 | |
|
||||||
|
remove(ALL)
|
||||||
|
"move.w #$1,-(sp)"
|
||||||
|
"jsr .cif4" | | asp 6 lfr 4 |
|
||||||
|
loc loc cif $1==4 && $2==8 | |
|
||||||
|
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 |
|
||||||
|
loc loc cfi $1==4 && $2==2 | |
|
||||||
|
remove(ALL)
|
||||||
|
"move.w #$1,-(sp)"
|
||||||
|
"move.w #$2,-(sp)"
|
||||||
|
"jsr .cfi" | | asp 8 lfr 2 |
|
||||||
|
loc loc cfi $1==4 && $2==4 | |
|
||||||
|
remove(ALL)
|
||||||
|
"move.w #$1,-(sp)"
|
||||||
|
"move.w #$2,-(sp)"
|
||||||
|
"jsr .cfi" | | asp 8 lfr 4 |
|
||||||
|
loc loc cfi $1==8 && $2==2 | |
|
||||||
|
remove(ALL)
|
||||||
|
"move.w #$1,-(sp)"
|
||||||
|
"move.w #$2,-(sp)"
|
||||||
|
"jsr .cfi" | | asp 12 lfr 2 |
|
||||||
|
loc loc cfi $1==8 && $2==4 | |
|
||||||
|
remove(ALL)
|
||||||
|
"move.w #$1,-(sp)"
|
||||||
|
"move.w #$2,-(sp)"
|
||||||
|
"jsr .cfi" | | asp 12 lfr 4 |
|
||||||
|
loc loc cfu $1==4 && $2==2 | |
|
||||||
|
remove(ALL)
|
||||||
|
"move.w #$1,-(sp)"
|
||||||
|
"move.w #$2,-(sp)"
|
||||||
|
"jsr .cfu" | | asp 8 lfr 2 |
|
||||||
|
loc loc cfu $1==4 && $2==4 | |
|
||||||
|
remove(ALL)
|
||||||
|
"move.w #$1,-(sp)"
|
||||||
|
"move.w #$2,-(sp)"
|
||||||
|
"jsr .cfu" | | asp 8 lfr 4 |
|
||||||
|
loc loc cfu $1==8 && $2==2 | |
|
||||||
|
remove(ALL)
|
||||||
|
"move.w #$1,-(sp)"
|
||||||
|
"move.w #$2,-(sp)"
|
||||||
|
"jsr .cfu" | | asp 12 lfr 2 |
|
||||||
|
loc loc cfu $1==8 && $2==4 | |
|
||||||
|
remove(ALL)
|
||||||
|
"move.w #$1,-(sp)"
|
||||||
|
"move.w #$2,-(sp)"
|
||||||
|
"jsr .cfu" | | asp 12 lfr 4 |
|
||||||
|
loc loc cff $1==8 && $2==4 | |
|
||||||
|
remove(ALL)
|
||||||
|
"jsr .cff4" | | asp 8 lfr 4 |
|
||||||
|
loc loc cff $1==4 && $2==8 | |
|
||||||
|
remove(ALL)
|
||||||
|
"jsr .cff8" | | asp 4 lfr 4 loi 8 |
|
||||||
|
|
||||||
|
|
||||||
/* 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 defined($1) && $1 == 2 | ANY DATASCR |
|
||||||
|
@ -1727,6 +1854,15 @@ cms !defined($1) | ANY | remove(ALL)
|
||||||
cmp | | remove(ALL)
|
cmp | | remove(ALL)
|
||||||
"jsr .cmp"
|
"jsr .cmp"
|
||||||
| D1 | |
|
| D1 | |
|
||||||
|
/* floating point */
|
||||||
|
|
||||||
|
cmf $1==4 | |
|
||||||
|
remove(ALL)
|
||||||
|
"jsr .cmf4" | | asp 8 lfr 2 |
|
||||||
|
cmf $1==8 | |
|
||||||
|
remove(ALL)
|
||||||
|
"jsr .cmf8" | | asp 16 lfr 2 |
|
||||||
|
|
||||||
|
|
||||||
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]"
|
||||||
|
@ -2652,27 +2788,6 @@ str $1 == 2 | | remove(ALL)
|
||||||
trp | STACK | "jsr .trp" | | |
|
trp | STACK | "jsr .trp" | | |
|
||||||
|
|
||||||
|
|
||||||
/* For several floating point instructions we generate an illegal
|
|
||||||
* instruction trap.
|
|
||||||
*/
|
|
||||||
|
|
||||||
adf | | | | loc 18 trp |
|
|
||||||
sbf | | | | loc 18 trp |
|
|
||||||
mlf | | | | loc 18 trp |
|
|
||||||
dvf | | | | loc 18 trp |
|
|
||||||
ngf | | | | loc 18 trp |
|
|
||||||
fef | | | | loc 18 trp |
|
|
||||||
fif | | | | loc 18 trp |
|
|
||||||
zrf | | | | loc 18 trp |
|
|
||||||
cfi | | | | loc 18 trp |
|
|
||||||
cif | | | | loc 18 trp |
|
|
||||||
cuf | | | | loc 18 trp |
|
|
||||||
cff | | | | loc 18 trp |
|
|
||||||
cfu | | | | loc 18 trp |
|
|
||||||
cmf | | | | loc 18 trp |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* C O E R C I O N S */
|
/* C O E R C I O N S */
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue