|
@@ -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 | |
|
|
|
- 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 | |
|
|
|
+/*
|
|
|
+ * 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 .cuf4" | | asp 4 lfr 4 |
|
|
|
-loc loc cuf $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 .cuf8" | | asp 4 lfr 4 loi 8 |
|
|
|
-loc loc cuf $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 .cuf4" | | asp 6 lfr 4 |
|
|
|
-loc loc cuf $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 .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]"
|