rendered paste body
inline float DotProduct(float *pInVecA, float *pInVecB, DWORD nLen) {
float rOutVal = 0;
_asm
{
lea ecx, rOutVal
mov esi, pInVecA
mov edi, pInVecB
xorps xmm7, xmm7
mov eax, nLen
xor edx, edx
mov ebx, 0xC
div ebx
BEGIN_12:
cmp eax, 0x0
je END_12
movaps xmm0, [esi]
movaps xmm1, [esi+0x10]
movaps xmm2, [esi+0x20]
prefetchnta [esi+0x30]
movaps xmm4, [edi]
movaps xmm5, [edi+0x10]
movaps xmm6, [edi+0x20]
prefetchnta [edi+0x30]
mulps xmm0, xmm4
add esi, 0x30
mulps xmm1, xmm5
add edi, 0x30
mulps xmm2, xmm6
haddps xmm0, xmm1
haddps xmm0, xmm2
haddps xmm0, xmm0
haddps xmm0, xmm0
addss xmm7, xmm0
dec eax
jmp BEGIN_12
END_12:
mov ax, dx
mov bl, 0x8
div bl
BEGIN_8:
cmp al, 0x0
je END_8
movaps xmm0, [esi]
movaps xmm1, [esi+0x10]
prefetchnta [esi+0x20]
movaps xmm4, [edi]
movaps xmm5, [edi+0x10]
prefetchnta [edi+0x20]
mulps xmm0, xmm4
add esi, 0x20
mulps xmm1, xmm5
add edi, 0x20
haddps xmm0, xmm1
haddps xmm0, xmm0
haddps xmm0, xmm0
addss xmm7, xmm0
dec al
jmp BEGIN_8
END_8:
mov al, ah
xor ah, ah
mov bl, 0x4
div bl
BEGIN_4:
cmp al, 0x0
je END_4
movaps xmm0, [esi]
prefetchnta [esi+0x10]
movaps xmm4, [edi]
prefetchnta [edi+0x10]
mulps xmm0, xmm4
add esi, 0x10
add edi, 0x10
haddps xmm0, xmm0
haddps xmm0, xmm0
addss xmm7, xmm0
dec al
jmp BEGIN_4
END_4:
BEGIN_1:
cmp ah, 0x0
je END_1
movss xmm0, [esi]
prefetchnta [esi+0x4]
movss xmm4, [edi]
prefetchnta [edi+0x4]
mulss xmm0, xmm4
add esi, 0x4
add edi, 0x4
addss xmm7, xmm0
dec ah
jmp BEGIN_1
END_1:
movss [ecx], xmm7
}
return rOutVal;
}
inline void TransformAdd2(float *pOutVec, float *pInVec, DWORD nLen) {
_asm
{
mov esi, pOutVec
mov edi, pInVec
mov eax, nLen
xor edx, edx
mov ebx, 0x10
div ebx
BEGIN_16:
cmp eax, 0x0
je END_16
movaps xmm0, [esi]
movaps xmm1, [esi+0x10]
movaps xmm2, [esi+0x20]
movaps xmm3, [esi+0x30]
prefetchnta [esi+0x40]
movaps xmm4, [edi]
movaps xmm5, [edi+0x10]
movaps xmm6, [edi+0x20]
movaps xmm7, [edi+0x30]
prefetchnta [edi+0x40]
addps xmm0, xmm4
add esi, 0x40
addps xmm1, xmm5
add edi, 0x40
addps xmm2, xmm6
addps xmm3, xmm7
movaps [esi-0x40], xmm0
movaps [esi-0x40+0x10], xmm1
movaps [esi-0x40+0x20], xmm2
movaps [esi-0x40+0x30], xmm3
dec eax
jmp BEGIN_16
END_16:
mov ax, dx
mov bl, 0x8
div bl
BEGIN_8:
cmp al, 0x0
je END_8
movaps xmm0, [esi]
movaps xmm1, [esi+0x10]
prefetchnta [esi+0x20]
movaps xmm4, [edi]
movaps xmm5, [edi+0x10]
prefetchnta [edi+0x20]
addps xmm0, xmm4
add esi, 0x20
addps xmm1, xmm5
add edi, 0x20
movaps [esi-0x20], xmm0
movaps [esi-0x20+0x10], xmm1
dec al
jmp BEGIN_8
END_8:
mov al, ah
xor ah, ah
mov bl, 0x4
div bl
BEGIN_4:
cmp al, 0x0
je END_4
movaps xmm0, [esi]
prefetchnta [esi+0x10]
movaps xmm4, [edi]
prefetchnta [edi+0x10]
addps xmm0, xmm4
add edi, 0x10
movss [esi], xmm0
add esi, 0x10
dec al
jmp BEGIN_4
END_4:
BEGIN_1:
cmp ah, 0x0
je END_1
movss xmm0, [esi]
prefetchnta [esi+0x4]
movss xmm4, [edi]
prefetchnta [edi+0x4]
addss xmm0, xmm4
add edi, 0x4
movss [esi], xmm0
add esi, 0x4
dec ah
jmp BEGIN_1
END_1:
}
}