51 const circle::Tensor *input1;
52 const circle::Tensor *input2;
53 const circle::Tensor *output;
59 uint16_t input1_index = 0;
60 uint16_t input2_index = 0;
62 const circle::AddOptions *options;
66 runtime_kernel.
readKernel(op_index, runtime_context);
68 input1 = runtime_kernel.
inputs[input1TensorIdx];
69 input2 = runtime_kernel.
inputs[input2TensorIdx];
70 output = runtime_kernel.
outputs[outputTensorIdx];
71 assert(input1 !=
nullptr);
72 assert(input2 !=
nullptr);
73 assert(output !=
nullptr);
77 input1_data = runtime_kernel.
inputs_data[input1TensorIdx];
78 input2_data = runtime_kernel.
inputs_data[input2TensorIdx];
79 output_data = runtime_kernel.
outputs_data[outputTensorIdx];
80 assert(input1_data !=
nullptr);
81 assert(input2_data !=
nullptr);
82 assert(output_data !=
nullptr);
84 options = runtime_kernel.
first_operator->builtin_options_as_AddOptions();
86 input1_index = runtime_kernel.
inputs_index[input1TensorIdx];
87 input2_index = runtime_kernel.
inputs_index[input2TensorIdx];
100 if (input_1_dynamic_shape.flatSize() != 0)
101 input1_shape = input_1_dynamic_shape;
104 if (input_2_dynamic_shape.flatSize() != 0)
105 input2_shape = input_2_dynamic_shape;
112 switch (input1->type())
115 case circle::TensorType_FLOAT32:
118 ¶ms.float_activation_min, ¶ms.float_activation_max);
122 params, input1_shape, core::utils::castInputData<float>(input1_data), input2_shape,
123 core::utils::castInputData<float>(input2_data),
output_shape,
124 core::utils::castOutputData<float>(output_data));
130 core::utils::castInputData<float>(input2_data),
131 core::utils::castOutputData<float>(output_data));
136 case circle::TensorType_INT64:
139 ¶ms.int64_activation_min, ¶ms.int64_activation_max);
144 params, input1_shape, core::utils::castInputData<int64_t>(input1_data), input2_shape,
145 core::utils::castInputData<int64_t>(input2_data),
output_shape,
146 core::utils::castOutputData<int64_t>(output_data));
151 core::utils::castInputData<int64_t>(input1_data),
152 core::utils::castInputData<int64_t>(input2_data),
153 core::utils::castOutputData<int64_t>(output_data));
157 case circle::TensorType_INT32:
160 ¶ms.int32_activation_min, ¶ms.int32_activation_max);
165 params, input1_shape, core::utils::castInputData<int32_t>(input1_data), input2_shape,
166 core::utils::castInputData<int32_t>(input2_data),
output_shape,
167 core::utils::castOutputData<int32_t>(output_data));
172 core::utils::castInputData<int32_t>(input1_data),
173 core::utils::castInputData<int32_t>(input2_data),
174 core::utils::castOutputData<int32_t>(output_data));
179 case circle::TensorType_INT8:
184 options->fused_activation_function());
189 add_params, input1_shape, core::utils::castInputData<int8_t>(input1_data), input2_shape,
190 core::utils::castInputData<int8_t>(input2_data),
output_shape,
191 core::utils::castOutputData<int8_t>(output_data));
196 core::utils::castInputData<int8_t>(input1_data),
197 core::utils::castInputData<int8_t>(input2_data),
198 core::utils::castOutputData<int8_t>(output_data));
206 assert(
false &&
"Unsupported type.");