38 lines
498 B
ArmAsm
38 lines
498 B
ArmAsm
|
.define .mlu
|
||
|
|
||
|
! entry : d0 multiplicand
|
||
|
! d1 multiplier
|
||
|
! exit : d0 high order result
|
||
|
! d1 low order result
|
||
|
|
||
|
.text
|
||
|
.mlu:
|
||
|
move.l (sp)+,a1
|
||
|
move.l (sp)+,d1
|
||
|
move.l (sp)+,d0
|
||
|
movem.l d3/d4/d6,-(sp)
|
||
|
move.l d1,d3
|
||
|
move.l d1,d2
|
||
|
swap d2
|
||
|
move.l d2,d4
|
||
|
mulu d0,d1
|
||
|
mulu d0,d2
|
||
|
swap d0
|
||
|
mulu d0,d3
|
||
|
mulu d4,d0
|
||
|
clr.l d6
|
||
|
swap d1
|
||
|
add d2,d1
|
||
|
addx.l d6,d0
|
||
|
add d3,d1
|
||
|
addx.l d6,d0
|
||
|
swap d1
|
||
|
clr d2
|
||
|
clr d3
|
||
|
swap d2
|
||
|
swap d3
|
||
|
add.l d2,d0
|
||
|
add.l d3,d0
|
||
|
movem.l (sp)+,d3/d4/d6
|
||
|
jmp (a1)
|