51 const circle::Tensor *input1;
52 const circle::Tensor *input2;
53 const circle::Tensor *input3;
54 const circle::Tensor *output;
61 const circle::PadOptions *options;
65 runtime_kernel.
readKernel(op_index, runtime_context);
67 input1 = runtime_kernel.
inputs[input1TensorIdx];
68 input2 = runtime_kernel.
inputs[input2TensorIdx];
69 input3 = runtime_kernel.
inputs[input3TensorIdx];
70 output = runtime_kernel.
outputs[outputTensorIdx];
71 assert(input1 !=
nullptr);
72 assert(input2 !=
nullptr);
74 assert(output !=
nullptr);
78 input1_data = runtime_kernel.
inputs_data[input1TensorIdx];
79 input2_data = runtime_kernel.
inputs_data[input2TensorIdx];
80 input3_data = runtime_kernel.
inputs_data[input3TensorIdx];
81 output_data = runtime_kernel.
outputs_data[outputTensorIdx];
82 assert(input1_data !=
nullptr);
83 assert(input2_data !=
nullptr);
85 assert(output_data !=
nullptr);
87 options = runtime_kernel.
first_operator->builtin_options_as_PadOptions();
99 assert(num_input_dimensions <= 5);
101 if (num_input_dimensions > 5)
104 pad_params.left_padding_count = num_input_dimensions;
105 pad_params.right_padding_count = num_input_dimensions;
107 auto *paddings_data =
reinterpret_cast<int32_t *
>(input2_data);
108 for (
int idx = num_input_dimensions - 1; idx >= 0; --idx)
110 pad_params.left_padding[idx] = paddings_data[idx * 2];
111 pad_params.right_padding[idx] = paddings_data[idx * 2 + 1];
114 switch (input1->type())
117 case circle::TensorType_FLOAT32:
119 float pad_value = input3_data ==
nullptr ? 0.f : *
reinterpret_cast<float *
>(input3_data[0]);
120 status =
pal::Pad(pad_params, input1_shape, core::utils::castInputData<float>(input1_data),
121 pad_value,
output_shape, core::utils::castOutputData<float>(output_data));
126 case circle::TensorType_INT8:
131 (*input1->quantization()->scale())[0],
132 static_cast<int32_t
>((*input1->quantization()->zero_point())[0])};
134 (*output->quantization()->scale())[0],
135 static_cast<int32_t
>((*output->quantization()->zero_point())[0])};
138 core::utils::castInputData<int8_t>(input1_data),
output_shape,
139 out_qparams, core::utils::castOutputData<int8_t>(output_data));
146 assert(
false &&
"Unsupported type");
OMStatus Pad(const core::PadParams &op_params, const core::OMRuntimeShape &input_shape, const float *input_data, const float pad_value, const core::OMRuntimeShape &output_shape, float *output_data)
OMStatus QuantizedZeroPad(const core::PadParams &op_params, const core::OMRuntimeShape &input_shape, const onert_micro::core::QuantizationParams &input_qparams, const T *input_data, const core::OMRuntimeShape &output_shape, const onert_micro::core::QuantizationParams &output_qparams, T *output_data)