39 lines
494 B
ArmAsm
39 lines
494 B
ArmAsm
|
.define .dvi
|
||
|
|
||
|
! signed long divide
|
||
|
.text
|
||
|
.dvi:
|
||
|
move.l (sp)+,a0 ! return address
|
||
|
move.l (sp)+,d0
|
||
|
move.l (sp)+,d1
|
||
|
move.l d3,-(sp) ! save d3 and d4
|
||
|
move.l d4,-(sp)
|
||
|
clr.l d4
|
||
|
tst.l d0 ! divisor
|
||
|
bpl 1f
|
||
|
neg.l d0
|
||
|
not d4
|
||
|
1:
|
||
|
tst.l d1 ! dividend
|
||
|
bpl 2f
|
||
|
neg.l d1
|
||
|
not d4
|
||
|
swap d4
|
||
|
not d4
|
||
|
swap d4
|
||
|
2:
|
||
|
move.l d1,-(sp)
|
||
|
move.l d0,-(sp)
|
||
|
jsr .dvu
|
||
|
tst d4
|
||
|
beq 5f
|
||
|
neg.l d1 ! quotient
|
||
|
5:
|
||
|
tst.l d4
|
||
|
bpl 6f
|
||
|
neg.l d2 ! remainder
|
||
|
6:
|
||
|
move.l (sp)+,d4 ! restore d4 and d3
|
||
|
move.l (sp)+,d3
|
||
|
jmp (a0)
|