Ejemplo n.º 1
0
        public override AddressingMode GetAddressingMode(AstScope scope)
        {
            var lhsMode = LHS.GetAddressingMode(scope);
            var rhsMode = RHS.GetAddressingMode(scope);

            if (lhsMode == AddressingMode.Immediate && rhsMode == AddressingMode.Immediate)
            {
                return(AddressingMode.Immediate);
            }

            if (lhsMode == AddressingMode.Immediate && rhsMode == AddressingMode.Register)
            {
                return(AddressingMode.RegisterPlusImmediate);
            }

            if (lhsMode == AddressingMode.Register && rhsMode == AddressingMode.Immediate)
            {
                return(AddressingMode.RegisterPlusImmediate);
            }

            if (lhsMode == AddressingMode.Immediate && rhsMode == AddressingMode.RegisterPlusImmediate)
            {
                return(AddressingMode.RegisterPlusImmediate);
            }

            if (lhsMode == AddressingMode.RegisterPlusImmediate && rhsMode == AddressingMode.Immediate)
            {
                return(AddressingMode.RegisterPlusImmediate);
            }

            return(AddressingMode.Invalid);
        }
Ejemplo n.º 2
0
 public override void EmitOp(DMObject dmObject, DMProc proc, DMReference reference)
 {
     proc.PushReferenceValue(reference);
     RHS.EmitPushValue(dmObject, proc);
     proc.BitShiftRight();
     proc.Assign(reference);
 }
Ejemplo n.º 3
0
 public override Expression Clone()
 {
     return(new BinaryOperator(LHS.Clone(), RHS.Clone(), OpcodeStr)
     {
         DebugText = this.DebugText,
         Declaration = this.Declaration,
         String = this.String
     });
 }
Ejemplo n.º 4
0
        public override void EmitPushValue(DMObject dmObject, DMProc proc)
        {
            string endLabel = proc.NewLabelName();

            LHS.EmitPushValue(dmObject, proc);
            proc.BooleanAnd(endLabel);
            RHS.EmitPushValue(dmObject, proc);
            proc.AddLabel(endLabel);
        }
Ejemplo n.º 5
0
        public void ToStringTest()
        {
            var rhs = new RHS('a', new List <string>()
            {
                "(q0bq1)", "(q2aq1)", "(q0bq0)"
            });

            Assert.AreEqual(rhs.ToString(), "a(q0bq1)(q2aq1)(q0bq0)");
        }
Ejemplo n.º 6
0
        public override string ToString()
        {
            var orderedRHS = RHS
                             .Select(e => new { Priority = e.IsEpsilon ? 1 : 0, Expression = e })
                             .OrderBy(e => e.Priority)
                             .ThenBy(e => e.Expression.Count)
                             .Select(e => e.Expression);

            return($"{Value} {Grammer.RuleSeperator} {string.Join($" {Grammer.ExpressionSeperator} ", orderedRHS)}");
        }
Ejemplo n.º 7
0
        private void rhs(DS ds, Metric value)
        {
            string key = ds.ToString();

            if (RHS.ContainsKey(key))
            {
                RHS.Remove(key);
            }
            RHS.Add(key, value);
        }
Ejemplo n.º 8
0
        public override string ToString()
        {
            StringBuilder sbFormat = new StringBuilder();

            sbFormat.Append(LHS.ToString());
            sbFormat.Append(" ");
            sbFormat.Append(ProtoCore.VHDL.Utils.GetBinaryOperatorString(Optr));
            sbFormat.Append(" ");
            sbFormat.Append(RHS.ToString());
            return(sbFormat.ToString());
        }
Ejemplo n.º 9
0
        public override bool Equals(object obj)
        {
            BranchingLeaf <t1, t2, t3> tempLeaf = obj as BranchingLeaf <t1, t2, t3>;

            if (tempLeaf == null || !obj.GetType().Equals(this.GetType()))
            {
                return(false);
            }

            return(LHS.Equals(tempLeaf.LHS) && RHS.Equals(tempLeaf.RHS));
        }
Ejemplo n.º 10
0
        private Metric rhs(DS ds)
        {
            Metric r;

            if (RHS.TryGetValue(ds.ToString(), out r))
            {
                return(r);
            }
            else
            {
                return(Metric.PositiveInfinity);
            }
        }
Ejemplo n.º 11
0
        public override string ToString()
        {
            bool   showBrackets = true;
            string lhs          = string.Empty;

            if (LHS is Integer)
            {
                showBrackets = false;
            }

            if ((LHS is AddOperation || LHS is MinusOperation) && (this is AddOperation || this is MinusOperation) ||
                (LHS is MultiplyOperation && this is MultiplyOperation))
            {
                showBrackets = false;
            }

            if (showBrackets)
            {
                lhs = string.Format("({0})", LHS.ToString());
            }
            else
            {
                lhs = LHS.ToString();
            }

            showBrackets = true;
            string rhs = string.Empty;

            if (RHS is Integer)
            {
                showBrackets = false;
            }

            if ((this is AddOperation && RHS is AddOperation) ||
                (this is AddOperation && RHS is MinusOperation) ||
                (RHS is MultiplyOperation && this is MultiplyOperation))
            {
                showBrackets = false;
            }

            if (showBrackets)
            {
                rhs = string.Format("({0})", RHS.ToString());
            }
            else
            {
                rhs = RHS.ToString();
            }

            return(string.Format("{0} {1} {2}", lhs, symbol, rhs));
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Override the != equality operator
        /// </summary>
        /// <param name="LHS">Course 1 to compare</param>
        /// <param name="RHS">Course 2 to compare</param>
        /// <returns>true if both instances of LHS and RHS are NOT equal to each other.</returns>
        public static bool operator !=(Course LHS, Course RHS)
        {
            if (((object)LHS) == null)
            {
                if (((object)RHS) == null)
                {
                    return(false);
                }
                else
                {
                    return(!RHS.Equals((object)LHS));
                }
            }

            return(!LHS.Equals((object)RHS));
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Override the == equality operator
        /// </summary>
        /// <param name="LHS">Course 1 to compare</param>
        /// <param name="RHS">Course 2 to compare</param>
        /// <returns>true if both instances of LHS and RHS are equal to each other.</returns>
        public static bool operator ==(Course LHS, Course RHS)
        {
            if (((object)LHS) == null)
            {
                if (((object)RHS) == null)
                {
                    return(true);
                }
                else
                {
                    return(RHS.Equals((object)LHS));
                }
            }

            return(LHS.Equals((object)RHS));
        }
Ejemplo n.º 14
0
        public override void EmitOp(DMObject dmObject, DMProc proc, DMReference reference)
        {
            string skipLabel = proc.NewLabelName();
            string endLabel  = proc.NewLabelName();

            proc.PushReferenceValue(reference);
            proc.JumpIfTrue(skipLabel);

            RHS.EmitPushValue(dmObject, proc);
            proc.Assign(reference);
            proc.Jump(endLabel);

            proc.AddLabel(skipLabel);
            proc.PushReferenceValue(reference);
            proc.AddLabel(endLabel);
        }
Ejemplo n.º 15
0
        public override long GetImmediateValue(AstScope scope)
        {
            var lhsMode = LHS.GetAddressingMode(scope);
            var rhsMode = RHS.GetAddressingMode(scope);

            long val = 0;

            if ((lhsMode & AddressingMode.Immediate) != 0)
            {
                val += LHS.GetImmediateValue(scope);
            }
            if ((rhsMode & AddressingMode.Immediate) != 0)
            {
                val += RHS.GetImmediateValue(scope);
            }

            return(val);
        }
Ejemplo n.º 16
0
        public override void CheckTypes(ErrorHandler errorHandler)
        {
            LHS.CheckTypes(errorHandler);
            RHS.CheckTypes(errorHandler);
            bool canApply   = true;
            var  intType    = new PrimType(PrimTypeName.INT);
            var  floatType  = new PrimType(PrimTypeName.FLOAT);
            var  boolType   = new PrimType(PrimTypeName.BOOL);
            var  stringType = new PrimType(PrimTypeName.STRING);

            if (Op == BinaryOp.ADD && !CanBothConvertTo(stringType, errorHandler) &&
                !CanBothConvertTo(intType, errorHandler) && !CanBothConvertTo(floatType, errorHandler))
            {
                canApply = false;
            }
            if ((Op == BinaryOp.AND || Op == BinaryOp.OR) && !CanBothConvertTo(boolType, errorHandler))
            {
                canApply = false;
            }
            if ((Op == BinaryOp.DIV || Op == BinaryOp.MUL || Op == BinaryOp.SUB) &&
                !CanBothConvertTo(intType, errorHandler) && !CanBothConvertTo(floatType, errorHandler))
            {
                canApply = false;
            }
            if (Op == BinaryOp.MOD && !CanBothConvertTo(intType, errorHandler))
            {
                canApply = false;
            }
            if ((Op == BinaryOp.L || Op == BinaryOp.LE || Op == BinaryOp.G || Op == BinaryOp.GE || Op == BinaryOp.NE ||
                 Op == BinaryOp.EQ) && !CanBothConvertTo(boolType, errorHandler))
            {
                canApply = false;
            }
            if ((Op == BinaryOp.B_AND || Op == BinaryOp.B_NOT || Op == BinaryOp.B_OR || Op == BinaryOp.B_SHL ||
                 Op == BinaryOp.B_SHR || Op == BinaryOp.B_XOR) && !CanBothConvertTo(intType, errorHandler))
            {
                canApply = false;
            }

            if (!canApply)
            {
                errorHandler.AddMessage(Severity.Error, $"Cannot apply operator {OpName(Op)} to operands of types {LHS.GetExprType(errorHandler)} ans {RHS.GetExprType(errorHandler)}", OpToken);
            }
        }
Ejemplo n.º 17
0
        public override string ToString()
        {
            StringBuilder sbFormat = new StringBuilder();

            sbFormat.Append(LHS.ToString());
            sbFormat.Append(" ");
            if (IsSignalAssignment)
            {
                sbFormat.Append(ProtoCore.VHDL.Constants.Naming.kSignalAssignSymbol);
            }
            else
            {
                sbFormat.Append(ProtoCore.VHDL.Constants.Naming.kVariableAssignSymbol);
            }
            sbFormat.Append(" ");
            sbFormat.Append(RHS.ToString());
            sbFormat.Append(";");
            return(sbFormat.ToString());
        }
        public override Value code(IRBuilder builder)
        {
            Value L = LHS.code(builder);
            Value R = RHS.code(builder);

            // import strcmp function
            LLVM.Type[]  argTypes          = new LLVM.Type[] { Parser.i8p, Parser.i8p };
            FunctionType stringStringToInt = new FunctionType(Parser.i8, argTypes);
            Value        strcmp            = Parser.module.GetOrInsertFunction("strcmp", stringStringToInt);

            LLVM.Value[] args = new LLVM.Value[] { L, R };

            Value strCmpResult = builder.CreateCall(strcmp, args);

            Predicate comparison = (relation == EqualityRelation.EQUAL) ? Predicate.Equal : Predicate.NotEqual;

            Value output = builder.CreateFCmp(comparison, strCmpResult, Parser.zero, "tempStrEqExp");

            return(output);
        }
Ejemplo n.º 19
0
        public override Value code(IRBuilder builder)
        {
            Value     L = LHS.code(builder);
            Value     R = RHS.code(builder);
            Predicate fcmpPredicate;

            switch (rel)
            {
            case Relation.EQUAL:
                fcmpPredicate = Predicate.OrderedEqual;
                break;

            case Relation.NOTEQUAL:
                fcmpPredicate = Predicate.OrderedNotEqual;
                break;

            case Relation.GREATERTHAN:
                fcmpPredicate = Predicate.OrderedGreaterThan;
                break;

            case Relation.LESSTHAN:
                fcmpPredicate = Predicate.OrderedLessThan;
                break;

            case Relation.NOTGREATER:
                fcmpPredicate = Predicate.OrderedLessOrEqual;
                break;

            case Relation.NOTLESS:
                fcmpPredicate = Predicate.OrderedGreaterOrEqual;
                break;

            default:
                fcmpPredicate = Predicate.OrderedEqual;
                break;
            }
            return(builder.CreateFCmp(fcmpPredicate, L, R, "tempNumEqExp"));
        }
Ejemplo n.º 20
0
            /// <inheritdoc />
            /// <summary>
            ///     Evaluates <see langword="this" /> instance.
            /// </summary>
            /// <returns><see cref="T:System.Object" />.</returns>
            /// <exception cref="T:System.Exception">
            /// </exception>
            public override object Evaluate()
            {
                Test.Evaluate();
                LHS.Evaluate();
                RHS.Evaluate();
                if (Test.EvaluatedValue == null)
                {
                    throw new Exception("Test null value");
                }

                if (LHS.EvaluatedValue == null)
                {
                    throw new Exception("LHS null value");
                }

                if (RHS.EvaluatedValue == null)
                {
                    throw new Exception("RHS null value");
                }

                EvaluatedValue = Convert.ToBoolean(Test.Evaluate()) ? LHS.Evaluate() : RHS.Evaluate();
                EvaluatedType  = Helper.GetType(EvaluatedValue);
                return(EvaluatedValue);
            }
Ejemplo n.º 21
0
 public override void EmitPushValue(DMObject dmObject, DMProc proc)
 {
     LHS.EmitPushValue(dmObject, proc);
     RHS.EmitPushValue(dmObject, proc);
     proc.NotEquivalent();
 }
Ejemplo n.º 22
0
        private void RKstageImplicit(double PhysTime, double dt, double[][] k, int s, BlockMsrMatrix[] Mass, CoordinateVector u0, double ActualLevSetRelTime, double[] RK_as, double RelTime)
        {
            Debug.Assert(s < m_RKscheme.Stages);
            Debug.Assert(m_RKscheme.c[s] > 0);
            Debug.Assert(RK_as[s] != 0);

            int Ndof = m_CurrentState.Count;

            // =========
            // RHS setup
            // =========

            m_ImplStParams = new ImplicitStage_AssiParams()
            {
                m_CurrentDt           = dt,
                m_CurrentPhystime     = PhysTime,
                m_IterationCounter    = 0,
                m_ActualLevSetRelTime = ActualLevSetRelTime,
                m_RelTime             = RelTime,
                m_k     = k,
                m_u0    = u0,
                m_Mass  = Mass,
                m_RK_as = RK_as,
                m_s     = s
            };


            // ================
            // solve the system
            // ================

            NonlinearSolver         nonlinSolver;
            ISolverSmootherTemplate linearSolver;

            GetSolver(out nonlinSolver, out linearSolver);


            if (RequiresNonlinearSolver)
            {
                // Nonlinear Solver (Navier-Stokes)
                // --------------------------------

                nonlinSolver.SolverDriver(m_CurrentState, default(double[])); // Note: the RHS is passed as the affine part via 'this.SolverCallback'
            }
            else
            {
                // Linear Solver (Stokes)
                // ----------------------


                // build the saddle-point matrix
                BlockMsrMatrix System, MaMa;
                double[]       RHS;
                this.AssembleMatrixCallback(out System, out RHS, out MaMa, CurrentStateMapping.Fields.ToArray(), true);
                RHS.ScaleV(-1);

                // update the multigrid operator
                MultigridOperator mgOperator = new MultigridOperator(this.MultigridBasis, CurrentStateMapping,
                                                                     System, MaMa,
                                                                     this.Config_MultigridOperator);

                // init linear solver
                linearSolver.Init(mgOperator);

                // try to solve the saddle-point system.
                mgOperator.UseSolver(linearSolver, m_CurrentState, RHS);

                // 'revert' agglomeration
                m_CurrentAgglomeration.Extrapolate(CurrentStateMapping);
            }

            // ================
            // reset
            // ================
            m_ImplStParams = null;
        }
Ejemplo n.º 23
0
 public override void EmitPushValue(DMObject dmObject, DMProc proc)
 {
     LHS.EmitPushValue(dmObject, proc);
     RHS.EmitPushValue(dmObject, proc);
     proc.BitShiftRight();
 }
Ejemplo n.º 24
0
 public override void EmitPushValue(DMObject dmObject, DMProc proc)
 {
     LHS.EmitPushValue(dmObject, proc);
     RHS.EmitPushValue(dmObject, proc);
     proc.GreaterThan();
 }
Ejemplo n.º 25
0
 public override void EmitPushValue(DMObject dmObject, DMProc proc)
 {
     LHS.EmitPushValue(dmObject, proc);
     RHS.EmitPushValue(dmObject, proc);
     proc.BinaryOr();
 }
Ejemplo n.º 26
0
 /// <summary>
 ///
 /// </summary>
 /// <returns> subtract of the count of LHS & RHS </returns>
 public override double Evaluate() => (LHS.Evaluate() - RHS.Evaluate());
Ejemplo n.º 27
0
 public override void EmitPushValue(DMObject dmObject, DMProc proc)
 {
     LHS.EmitPushValue(dmObject, proc);
     RHS.EmitPushValue(dmObject, proc);
     proc.Multiply();
 }
Ejemplo n.º 28
0
 public override void EmitOp(DMObject dmObject, DMProc proc, DMReference reference)
 {
     RHS.EmitPushValue(dmObject, proc);
     proc.ModulusReference(reference);
 }
Ejemplo n.º 29
0
 public override void EmitPushValue(DMObject dmObject, DMProc proc)
 {
     LHS.EmitPushValue(dmObject, proc);
     RHS.EmitPushValue(dmObject, proc);
     proc.LessThanOrEqual();
 }
Ejemplo n.º 30
0
 public override void EmitPushValue(DMObject dmObject, DMProc proc)
 {
     LHS.EmitPushValue(dmObject, proc);
     RHS.EmitPushValue(dmObject, proc);
     proc.Subtract();
 }