public AstNodeStm vqmul()
{
var v1 = VEC(VS, VType.VFloat, 4);
var v2 = VEC(VT, VType.VFloat, 4);
return VEC(VD, VType.VFloat, 4).SetVector(Index =>
{
switch (Index)
{
case 0: return +(v1[0] * v2[3]) + (v1[1] * v2[2]) - (v1[2] * v2[1]) + (v1[3] * v2[0]);
case 1: return -(v1[0] * v2[2]) + (v1[1] * v2[3]) + (v1[2] * v2[0]) + (v1[3] * v2[1]);
case 2: return +(v1[0] * v2[1]) - (v1[1] * v2[0]) + (v1[2] * v2[3]) + (v1[3] * v2[2]);
case 3: return -(v1[0] * v2[0]) - (v1[1] * v2[1]) - (v1[2] * v2[2]) + (v1[3] * v2[3]);
default: throw (new InvalidOperationException("vqmul.Assert"));
}
}, PC);
}