
; 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
	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
	move.l	(SP)+,\3
	ELSE
	movem.l	(SP)+,\3
	ENDC
	rts

	ENDC

	ENDM





SATZ	MACRO	Satz1,Anzahl1,Satz2,Anzahl2...
	IFEQ	 \2-1
	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

