I had hoped to divide by 10 with SIMD instructions, but somehow it fails. Do out math experts have an explanation?
include \masm32\include\masm32rt.inc
.686p
.xmm
.code
MyQ dq 123456789
MyQD dd 123456789
Magic dq 0CCCCCCCCCCCCCCCDh
MagicD dd 0CCCCCCCDh
start:
mov eax, MyQD
mov ecx, MagicD
mul ecx ; multiply DWORDs, result is 64 bits
shr edx, 3
print str$(edx), " result magic D", 13, 10 ; 12345678
movlps xmm0, MyQ
movlps xmm1, Magic
pclmullqlqdq xmm0, xmm1 ; multiply QWORDs, result is 128 bits
movhlps xmm0, xmm0 ; move high QWORD to lo QWORD
psrlq xmm0, 3 ; see shr edx, 3
movd eax, xmm0
inkey str$(eax), " result magic Q", 13, 10 ; garbage
exit
end start