This repository has been archived on 2024-02-26. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
MyPresenter1.0/bgrabitmap/phongdrawsse.inc
2015-02-08 16:52:18 -08:00

164 lines
3.5 KiB
PHP

asm
//vL := vLS- vP*LightDestFactor;
movups xmm4, vP
movups xmm6,LightDestFactor4
mulps xmm6, xmm4 //keep xmm4 = vP
movaps xmm0, xmm1
subps xmm0, xmm6
movups xmm2, vV //preload xmm2 (A)
//normalize(vL);
movaps xmm6, xmm0 //save
mulps xmm0, xmm0
{$IFDEF PARAM_USESSE3}
haddps xmm0,xmm0
haddps xmm0,xmm0
{$ELSE}
//mix1
movaps xmm7, xmm0
shufps xmm7, xmm7, $4e
addps xmm0, xmm7
//mix2
movaps xmm7, xmm0
shufps xmm7, xmm7, $11
addps xmm0, xmm7
{$ENDIF}
//1/sqrt
rsqrtps xmm0, xmm0
mulps xmm0, xmm6 //apply
//vH := vL + vV; (A)
//xmm2 = vV
addps xmm2, xmm0
//vectproduct(vS1,vS2,vN);
movups xmm6, vS1
shufps xmm6, xmm6, Shift231
movups xmm7, vS2
shufps xmm7, xmm7, Shift312
movaps xmm3,xmm6
mulps xmm3,xmm7
movups xmm6, vS1
shufps xmm6, xmm6, Shift312
movups xmm7, vS2
shufps xmm7, xmm7, Shift231
mulps xmm7,xmm6
subps xmm3,xmm7
//end of vectproduct
//normalize(vH);
movaps xmm6, xmm2 //save
mulps xmm2, xmm2
{$IFDEF PARAM_USESSE3}
haddps xmm2,xmm2
haddps xmm2,xmm2
{$ELSE}
//mix1
movaps xmm7, xmm2
shufps xmm7, xmm7, $4e
addps xmm2, xmm7
//mix2
movaps xmm7, xmm2
shufps xmm7, xmm7, $11
addps xmm2, xmm7
{$ENDIF}
//1/sqrt
rsqrtps xmm2, xmm2
mulps xmm2, xmm6 //apply
//normalize(vN);
movaps xmm6, xmm3 //save
mulps xmm3, xmm3
{$IFDEF PARAM_USESSE3}
haddps xmm3,xmm3
haddps xmm3,xmm3
{$ELSE}
//mix1
movaps xmm7, xmm3
shufps xmm7, xmm7, $4e
addps xmm3, xmm7
//mix2
movaps xmm7, xmm3
shufps xmm7, xmm7, $11
addps xmm3, xmm7
{$ENDIF}
//1/sqrt
rsqrtps xmm3, xmm3
mulps xmm3, xmm6 //apply
//LdotN := vN * vL;
movups xmm5, xmm3
mulps xmm5, xmm0
//mix1
movaps xmm7, xmm5
shufps xmm7, xmm7, $4e
addps xmm5, xmm7
//mix2
movaps xmm7, xmm5
shufps xmm7, xmm7, $11
addps xmm5, xmm7
//:=
movss LdotN, xmm5
//vD := vLS-vP;
movaps xmm5, xmm1
subps xmm5, xmm4
//dist := sqrt(vD*vD);
mulps xmm5, xmm5
{$IFDEF PARAM_USESSE3}
haddps xmm5,xmm5
haddps xmm5,xmm5
{$ELSE}
//mix1
movaps xmm7, xmm5
shufps xmm7, xmm7, $4e
addps xmm5, xmm7
//mix2
movaps xmm7, xmm5
shufps xmm7, xmm7, $11
addps xmm5, xmm7
{$ENDIF}
//:= sqrt
sqrtss xmm5,xmm5
movss dist, xmm5
//NH := vH * vN;
movups xmm6, xmm2
mulps xmm6, xmm3
{$IFDEF PARAM_USESSE3}
haddps xmm6,xmm6
haddps xmm6,xmm6
{$ELSE}
//mix1
movaps xmm7, xmm6
shufps xmm7, xmm7, $4e
addps xmm6, xmm7
//mix2
movaps xmm7, xmm6
shufps xmm7, xmm7, $11
addss xmm6, xmm7
{$ENDIF}
//:=
movss NH, xmm6
end;