;*************************************************************************
;** Manx Math routines                                                  **
;** Contributor: L.Lucius                               Nov  15th 1993  **
;** Modified for HOp:   Thomas Richter  (thor)          Nov  1st  1997  **
;** Function:    Modify 68000 math routines to use 68020+ instructions. **
;*************************************************************************



;*************************************************************************
;
; DIVS
;
#match
#code
48E7 4800                       ;   MOVEM.L     D1/D4,-(A7)
4284                            ;   CLR.L       D4
4A80                            ;   TST.L       D0
6A04                            ;   BPL.B       000E
4480                            ;   NEG.L       D0
5244                            ;   ADDQ.W      #1,D4
4A81                            ;   TST.L       D1
6A06                            ;   BPL.B       0018
4481                            ;   NEG.L       D1
0A44 0001                       ;   EORI.W      #0001,D4
613E                            ;   BSR.B       0058
4A44                            ;   TST.W       D4
6702                            ;   BEQ.B       0020
4480                            ;   NEG.L       D0
4CDF 0012                       ;   MOVEM.L     (A7)+,D1/D4
4A80                            ;   TST.L       D0
4E75                            ;   RTS
;
;
#replace
4C41 0800                       ;   DIVS.L      D1,D0
4E75                            ;   RTS
#end



;*************************************************************************
;
; DIVU/MODU
;
#match
#code
48E7 3000                       ;   MOVEM.L     D2-D3,-(A7)
4841                            ;   SWAP        D1
4A41                            ;   TST.W       D1
6628                            ;   BNE.B       0032
4841                            ;   SWAP        D1
4243                            ;   CLR.W       D3
80C1                            ;   DIVU.W      D1,D0
680E                            ;   BVC.B       0020
3400                            ;   MOVE.W      D0,D2
4240                            ;   CLR.W       D0
4840                            ;   SWAP        D0
80C1                            ;   DIVU.W      D1,D0
3600                            ;   MOVE.W      D0,D3
3002                            ;   MOVE.W      D2,D0
80C1                            ;   DIVU.W      D1,D0
2200                            ;   MOVE.L      D0,D1
4840                            ;   SWAP        D0
3003                            ;   MOVE.W      D3,D0
4840                            ;   SWAP        D0
4241                            ;   CLR.W       D1
4841                            ;   SWAP        D1
4CDF 000C                       ;   MOVEM.L     (A7)+,D2-D3
4E75                            ;   RTS
;
;
#replace
4C41 0001                       ;   DIVUL.L     D1,D1:D0
4E75                            ;   RTS
#end


;*************************************************************************
;
; MODS
;
#match
#code
48E7 4800                       ;   MOVEM.L     D1/D4,-(A7)
4284                            ;   CLR.L       D4
4A80                            ;   TST.L       D0
6A04                            ;   BPL.B       000E
4480                            ;   NEG.L       D0
5244                            ;   ADDQ.W      #1,D4
4A81                            ;   TST.L       D1
6A02                            ;   BPL.B       0014
4481                            ;   NEG.L       D1
611A                            ;   BSR.B       0030
2001                            ;   MOVE.L      D1,D0
60D8                            ;   BRA.B       FFF2
2F01                            ;   MOVE.L      D1,-(A7)
6112                            ;   BSR.B       0030
2001                            ;   MOVE.L      D1,D0
221F                            ;   MOVE.L      (A7)+,D1
4A80                            ;   TST.L       D0
4E75                            ;   RTS
;
;
#replace
2F01                            ;   MOVE.L      D1,-(A7)
4C41 0801                       ;   DIVSL.L     D1,D1:D0
C141                            ;   EXG         D0,D1
221F                            ;   MOVE.L      (A7)+,D1
4A80                            ;   TST.L       D0
4E75                            ;   RTS
#end


;*************************************************************************
;
; MULU
;
#match
#code
48E7 7000                       ;   MOVEM.L     D1-D3,-(A7)
3401                            ;   MOVE.W      D1,D2
C4C0                            ;   MULU.W      D0,D2
2601                            ;   MOVE.L      D1,D3
4843                            ;   SWAP        D3
C6C0                            ;   MULU.W      D0,D3
4843                            ;   SWAP        D3
4243                            ;   CLR.W       D3
D483                            ;   ADD.L       D3,D2
4840                            ;   SWAP        D0
C0C1                            ;   MULU.W      D1,D0
4840                            ;   SWAP        D0
4240                            ;   CLR.W       D0
D082                            ;   ADD.L       D2,D0
4CDF 000E                       ;   MOVEM.L     (A7)+,D1-D3
4E75                            ;   RTS
;
;
#replace
4C01 0000                       ;   MULU.L      D1,D0
4E75                            ;   RTS
#end

