Added fp68881.s
authorceriel <none@none>
Tue, 1 Aug 1989 16:32:34 +0000 (16:32 +0000)
committerceriel <none@none>
Tue, 1 Aug 1989 16:32:34 +0000 (16:32 +0000)
mach/m68020/libem/LIST
mach/m68020/libem/fp68881.s [new file with mode: 0644]

index 7c68063..c00f673 100644 (file)
@@ -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 (file)
index 0000000..8ad1c4c
--- /dev/null
@@ -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)