home *** CD-ROM | disk | FTP | other *** search
-
- xdef ldivs
- xdef ldivu
- xdef lmulu * really signed
- xdef lmoddivu
-
- section one
-
- * divide D1 by D2
- * quotient in D1; remainder in D0
- lmoddivu
- cmp.l #$00FFFF,D2
- bgt .bigdiv
- move.w D1,A1
- clr.w D1
- swap D1
- divu D2,D1
- move.l D1,D0
- swap D1
- move.w A1,D0
- divu D2,D0
- move.w D0,D1
- clr.w D0
- swap D0
- rts
- .bigdiv
- move.l D1,D0
- clr.w D0
- swap D0
- swap D1
- clr.w D1
- move.l D2,A1
- moveq #$0F,D2
- 1$ add.l D1,D1
- addx.l D0,D0
- cmp.l D0,A1
- bgt 2$
- sub.l A1,D0
- addq.w #1,D1
- 2$ dbra D2,1$
- rts
-
- lmulu
- move.l D2,-(SP)
- move.l D0,D2
- mulu D1,D2
- move.l D2,A0
- move.l D0,D2
- swap D2
- mulu D1,D2
- swap D1
- mulu D1,D0
- add.l D2,D0
- swap D0
- clr.w D0
- add.l D0,A0
- move.l A0,D0
- move.l (SP)+,D2
- rts
-
- * remainder after unsigned divide D0 by D1
-
- * move.l D2,-(SP)
- * move.l D1,D2
- * move.l D0,D1
- * bsr lmoddivu
- * move.l (SP)+,D2
- * rts
-
- * unsigned divide D0 by D1
- ldivu
- move.l D2,-(SP)
- move.l D1,D2
- move.l D0,D1
- bsr lmoddivu
- move.l D1,D0
- move.l (SP)+,D2
- rts
-
- * signed remainder after signed divide D0 by D1
- * move.l D2,-(SP)
- * move.l D1,D2
- * bge lab736A
- * neg.l D2
- *lab736A
- * move.l D0,D1
- * moveq #0,D0
- * tst.l D1
- * bge lab7376
- * neg.l D1
- * not.l D0
- *lab7376
- * move.l D0,A0
- * bsr lmoddivu
- * move.w A0,D2
- * beq lab7382
- * neg.l D0
- *lab7382
- * move.l (SP)+,D2
- * rts
-
- ldivs
- move.l D2,-(SP)
- move.l D0,A0
- moveq #0,D0
- move.l D1,D2
- bge 1$ same as bpl
- neg.l D2
- not.l D0
- 1$ move.l A0,D1
- bge 2$ same as bpl
- neg.l D1
- not.l D0
- 2$ move.l D0,A0
- bsr lmoddivu
- move.l A0,D2
- beq 3$ were signs the same?
- neg.l D1
- 3$ move.l D1,D0
- move.l (SP)+,D2
- rts
-
- end
-
-