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

;*************************************************************************
;
; DIVS
;
#match
#code
48E7 3C00                       ;   MOVEM.L     D2-D5,-(A7)
2A01                            ;   MOVE.L      D1,D5
6732                            ;   BEQ.B       003A
6A02                            ;   BPL.B       000C
4481                            ;   NEG.L       D1
2800                            ;   MOVE.L      D0,D4
6728                            ;   BEQ.B       0038
6A02                            ;   BPL.B       0014
4480                            ;   NEG.L       D0
4282                            ;   CLR.L       D2
761F                            ;   MOVEQ       #1F,D3
E380                            ;   ASL.L       #1,D0
E392                            ;   ROXL.L      #1,D2
B481                            ;   CMP.L       D1,D2
6504                            ;   BCS.B       0024
9481                            ;   SUB.L       D1,D2
5280                            ;   ADDQ.L      #1,D0
51CB FFF2                       ;   DBF         D3,0018
2202                            ;   MOVE.L      D2,D1
B985                            ;   EOR.L       D4,D5
6A02                            ;   BPL.B       0030
4480                            ;   NEG.L       D0
B384                            ;   EOR.L       D1,D4
6A08                            ;   BPL.B       003C
4481                            ;   NEG.L       D1
6004                            ;   BRA.B       003C
4281                            ;   CLR.L       D1
4280                            ;   CLR.L       D0
4CDF 003C                       ;   MOVEM.L     (A7)+,D2-D5
4E75                            ;   RTS
;
;
#replace
4C41 0801                       ;   DIVSL.L     D1,D1:D0
4E75                            ;   RTS
#end


;*************************************************************************
;
; DIVU/MODU
;
#match
#code
2F02                            ;   MOVE.L      D2,-(A7)
2F03                            ;   MOVE.L      D3,-(A7)
4A81                            ;   TST.L       D1
6722                            ;   BEQ.B       002A
4A80                            ;   TST.L       D0
671C                            ;   BEQ.B       0028
4282                            ;   CLR.L       D2
761F                            ;   MOVEQ       #1F,D3
E380                            ;   ASL.L       #1,D0
E392                            ;   ROXL.L      #1,D2
B481                            ;   CMP.L       D1,D2
6508                            ;   BCS.B       0020
9481                            ;   SUB.L       D1,D2
D0BC 0000 0001                  ;   ADD.L       #00000001,D0
51CB FFEE                       ;   DBF         D3,0010
2202                            ;   MOVE.L      D2,D1
6004                            ;   BRA.B       002C
4281                            ;   CLR.L       D1
4280                            ;   CLR.L       D0
261F                            ;   MOVE.L      (A7)+,D3
241F                            ;   MOVE.L      (A7)+,D2
4E75                            ;   RTS
;
;
#replace
4C41 0001                       ;   DIVUL.L     D1,D1:D0
4E75                            ;   RTS
#end


;*************************************************************************
;
; MULS
;
#match
#code
48E7 7800                       ;   MOVEM.L     D1-D4,-(A7)
2800                            ;   MOVE.L      D0,D4
B384                            ;   EOR.L       D1,D4
4A80                            ;   TST.L       D0
6730                            ;   BEQ.B       003C
6A02                            ;   BPL.B       0010
4480                            ;   NEG.L       D0
2400                            ;   MOVE.L      D0,D2
4A81                            ;   TST.L       D1
6604                            ;   BNE.B       001A
4280                            ;   CLR.L       D0
6022                            ;   BRA.B       003C
6A02                            ;   BPL.B       001E
4481                            ;   NEG.L       D1
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
4A84                            ;   TST.L       D4
6A02                            ;   BPL.B       003C
4480                            ;   NEG.L       D0
4CDF 001E                       ;   MOVEM.L     (A7)+,D1-D4
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

