
; Mathematik-Interface

   INCLUDE  "lvo/math.i"

   XREF  _MathBase
   XREF  _MathTransBase
   XREF  _MathIeeeDoubBasBase
   XREF  _MathIeeeDoubTransBase





CREATE MACRO Basis,Name,Registermaske,Registeranzahl,Satz1,Anzahl1,Satz2,Anzahl2...

   IFD   \2
   XDEF  _\2

_\2
  IFEQ   \4-1        ; ein Register ?
   move.l   \3,-(SP)
  ELSE
   movem.l  \3,-(SP)
  ENDC

TIEFE SET   4+4*\4
  IFNC   '\5',''
   SATZ  \5,\6,\7,\8,\9,\a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k
  ENDC

   move.l   \1,a6
   jsr      _LVO\2(a6)
  IFEQ   \4-1        ; ein Register ?
   move.l   (SP)+,\3
  ELSE
   movem.l  (SP)+,\3
  ENDC
   rts

   ENDC

   ENDM





SATZ  MACRO Satz1,Anzahl1,Satz2,Anzahl2...
  IFEQ   \2-1        ; ein Register ?
   move.l   TIEFE(SP),\1
  ELSE
   movem.l  TIEFE(SP),\1
  ENDC
TIEFE SET   TIEFE+4*\2
  IFNC   '\3',''
   SATZ  \3,\4,\5,\6,\7,\8,\9,\a,\b,\c,\d,\e,\f,\g,\h,\i
  ENDC
   ENDM










;****************************************************************************
; MathFFP

; SPFix(float)(D0)
   CREATE   _MathBase,SPFix,a6,1,d0,1

; SPFlt(integer)(D0)
   CREATE   _MathBase,SPFlt,a6,1,d0,1

; SPCmp(leftFloat,rightFloat)(D1,D0)
   CREATE   _MathBase,SPCmp,a6,1,d1,1,d0,1

; SPTst(float)(D1)
   CREATE   _MathBase,SPTst,a6,1,d1,1

; SPAbs(float)(D0)
   CREATE   _MathBase,SPAbs,a6,1,d0,1

; SPNeg(float)(D0)
   CREATE   _MathBase,SPNeg,a6,1,d0,1

; SPAdd(leftFloat,rightFloat)(D1,D0)
   CREATE   _MathBase,SPAdd,a6,1,d1,1,d0,1

; SPSub(leftFloat,rightFloat)(D1,D0)
   CREATE   _MathBase,SPSub,a6,1,d1,1,d0,1

; SPMul(leftFloat,rightFloat)(D1,D0)
   CREATE   _MathBase,SPMul,a6,1,d1,1,d0,1

; SPDiv(leftFloat,rightFloat)(D1,D0)
   CREATE   _MathBase,SPDiv,a6,1,d1,1,d0,1

; SPFloor(float)(D0)
   CREATE   _MathBase,SPFloor,a6,1,d0,1

; SPCeil(float)(D0)
   CREATE   _MathBase,SPCeil,a6,1,d0,1

; Offsets

   IFD   OFFSETS1

   XDEF  _LVOSPFix
   XDEF  _LVOSPFlt
   XDEF  _LVOSPCmp
   XDEF  _LVOSPTst
   XDEF  _LVOSPAbs
   XDEF  _LVOSPNeg
   XDEF  _LVOSPAdd
   XDEF  _LVOSPSub
   XDEF  _LVOSPMul
   XDEF  _LVOSPDiv
   XDEF  _LVOSPFloor
   XDEF  _LVOSPCeil

   ENDC





;****************************************************************************
; MathTrans

; SPAtan(float)(D0)
   CREATE   _MathTransBase,SPAtan,a6,1,d0,1

; SPSin(float)(D0)
   CREATE   _MathTransBase,SPSin,a6,1,d0,1

; SPCos(float)(D0)
   CREATE   _MathTransBase,SPCos,a6,1,d0,1

; SPTan(float)(D0)
   CREATE   _MathTransBase,SPTan,a6,1,d0,1

; SPSincos(leftFloat,rightFloat)(D1,D0)
   CREATE   _MathTransBase,SPSincos,a6,1,d1,1,d0,1

; SPSinh(float)(D0)
   CREATE   _MathTransBase,SPSinh,a6,1,d0,1

; SPCosh(float)(D0)
   CREATE   _MathTransBase,SPCosh,a6,1,d0,1

; SPTanh(float)(D0)
   CREATE   _MathTransBase,SPTanh,a6,1,d0,1

; SPExp(float)(D0)
   CREATE   _MathTransBase,SPExp,a6,1,d0,1

; SPLog(float)(D0)
   CREATE   _MathTransBase,SPLog,a6,1,d0,1

; SPPow(leftFloat,rightFloat)(D1,D0)
   CREATE   _MathTransBase,SPPow,a6,1,d1,1,d0,1

; SPSqrt(float)(D0)
   CREATE   _MathTransBase,SPSqrt,a6,1,d0,1

; SPTieee(float)(D0)
   CREATE   _MathTransBase,SPTieee,a6,1,d0,1

; SPFieee(integer)(D0)
   CREATE   _MathTransBase,SPFieee,a6,1,d0,1

; SPAsin(float)(D0)
   CREATE   _MathTransBase,SPAsin,a6,1,d0,1

; SPAcos(float)(D0)
   CREATE   _MathTransBase,SPAcos,a6,1,d0,1

; SPLog10(float)(D0)
   CREATE   _MathTransBase,SPLog10,a6,1,d0,1

; Offsets

   IFD   OFFSETS2

   XDEF  _LVOSPAtan
   XDEF  _LVOSPSin
   XDEF  _LVOSPCos
   XDEF  _LVOSPTan
   XDEF  _LVOSPSincos
   XDEF  _LVOSPSinh
   XDEF  _LVOSPCosh
   XDEF  _LVOSPTanh
   XDEF  _LVOSPExp
   XDEF  _LVOSPLog
   XDEF  _LVOSPPow
   XDEF  _LVOSPSqrt
   XDEF  _LVOSPTieee
   XDEF  _LVOSPFieee
   XDEF  _LVOSPAsin
   XDEF  _LVOSPAcos
   XDEF  _LVOSPLog10

   ENDC





;****************************************************************************
; MathDoubBas

; IEEEDPFix(double)(D0/D1)
   CREATE   _MathIeeeDoubBasBase,IEEEDPFix,a6,1,d0-d1,2

; IEEEDPFlt(integer)(D0)
   CREATE   _MathIeeeDoubBasBase,IEEEDPFlt,a6,1,d0,1

; IEEEDPCmp(double,double)(D0/D1/D2/D3)
   CREATE   _MathIeeeDoubBasBase,IEEEDPCmp,d2-d3/a6,3,d0-d3,4

; IEEEDPTst(double)(D0/D1)
   CREATE   _MathIeeeDoubBasBase,IEEEDPTst,a6,1,d0-d1,2

; IEEEDPAbs(double)(D0/D1)
   CREATE   _MathIeeeDoubBasBase,IEEEDPAbs,a6,1,d0-d1,2

; IEEEDPNeg(double)(D0/D1)
   CREATE   _MathIeeeDoubBasBase,IEEEDPNeg,a6,1,d0-d1,2

; IEEEDPAdd(double,double)(D0/D1/D2/D3)
   CREATE   _MathIeeeDoubBasBase,IEEEDPAdd,d2-d3/a6,3,d0-d3,4

; IEEEDPSub(double,double)(D0/D1/D2/D3)
   CREATE   _MathIeeeDoubBasBase,IEEEDPSub,d2-d3/a6,3,d0-d3,4

; IEEEDPMul(double,double)(D0/D1/D2/D3)
   CREATE   _MathIeeeDoubBasBase,IEEEDPMul,d2-d3/a6,3,d0-d3,4

; IEEEDPDiv(double,double)(D0/D1/D2/D3)
   CREATE   _MathIeeeDoubBasBase,IEEEDPDiv,d2-d3/a6,3,d0-d3,4

; IEEEDPFloor(double)(D0/D1)
   CREATE   _MathIeeeDoubBasBase,IEEEDPFloor,a6,1,d0-d1,2

; IEEEDPCeil(double)(D0/D1)
   CREATE   _MathIeeeDoubBasBase,IEEEDPCeil,a6,1,d0-d1,2

; Offsets

   IFD   OFFSETS3

   XDEF  _LVOIEEEDPFix
   XDEF  _LVOIEEEDPFlt
   XDEF  _LVOIEEEDPCmp
   XDEF  _LVOIEEEDPTst
   XDEF  _LVOIEEEDPAbs
   XDEF  _LVOIEEEDPNeg
   XDEF  _LVOIEEEDPAdd
   XDEF  _LVOIEEEDPSub
   XDEF  _LVOIEEEDPMul
   XDEF  _LVOIEEEDPDiv
   XDEF  _LVOIEEEDPFloor
   XDEF  _LVOIEEEDPCeil

   ENDC





;****************************************************************************
; MathDoubTrans

; IEEEDPAtan(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPAtan,a6,1,d0-d1,2

; IEEEDPSin(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPSin,a6,1,d0-d1,2

; IEEEDPCos(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPCos,a6,1,d0-d1,2

; IEEEDPTan(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPTan,a6,1,d0-d1,2

; IEEEDPSincos(double,pf2)(A0,D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPSincos,a6,1,a0,1,d0-d1,2

; IEEEDPSinh(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPSinh,a6,1,d0-d1,2

; IEEEDPCosh(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPCosh,a6,1,d0-d1,2

; IEEEDPTanh(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPTanh,a6,1,d0-d1,2

; IEEEDPExp(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPExp,a6,1,d0-d1,2

; IEEEDPLog(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPLog,a6,1,d0-d1,2

; IEEEDPPow(exp,arg)(D2/D3,D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPPow,d2-d3/a6,3,d2-d3,2,d0-d1,2

; IEEEDPSqrt(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPSqrt,a6,1,d0-d1,2

; IEEEDPTieee(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPTieee,a6,1,d0-d1,2

; IEEEDPFieee(single)(D0)
   CREATE   _MathIeeeDoubTransBase,IEEEDPFieee,a6,1,d0,1

; IEEEDPAsin(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPAsin,a6,1,d0-d1,2

; IEEEDPAcos(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPAcos,a6,1,d0-d1,2

; IEEEDPLog10(double)(D0/D1)
   CREATE   _MathIeeeDoubTransBase,IEEEDPLog10,a6,1,d0-d1,2

; Offsets

   IFD   OFFSETS4

   XDEF  _LVOIEEEDPAtan
   XDEF  _LVOIEEEDPSin
   XDEF  _LVOIEEEDPCos
   XDEF  _LVOIEEEDPTan
   XDEF  _LVOIEEEDPSincos
   XDEF  _LVOIEEEDPSinh
   XDEF  _LVOIEEEDPCosh
   XDEF  _LVOIEEEDPTanh
   XDEF  _LVOIEEEDPExp
   XDEF  _LVOIEEEDPLog
   XDEF  _LVOIEEEDPPow
   XDEF  _LVOIEEEDPSqrt
   XDEF  _LVOIEEEDPTieee
   XDEF  _LVOIEEEDPFieee
   XDEF  _LVOIEEEDPAsin
   XDEF  _LVOIEEEDPAcos
   XDEF  _LVOIEEEDPLog10

   ENDC





   END

