51 const circle::Tensor *input1;
52 const circle::Tensor *input2;
53 const circle::Tensor *input3;
54 const circle::Tensor *output;
63 const circle::PadOptions *options;
67 status = runtime_kernel.
readKernel(op_index, runtime_context);
71 input1 = runtime_kernel.
inputs[input1TensorIdx];
72 input2 = runtime_kernel.
inputs[input2TensorIdx];
73 input3 = runtime_kernel.
inputs[input3TensorIdx];
74 output = runtime_kernel.
outputs[outputTensorIdx];
75 assert(input1 !=
nullptr);
76 assert(input2 !=
nullptr);
78 assert(output !=
nullptr);
80 status = runtime_kernel.
getDataFromStorage(op_index, runtime_storage, runtime_context);
84 input1_data = runtime_kernel.
inputs_data[input1TensorIdx];
85 input2_data = runtime_kernel.
inputs_data[input2TensorIdx];
86 input3_data = runtime_kernel.
inputs_data[input3TensorIdx];
87 output_data = runtime_kernel.
outputs_data[outputTensorIdx];
88 assert(input1_data !=
nullptr);
89 assert(input2_data !=
nullptr);
91 assert(output_data !=
nullptr);
93 options = runtime_kernel.
first_operator->builtin_options_as_PadOptions();
103 assert(num_input_dimensions <= 5);
105 if (num_input_dimensions > 5)
108 pad_params.left_padding_count = num_input_dimensions;
109 pad_params.right_padding_count = num_input_dimensions;
111 auto *paddings_data =
reinterpret_cast<int32_t *
>(input2_data);
112 for (
int idx = num_input_dimensions - 1; idx >= 0; --idx)
114 pad_params.left_padding[idx] = paddings_data[idx * 2];
115 pad_params.right_padding[idx] = paddings_data[idx * 2 + 1];
118 switch (input1->type())
121 case circle::TensorType_FLOAT32:
123 float pad_value = input3_data ==
nullptr ? 0.f : *
reinterpret_cast<float *
>(input3_data[0]);
124 status =
pal::Pad(pad_params, input1_shape, core::utils::castInputData<float>(input1_data),
125 pad_value,
output_shape, core::utils::castOutputData<float>(output_data));
130 case circle::TensorType_INT8:
135 (*input1->quantization()->scale())[0],
136 static_cast<int32_t
>((*input1->quantization()->zero_point())[0])};
138 (*output->quantization()->scale())[0],
139 static_cast<int32_t
>((*output->quantization()->zero_point())[0])};
142 core::utils::castInputData<int8_t>(input1_data),
output_shape,
143 out_qparams, core::utils::castOutputData<int8_t>(output_data));
150 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)