;*************************************************************************
;** Oberon-II 3.0                                                       **
;** 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
48E7 3C00                       ;   MOVEM.L     D2-D5,-(A7)
2800                            ;   MOVE.L      D0,D4
6A02                            ;   BPL.B       000A
4480                            ;   NEG.L       D0
2A01                            ;   MOVE.L      D1,D5
6A02                            ;   BPL.B       0010
4481                            ;   NEG.L       D1
0C81 0000 FFFF                  ;   CMPI.L      #0000FFFF,D1
621A                            ;   BHI.B       0032
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
601E                            ;   BRA.B       0050
2601                            ;   MOVE.L      D1,D3
2200                            ;   MOVE.L      D0,D1
4241                            ;   CLR.W       D1
4841                            ;   SWAP        D1
4840                            ;   SWAP        D0
4240                            ;   CLR.W       D0
740F                            ;   MOVEQ       #0F,D2
D080                            ;   ADD.L       D0,D0
D381                            ;   ADDX.L      D1,D1
B681                            ;   CMP.L       D1,D3
6204                            ;   BHI.B       004C
9283                            ;   SUB.L       D3,D1
5240                            ;   ADDQ.W      #1,D0
51CA FFF2                       ;   DBF         D2,0040
4A84                            ;   TST.L       D4
6A02                            ;   BPL.B       0056
4481                            ;   NEG.L       D1
BB84                            ;   EOR.L       D5,D4
6A0A                            ;   BPL.B       0064
4480                            ;   NEG.L       D0
4A81                            ;   TST.L       D1
6704                            ;   BEQ.B       0064
5380                            ;   SUBQ.L      #1,D0
D285                            ;   ADD.L       D5,D1
4CDF 003C                       ;   MOVEM.L     (A7)+,D2-D5
4E75                            ;   RTS
;
;
#replace
4C41 0801                       ;   DIVSL.L     D1,D1:D0
4E75                            ;   RTS
#end


;*************************************************************************
;
; MUL
;
#match
#code
48E7 3000                       ;   MOVEM.L     D2-D3,-(A7)
4A80                            ;   TST.L       D0
5BC3                            ;   SMI         D3
6A02                            ;   BPL.B       000C
4480                            ;   NEG.L       D0
4A81                            ;   TST.L       D1
6A04                            ;   BPL.B       0014
4603                            ;   NOT.B       D3
4481                            ;   NEG.L       D1
4840                            ;   SWAP        D0
4841                            ;   SWAP        D1
4A40                            ;   TST.W       D0
670C                            ;   BEQ.B       0028
4A41                            ;   TST.W       D1
6706                            ;   BEQ.B       0026
003C 0002                       ;   ORI         #02,CCR
601C                            ;   BRA.B       0042
C340                            ;   EXG         D1,D0
4840                            ;   SWAP        D0
3401                            ;   MOVE.W      D1,D2
4841                            ;   SWAP        D1
C2C0                            ;   MULU.W      D0,D1
C0C2                            ;   MULU.W      D2,D0
4840                            ;   SWAP        D0
4A40                            ;   TST.W       D0
66E8                            ;   BNE.B       0020
D081                            ;   ADD.L       D1,D0
6BE4                            ;   BMI.B       0020
4A03                            ;   TST.B       D3
6702                            ;   BEQ.B       0042
4480                            ;   NEG.L       D0
4CDF 000C                       ;   MOVEM.L     (A7)+,D2-D3
4E75                            ;   RTS
;
;
#replace
4C01 0800                       ;   MULS.L      D1,D0
4E75                            ;   RTS
#end

