;*************************************************************************
;** AmigaE 3.2a Div()/Mul() function                                    **
;** Contributor: L.Lucius                               Sept 23rd 1995  **
;** Modified for HOp:   Thomas Richter  (thor)          Nov  1st  1997  **
;** Function:    Modify 68000 math routines to use 68020+ instructions. **
;*************************************************************************


;*************************************************************************
;
; Div()
;
#match
#code
202F 0008                       ;   MOVE.L      0008(A7),D0
222F 0004                       ;   MOVE.L      0004(A7),D1
4A80                            ;   TST.L       D0
6B0C                            ;   BMI.B       0040
4A81                            ;   TST.L       D1
6A10                            ;   BPL.B       0048
4481                            ;   NEG.L       D1
610C                            ;   BSR.B       0048
4480                            ;   NEG.L       D0
4E75                            ;   RTS
4480                            ;   NEG.L       D0
4A81                            ;   TST.L       D1
6AF4                            ;   BPL.B       003A
4481                            ;   NEG.L       D1
4841                            ;   SWAP        D1
4A41                            ;   TST.W       D1
6620                            ;   BNE.B       006E
2F03                            ;   MOVE.L      D3,-(A7)
4841                            ;   SWAP        D1
3601                            ;   MOVE.W      D1,D3
3400                            ;   MOVE.W      D0,D2
4240                            ;   CLR.W       D0
4840                            ;   SWAP        D0
80C3                            ;   DIVU.W      D3,D0
2200                            ;   MOVE.L      D0,D1
4840                            ;   SWAP        D0
3202                            ;   MOVE.W      D2,D1
82C3                            ;   DIVU.W      D3,D1
3001                            ;   MOVE.W      D1,D0
4241                            ;   CLR.W       D1
4841                            ;   SWAP        D1
261F                            ;   MOVE.L      (A7)+,D3
4E75                            ;   RTS
4841                            ;   SWAP        D1
48E7 1800                       ;   MOVEM.L     D3-D4,-(A7)
741F                            ;   MOVEQ       #1F,D2
7600                            ;   MOVEQ       #00,D3
7800                            ;   MOVEQ       #00,D4
E383                            ;   ASL.L       #1,D3
E380                            ;   ASL.L       #1,D0
E394                            ;   ROXL.L      #1,D4
B881                            ;   CMP.L       D1,D4
6504                            ;   BCS.B       0088
9881                            ;   SUB.L       D1,D4
5283                            ;   ADDQ.L      #1,D3
51CA FFF0                       ;   DBF         D2,007A
2204                            ;   MOVE.L      D4,D1
2003                            ;   MOVE.L      D3,D0
4CDF 0018                       ;   MOVEM.L     (A7)+,D3-D4
4E75                            ;   RTS
;
;
#replace
202F 0008                       ;   MOVE.L      0008(A7),D0
4C6F 0800 0004                  ;   DIVS.L      0004(A7),D0
4E75                            ;   RTS
#end



;*************************************************************************
;
; Mul()
;
#match
#code
2643                            ;   MOVEA.L     D3,A3
222F 0004                       ;   MOVE.L      0004(A7),D1
202F 0008                       ;   MOVE.L      0008(A7),D0
2400                            ;   MOVE.L      D0,D2
2600                            ;   MOVE.L      D0,D3
C0C1                            ;   MULU.W      D1,D0
4843                            ;   SWAP        D3
C6C1                            ;   MULU.W      D1,D3
4843                            ;   SWAP        D3
4243                            ;   CLR.W       D3
D083                            ;   ADD.L       D3,D0
4841                            ;   SWAP        D1
C4C1                            ;   MULU.W      D1,D2
4842                            ;   SWAP        D2
4242                            ;   CLR.W       D2
D082                            ;   ADD.L       D2,D0
260B                            ;   MOVE.L      A3,D3
4E75                            ;   RTS
;
;
#replace
202F 0008                       ;   MOVE.L      0008(A7),D0
4C2F 0000 0004                  ;   MULS.L      0004(A7),D0
4E75                            ;   RTS
#end

