Esempio n. 1
0
        public static NIType GetExpectedInputType(this UnaryPrimitiveOps unaryOp)
        {
            switch (unaryOp)
            {
            case UnaryPrimitiveOps.Increment:
                return(PFTypes.Int32);

            case UnaryPrimitiveOps.Not:
                return(PFTypes.Boolean);

            default:
                throw new NotImplementedException();
            }
        }
Esempio n. 2
0
        private void EmitUnaryOperationOnVariable(VariableReference variable, UnaryPrimitiveOps operation)
        {
            switch (operation)
            {
            case UnaryPrimitiveOps.Increment:
                _builder.EmitLoadIntegerImmediate(1);
                LoadValueAsReference(variable);
                _builder.EmitDerefInteger();
                _builder.EmitAdd();
                break;

            case UnaryPrimitiveOps.Not:
                _builder.EmitLoadIntegerImmediate(1);
                LoadValueAsReference(variable);
                _builder.EmitDerefInteger();
                _builder.EmitSubtract();
                break;
            }
        }
Esempio n. 3
0
 protected MutatingUnaryPrimitive(UnaryPrimitiveOps unaryOp)
     : base(Signatures.DefineMutatingUnaryFunction("Accumulate" + unaryOp.ToString(), unaryOp.GetExpectedInputType()))
 {
 }
Esempio n. 4
0
 protected PureUnaryPrimitive(UnaryPrimitiveOps unaryOp)
     : base(Signatures.DefinePureUnaryFunction(unaryOp.ToString(), unaryOp.GetExpectedInputType(), unaryOp.GetExpectedInputType()))
 {
 }
Esempio n. 5
0
        private static void CompileMutatingUnaryPrimitive(FunctionCompiler compiler, FunctionalNode primitiveNode, UnaryPrimitiveOps operation)
        {
            VariableReference input = primitiveNode.InputTerminals.ElementAt(0).GetTrueVariable();

            compiler.LoadValueAsReference(input);
            compiler.EmitUnaryOperationOnVariable(input, operation);
            compiler._builder.EmitStoreInteger();
        }
Esempio n. 6
0
        private static void CompilePureUnaryPrimitive(FunctionCompiler compiler, FunctionalNode primitiveNode, UnaryPrimitiveOps operation)
        {
            VariableReference input  = primitiveNode.InputTerminals.ElementAt(0).GetTrueVariable(),
                              output = primitiveNode.OutputTerminals.ElementAt(1).GetTrueVariable();

            compiler.LoadLocalAllocationReference(output);
            compiler.EmitUnaryOperationOnVariable(input, operation);
            compiler._builder.EmitStoreInteger();
        }