ack/mach/m68k2/libem/mlu.s

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)