;*************************************************************************
;** SAS/C v6.xx                                                         **
;** Contributor: L.Lucius                               Sept 25th 1995  **
;** Modified for HOp:   Thomas Richter  (thor)          Nov  1st  1997  **
;** Function:    Modify 68000 math routines to use 68020+ instructions. **
;*************************************************************************



;*************************************************************************
;
; DIVS/DIVU/MODS/MODU
;
#match
#code
4A80                            ;   TST.L       D0
6A00 001E                       ;   BPL.W       0022
4480                            ;   NEG.L       D0
4A81                            ;   TST.L       D1
6A00 000C                       ;   BPL.W       0018
4481                            ;   NEG.L       D1
6100 0020                       ;   BSR.W       0032
4481                            ;   NEG.L       D1
4E75                            ;   RTS
6100 0018                       ;   BSR.W       0032
4480                            ;   NEG.L       D0
4481                            ;   NEG.L       D1
4E75                            ;   RTS
4A81                            ;   TST.L       D1
6A00 000C                       ;   BPL.W       0032
4481                            ;   NEG.L       D1
6100 0006                       ;   BSR.W       0032
4480                            ;   NEG.L       D0
4E75                            ;   RTS
2F02                            ;   MOVE.L      D2,-(A7)
4841                            ;   SWAP        D1
3401                            ;   MOVE.W      D1,D2
;
;
#replace
4C41 0801                       ;   DIVSL.L     D1,D1:D0
4E75                            ;   RTS
4480                            ;   NEG.L       D0
4A81                            ;   TST.L       D1
6A00 000C                       ;   BPL.W       0018
4481                            ;   NEG.L       D1
6100 0020                       ;   BSR.W       0032
4481                            ;   NEG.L       D1
4E75                            ;   RTS
6100 0018                       ;   BSR.W       0032
4480                            ;   NEG.L       D0
4481                            ;   NEG.L       D1
4E75                            ;   RTS
4A81                            ;   TST.L       D1
6A00 000C                       ;   BPL.W       0032
4481                            ;   NEG.L       D1
6100 0006                       ;   BSR.W       0032
4480                            ;   NEG.L       D0
4E75                            ;   RTS
4C41 0001                       ;   DIVUL.L     D1,D1:D0
4E75                            ;   RTS
#end


;*************************************************************************
;
; MULS
;
#match
#code
48E7 3000                       ;   MOVEM.L     D2-D3,-(A7)
2400                            ;   MOVE.L      D0,D2
2601                            ;   MOVE.L      D1,D3
4842                            ;   SWAP        D2
4843                            ;   SWAP        D3
C4C1                            ;   MULU.W      D1,D2
C6C0                            ;   MULU.W      D0,D3
C0C1                            ;   MULU.W      D1,D0
D443                            ;   ADD.W       D3,D2
4842                            ;   SWAP        D2
4242                            ;   CLR.W       D2
D082                            ;   ADD.L       D2,D0
4CDF 000C                       ;   MOVEM.L     (A7)+,D2-D3
4E75                            ;   RTS
;
;
#replace
4C01 0800                       ;   MULS.L      D1,D0
4E75                            ;   RTS
#end


;*************************************************************************
;
; MULU
;
#match
#code
48E7 7000                       ;   MOVEM.L     D1-D3,-(A7)
2400                            ;   MOVE.L      D0,D2
6720                            ;   BEQ.B       0028
4A81                            ;   TST.L       D1
6604                            ;   BNE.B       0010
4280                            ;   CLR.L       D0
6018                            ;   BRA.B       0028
2600                            ;   MOVE.L      D0,D3
C6C1                            ;   MULU.W      D1,D3
4842                            ;   SWAP        D2
C4C1                            ;   MULU.W      D1,D2
4842                            ;   SWAP        D2
4242                            ;   CLR.W       D2
D682                            ;   ADD.L       D2,D3
4841                            ;   SWAP        D1
C0C1                            ;   MULU.W      D1,D0
4840                            ;   SWAP        D0
4240                            ;   CLR.W       D0
D083                            ;   ADD.L       D3,D0
4CDF 000E                       ;   MOVEM.L     (A7)+,D1-D3
4E75                            ;   RTS
;
;
#replace
4C01 0000                       ;   MULU.L      D1,D0
4E75                            ;   RTS
#end

