From 2b2698c44ce433890853d90d6bc630a48812b916 Mon Sep 17 00:00:00 2001 From: ceriel Date: Tue, 1 Aug 1989 16:32:34 +0000 Subject: [PATCH] Added fp68881.s --- mach/m68020/libem/LIST | 2 +- mach/m68020/libem/fp68881.s | 245 ++++++++++++++++++++++++++++++++++++ 2 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 mach/m68020/libem/fp68881.s diff --git a/mach/m68020/libem/LIST b/mach/m68020/libem/LIST index 7c68063df..c00f673d5 100644 --- a/mach/m68020/libem/LIST +++ b/mach/m68020/libem/LIST @@ -1,5 +1,5 @@ libem_s.a -fakfp.s +fp68881.s aar.s lar.s sar.s diff --git a/mach/m68020/libem/fp68881.s b/mach/m68020/libem/fp68881.s new file mode 100644 index 000000000..8ad1c4c4a --- /dev/null +++ b/mach/m68020/libem/fp68881.s @@ -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) -- 2.34.1