コード例 #1
0
        private static AVec Fmla_Ve(AVec Res, AVec LHS, AVec RHS, int SIdx, int Size, int Bytes)
        {
            int Elems = Bytes >> Size;

            if (Size == 0)
            {
                float R = RHS.ExtractSingle(SIdx);

                for (int Index = 0; Index < Elems; Index++)
                {
                    float L      = LHS.ExtractSingle(Index);
                    float Addend = Res.ExtractSingle(Index);

                    Res = AVec.InsertSingle(Res, Index, Addend + L * R);
                }
            }
            else
            {
                double R = RHS.ExtractDouble(SIdx);

                for (int Index = 0; Index < Elems; Index++)
                {
                    double L      = LHS.ExtractDouble(Index);
                    double Addend = Res.ExtractDouble(Index);

                    Res = AVec.InsertDouble(Res, Index, Addend + L * R);
                }
            }

            return(Res);
        }
コード例 #2
0
        private static AVec Fsub(AVec LHS, AVec RHS, int Size, int Bytes)
        {
            AVec Res = new AVec();

            int Elems = Bytes >> Size;

            if (Size == 0)
            {
                for (int Index = 0; Index < Elems; Index++)
                {
                    float L = LHS.ExtractSingle(Index);
                    float R = RHS.ExtractSingle(Index);

                    Res = AVec.InsertSingle(Res, Index, L - R);
                }
            }
            else
            {
                for (int Index = 0; Index < Elems; Index++)
                {
                    double L = LHS.ExtractDouble(Index);
                    double R = RHS.ExtractDouble(Index);

                    Res = AVec.InsertDouble(Res, Index, L - R);
                }
            }

            return(Res);
        }
コード例 #3
0
        private static AVec Fcvtzu_V(AVec Vector, int FBits, int Size, int Bytes)
        {
            AVec Res = new AVec();

            int Elems = Bytes >> Size;

            if (Size == 0)
            {
                for (int Index = 0; Index < Elems; Index++)
                {
                    float Value = Vector.ExtractSingle(Index);

                    Res = InsertVec(Res, Index, Size + 2, SatSingleToUInt32(Value, FBits));
                }
            }
            else
            {
                for (int Index = 0; Index < Elems; Index++)
                {
                    double Value = Vector.ExtractDouble(Index);

                    Res = InsertVec(Res, Index, Size + 2, SatDoubleToUInt64(Value, FBits));
                }
            }

            return(Res);
        }
コード例 #4
0
 public static float VectorExtractSingle(AVec Vector, int Index)
 {
     return(Vector.ExtractSingle(Index));
 }