;*************************************************************************
;** AmigaLib MUL/DIV/MOD                                                **
;** Contributor: L.Lucius                               Sept 23rd 1995  **
;** Modified for HOp:   Thomas Richter  (thor)          Nov  1st  1997  **
;** Function:    Modify 68000 math routines to use 68020+ instructions. **
;*************************************************************************

#match
#code
0C82 0000 FFFF                  ;   CMPI.L      #0000FFFF,D2
6E18                            ;   BGT.B       0020
3241                            ;   MOVEA.W     D1,A1
4241                            ;   CLR.W       D1
4841                            ;   SWAP        D1
82C2                            ;   DIVU.W      D2,D1
2001                            ;   MOVE.L      D1,D0
4841                            ;   SWAP        D1
3009                            ;   MOVE.W      A1,D0
80C2                            ;   DIVU.W      D2,D0
3200                            ;   MOVE.W      D0,D1
4240                            ;   CLR.W       D0
4840                            ;   SWAP        D0
4E75                            ;   RTS
2001                            ;   MOVE.L      D1,D0
4240                            ;   CLR.W       D0
4840                            ;   SWAP        D0
4841                            ;   SWAP        D1
4241                            ;   CLR.W       D1
2242                            ;   MOVEA.L     D2,A1
740F                            ;   MOVEQ       #0F,D2
D281                            ;   ADD.L       D1,D1
D180                            ;   ADDX.L      D0,D0
B3C0                            ;   CMPA.L      D0,A1
6E04                            ;   BGT.B       003A
9089                            ;   SUB.L       A1,D0
5241                            ;   ADDQ.W      #1,D1
51CA FFF2                       ;   DBF         D2,002E
4E75                            ;   RTS
2F02                            ;   MOVE.L      D2,-(A7)
2400                            ;   MOVE.L      D0,D2
C4C1                            ;   MULU.W      D1,D2
2042                            ;   MOVEA.L     D2,A0
2400                            ;   MOVE.L      D0,D2
4842                            ;   SWAP        D2
C4C1                            ;   MULU.W      D1,D2
4841                            ;   SWAP        D1
C0C1                            ;   MULU.W      D1,D0
D082                            ;   ADD.L       D2,D0
4840                            ;   SWAP        D0
4240                            ;   CLR.W       D0
D1C0                            ;   ADDA.L      D0,A0
2008                            ;   MOVE.L      A0,D0
241F                            ;   MOVE.L      (A7)+,D2
4E75                            ;   RTS
2F02                            ;   MOVE.L      D2,-(A7)
2401                            ;   MOVE.L      D1,D2
2200                            ;   MOVE.L      D0,D1
6198                            ;   BSR.B       0000
241F                            ;   MOVE.L      (A7)+,D2
4E75                            ;   RTS
2F02                            ;   MOVE.L      D2,-(A7)
2401                            ;   MOVE.L      D1,D2
2200                            ;   MOVE.L      D0,D1
618C                            ;   BSR.B       0000
2001                            ;   MOVE.L      D1,D0
241F                            ;   MOVE.L      (A7)+,D2
4E75                            ;   RTS
2F02                            ;   MOVE.L      D2,-(A7)
2401                            ;   MOVE.L      D1,D2
6C02                            ;   BGE.B       0082
4482                            ;   NEG.L       D2
2200                            ;   MOVE.L      D0,D1
7000                            ;   MOVEQ       #00,D0
4A81                            ;   TST.L       D1
6C04                            ;   BGE.B       008E
4481                            ;   NEG.L       D1
4680                            ;   NOT.L       D0
2040                            ;   MOVEA.L     D0,A0
6100 FF6E                       ;   BSR.W       0000
3408                            ;   MOVE.W      A0,D2
6702                            ;   BEQ.B       009A
4480                            ;   NEG.L       D0
241F                            ;   MOVE.L      (A7)+,D2
4E75                            ;   RTS
2F02                            ;   MOVE.L      D2,-(A7)
2040                            ;   MOVEA.L     D0,A0
7000                            ;   MOVEQ       #00,D0
2401                            ;   MOVE.L      D1,D2
6C04                            ;   BGE.B       00AC
4482                            ;   NEG.L       D2
4680                            ;   NOT.L       D0
2208                            ;   MOVE.L      A0,D1
6C04                            ;   BGE.B       00B4
4481                            ;   NEG.L       D1
4680                            ;   NOT.L       D0
2040                            ;   MOVEA.L     D0,A0
6100 FF48                       ;   BSR.W       0000
2408                            ;   MOVE.L      A0,D2
6702                            ;   BEQ.B       00C0
4481                            ;   NEG.L       D1
2001                            ;   MOVE.L      D1,D0
241F                            ;   MOVE.L      (A7)+,D2
4E75                            ;   RTS
;
;
#replace
0C82 0000 FFFF                  ;   CMPI.L      #0000FFFF,D2
6E18                            ;   BGT.B       0020
3241                            ;   MOVEA.W     D1,A1
4241                            ;   CLR.W       D1
4841                            ;   SWAP        D1
82C2                            ;   DIVU.W      D2,D1
2001                            ;   MOVE.L      D1,D0
4841                            ;   SWAP        D1
3009                            ;   MOVE.W      A1,D0
80C2                            ;   DIVU.W      D2,D0
3200                            ;   MOVE.W      D0,D1
4240                            ;   CLR.W       D0
4840                            ;   SWAP        D0
4E75                            ;   RTS
2001                            ;   MOVE.L      D1,D0
4240                            ;   CLR.W       D0
4840                            ;   SWAP        D0
4841                            ;   SWAP        D1
4241                            ;   CLR.W       D1
2242                            ;   MOVEA.L     D2,A1
740F                            ;   MOVEQ       #0F,D2
D281                            ;   ADD.L       D1,D1
D180                            ;   ADDX.L      D0,D0
B3C0                            ;   CMPA.L      D0,A1
6E04                            ;   BGT.B       003A
9089                            ;   SUB.L       A1,D0
5241                            ;   ADDQ.W      #1,D1
51CA FFF2                       ;   DBF         D2,002E
4E75                            ;   RTS
4C01 0000                       ;   MULU.L      D1,D0
4E75                            ;   RTS
2042                            ;   MOVEA.L     D2,A0
2400                            ;   MOVE.L      D0,D2
4842                            ;   SWAP        D2
C4C1                            ;   MULU.W      D1,D2
4841                            ;   SWAP        D1
C0C1                            ;   MULU.W      D1,D0
D082                            ;   ADD.L       D2,D0
4840                            ;   SWAP        D0
4240                            ;   CLR.W       D0
D1C0                            ;   ADDA.L      D0,A0
2008                            ;   MOVE.L      A0,D0
241F                            ;   MOVE.L      (A7)+,D2
4E75                            ;   RTS
4C41 0001                       ;   DIVUL.L     D1,D1:D0
C340                            ;   EXG         D1,D0
4E75                            ;   RTS
241F                            ;   MOVE.L      (A7)+,D2
4E75                            ;   RTS
4C41 0001                       ;   DIVUL.L     D1,D1:D0
4E75                            ;   RTS
618C                            ;   BSR.B       0000
2001                            ;   MOVE.L      D1,D0
241F                            ;   MOVE.L      (A7)+,D2
4E75                            ;   RTS
4C41 0801                       ;   DIVSL.L     D1,D1:D0
C340                            ;   EXG         D1,D0
4E75                            ;   RTS
2200                            ;   MOVE.L      D0,D1
7000                            ;   MOVEQ       #00,D0
4A81                            ;   TST.L       D1
6C04                            ;   BGE.B       008E
4481                            ;   NEG.L       D1
4680                            ;   NOT.L       D0
2040                            ;   MOVEA.L     D0,A0
6100 FF6E                       ;   BSR.W       0000
3408                            ;   MOVE.W      A0,D2
6702                            ;   BEQ.B       009A
4480                            ;   NEG.L       D0
241F                            ;   MOVE.L      (A7)+,D2
4E75                            ;   RTS
4C41 0801                       ;   DIVSL.L     D1,D1:D0
4E75                            ;   RTS
#end

