Added fp68881.s

This commit is contained in:
ceriel 1989-08-01 16:32:34 +00:00
parent 3ed9932864
commit 2b2698c44c
2 changed files with 246 additions and 1 deletions

View file

@ -1,5 +1,5 @@
libem_s.a
fakfp.s
fp68881.s
aar.s
lar.s
sar.s

245
mach/m68020/libem/fp68881.s Normal file
View file

@ -0,0 +1,245 @@
.define .adf4, .adf8, .sbf4, .sbf8, .mlf4, .mlf8, .dvf4, .dvf8
.define .ngf4, .ngf8, .fif4, .fif8, .fef4, .fef8
.define .cif4, .cif8, .cuf4, .cuf8, .cfi, .cfu, .cff4, .cff8
.define .cmf4, .cmf8
.sect .text
.sect .rom
.sect .data
.sect .bss
! $Header$
! Implement interface to floating point package for M68881
.sect .text
.adf4:
move.l (sp)+,a0
fmove.s (sp),fp0
fadd.s (4,sp),fp0
fmove.s fp0,(4,sp)
jmp (a0)
.adf8:
move.l (sp)+,a0
fmove.d (sp),fp0
fadd.d (8,sp),fp0
fmove.d fp0,(8,sp)
jmp (a0)
.sbf4:
move.l (sp)+,a0
fmove.s (sp),fp0
fmove.s (4,sp),fp1
fsub fp0,fp1
fmove.s fp1,(4,sp)
jmp (a0)
.sbf8:
move.l (sp)+,a0
fmove.d (sp),fp0
fmove.d (8,sp),fp1
fsub fp0,fp1
fmove.d fp1,(8,sp)
jmp (a0)
.mlf4:
move.l (sp)+,a0
fmove.s (sp),fp0
fmul.s (4,sp),fp0
fmove.s fp0,(4,sp)
jmp (a0)
.mlf8:
move.l (sp)+,a0
fmove.d (sp),fp0
fmul.d (8,sp),fp0
fmove.d fp0,(8,sp)
jmp (a0)
.dvf4:
move.l (sp)+,a0
fmove.s (sp),fp0
fmove.s (4,sp),fp1
fdiv fp0,fp1
fmove.s fp1,(4,sp)
jmp (a0)
.dvf8:
move.l (sp)+,a0
fmove.d (sp),fp0
fmove.d (8,sp),fp1
fdiv fp0,fp1
fmove.d fp1,(8,sp)
jmp (a0)
.ngf4:
fmove.s (4,sp),fp0
fneg fp0
fmove.s fp0,(4,sp)
rts
.ngf8:
fmove.d (4,sp),fp0
fneg fp0
fmove.d fp0,(4,sp)
rts
.fif4:
move.l (sp)+,a0
move.l (sp),a1
fmove.s (4,sp),fp0
fmove.s (8,sp),fp1
fmul fp0,fp1
fintrz fp1,fp0
fsub fp0,fp1
fmove.s fp1,(4,a1)
fmove.s fp0,(a1)
jmp (a0)
.fif8:
move.l (sp)+,a0
move.l (sp),a1
fmove.d (4,sp),fp0
fmove.d (12,sp),fp1
fmul fp0,fp1
fintrz fp1,fp0
fsub fp0,fp1
fmove.d fp1,(8,a1)
fmove.d fp0,(a1)
jmp (a0)
.fef4:
move.l (sp)+,a0
move.l (sp),a1
fmove.s (4,sp),fp0
fgetexp fp0,fp1
fmove.l fp1,d0
add.l #1,d0
fgetman fp0
fmove.l #2,fp1
fdiv fp1,fp0
fmove.s fp0,(4,a1)
move.l d0,(a1)
jmp (a0)
.fef8:
move.l (sp)+,a0
move.l (sp),a1
fmove.d (4,sp),fp0
fgetexp fp0,fp1
fmove.l fp1,d0
add.l #1,d0
fgetman fp0
fmove.l #2,fp1
fdiv fp1,fp0
fmove.d fp0,(4,a1)
move.l d0,(a1)
jmp (a0)
.cif4:
move.l (sp)+,a0
fmove.l (4,sp),fp0
fmove.s fp0,(4,sp)
jmp (a0)
.cif8:
move.l (sp)+,a0
fmove.l (4,sp),fp0
fmove.d fp0,(sp)
jmp (a0)
.cuf4:
move.l (sp)+,a0
fmove.l (4,sp),fp0
tst.l (4,sp)
bge 1f
fsub.l #-2147483648,fp0
fsub.l #-2147483648,fp0
1:
fmove.s fp0,(4,sp)
jmp (a0)
.cuf8:
move.l (sp)+,a0
fmove.l (4,sp),fp0
tst.l (4,sp)
bge 1f
fsub.l #-2147483648,fp0
fsub.l #-2147483648,fp0
1:
fmove.d fp0,(sp)
jmp (a0)
.cfi:
move.l (sp)+,a0
move.l (4,sp),d0
cmp.l #4,d0
bne 1f
fmove.s (8,sp),fp0
fintrz fp0,fp0
fmove.l fp0,(8,sp)
jmp (a0)
1:
fmove.d (8,sp),fp0
fintrz fp0,fp0
fmove.l fp0,(12,sp)
jmp (a0)
.cfu:
move.l (sp)+,a0
move.l (4,sp),d0
cmp.l #4,d0
bne 1f
fmove.s (8,sp),fp0
fabs fp0
fintrz fp0,fp0
fmove.l fp0,(8,sp)
jmp (a0)
1:
fmove.d (8,sp),fp0
fabs fp0
fintrz fp0,fp0
fmove.l fp0,(12,sp)
jmp (a0)
.cff4:
move.l (sp)+,a0
fmove.d (sp),fp0
fmove.s fp0,(4,sp)
jmp (a0)
.cff8:
move.l (sp)+,a0
fmove.s (sp),fp0
fmove.d fp0,(sp)
jmp (a0)
.cmf4:
move.l (sp)+,a0
clr.l d0
fmove.s (sp),fp0
fmove.s (4,sp),fp1
fcmp fp0,fp1
fbeq 2f
fblt 1f
add.l #1,d0
jmp (a0)
1:
sub.l #1,d0
2:
jmp (a0)
.cmf8:
move.l (sp)+,a0
clr.l d0
fmove.d (sp),fp0
fmove.d (8,sp),fp1
fcmp fp0,fp1
fbeq 2f
fblt 1f
add.l #1,d0
jmp (a0)
1:
sub.l #1,d0
2:
jmp (a0)