// Copyright (c) 2020, ARM Limited. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef OPS_ACTIVATION_FUNCS_H #define OPS_ACTIVATION_FUNCS_H #include "ewise_unary.h" #include "graph_node.h" using namespace tosa; namespace TosaReference { template class OpClamp : public UnaryNode { public: OpClamp(TosaAttributeBase* attribute_, TosaQuantInfoBase* qinfo_, uint64_t id_) : UnaryNode(Op_CLAMP, id_) { INIT_ATTRIBUTE(Clamp); register_fcn(); } static constexpr int32_t QMin = GetQMin::value; static constexpr int32_t QMax = GetQMax::value; using InEigenType = typename GetEigenType::type; using OutEigenType = typename GetEigenType::type; virtual int register_fcn(); protected: TosaClampAttribute* attribute; }; template class OpReluN : public UnaryNode { public: OpReluN(TosaAttributeBase* attribute_, TosaQuantInfoBase* qinfo_, uint64_t id_) : UnaryNode(Op_RELUN, id_) { INIT_ATTRIBUTE(ReluN); register_fcn(); } static constexpr int32_t QMin = GetQMin::value; static constexpr int32_t QMax = GetQMax::value; using InEigenType = typename GetEigenType::type; using OutEigenType = typename GetEigenType::type; virtual int register_fcn(); protected: TosaReluNAttribute* attribute; }; template class OpSigmoid : public UnaryNode { public: OpSigmoid(TosaAttributeBase* attribute_, TosaQuantInfoBase* qinfo_, uint64_t id_) : UnaryNode(Op_SIGMOID, id_) { register_fcn(); } static constexpr int32_t QMin = GetQMin::value; static constexpr int32_t QMax = GetQMax::value; using InEigenType = typename GetEigenType::type; using OutEigenType = typename GetEigenType::type; virtual int register_fcn(); }; template class OpTanh : public UnaryNode { public: OpTanh(TosaAttributeBase* attribute_, TosaQuantInfoBase* qinfo_, uint64_t id_) : UnaryNode(Op_TANH, id_) { register_fcn(); } static constexpr int32_t QMin = GetQMin::value; static constexpr int32_t QMax = GetQMax::value; using InEigenType = typename GetEigenType::type; using OutEigenType = typename GetEigenType::type; virtual int register_fcn(); }; }; // namespace TosaReference #endif