;*************************************************************************
;** Dice v2.06 (Freeware)                                               **
;** Contributor: L.Lucius                               Sept 11th 1995  **
;** Modified for HOp:   Thomas Richter  (thor)          Nov  1st  1997  **
;** Function:    Modify 68000 math routines to use 68020+ instructions. **
;*************************************************************************


;*************************************************************************
;
; Divs
;
#match
#code
4A81                            ;   TST.L       D1
6B08                            ;   BMI.B       000C
4A80                            ;   TST.L       D0
6B12                            ;   BMI.B       001A
6000 YYYY                       ;   BRA.W       0009
4481                            ;   NEG.L       D1
4A80                            ;   TST.L       D0
6B12                            ;   BMI.B       0024
6100 YYYY                       ;   BSR.W       0013
4480                            ;   NEG.L       D0
4E75                            ;   RTS
4480                            ;   NEG.L       D0
6100 YYYY                       ;   BSR.W       001D
4480                            ;   NEG.L       D0
4E75                            ;   RTS
4480                            ;   NEG.L       D0
6000 YYYY                       ;   BRA.W       0027
;
;
#replace
4C41 0801                       ;   DIVSL.L     D1,D1:D0
4E75                            ;   RTS
#end



;*************************************************************************
;
; Divu
;
#match
#code
4A81                            ;   TST.L       D1
671E                            ;   BEQ.B       0022
4841                            ;   SWAP        D1
4A41                            ;   TST.W       D1
6642                            ;   BNE.B       004C
2F02                            ;   MOVE.L      D2,-(A7)
4841                            ;   SWAP        D1
2400                            ;   MOVE.L      D0,D2
84C1                            ;   DIVU.W      D1,D2
6914                            ;   BVS.B       0028
2202                            ;   MOVE.L      D2,D1
4241                            ;   CLR.W       D1
4841                            ;   SWAP        D1
7000                            ;   MOVEQ       #00,D0
3002                            ;   MOVE.W      D2,D0
241F                            ;   MOVE.L      (A7)+,D2
4E75                            ;   RTS
2200                            ;   MOVE.L      D0,D1
70FF                            ;   MOVEQ       #FF,D0
4E75                            ;   RTS
2F03                            ;   MOVE.L      D3,-(A7)
2400                            ;   MOVE.L      D0,D2
4242                            ;   CLR.W       D2
4842                            ;   SWAP        D2
84C1                            ;   DIVU.W      D1,D2
3602                            ;   MOVE.W      D2,D3
4843                            ;   SWAP        D3
4243                            ;   CLR.W       D3
3400                            ;   MOVE.W      D0,D2
84C1                            ;   DIVU.W      D1,D2
3602                            ;   MOVE.W      D2,D3
2003                            ;   MOVE.L      D3,D0
4242                            ;   CLR.W       D2
4842                            ;   SWAP        D2
2202                            ;   MOVE.L      D2,D1
261F                            ;   MOVE.L      (A7)+,D3
241F                            ;   MOVE.L      (A7)+,D2
4E75                            ;   RTS
48E7 3800                       ;   MOVEM.L     D2-D4,-(A7)
2400                            ;   MOVE.L      D0,D2
4242                            ;   CLR.W       D2
4842                            ;   SWAP        D2
84C1                            ;   DIVU.W      D1,D2
3602                            ;   MOVE.W      D2,D3
7400                            ;   MOVEQ       #00,D2
3403                            ;   MOVE.W      D3,D2
C6C1                            ;   MULU.W      D1,D3
4841                            ;   SWAP        D1
3802                            ;   MOVE.W      D2,D4
C8C1                            ;   MULU.W      D1,D4
4843                            ;   SWAP        D3
D684                            ;   ADD.L       D4,D3
9083                            ;   SUB.L       D3,D0
6B0A                            ;   BMI.B       0078
2200                            ;   MOVE.L      D0,D1
2002                            ;   MOVE.L      D2,D0
4CDF 001C                       ;   MOVEM.L     (A7)+,D2-D4
4E75                            ;   RTS
5382                            ;   SUBQ.L      #1,D2
D081                            ;   ADD.L       D1,D0
6BFA                            ;   BMI.B       0078
2200                            ;   MOVE.L      D0,D1
2002                            ;   MOVE.L      D2,D0
4CDF 001C                       ;   MOVEM.L     (A7)+,D2-D4
4E75                            ;   RTS
;
;
#replace
4C41 0001                       ;   DIVUL.L     D1,D1:D0
4E75                            ;   RTS
#end


;*************************************************************************
;
; Mods
;
#match
#code
4A81                            ;   TST.L       D1
6B0C                            ;   BMI.B       0010
4A80                            ;   TST.L       D0
6B18                            ;   BMI.B       0020
6100 YYYY                       ;   BSR.W       0009
2001                            ;   MOVE.L      D1,D0
4E75                            ;   RTS
4481                            ;   NEG.L       D1
4A80                            ;   TST.L       D0
6B16                            ;   BMI.B       002C
6100 YYYY                       ;   BSR.W       0017
4481                            ;   NEG.L       D1
2001                            ;   MOVE.L      D1,D0
4E75                            ;   RTS
4480                            ;   NEG.L       D0
6100 YYYY                       ;   BSR.W       0023
4481                            ;   NEG.L       D1
2001                            ;   MOVE.L      D1,D0
4E75                            ;   RTS
4480                            ;   NEG.L       D0
6100 FFFF                       ;   BSR.W       002F
2001                            ;   MOVE.L      D1,D0
4E75                            ;   RTS
;
;
#replace
4C41 0801                       ;   DIVSL.L     D1,D1:D0
C141                            ;   EXG         D0,D1
4E75                            ;   RTS
#end


;*************************************************************************
;
; Mulu/Muls
;
#match
#code
48E7 C000                       ;   MOVEM.L     D0-D1,-(A7)
4840                            ;   SWAP        D0
C0C1                            ;   MULU.W      D1,D0
4841                            ;   SWAP        D1
C2EF 0002                       ;   MULU.W      0002(A7),D1
D081                            ;   ADD.L       D1,D0
4840                            ;   SWAP        D0
4240                            ;   CLR.W       D0
322F 0002                       ;   MOVE.W      0002(A7),D1
C2EF 0006                       ;   MULU.W      0006(A7),D1
D081                            ;   ADD.L       D1,D0
508F                            ;   ADDQ.L      #8,A7
4E75                            ;   RTS
;
;
#replace
4C01 0000                       ;   MULU.L      D1,D0
4E75                            ;   RTS
#end

