18#include "kernels/Utils.h"
32 int32_t &input_multiplier,
int &input_left_shift)
34 const auto input_dtype = Tensor::element_type(input);
46 input_multiplier =
static_cast<int32_t
>(std::round(q * (1ll << 31)));
83 double multiplier =
static_cast<double>(Tensor::scale(input)) * 4096.0 * 3.0;
86 while (multiplier <= 32767.0 / 2.0 && input_left_shift <= 30)
89 multiplier = multiplier * 2.0;
92 input_multiplier =
static_cast<int32_t
>(multiplier);
101 assert(
false &&
"Unsupported type");
107void evalInteger(
const circle::Tensor *input,
const circle::Tensor *output,
110 int32_t input_zero_point = 0;
112 int32_t input_multiplier = 0;
113 int input_left_shift = 0;
126 const auto input_dtype = Tensor::element_type(input);
134 flat_size, kernels::getTensorData<int8_t>(input_data), kernels::getTensorData<int8_t>(output_data));
139 kernels::getTensorData<int16_t>(input_data),
140 kernels::getTensorData<int16_t>(output_data));
143 assert(
false &&
"Not support yet");
153 Tensor::element_type(kernel.
output()));
167 switch (Tensor::element_type(kernel.
input()))
170 case DataType::FLOAT32:
198 assert(
false &&
"Unsupported type");
void makeInplaceOperation(const circle::Tensor *src_tensor, const circle::Tensor *dst_tensor)
bool is_inplace_op(const circle::Operator *op)
uint8_t * getDataByTensor(const circle::Tensor *raw_tensor)
const circle::Tensor * output() const
const circle::Tensor * input() const
#define LUCI_INTERPRETER_CHECK(cond)
bool checkedLog2(const float x, int *log2_result)
int calculateInputRadius(int input_integer_bits, int input_left_shift, int total_signed_bits)
luci_interpreter::RuntimeShape getTensorRuntimeShape(const circle::Tensor *circle_tensor, BaseRuntimeGraph *runtime_graph)
void Tanh(const int flat_size, const float *input_data, float *output_data)
void evalInteger(const circle::Tensor *input, const circle::Tensor *output, BaseRuntimeGraph *runtime_graph)
void execute_kernel_CircleTanh(const circle::Operator *cur_op, BaseRuntimeGraph *runtime_graph)
void configure_kernel_CircleTanh(const circle::Operator *cur_op, BaseRuntimeGraph *runtime_graph)
T must_cast(loco::Node *node)