CSPspEmu.Core.Cpu.Emitter.CpuEmitter.vrot C# (CSharp) Method

vrot() public method

Vector ROTate
public vrot ( ) : AstNodeStm
return AstNodeStm
        public AstNodeStm vrot()
        {
            uint imm5 = Instruction.IMM5;
            var CosIndex = BitUtils.Extract(imm5, 0, 2);
            var SinIndex = BitUtils.Extract(imm5, 2, 2);
            bool NegateSin = BitUtils.ExtractBool(imm5, 4);

            var Dest = VEC_VD;
            var Src = CEL_VS;

            AstNodeExpr Sine = ast.CallStatic((Func<float, float>)MathFloat.SinV1, Src.Get());
            AstNodeExpr Cosine = ast.CallStatic((Func<float, float>)MathFloat.CosV1, Src.Get());
            if (NegateSin) Sine = -Sine;

            //Console.WriteLine("{0},{1},{2}", CosIndex, SinIndex, NegateSin);

            return Dest.SetVector((Index) =>
            {
                if (Index == CosIndex) return Cosine;
                if (Index == SinIndex) return Sine;
                return (SinIndex == CosIndex) ? Sine : 0f;
            }, PC);
        }
CpuEmitter