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(); } }
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; } }
protected MutatingUnaryPrimitive(UnaryPrimitiveOps unaryOp) : base(Signatures.DefineMutatingUnaryFunction("Accumulate" + unaryOp.ToString(), unaryOp.GetExpectedInputType())) { }
protected PureUnaryPrimitive(UnaryPrimitiveOps unaryOp) : base(Signatures.DefinePureUnaryFunction(unaryOp.ToString(), unaryOp.GetExpectedInputType(), unaryOp.GetExpectedInputType())) { }
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(); }
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(); }