21 lines
408 B
ArmAsm
21 lines
408 B
ArmAsm
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||
|
.sect .text
|
||
|
.define .mli8
|
||
|
|
||
|
yl=4
|
||
|
yh=8
|
||
|
! xl in eax
|
||
|
! xh in edx
|
||
|
|
||
|
.mli8:
|
||
|
! x * y = (xh + xl) * (yh + yl)
|
||
|
! = xh * yh + xh * yl + xl * yh + xl * yl
|
||
|
! The term xh * yh overflows to zero.
|
||
|
mov ecx,eax
|
||
|
imul ecx,yh(esp) ! ecx = xl * yh
|
||
|
imul edx,yl(esp) ! edx = xh * yl
|
||
|
add ecx,edx
|
||
|
mul yl(esp) ! edx:eax = xl * yl
|
||
|
add edx,ecx ! edx:eax = x * y
|
||
|
ret 8
|