void FootOfPerpendicular(void *v0, const void *va, const void *vb, const void *vp)
{
asm __volatile__ ("
lqc2 vf16,0x00(%1) # va
lqc2 vf17,0x00(%2) # vb
lqc2 vf18,0x00(%3) # vp
vsub.xyz vf19,vf17,vf16 # v = vb - va
vsub.xyz vf20,vf16,vf18 # vf20 = (va - vp) * v
vmul.xyz vf20,vf20,vf19
vmulax.w ACC,vf00,vf20x # vf20.w = vf20x + vf20y + vf20z
vmadday.w ACC,vf00,vf20y
vmaddz.w vf20,vf00,vf20z
vmul.xyz vf21,vf19,vf19 # vf21 = v^2
vsuba.w ACC,vf00,vf00 # vf21.w = 0 - vf21.x - vf21.y - vf21.z
vmsubax.w ACC,vf00,vf21x
vmsubay.w ACC,vf00,vf21y
vmsubz.w vf21,vf00,vf21z
vdiv Q,vf20w,vf21w # Q = vf20.w / vf21.w
vadda.xyz ACC,vf00,vf16 # vf18 = va + v * Q
vwaitq
vmaddq.xyz vf18,vf19,Q
sqc2 vf18,0x00(%0)
"
: /* No Output */
: "r"(v0), "r"(va), "r"(vb), "r"(vp)
: "memory"
);
}