42 lines
550 B
ArmAsm
42 lines
550 B
ArmAsm
.define .mlu
|
|
.sect .text
|
|
.sect .rom
|
|
.sect .data
|
|
.sect .bss
|
|
|
|
! entry : d0 multiplicand
|
|
! d1 multiplier
|
|
! exit : d0 high order result
|
|
! d1 low order result
|
|
|
|
.sect .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)
|