diff options
Diffstat (limited to 'src/core/NEON/kernels')
20 files changed, 14256 insertions, 59 deletions
diff --git a/src/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.cpp b/src/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.cpp index bc2f1ed266..92383d9f15 100644 --- a/src/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.cpp +++ b/src/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.cpp @@ -22,7 +22,7 @@ * SOFTWARE. */ #include "arm_compute/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.h" -#include "arm_compute/core/NEON/kernels/convolution/NEDirectConvolutionDetail.h" +#include "arm_compute/core/NEON/kernels/detail/NEDirectConvolutionDetail.h" #include "arm_compute/core/AccessWindowStatic.h" #include "arm_compute/core/AccessWindowTranspose.h" @@ -34,13 +34,16 @@ #include "arm_compute/core/TensorInfo.h" #include "arm_compute/core/TensorShape.h" #include "arm_compute/core/Types.h" +#include "arm_compute/core/Utils.h" #include "arm_compute/core/Validate.h" #include "arm_compute/core/Window.h" #include "arm_compute/core/utils/misc/ShapeCalculator.h" +#include "support/ToolchainSupport.h" using namespace arm_compute; using namespace arm_compute::detail; using namespace arm_compute::misc::shape_calculator; +using namespace depthwise; namespace { @@ -143,7 +146,7 @@ inline void convolve_3x3(const Window &window, unsigned int num_elems_written_pe } // namespace NEDepthwiseConvolutionLayer3x3Kernel::NEDepthwiseConvolutionLayer3x3Kernel() - : _border_size(0), _input(), _output(), _weights(), _conv_info(), _num_elems_written_per_iteration(0) + : _border_size(0), _input(), _output(), _weights(), _conv_info(), _convolver(nullptr), _num_elems_written_per_iteration(0), _run_optimized(false) { } @@ -152,35 +155,98 @@ BorderSize NEDepthwiseConvolutionLayer3x3Kernel::border_size() const return _border_size; } -void NEDepthwiseConvolutionLayer3x3Kernel::configure(const ITensor *input, const ITensor *weights, ITensor *output, const PadStrideInfo &conv_info) +void NEDepthwiseConvolutionLayer3x3Kernel::configure(const ITensor *input, const ITensor *weights, ITensor *output, const PadStrideInfo &conv_info, DataLayout data_layout) { ARM_COMPUTE_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(input, 1, DataType::QASYMM8, DataType::F32); ARM_COMPUTE_ERROR_ON_MISMATCHING_DATA_TYPES(input, weights); - ARM_COMPUTE_ERROR_ON(weights->info()->dimension(0) != 3 || weights->info()->dimension(1) != 3); + + _input = input; + _output = output; + _weights = weights; + _conv_info = conv_info; + _convolver = nullptr; + + _run_optimized = NEDepthwiseConvolutionLayer3x3Kernel::is_optimized_execution_possible(input->info()->tensor_shape(), + conv_info, + input->info()->data_type(), + data_layout); + + (_run_optimized) ? configure_optimized() : configure_generic(); +} + +void NEDepthwiseConvolutionLayer3x3Kernel::run(const Window &window, const ThreadInfo &info) +{ + ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(this); + ARM_COMPUTE_UNUSED(info); + + (_run_optimized) ? run_optimized(window, info) : run_generic(window, info); +} + +bool NEDepthwiseConvolutionLayer3x3Kernel::is_optimized_execution_possible(TensorShape input_shape, PadStrideInfo conv_info, DataType dt, DataLayout data_layout) +{ + // Reshape input shape if in NHWC format + TensorShape in_shape{ input_shape }; + if(data_layout == DataLayout::NHWC) + { + in_shape.set(Window::DimX, input_shape.y()); + in_shape.set(Window::DimY, input_shape.z()); + in_shape.set(Window::DimZ, input_shape.x()); + } + + // Check supported data type + bool supported_datatype = (dt == DataType::F32); + + // Check for supported strides + const auto &strides = conv_info.stride(); + bool supported_strides = (strides.first == strides.second) && ((strides.first == 1) || (strides.first == 2)); + + // Check for supported padding + const auto pad_top = conv_info.pad_top(); + const auto pad_right = conv_info.pad_right(); + const auto pad_bottom = conv_info.pad_bottom(); + const auto pad_left = conv_info.pad_left(); + PadStrideInfo same_pad = calculate_same_pad(in_shape, TensorShape(3U, 3U), conv_info); + bool is_same_padding = (pad_top == same_pad.pad_top()) && (pad_right == same_pad.pad_right()) && (pad_bottom == same_pad.pad_bottom()) && (pad_left == same_pad.pad_left()); + bool is_valid_padding = (pad_top == 0) && (pad_right == 0) && (pad_bottom == 0) && (pad_left == 0); + bool supported_padding = is_same_padding || is_valid_padding; + + return supported_datatype && supported_strides && supported_padding; +} + +void NEDepthwiseConvolutionLayer3x3Kernel::generate_convolver() +{ + ARM_COMPUTE_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(_input, 1, DataType::F32); + ARM_COMPUTE_ERROR_ON_MISMATCHING_DATA_TYPES(_input, _weights); + ARM_COMPUTE_ERROR_ON(_weights->info()->dimension(1) != 3 || _weights->info()->dimension(2) != 3); + + _convolver = create_convolver_object(_input->info()->tensor_shape(), _conv_info, + _weights->buffer(), _input->buffer(), _output->buffer()); +} + +void NEDepthwiseConvolutionLayer3x3Kernel::configure_generic() +{ + ARM_COMPUTE_ERROR_ON(_weights->info()->dimension(0) != 3 || _weights->info()->dimension(1) != 3); // Get convolved dimensions - const TensorShape output_shape = compute_depthwise_convolution_shape(*input->info(), *weights->info(), conv_info); - const DataType output_dt = (input->info()->data_type() == DataType::QASYMM8) ? DataType::S32 : input->info()->data_type(); + const TensorShape output_shape = compute_depthwise_convolution_shape(*_input->info(), *_weights->info(), _conv_info); + const DataType output_dt = (_input->info()->data_type() == DataType::QASYMM8) ? DataType::S32 : _input->info()->data_type(); // Output auto inizialitation if not yet initialized - auto_init_if_empty(*output->info(), - input->info()->clone()->set_is_resizable(true).reset_padding().set_tensor_shape(output_shape).set_data_type(output_dt)); + auto_init_if_empty(*_output->info(), + _input->info()->clone()->set_is_resizable(true).reset_padding().set_tensor_shape(output_shape).set_data_type(output_dt)); - ARM_COMPUTE_ERROR_ON_MISMATCHING_DIMENSIONS(output->info()->tensor_shape(), output_shape); + ARM_COMPUTE_ERROR_ON_MISMATCHING_DIMENSIONS(_output->info()->tensor_shape(), output_shape); - _input = input; - _output = output; - _weights = weights; - _conv_info = conv_info; - const unsigned int conv_stride_x = conv_info.stride().first; - const unsigned int conv_stride_y = conv_info.stride().second; - const unsigned int conv_pad_left = conv_info.pad_left(); - const unsigned int conv_pad_top = conv_info.pad_top(); + const unsigned int conv_stride_x = _conv_info.stride().first; + const unsigned int conv_pad_top = _conv_info.pad_top(); + const unsigned int conv_pad_right = _conv_info.pad_right(); + const unsigned int conv_pad_bottom = _conv_info.pad_bottom(); + const unsigned int conv_pad_left = _conv_info.pad_left(); ARM_COMPUTE_ERROR_ON(conv_stride_x < 1 || conv_stride_x > 3); unsigned int num_elems_read_per_iteration = 0; - switch(input->info()->data_type()) + switch(_input->info()->data_type()) { case DataType::QASYMM8: num_elems_read_per_iteration = 16; @@ -193,31 +259,56 @@ void NEDepthwiseConvolutionLayer3x3Kernel::configure(const ITensor *input, const default: ARM_COMPUTE_ERROR("Data type not supported."); } - _border_size = BorderSize(conv_pad_top, conv_info.pad_right(), conv_info.pad_bottom(), conv_pad_left); + _border_size = BorderSize(conv_pad_top, conv_pad_right, conv_pad_bottom, conv_pad_left); // Configure kernel window - Window win = calculate_max_window(*output->info(), Steps(_num_elems_written_per_iteration)); + Window win = calculate_max_window(*_output->info(), Steps(_num_elems_written_per_iteration)); const unsigned int num_x_steps = (output_shape.x() + _num_elems_written_per_iteration - 1) / _num_elems_written_per_iteration; const int input_num_elems_processed = get_input_num_elems_processed(_num_elems_written_per_iteration, conv_stride_x); - AccessWindowStatic input_access(input->info(), + AccessWindowStatic input_access(_input->info(), -conv_pad_left, -conv_pad_top, (num_x_steps - 1) * input_num_elems_processed + num_elems_read_per_iteration, - conv_stride_y * (output_shape.y() - 1) + 2); - AccessWindowStatic weights_access(weights->info(), 0, 0, weights->info()->dimension(0), weights->info()->dimension(1)); - AccessWindowStatic output_access(output->info(), 0, 0, num_x_steps * _num_elems_written_per_iteration, output_shape.y()); + _input->info()->tensor_shape().y() + conv_pad_bottom); + AccessWindowStatic weights_access(_weights->info(), 0, 0, _weights->info()->dimension(0), _weights->info()->dimension(1)); + AccessWindowStatic output_access(_output->info(), 0, 0, num_x_steps * _num_elems_written_per_iteration, output_shape.y()); update_window_and_padding(win, input_access, weights_access, output_access); - output_access.set_valid_region(win, ValidRegion(Coordinates(), output->info()->tensor_shape())); + output_access.set_valid_region(win, ValidRegion(Coordinates(), _output->info()->tensor_shape())); INEKernel::configure(win); } -void NEDepthwiseConvolutionLayer3x3Kernel::run(const Window &window, const ThreadInfo &info) +void NEDepthwiseConvolutionLayer3x3Kernel::configure_optimized() +{ + ARM_COMPUTE_ERROR_ON(_weights->info()->dimension(1) != 3 || _weights->info()->dimension(2) != 3); + + _border_size = BorderSize(0, 0); + _convolver = create_convolver_object(_input->info()->tensor_shape(), _conv_info, + _weights->buffer(), _input->buffer(), _output->buffer()); + + // Auto-configure output + bool same_padding = _conv_info.has_padding(); + TensorShape output_shape{ _input->info()->tensor_shape() }; + + output_shape.set(1, _convolver->output_size(output_shape.y(), same_padding)); // Set width + output_shape.set(2, _convolver->output_size(output_shape.z(), same_padding)); // Set height + + // Output auto inizialitation if not yet initialized + auto_init_if_empty(*_output->info(), + _input->info()->clone()->set_is_resizable(true).reset_padding().set_tensor_shape(output_shape)); + + // Configure window + Window win; + auto win_last = _convolver->get_window(); + win.set(Window::DimX, Window::Dimension(0, win_last, 1)); + INEKernel::configure(win); +} + +void NEDepthwiseConvolutionLayer3x3Kernel::run_generic(const Window &window, const ThreadInfo &info) { - ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(this); ARM_COMPUTE_UNUSED(info); switch(_input->info()->data_type()) @@ -232,3 +323,53 @@ void NEDepthwiseConvolutionLayer3x3Kernel::run(const Window &window, const Threa ARM_COMPUTE_ERROR("Not implemented"); } } + +void NEDepthwiseConvolutionLayer3x3Kernel::run_optimized(const Window &window, const ThreadInfo &info) +{ + ARM_COMPUTE_UNUSED(info); + ARM_COMPUTE_ERROR_ON(!_convolver); + + const size_t start = window.x().start(); + const size_t end = window.x().end(); + _convolver->run(start, end); +} + +std::unique_ptr<depthwise::IDepthwiseConvolution> NEDepthwiseConvolutionLayer3x3Kernel::create_convolver_object(TensorShape shape, + PadStrideInfo conv_info, + const uint8_t *w_ptr, + uint8_t *in_ptr, + uint8_t *out_ptr) +{ + const int in_rows = shape.z(); + const int in_cols = shape.y(); + const int n_batches = shape[3]; + const int n_channels = shape.x(); + const bool padding_same = conv_info.has_padding(); + + const auto stride_x = conv_info.stride().first; + switch(stride_x) + { + case 1: + return arm_compute::support::cpp14::make_unique<DepthwiseConvolution<2, 2, 3, 3, 1, 1, float, float>>( + n_batches, + in_rows, + in_cols, + n_channels, + padding_same, + reinterpret_cast<const float *>(w_ptr), + reinterpret_cast<float *>(in_ptr), + reinterpret_cast<float *>(out_ptr)); + case 2: + return arm_compute::support::cpp14::make_unique<DepthwiseConvolution<2, 2, 3, 3, 2, 2, float, float>>( + n_batches, + in_rows, + in_cols, + n_channels, + padding_same, + reinterpret_cast<const float *>(w_ptr), + reinterpret_cast<float *>(in_ptr), + reinterpret_cast<float *>(out_ptr)); + default: + return nullptr; + } +}
\ No newline at end of file diff --git a/src/core/NEON/kernels/NEDirectConvolutionLayerKernel.cpp b/src/core/NEON/kernels/NEDirectConvolutionLayerKernel.cpp index cb8246d09e..c7534c59a6 100644 --- a/src/core/NEON/kernels/NEDirectConvolutionLayerKernel.cpp +++ b/src/core/NEON/kernels/NEDirectConvolutionLayerKernel.cpp @@ -22,7 +22,7 @@ * SOFTWARE. */ #include "arm_compute/core/NEON/kernels/NEDirectConvolutionLayerKernel.h" -#include "arm_compute/core/NEON/kernels/convolution/NEDirectConvolutionDetail.h" +#include "arm_compute/core/NEON/kernels/detail/NEDirectConvolutionDetail.h" #include "arm_compute/core/AccessWindowStatic.h" #include "arm_compute/core/Error.h" diff --git a/src/core/NEON/kernels/winograd/utils.cpp b/src/core/NEON/kernels/convolution/common/utils.cpp index 24d0386c76..24d0386c76 100644 --- a/src/core/NEON/kernels/winograd/utils.cpp +++ b/src/core/NEON/kernels/convolution/common/utils.cpp diff --git a/src/core/NEON/kernels/convolution/depthwise/depthwise_2x2_3x3_1x1_fp32_fp32.cpp b/src/core/NEON/kernels/convolution/depthwise/depthwise_2x2_3x3_1x1_fp32_fp32.cpp new file mode 100644 index 0000000000..fa50f79bc5 --- /dev/null +++ b/src/core/NEON/kernels/convolution/depthwise/depthwise_2x2_3x3_1x1_fp32_fp32.cpp @@ -0,0 +1,439 @@ +/* + * Copyright (c) 2018 ARM Limited. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include "arm_compute/core/NEON/kernels/convolution/depthwise/impl_fp32_fp32.hpp" + +namespace depthwise +{ +using Conv = DepthwiseConvolution<2, 2, 3, 3, 1, 1, float, float>; +using ConvImpl = DepthwiseConvolutionImpl<2, 2, 3, 3, 1, 1, float, float>; + +template <> +const Conv::TileFn Conv::tile_fns + [max_in_pad_top] + [max_in_pad_left] + [max_in_pad_bottom] + [max_in_pad_right] + [max_out_pad_bottom] + [max_out_pad_right] = { + { // Input pad top = 0 + { // Input pad left = 0 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 0, 0, 0, 0>, + ConvImpl::template process_tile<0, 0, 0, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 0, 0, 1, 0>, + ConvImpl::template process_tile<0, 0, 0, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 0, 1, 0, 0>, + ConvImpl::template process_tile<0, 0, 0, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 0, 1, 1, 0>, + ConvImpl::template process_tile<0, 0, 0, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 0, 2, 0, 0>, + ConvImpl::template process_tile<0, 0, 0, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 0, 2, 1, 0>, + ConvImpl::template process_tile<0, 0, 0, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 1, 0, 0, 0>, + ConvImpl::template process_tile<0, 0, 1, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 1, 0, 1, 0>, + ConvImpl::template process_tile<0, 0, 1, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 1, 1, 0, 0>, + ConvImpl::template process_tile<0, 0, 1, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 1, 1, 1, 0>, + ConvImpl::template process_tile<0, 0, 1, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 1, 2, 0, 0>, + ConvImpl::template process_tile<0, 0, 1, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 1, 2, 1, 0>, + ConvImpl::template process_tile<0, 0, 1, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 2, 0, 0, 0>, + ConvImpl::template process_tile<0, 0, 2, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 2, 0, 1, 0>, + ConvImpl::template process_tile<0, 0, 2, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 2, 1, 0, 0>, + ConvImpl::template process_tile<0, 0, 2, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 2, 1, 1, 0>, + ConvImpl::template process_tile<0, 0, 2, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 2, 2, 0, 0>, + ConvImpl::template process_tile<0, 0, 2, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 2, 2, 1, 0>, + ConvImpl::template process_tile<0, 0, 2, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + }, // Input pad bottom = 2 + }, // Input pad left = 0 + { // Input pad left = 1 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 0, 0, 0, 0>, + ConvImpl::template process_tile<0, 1, 0, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 0, 0, 1, 0>, + ConvImpl::template process_tile<0, 1, 0, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 0, 1, 0, 0>, + ConvImpl::template process_tile<0, 1, 0, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 0, 1, 1, 0>, + ConvImpl::template process_tile<0, 1, 0, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 0, 2, 0, 0>, + ConvImpl::template process_tile<0, 1, 0, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 0, 2, 1, 0>, + ConvImpl::template process_tile<0, 1, 0, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 1, 0, 0, 0>, + ConvImpl::template process_tile<0, 1, 1, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 1, 0, 1, 0>, + ConvImpl::template process_tile<0, 1, 1, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 1, 1, 0, 0>, + ConvImpl::template process_tile<0, 1, 1, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 1, 1, 1, 0>, + ConvImpl::template process_tile<0, 1, 1, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 1, 2, 0, 0>, + ConvImpl::template process_tile<0, 1, 1, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 1, 2, 1, 0>, + ConvImpl::template process_tile<0, 1, 1, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 2, 0, 0, 0>, + ConvImpl::template process_tile<0, 1, 2, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 2, 0, 1, 0>, + ConvImpl::template process_tile<0, 1, 2, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 2, 1, 0, 0>, + ConvImpl::template process_tile<0, 1, 2, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 2, 1, 1, 0>, + ConvImpl::template process_tile<0, 1, 2, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 2, 2, 0, 0>, + ConvImpl::template process_tile<0, 1, 2, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 2, 2, 1, 0>, + ConvImpl::template process_tile<0, 1, 2, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + }, // Input pad bottom = 2 + }, // Input pad left = 1 + }, // Input pad top = 0 + { // Input pad top = 1 + { // Input pad left = 0 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 0, 0, 0, 0>, + ConvImpl::template process_tile<1, 0, 0, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 0, 0, 1, 0>, + ConvImpl::template process_tile<1, 0, 0, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 0, 1, 0, 0>, + ConvImpl::template process_tile<1, 0, 0, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 0, 1, 1, 0>, + ConvImpl::template process_tile<1, 0, 0, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 0, 2, 0, 0>, + ConvImpl::template process_tile<1, 0, 0, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 0, 2, 1, 0>, + ConvImpl::template process_tile<1, 0, 0, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 1, 0, 0, 0>, + ConvImpl::template process_tile<1, 0, 1, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 1, 0, 1, 0>, + ConvImpl::template process_tile<1, 0, 1, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 1, 1, 0, 0>, + ConvImpl::template process_tile<1, 0, 1, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 1, 1, 1, 0>, + ConvImpl::template process_tile<1, 0, 1, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 1, 2, 0, 0>, + ConvImpl::template process_tile<1, 0, 1, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 1, 2, 1, 0>, + ConvImpl::template process_tile<1, 0, 1, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 2, 0, 0, 0>, + ConvImpl::template process_tile<1, 0, 2, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 2, 0, 1, 0>, + ConvImpl::template process_tile<1, 0, 2, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 2, 1, 0, 0>, + ConvImpl::template process_tile<1, 0, 2, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 2, 1, 1, 0>, + ConvImpl::template process_tile<1, 0, 2, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 2, 2, 0, 0>, + ConvImpl::template process_tile<1, 0, 2, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 2, 2, 1, 0>, + ConvImpl::template process_tile<1, 0, 2, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + }, // Input pad bottom = 2 + }, // Input pad left = 0 + { // Input pad left = 1 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 0, 0, 0, 0>, + ConvImpl::template process_tile<1, 1, 0, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 0, 0, 1, 0>, + ConvImpl::template process_tile<1, 1, 0, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 0, 1, 0, 0>, + ConvImpl::template process_tile<1, 1, 0, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 0, 1, 1, 0>, + ConvImpl::template process_tile<1, 1, 0, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 0, 2, 0, 0>, + ConvImpl::template process_tile<1, 1, 0, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 0, 2, 1, 0>, + ConvImpl::template process_tile<1, 1, 0, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 1, 0, 0, 0>, + ConvImpl::template process_tile<1, 1, 1, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 1, 0, 1, 0>, + ConvImpl::template process_tile<1, 1, 1, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 1, 1, 0, 0>, + ConvImpl::template process_tile<1, 1, 1, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 1, 1, 1, 0>, + ConvImpl::template process_tile<1, 1, 1, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 1, 2, 0, 0>, + ConvImpl::template process_tile<1, 1, 1, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 1, 2, 1, 0>, + ConvImpl::template process_tile<1, 1, 1, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 2, 0, 0, 0>, + ConvImpl::template process_tile<1, 1, 2, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 2, 0, 1, 0>, + ConvImpl::template process_tile<1, 1, 2, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 2, 1, 0, 0>, + ConvImpl::template process_tile<1, 1, 2, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 2, 1, 1, 0>, + ConvImpl::template process_tile<1, 1, 2, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 2, 2, 0, 0>, + ConvImpl::template process_tile<1, 1, 2, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 2, 2, 1, 0>, + ConvImpl::template process_tile<1, 1, 2, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + }, // Input pad bottom = 2 + }, // Input pad left = 1 + }, // Input pad top = 1 +}; + + +template class DepthwiseConvolution<2, 2, 3, 3, 1, 1, float, float>; +} // namespace depthwise diff --git a/src/core/NEON/kernels/convolution/depthwise/depthwise_2x2_3x3_2x2_fp32_fp32.cpp b/src/core/NEON/kernels/convolution/depthwise/depthwise_2x2_3x3_2x2_fp32_fp32.cpp new file mode 100644 index 0000000000..0ec5a77475 --- /dev/null +++ b/src/core/NEON/kernels/convolution/depthwise/depthwise_2x2_3x3_2x2_fp32_fp32.cpp @@ -0,0 +1,1095 @@ +/* + * Copyright (c) 2018 ARM Limited. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include "arm_compute/core/NEON/kernels/convolution/depthwise/impl_fp32_fp32.hpp" + +namespace depthwise +{ +using Conv = DepthwiseConvolution<2, 2, 3, 3, 2, 2, float, float>; +using ConvImpl = DepthwiseConvolutionImpl<2, 2, 3, 3, 2, 2, float, float>; + +template <> +const Conv::TileFn Conv::tile_fns + [max_in_pad_top] + [max_in_pad_left] + [max_in_pad_bottom] + [max_in_pad_right] + [max_out_pad_bottom] + [max_out_pad_right] = { + { // Input pad top = 0 + { // Input pad left = 0 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 0, 0, 0>, + Conv::template process_tile<0, 0, 0, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 0, 1, 0>, + Conv::template process_tile<0, 0, 0, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 1, 0, 0>, + Conv::template process_tile<0, 0, 0, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 1, 1, 0>, + Conv::template process_tile<0, 0, 0, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 2, 0, 0>, + Conv::template process_tile<0, 0, 0, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 2, 1, 0>, + Conv::template process_tile<0, 0, 0, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 3, 0, 0>, + Conv::template process_tile<0, 0, 0, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 3, 1, 0>, + Conv::template process_tile<0, 0, 0, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 4, 0, 0>, + Conv::template process_tile<0, 0, 0, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 4, 1, 0>, + Conv::template process_tile<0, 0, 0, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 0, 0, 0>, + Conv::template process_tile<0, 0, 1, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 0, 1, 0>, + Conv::template process_tile<0, 0, 1, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 1, 0, 0>, + Conv::template process_tile<0, 0, 1, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 1, 1, 0>, + Conv::template process_tile<0, 0, 1, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 2, 0, 0>, + Conv::template process_tile<0, 0, 1, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 2, 1, 0>, + Conv::template process_tile<0, 0, 1, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 3, 0, 0>, + Conv::template process_tile<0, 0, 1, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 3, 1, 0>, + Conv::template process_tile<0, 0, 1, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 4, 0, 0>, + Conv::template process_tile<0, 0, 1, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 4, 1, 0>, + Conv::template process_tile<0, 0, 1, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 0, 0, 0>, + Conv::template process_tile<0, 0, 2, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 0, 1, 0>, + Conv::template process_tile<0, 0, 2, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 1, 0, 0>, + Conv::template process_tile<0, 0, 2, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 1, 1, 0>, + Conv::template process_tile<0, 0, 2, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 2, 0, 0>, + Conv::template process_tile<0, 0, 2, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 2, 1, 0>, + Conv::template process_tile<0, 0, 2, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 3, 0, 0>, + Conv::template process_tile<0, 0, 2, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 3, 1, 0>, + Conv::template process_tile<0, 0, 2, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 4, 0, 0>, + Conv::template process_tile<0, 0, 2, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 4, 1, 0>, + Conv::template process_tile<0, 0, 2, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 0, 0, 0>, + Conv::template process_tile<0, 0, 3, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 0, 1, 0>, + Conv::template process_tile<0, 0, 3, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 1, 0, 0>, + Conv::template process_tile<0, 0, 3, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 1, 1, 0>, + Conv::template process_tile<0, 0, 3, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 2, 0, 0>, + Conv::template process_tile<0, 0, 3, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 2, 1, 0>, + Conv::template process_tile<0, 0, 3, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 3, 0, 0>, + Conv::template process_tile<0, 0, 3, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 3, 1, 0>, + Conv::template process_tile<0, 0, 3, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 4, 0, 0>, + Conv::template process_tile<0, 0, 3, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 4, 1, 0>, + Conv::template process_tile<0, 0, 3, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 0, 0, 0>, + Conv::template process_tile<0, 0, 4, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 0, 1, 0>, + Conv::template process_tile<0, 0, 4, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 1, 0, 0>, + Conv::template process_tile<0, 0, 4, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 1, 1, 0>, + Conv::template process_tile<0, 0, 4, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 2, 0, 0>, + Conv::template process_tile<0, 0, 4, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 2, 1, 0>, + Conv::template process_tile<0, 0, 4, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 3, 0, 0>, + Conv::template process_tile<0, 0, 4, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 3, 1, 0>, + Conv::template process_tile<0, 0, 4, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 4, 0, 0>, + Conv::template process_tile<0, 0, 4, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 4, 1, 0>, + Conv::template process_tile<0, 0, 4, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 4 + }, // Input pad left = 0 + { // Input pad left = 1 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 0, 0, 0>, + Conv::template process_tile<0, 1, 0, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 0, 1, 0>, + Conv::template process_tile<0, 1, 0, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 1, 0, 0>, + Conv::template process_tile<0, 1, 0, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 1, 1, 0>, + Conv::template process_tile<0, 1, 0, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 2, 0, 0>, + Conv::template process_tile<0, 1, 0, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 2, 1, 0>, + Conv::template process_tile<0, 1, 0, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 3, 0, 0>, + Conv::template process_tile<0, 1, 0, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 3, 1, 0>, + Conv::template process_tile<0, 1, 0, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 4, 0, 0>, + Conv::template process_tile<0, 1, 0, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 4, 1, 0>, + Conv::template process_tile<0, 1, 0, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 0, 0, 0>, + Conv::template process_tile<0, 1, 1, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 0, 1, 0>, + Conv::template process_tile<0, 1, 1, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 1, 0, 0>, + Conv::template process_tile<0, 1, 1, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 1, 1, 0>, + Conv::template process_tile<0, 1, 1, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 2, 0, 0>, + Conv::template process_tile<0, 1, 1, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 2, 1, 0>, + Conv::template process_tile<0, 1, 1, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 3, 0, 0>, + Conv::template process_tile<0, 1, 1, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 3, 1, 0>, + Conv::template process_tile<0, 1, 1, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 4, 0, 0>, + Conv::template process_tile<0, 1, 1, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 4, 1, 0>, + Conv::template process_tile<0, 1, 1, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 0, 0, 0>, + Conv::template process_tile<0, 1, 2, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 0, 1, 0>, + Conv::template process_tile<0, 1, 2, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 1, 0, 0>, + Conv::template process_tile<0, 1, 2, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 1, 1, 0>, + Conv::template process_tile<0, 1, 2, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 2, 0, 0>, + Conv::template process_tile<0, 1, 2, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 2, 1, 0>, + Conv::template process_tile<0, 1, 2, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 3, 0, 0>, + Conv::template process_tile<0, 1, 2, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 3, 1, 0>, + Conv::template process_tile<0, 1, 2, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 4, 0, 0>, + Conv::template process_tile<0, 1, 2, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 4, 1, 0>, + Conv::template process_tile<0, 1, 2, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 0, 0, 0>, + Conv::template process_tile<0, 1, 3, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 0, 1, 0>, + Conv::template process_tile<0, 1, 3, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 1, 0, 0>, + Conv::template process_tile<0, 1, 3, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 1, 1, 0>, + Conv::template process_tile<0, 1, 3, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 2, 0, 0>, + Conv::template process_tile<0, 1, 3, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 2, 1, 0>, + Conv::template process_tile<0, 1, 3, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 3, 0, 0>, + Conv::template process_tile<0, 1, 3, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 3, 1, 0>, + Conv::template process_tile<0, 1, 3, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 4, 0, 0>, + Conv::template process_tile<0, 1, 3, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 4, 1, 0>, + Conv::template process_tile<0, 1, 3, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 0, 0, 0>, + Conv::template process_tile<0, 1, 4, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 0, 1, 0>, + Conv::template process_tile<0, 1, 4, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 1, 0, 0>, + Conv::template process_tile<0, 1, 4, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 1, 1, 0>, + Conv::template process_tile<0, 1, 4, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 2, 0, 0>, + Conv::template process_tile<0, 1, 4, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 2, 1, 0>, + Conv::template process_tile<0, 1, 4, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 3, 0, 0>, + Conv::template process_tile<0, 1, 4, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 3, 1, 0>, + Conv::template process_tile<0, 1, 4, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 4, 0, 0>, + Conv::template process_tile<0, 1, 4, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 4, 1, 0>, + Conv::template process_tile<0, 1, 4, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 4 + }, // Input pad left = 1 + }, // Input pad top = 0 + { // Input pad top = 1 + { // Input pad left = 0 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 0, 0, 0>, + Conv::template process_tile<1, 0, 0, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 0, 1, 0>, + Conv::template process_tile<1, 0, 0, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 1, 0, 0>, + Conv::template process_tile<1, 0, 0, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 1, 1, 0>, + Conv::template process_tile<1, 0, 0, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 2, 0, 0>, + Conv::template process_tile<1, 0, 0, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 2, 1, 0>, + Conv::template process_tile<1, 0, 0, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 3, 0, 0>, + Conv::template process_tile<1, 0, 0, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 3, 1, 0>, + Conv::template process_tile<1, 0, 0, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 4, 0, 0>, + Conv::template process_tile<1, 0, 0, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 4, 1, 0>, + Conv::template process_tile<1, 0, 0, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 0, 0, 0>, + Conv::template process_tile<1, 0, 1, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 0, 1, 0>, + Conv::template process_tile<1, 0, 1, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 1, 0, 0>, + Conv::template process_tile<1, 0, 1, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 1, 1, 0>, + Conv::template process_tile<1, 0, 1, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 2, 0, 0>, + Conv::template process_tile<1, 0, 1, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 2, 1, 0>, + Conv::template process_tile<1, 0, 1, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 3, 0, 0>, + Conv::template process_tile<1, 0, 1, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 3, 1, 0>, + Conv::template process_tile<1, 0, 1, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 4, 0, 0>, + Conv::template process_tile<1, 0, 1, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 4, 1, 0>, + Conv::template process_tile<1, 0, 1, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 0, 0, 0>, + Conv::template process_tile<1, 0, 2, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 0, 1, 0>, + Conv::template process_tile<1, 0, 2, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 1, 0, 0>, + Conv::template process_tile<1, 0, 2, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 1, 1, 0>, + Conv::template process_tile<1, 0, 2, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 2, 0, 0>, + Conv::template process_tile<1, 0, 2, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 2, 1, 0>, + Conv::template process_tile<1, 0, 2, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 3, 0, 0>, + Conv::template process_tile<1, 0, 2, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 3, 1, 0>, + Conv::template process_tile<1, 0, 2, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 4, 0, 0>, + Conv::template process_tile<1, 0, 2, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 4, 1, 0>, + Conv::template process_tile<1, 0, 2, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 0, 0, 0>, + Conv::template process_tile<1, 0, 3, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 0, 1, 0>, + Conv::template process_tile<1, 0, 3, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 1, 0, 0>, + Conv::template process_tile<1, 0, 3, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 1, 1, 0>, + Conv::template process_tile<1, 0, 3, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 2, 0, 0>, + Conv::template process_tile<1, 0, 3, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 2, 1, 0>, + Conv::template process_tile<1, 0, 3, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 3, 0, 0>, + Conv::template process_tile<1, 0, 3, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 3, 1, 0>, + Conv::template process_tile<1, 0, 3, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 4, 0, 0>, + Conv::template process_tile<1, 0, 3, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 4, 1, 0>, + Conv::template process_tile<1, 0, 3, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 0, 0, 0>, + Conv::template process_tile<1, 0, 4, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 0, 1, 0>, + Conv::template process_tile<1, 0, 4, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 1, 0, 0>, + Conv::template process_tile<1, 0, 4, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 1, 1, 0>, + Conv::template process_tile<1, 0, 4, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 2, 0, 0>, + Conv::template process_tile<1, 0, 4, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 2, 1, 0>, + Conv::template process_tile<1, 0, 4, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 3, 0, 0>, + Conv::template process_tile<1, 0, 4, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 3, 1, 0>, + Conv::template process_tile<1, 0, 4, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 4, 0, 0>, + Conv::template process_tile<1, 0, 4, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 4, 1, 0>, + Conv::template process_tile<1, 0, 4, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 4 + }, // Input pad left = 0 + { // Input pad left = 1 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 0, 0, 0>, + Conv::template process_tile<1, 1, 0, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 0, 1, 0>, + Conv::template process_tile<1, 1, 0, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 1, 0, 0>, + Conv::template process_tile<1, 1, 0, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 1, 1, 0>, + Conv::template process_tile<1, 1, 0, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 2, 0, 0>, + Conv::template process_tile<1, 1, 0, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 2, 1, 0>, + Conv::template process_tile<1, 1, 0, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 3, 0, 0>, + Conv::template process_tile<1, 1, 0, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 3, 1, 0>, + Conv::template process_tile<1, 1, 0, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 4, 0, 0>, + Conv::template process_tile<1, 1, 0, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 4, 1, 0>, + Conv::template process_tile<1, 1, 0, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 0, 0, 0>, + Conv::template process_tile<1, 1, 1, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 0, 1, 0>, + Conv::template process_tile<1, 1, 1, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 1, 0, 0>, + Conv::template process_tile<1, 1, 1, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 1, 1, 0>, + Conv::template process_tile<1, 1, 1, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 2, 0, 0>, + Conv::template process_tile<1, 1, 1, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 2, 1, 0>, + Conv::template process_tile<1, 1, 1, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 3, 0, 0>, + Conv::template process_tile<1, 1, 1, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 3, 1, 0>, + Conv::template process_tile<1, 1, 1, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 4, 0, 0>, + Conv::template process_tile<1, 1, 1, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 4, 1, 0>, + Conv::template process_tile<1, 1, 1, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 0, 0, 0>, + Conv::template process_tile<1, 1, 2, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 0, 1, 0>, + Conv::template process_tile<1, 1, 2, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 1, 0, 0>, + Conv::template process_tile<1, 1, 2, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 1, 1, 0>, + Conv::template process_tile<1, 1, 2, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 2, 0, 0>, + Conv::template process_tile<1, 1, 2, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 2, 1, 0>, + Conv::template process_tile<1, 1, 2, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 3, 0, 0>, + Conv::template process_tile<1, 1, 2, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 3, 1, 0>, + Conv::template process_tile<1, 1, 2, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 4, 0, 0>, + Conv::template process_tile<1, 1, 2, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 4, 1, 0>, + Conv::template process_tile<1, 1, 2, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 0, 0, 0>, + Conv::template process_tile<1, 1, 3, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 0, 1, 0>, + Conv::template process_tile<1, 1, 3, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 1, 0, 0>, + Conv::template process_tile<1, 1, 3, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 1, 1, 0>, + Conv::template process_tile<1, 1, 3, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 2, 0, 0>, + Conv::template process_tile<1, 1, 3, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 2, 1, 0>, + Conv::template process_tile<1, 1, 3, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 3, 0, 0>, + Conv::template process_tile<1, 1, 3, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 3, 1, 0>, + Conv::template process_tile<1, 1, 3, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 4, 0, 0>, + Conv::template process_tile<1, 1, 3, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 4, 1, 0>, + Conv::template process_tile<1, 1, 3, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 0, 0, 0>, + Conv::template process_tile<1, 1, 4, 0, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 0, 1, 0>, + Conv::template process_tile<1, 1, 4, 0, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 1, 0, 0>, + Conv::template process_tile<1, 1, 4, 1, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 1, 1, 0>, + Conv::template process_tile<1, 1, 4, 1, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 2, 0, 0>, + Conv::template process_tile<1, 1, 4, 2, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 2, 1, 0>, + Conv::template process_tile<1, 1, 4, 2, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 3, 0, 0>, + Conv::template process_tile<1, 1, 4, 3, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 3, 1, 0>, + Conv::template process_tile<1, 1, 4, 3, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 4, 0, 0>, + Conv::template process_tile<1, 1, 4, 4, 0, 1>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 4, 1, 0>, + Conv::template process_tile<1, 1, 4, 4, 1, 1>, + }, // Output pad bottom = 1 + }, // Input pad right = 4 + }, // Input pad bottom = 4 + }, // Input pad left = 1 + }, // Input pad top = 1 +}; + + +template class DepthwiseConvolution<2, 2, 3, 3, 2, 2, float, float>; +} // namespace depthwise diff --git a/src/core/NEON/kernels/convolution/depthwise/depthwise_3x3_3x3_1x1_fp32_fp32.cpp b/src/core/NEON/kernels/convolution/depthwise/depthwise_3x3_3x3_1x1_fp32_fp32.cpp new file mode 100644 index 0000000000..dc3c383f99 --- /dev/null +++ b/src/core/NEON/kernels/convolution/depthwise/depthwise_3x3_3x3_1x1_fp32_fp32.cpp @@ -0,0 +1,1175 @@ +/* + * Copyright (c) 2018 ARM Limited. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include "arm_compute/core/NEON/kernels/convolution/depthwise/impl_fp32_fp32.hpp" + +namespace depthwise +{ +using Conv = DepthwiseConvolution<3, 3, 3, 3, 1, 1, float, float>; +using ConvImpl = DepthwiseConvolutionImpl<3, 3, 3, 3, 1, 1, float, float>; + +template <> +const Conv::TileFn Conv::tile_fns + [max_in_pad_top] + [max_in_pad_left] + [max_in_pad_bottom] + [max_in_pad_right] + [max_out_pad_bottom] + [max_out_pad_right] = { + { // Input pad top = 0 + { // Input pad left = 0 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 0, 0, 0>, + Conv::template process_tile<0, 0, 0, 0, 0, 1>, + Conv::template process_tile<0, 0, 0, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 0, 1, 0>, + Conv::template process_tile<0, 0, 0, 0, 1, 1>, + Conv::template process_tile<0, 0, 0, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 0, 2, 0>, + Conv::template process_tile<0, 0, 0, 0, 2, 1>, + Conv::template process_tile<0, 0, 0, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 1, 0, 0>, + Conv::template process_tile<0, 0, 0, 1, 0, 1>, + Conv::template process_tile<0, 0, 0, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 1, 1, 0>, + Conv::template process_tile<0, 0, 0, 1, 1, 1>, + Conv::template process_tile<0, 0, 0, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 1, 2, 0>, + Conv::template process_tile<0, 0, 0, 1, 2, 1>, + Conv::template process_tile<0, 0, 0, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 2, 0, 0>, + Conv::template process_tile<0, 0, 0, 2, 0, 1>, + Conv::template process_tile<0, 0, 0, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 2, 1, 0>, + Conv::template process_tile<0, 0, 0, 2, 1, 1>, + Conv::template process_tile<0, 0, 0, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 2, 2, 0>, + Conv::template process_tile<0, 0, 0, 2, 2, 1>, + Conv::template process_tile<0, 0, 0, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 3, 0, 0>, + Conv::template process_tile<0, 0, 0, 3, 0, 1>, + Conv::template process_tile<0, 0, 0, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 3, 1, 0>, + Conv::template process_tile<0, 0, 0, 3, 1, 1>, + Conv::template process_tile<0, 0, 0, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 3, 2, 0>, + Conv::template process_tile<0, 0, 0, 3, 2, 1>, + Conv::template process_tile<0, 0, 0, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 0, 0, 0>, + Conv::template process_tile<0, 0, 1, 0, 0, 1>, + Conv::template process_tile<0, 0, 1, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 0, 1, 0>, + Conv::template process_tile<0, 0, 1, 0, 1, 1>, + Conv::template process_tile<0, 0, 1, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 0, 2, 0>, + Conv::template process_tile<0, 0, 1, 0, 2, 1>, + Conv::template process_tile<0, 0, 1, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 1, 0, 0>, + Conv::template process_tile<0, 0, 1, 1, 0, 1>, + Conv::template process_tile<0, 0, 1, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 1, 1, 0>, + Conv::template process_tile<0, 0, 1, 1, 1, 1>, + Conv::template process_tile<0, 0, 1, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 1, 2, 0>, + Conv::template process_tile<0, 0, 1, 1, 2, 1>, + Conv::template process_tile<0, 0, 1, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 2, 0, 0>, + Conv::template process_tile<0, 0, 1, 2, 0, 1>, + Conv::template process_tile<0, 0, 1, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 2, 1, 0>, + Conv::template process_tile<0, 0, 1, 2, 1, 1>, + Conv::template process_tile<0, 0, 1, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 2, 2, 0>, + Conv::template process_tile<0, 0, 1, 2, 2, 1>, + Conv::template process_tile<0, 0, 1, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 3, 0, 0>, + Conv::template process_tile<0, 0, 1, 3, 0, 1>, + Conv::template process_tile<0, 0, 1, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 3, 1, 0>, + Conv::template process_tile<0, 0, 1, 3, 1, 1>, + Conv::template process_tile<0, 0, 1, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 3, 2, 0>, + Conv::template process_tile<0, 0, 1, 3, 2, 1>, + Conv::template process_tile<0, 0, 1, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 0, 0, 0>, + Conv::template process_tile<0, 0, 2, 0, 0, 1>, + Conv::template process_tile<0, 0, 2, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 0, 1, 0>, + Conv::template process_tile<0, 0, 2, 0, 1, 1>, + Conv::template process_tile<0, 0, 2, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 0, 2, 0>, + Conv::template process_tile<0, 0, 2, 0, 2, 1>, + Conv::template process_tile<0, 0, 2, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 1, 0, 0>, + Conv::template process_tile<0, 0, 2, 1, 0, 1>, + Conv::template process_tile<0, 0, 2, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 1, 1, 0>, + Conv::template process_tile<0, 0, 2, 1, 1, 1>, + Conv::template process_tile<0, 0, 2, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 1, 2, 0>, + Conv::template process_tile<0, 0, 2, 1, 2, 1>, + Conv::template process_tile<0, 0, 2, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 2, 0, 0>, + Conv::template process_tile<0, 0, 2, 2, 0, 1>, + Conv::template process_tile<0, 0, 2, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 2, 1, 0>, + Conv::template process_tile<0, 0, 2, 2, 1, 1>, + Conv::template process_tile<0, 0, 2, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 2, 2, 0>, + Conv::template process_tile<0, 0, 2, 2, 2, 1>, + Conv::template process_tile<0, 0, 2, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 3, 0, 0>, + Conv::template process_tile<0, 0, 2, 3, 0, 1>, + Conv::template process_tile<0, 0, 2, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 3, 1, 0>, + Conv::template process_tile<0, 0, 2, 3, 1, 1>, + Conv::template process_tile<0, 0, 2, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 3, 2, 0>, + Conv::template process_tile<0, 0, 2, 3, 2, 1>, + Conv::template process_tile<0, 0, 2, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 0, 0, 0>, + Conv::template process_tile<0, 0, 3, 0, 0, 1>, + Conv::template process_tile<0, 0, 3, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 0, 1, 0>, + Conv::template process_tile<0, 0, 3, 0, 1, 1>, + Conv::template process_tile<0, 0, 3, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 0, 2, 0>, + Conv::template process_tile<0, 0, 3, 0, 2, 1>, + Conv::template process_tile<0, 0, 3, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 1, 0, 0>, + Conv::template process_tile<0, 0, 3, 1, 0, 1>, + Conv::template process_tile<0, 0, 3, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 1, 1, 0>, + Conv::template process_tile<0, 0, 3, 1, 1, 1>, + Conv::template process_tile<0, 0, 3, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 1, 2, 0>, + Conv::template process_tile<0, 0, 3, 1, 2, 1>, + Conv::template process_tile<0, 0, 3, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 2, 0, 0>, + Conv::template process_tile<0, 0, 3, 2, 0, 1>, + Conv::template process_tile<0, 0, 3, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 2, 1, 0>, + Conv::template process_tile<0, 0, 3, 2, 1, 1>, + Conv::template process_tile<0, 0, 3, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 2, 2, 0>, + Conv::template process_tile<0, 0, 3, 2, 2, 1>, + Conv::template process_tile<0, 0, 3, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 3, 0, 0>, + Conv::template process_tile<0, 0, 3, 3, 0, 1>, + Conv::template process_tile<0, 0, 3, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 3, 1, 0>, + Conv::template process_tile<0, 0, 3, 3, 1, 1>, + Conv::template process_tile<0, 0, 3, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 3, 2, 0>, + Conv::template process_tile<0, 0, 3, 3, 2, 1>, + Conv::template process_tile<0, 0, 3, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 3 + }, // Input pad left = 0 + { // Input pad left = 1 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 0, 0, 0>, + Conv::template process_tile<0, 1, 0, 0, 0, 1>, + Conv::template process_tile<0, 1, 0, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 0, 1, 0>, + Conv::template process_tile<0, 1, 0, 0, 1, 1>, + Conv::template process_tile<0, 1, 0, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 0, 2, 0>, + Conv::template process_tile<0, 1, 0, 0, 2, 1>, + Conv::template process_tile<0, 1, 0, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 1, 0, 0>, + Conv::template process_tile<0, 1, 0, 1, 0, 1>, + Conv::template process_tile<0, 1, 0, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 1, 1, 0>, + Conv::template process_tile<0, 1, 0, 1, 1, 1>, + Conv::template process_tile<0, 1, 0, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 1, 2, 0>, + Conv::template process_tile<0, 1, 0, 1, 2, 1>, + Conv::template process_tile<0, 1, 0, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 2, 0, 0>, + Conv::template process_tile<0, 1, 0, 2, 0, 1>, + Conv::template process_tile<0, 1, 0, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 2, 1, 0>, + Conv::template process_tile<0, 1, 0, 2, 1, 1>, + Conv::template process_tile<0, 1, 0, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 2, 2, 0>, + Conv::template process_tile<0, 1, 0, 2, 2, 1>, + Conv::template process_tile<0, 1, 0, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 3, 0, 0>, + Conv::template process_tile<0, 1, 0, 3, 0, 1>, + Conv::template process_tile<0, 1, 0, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 3, 1, 0>, + Conv::template process_tile<0, 1, 0, 3, 1, 1>, + Conv::template process_tile<0, 1, 0, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 3, 2, 0>, + Conv::template process_tile<0, 1, 0, 3, 2, 1>, + Conv::template process_tile<0, 1, 0, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 0, 0, 0>, + Conv::template process_tile<0, 1, 1, 0, 0, 1>, + Conv::template process_tile<0, 1, 1, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 0, 1, 0>, + Conv::template process_tile<0, 1, 1, 0, 1, 1>, + Conv::template process_tile<0, 1, 1, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 0, 2, 0>, + Conv::template process_tile<0, 1, 1, 0, 2, 1>, + Conv::template process_tile<0, 1, 1, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 1, 0, 0>, + Conv::template process_tile<0, 1, 1, 1, 0, 1>, + Conv::template process_tile<0, 1, 1, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 1, 1, 0>, + Conv::template process_tile<0, 1, 1, 1, 1, 1>, + Conv::template process_tile<0, 1, 1, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 1, 2, 0>, + Conv::template process_tile<0, 1, 1, 1, 2, 1>, + Conv::template process_tile<0, 1, 1, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 2, 0, 0>, + Conv::template process_tile<0, 1, 1, 2, 0, 1>, + Conv::template process_tile<0, 1, 1, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 2, 1, 0>, + Conv::template process_tile<0, 1, 1, 2, 1, 1>, + Conv::template process_tile<0, 1, 1, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 2, 2, 0>, + Conv::template process_tile<0, 1, 1, 2, 2, 1>, + Conv::template process_tile<0, 1, 1, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 3, 0, 0>, + Conv::template process_tile<0, 1, 1, 3, 0, 1>, + Conv::template process_tile<0, 1, 1, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 3, 1, 0>, + Conv::template process_tile<0, 1, 1, 3, 1, 1>, + Conv::template process_tile<0, 1, 1, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 3, 2, 0>, + Conv::template process_tile<0, 1, 1, 3, 2, 1>, + Conv::template process_tile<0, 1, 1, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 0, 0, 0>, + Conv::template process_tile<0, 1, 2, 0, 0, 1>, + Conv::template process_tile<0, 1, 2, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 0, 1, 0>, + Conv::template process_tile<0, 1, 2, 0, 1, 1>, + Conv::template process_tile<0, 1, 2, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 0, 2, 0>, + Conv::template process_tile<0, 1, 2, 0, 2, 1>, + Conv::template process_tile<0, 1, 2, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 1, 0, 0>, + Conv::template process_tile<0, 1, 2, 1, 0, 1>, + Conv::template process_tile<0, 1, 2, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 1, 1, 0>, + Conv::template process_tile<0, 1, 2, 1, 1, 1>, + Conv::template process_tile<0, 1, 2, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 1, 2, 0>, + Conv::template process_tile<0, 1, 2, 1, 2, 1>, + Conv::template process_tile<0, 1, 2, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 2, 0, 0>, + Conv::template process_tile<0, 1, 2, 2, 0, 1>, + Conv::template process_tile<0, 1, 2, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 2, 1, 0>, + Conv::template process_tile<0, 1, 2, 2, 1, 1>, + Conv::template process_tile<0, 1, 2, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 2, 2, 0>, + Conv::template process_tile<0, 1, 2, 2, 2, 1>, + Conv::template process_tile<0, 1, 2, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 3, 0, 0>, + Conv::template process_tile<0, 1, 2, 3, 0, 1>, + Conv::template process_tile<0, 1, 2, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 3, 1, 0>, + Conv::template process_tile<0, 1, 2, 3, 1, 1>, + Conv::template process_tile<0, 1, 2, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 3, 2, 0>, + Conv::template process_tile<0, 1, 2, 3, 2, 1>, + Conv::template process_tile<0, 1, 2, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 0, 0, 0>, + Conv::template process_tile<0, 1, 3, 0, 0, 1>, + Conv::template process_tile<0, 1, 3, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 0, 1, 0>, + Conv::template process_tile<0, 1, 3, 0, 1, 1>, + Conv::template process_tile<0, 1, 3, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 0, 2, 0>, + Conv::template process_tile<0, 1, 3, 0, 2, 1>, + Conv::template process_tile<0, 1, 3, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 1, 0, 0>, + Conv::template process_tile<0, 1, 3, 1, 0, 1>, + Conv::template process_tile<0, 1, 3, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 1, 1, 0>, + Conv::template process_tile<0, 1, 3, 1, 1, 1>, + Conv::template process_tile<0, 1, 3, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 1, 2, 0>, + Conv::template process_tile<0, 1, 3, 1, 2, 1>, + Conv::template process_tile<0, 1, 3, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 2, 0, 0>, + Conv::template process_tile<0, 1, 3, 2, 0, 1>, + Conv::template process_tile<0, 1, 3, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 2, 1, 0>, + Conv::template process_tile<0, 1, 3, 2, 1, 1>, + Conv::template process_tile<0, 1, 3, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 2, 2, 0>, + Conv::template process_tile<0, 1, 3, 2, 2, 1>, + Conv::template process_tile<0, 1, 3, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 3, 0, 0>, + Conv::template process_tile<0, 1, 3, 3, 0, 1>, + Conv::template process_tile<0, 1, 3, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 3, 1, 0>, + Conv::template process_tile<0, 1, 3, 3, 1, 1>, + Conv::template process_tile<0, 1, 3, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 3, 2, 0>, + Conv::template process_tile<0, 1, 3, 3, 2, 1>, + Conv::template process_tile<0, 1, 3, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 3 + }, // Input pad left = 1 + }, // Input pad top = 0 + { // Input pad top = 1 + { // Input pad left = 0 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 0, 0, 0>, + Conv::template process_tile<1, 0, 0, 0, 0, 1>, + Conv::template process_tile<1, 0, 0, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 0, 1, 0>, + Conv::template process_tile<1, 0, 0, 0, 1, 1>, + Conv::template process_tile<1, 0, 0, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 0, 2, 0>, + Conv::template process_tile<1, 0, 0, 0, 2, 1>, + Conv::template process_tile<1, 0, 0, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 1, 0, 0>, + Conv::template process_tile<1, 0, 0, 1, 0, 1>, + Conv::template process_tile<1, 0, 0, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 1, 1, 0>, + Conv::template process_tile<1, 0, 0, 1, 1, 1>, + Conv::template process_tile<1, 0, 0, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 1, 2, 0>, + Conv::template process_tile<1, 0, 0, 1, 2, 1>, + Conv::template process_tile<1, 0, 0, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 2, 0, 0>, + Conv::template process_tile<1, 0, 0, 2, 0, 1>, + Conv::template process_tile<1, 0, 0, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 2, 1, 0>, + Conv::template process_tile<1, 0, 0, 2, 1, 1>, + Conv::template process_tile<1, 0, 0, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 2, 2, 0>, + Conv::template process_tile<1, 0, 0, 2, 2, 1>, + Conv::template process_tile<1, 0, 0, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 3, 0, 0>, + Conv::template process_tile<1, 0, 0, 3, 0, 1>, + Conv::template process_tile<1, 0, 0, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 3, 1, 0>, + Conv::template process_tile<1, 0, 0, 3, 1, 1>, + Conv::template process_tile<1, 0, 0, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 3, 2, 0>, + Conv::template process_tile<1, 0, 0, 3, 2, 1>, + Conv::template process_tile<1, 0, 0, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 0, 0, 0>, + Conv::template process_tile<1, 0, 1, 0, 0, 1>, + Conv::template process_tile<1, 0, 1, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 0, 1, 0>, + Conv::template process_tile<1, 0, 1, 0, 1, 1>, + Conv::template process_tile<1, 0, 1, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 0, 2, 0>, + Conv::template process_tile<1, 0, 1, 0, 2, 1>, + Conv::template process_tile<1, 0, 1, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 1, 0, 0>, + Conv::template process_tile<1, 0, 1, 1, 0, 1>, + Conv::template process_tile<1, 0, 1, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 1, 1, 0>, + Conv::template process_tile<1, 0, 1, 1, 1, 1>, + Conv::template process_tile<1, 0, 1, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 1, 2, 0>, + Conv::template process_tile<1, 0, 1, 1, 2, 1>, + Conv::template process_tile<1, 0, 1, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 2, 0, 0>, + Conv::template process_tile<1, 0, 1, 2, 0, 1>, + Conv::template process_tile<1, 0, 1, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 2, 1, 0>, + Conv::template process_tile<1, 0, 1, 2, 1, 1>, + Conv::template process_tile<1, 0, 1, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 2, 2, 0>, + Conv::template process_tile<1, 0, 1, 2, 2, 1>, + Conv::template process_tile<1, 0, 1, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 3, 0, 0>, + Conv::template process_tile<1, 0, 1, 3, 0, 1>, + Conv::template process_tile<1, 0, 1, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 3, 1, 0>, + Conv::template process_tile<1, 0, 1, 3, 1, 1>, + Conv::template process_tile<1, 0, 1, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 3, 2, 0>, + Conv::template process_tile<1, 0, 1, 3, 2, 1>, + Conv::template process_tile<1, 0, 1, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 0, 0, 0>, + Conv::template process_tile<1, 0, 2, 0, 0, 1>, + Conv::template process_tile<1, 0, 2, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 0, 1, 0>, + Conv::template process_tile<1, 0, 2, 0, 1, 1>, + Conv::template process_tile<1, 0, 2, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 0, 2, 0>, + Conv::template process_tile<1, 0, 2, 0, 2, 1>, + Conv::template process_tile<1, 0, 2, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 1, 0, 0>, + Conv::template process_tile<1, 0, 2, 1, 0, 1>, + Conv::template process_tile<1, 0, 2, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 1, 1, 0>, + Conv::template process_tile<1, 0, 2, 1, 1, 1>, + Conv::template process_tile<1, 0, 2, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 1, 2, 0>, + Conv::template process_tile<1, 0, 2, 1, 2, 1>, + Conv::template process_tile<1, 0, 2, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 2, 0, 0>, + Conv::template process_tile<1, 0, 2, 2, 0, 1>, + Conv::template process_tile<1, 0, 2, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 2, 1, 0>, + Conv::template process_tile<1, 0, 2, 2, 1, 1>, + Conv::template process_tile<1, 0, 2, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 2, 2, 0>, + Conv::template process_tile<1, 0, 2, 2, 2, 1>, + Conv::template process_tile<1, 0, 2, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 3, 0, 0>, + Conv::template process_tile<1, 0, 2, 3, 0, 1>, + Conv::template process_tile<1, 0, 2, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 3, 1, 0>, + Conv::template process_tile<1, 0, 2, 3, 1, 1>, + Conv::template process_tile<1, 0, 2, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 3, 2, 0>, + Conv::template process_tile<1, 0, 2, 3, 2, 1>, + Conv::template process_tile<1, 0, 2, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 0, 0, 0>, + Conv::template process_tile<1, 0, 3, 0, 0, 1>, + Conv::template process_tile<1, 0, 3, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 0, 1, 0>, + Conv::template process_tile<1, 0, 3, 0, 1, 1>, + Conv::template process_tile<1, 0, 3, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 0, 2, 0>, + Conv::template process_tile<1, 0, 3, 0, 2, 1>, + Conv::template process_tile<1, 0, 3, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 1, 0, 0>, + Conv::template process_tile<1, 0, 3, 1, 0, 1>, + Conv::template process_tile<1, 0, 3, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 1, 1, 0>, + Conv::template process_tile<1, 0, 3, 1, 1, 1>, + Conv::template process_tile<1, 0, 3, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 1, 2, 0>, + Conv::template process_tile<1, 0, 3, 1, 2, 1>, + Conv::template process_tile<1, 0, 3, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 2, 0, 0>, + Conv::template process_tile<1, 0, 3, 2, 0, 1>, + Conv::template process_tile<1, 0, 3, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 2, 1, 0>, + Conv::template process_tile<1, 0, 3, 2, 1, 1>, + Conv::template process_tile<1, 0, 3, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 2, 2, 0>, + Conv::template process_tile<1, 0, 3, 2, 2, 1>, + Conv::template process_tile<1, 0, 3, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 3, 0, 0>, + Conv::template process_tile<1, 0, 3, 3, 0, 1>, + Conv::template process_tile<1, 0, 3, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 3, 1, 0>, + Conv::template process_tile<1, 0, 3, 3, 1, 1>, + Conv::template process_tile<1, 0, 3, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 3, 2, 0>, + Conv::template process_tile<1, 0, 3, 3, 2, 1>, + Conv::template process_tile<1, 0, 3, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 3 + }, // Input pad left = 0 + { // Input pad left = 1 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 0, 0, 0>, + Conv::template process_tile<1, 1, 0, 0, 0, 1>, + Conv::template process_tile<1, 1, 0, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 0, 1, 0>, + Conv::template process_tile<1, 1, 0, 0, 1, 1>, + Conv::template process_tile<1, 1, 0, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 0, 2, 0>, + Conv::template process_tile<1, 1, 0, 0, 2, 1>, + Conv::template process_tile<1, 1, 0, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 1, 0, 0>, + Conv::template process_tile<1, 1, 0, 1, 0, 1>, + Conv::template process_tile<1, 1, 0, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 1, 1, 0>, + Conv::template process_tile<1, 1, 0, 1, 1, 1>, + Conv::template process_tile<1, 1, 0, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 1, 2, 0>, + Conv::template process_tile<1, 1, 0, 1, 2, 1>, + Conv::template process_tile<1, 1, 0, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 2, 0, 0>, + Conv::template process_tile<1, 1, 0, 2, 0, 1>, + Conv::template process_tile<1, 1, 0, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 2, 1, 0>, + Conv::template process_tile<1, 1, 0, 2, 1, 1>, + Conv::template process_tile<1, 1, 0, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 2, 2, 0>, + Conv::template process_tile<1, 1, 0, 2, 2, 1>, + Conv::template process_tile<1, 1, 0, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 3, 0, 0>, + Conv::template process_tile<1, 1, 0, 3, 0, 1>, + Conv::template process_tile<1, 1, 0, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 3, 1, 0>, + Conv::template process_tile<1, 1, 0, 3, 1, 1>, + Conv::template process_tile<1, 1, 0, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 3, 2, 0>, + Conv::template process_tile<1, 1, 0, 3, 2, 1>, + Conv::template process_tile<1, 1, 0, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 0, 0, 0>, + Conv::template process_tile<1, 1, 1, 0, 0, 1>, + Conv::template process_tile<1, 1, 1, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 0, 1, 0>, + Conv::template process_tile<1, 1, 1, 0, 1, 1>, + Conv::template process_tile<1, 1, 1, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 0, 2, 0>, + Conv::template process_tile<1, 1, 1, 0, 2, 1>, + Conv::template process_tile<1, 1, 1, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 1, 0, 0>, + Conv::template process_tile<1, 1, 1, 1, 0, 1>, + Conv::template process_tile<1, 1, 1, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 1, 1, 0>, + Conv::template process_tile<1, 1, 1, 1, 1, 1>, + Conv::template process_tile<1, 1, 1, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 1, 2, 0>, + Conv::template process_tile<1, 1, 1, 1, 2, 1>, + Conv::template process_tile<1, 1, 1, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 2, 0, 0>, + Conv::template process_tile<1, 1, 1, 2, 0, 1>, + Conv::template process_tile<1, 1, 1, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 2, 1, 0>, + Conv::template process_tile<1, 1, 1, 2, 1, 1>, + Conv::template process_tile<1, 1, 1, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 2, 2, 0>, + Conv::template process_tile<1, 1, 1, 2, 2, 1>, + Conv::template process_tile<1, 1, 1, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 3, 0, 0>, + Conv::template process_tile<1, 1, 1, 3, 0, 1>, + Conv::template process_tile<1, 1, 1, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 3, 1, 0>, + Conv::template process_tile<1, 1, 1, 3, 1, 1>, + Conv::template process_tile<1, 1, 1, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 3, 2, 0>, + Conv::template process_tile<1, 1, 1, 3, 2, 1>, + Conv::template process_tile<1, 1, 1, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 0, 0, 0>, + Conv::template process_tile<1, 1, 2, 0, 0, 1>, + Conv::template process_tile<1, 1, 2, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 0, 1, 0>, + Conv::template process_tile<1, 1, 2, 0, 1, 1>, + Conv::template process_tile<1, 1, 2, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 0, 2, 0>, + Conv::template process_tile<1, 1, 2, 0, 2, 1>, + Conv::template process_tile<1, 1, 2, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 1, 0, 0>, + Conv::template process_tile<1, 1, 2, 1, 0, 1>, + Conv::template process_tile<1, 1, 2, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 1, 1, 0>, + Conv::template process_tile<1, 1, 2, 1, 1, 1>, + Conv::template process_tile<1, 1, 2, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 1, 2, 0>, + Conv::template process_tile<1, 1, 2, 1, 2, 1>, + Conv::template process_tile<1, 1, 2, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 2, 0, 0>, + Conv::template process_tile<1, 1, 2, 2, 0, 1>, + Conv::template process_tile<1, 1, 2, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 2, 1, 0>, + Conv::template process_tile<1, 1, 2, 2, 1, 1>, + Conv::template process_tile<1, 1, 2, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 2, 2, 0>, + Conv::template process_tile<1, 1, 2, 2, 2, 1>, + Conv::template process_tile<1, 1, 2, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 3, 0, 0>, + Conv::template process_tile<1, 1, 2, 3, 0, 1>, + Conv::template process_tile<1, 1, 2, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 3, 1, 0>, + Conv::template process_tile<1, 1, 2, 3, 1, 1>, + Conv::template process_tile<1, 1, 2, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 3, 2, 0>, + Conv::template process_tile<1, 1, 2, 3, 2, 1>, + Conv::template process_tile<1, 1, 2, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 0, 0, 0>, + Conv::template process_tile<1, 1, 3, 0, 0, 1>, + Conv::template process_tile<1, 1, 3, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 0, 1, 0>, + Conv::template process_tile<1, 1, 3, 0, 1, 1>, + Conv::template process_tile<1, 1, 3, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 0, 2, 0>, + Conv::template process_tile<1, 1, 3, 0, 2, 1>, + Conv::template process_tile<1, 1, 3, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 1, 0, 0>, + Conv::template process_tile<1, 1, 3, 1, 0, 1>, + Conv::template process_tile<1, 1, 3, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 1, 1, 0>, + Conv::template process_tile<1, 1, 3, 1, 1, 1>, + Conv::template process_tile<1, 1, 3, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 1, 2, 0>, + Conv::template process_tile<1, 1, 3, 1, 2, 1>, + Conv::template process_tile<1, 1, 3, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 2, 0, 0>, + Conv::template process_tile<1, 1, 3, 2, 0, 1>, + Conv::template process_tile<1, 1, 3, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 2, 1, 0>, + Conv::template process_tile<1, 1, 3, 2, 1, 1>, + Conv::template process_tile<1, 1, 3, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 2, 2, 0>, + Conv::template process_tile<1, 1, 3, 2, 2, 1>, + Conv::template process_tile<1, 1, 3, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 3, 0, 0>, + Conv::template process_tile<1, 1, 3, 3, 0, 1>, + Conv::template process_tile<1, 1, 3, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 3, 1, 0>, + Conv::template process_tile<1, 1, 3, 3, 1, 1>, + Conv::template process_tile<1, 1, 3, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 3, 2, 0>, + Conv::template process_tile<1, 1, 3, 3, 2, 1>, + Conv::template process_tile<1, 1, 3, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + }, // Input pad bottom = 3 + }, // Input pad left = 1 + }, // Input pad top = 1 +}; + + +template class DepthwiseConvolution<3, 3, 3, 3, 1, 1, float, float>; +} // namespace depthwise diff --git a/src/core/NEON/kernels/convolution/depthwise/depthwise_3x3_3x3_2x2_fp32_fp32.cpp b/src/core/NEON/kernels/convolution/depthwise/depthwise_3x3_3x3_2x2_fp32_fp32.cpp new file mode 100644 index 0000000000..8d511b1a6c --- /dev/null +++ b/src/core/NEON/kernels/convolution/depthwise/depthwise_3x3_3x3_2x2_fp32_fp32.cpp @@ -0,0 +1,3443 @@ +/* + * Copyright (c) 2018 ARM Limited. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include "arm_compute/core/NEON/kernels/convolution/depthwise/impl_fp32_fp32.hpp" + +namespace depthwise +{ +using Conv = DepthwiseConvolution<3, 3, 3, 3, 2, 2, float, float>; +using ConvImpl = DepthwiseConvolutionImpl<3, 3, 3, 3, 2, 2, float, float>; + +template <> +const Conv::TileFn Conv::tile_fns + [max_in_pad_top] + [max_in_pad_left] + [max_in_pad_bottom] + [max_in_pad_right] + [max_out_pad_bottom] + [max_out_pad_right] = { + { // Input pad top = 0 + { // Input pad left = 0 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 0, 0, 0>, + Conv::template process_tile<0, 0, 0, 0, 0, 1>, + Conv::template process_tile<0, 0, 0, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 0, 1, 0>, + Conv::template process_tile<0, 0, 0, 0, 1, 1>, + Conv::template process_tile<0, 0, 0, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 0, 2, 0>, + Conv::template process_tile<0, 0, 0, 0, 2, 1>, + Conv::template process_tile<0, 0, 0, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 1, 0, 0>, + Conv::template process_tile<0, 0, 0, 1, 0, 1>, + Conv::template process_tile<0, 0, 0, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 1, 1, 0>, + Conv::template process_tile<0, 0, 0, 1, 1, 1>, + Conv::template process_tile<0, 0, 0, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 1, 2, 0>, + Conv::template process_tile<0, 0, 0, 1, 2, 1>, + Conv::template process_tile<0, 0, 0, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 2, 0, 0>, + Conv::template process_tile<0, 0, 0, 2, 0, 1>, + Conv::template process_tile<0, 0, 0, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 2, 1, 0>, + Conv::template process_tile<0, 0, 0, 2, 1, 1>, + Conv::template process_tile<0, 0, 0, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 2, 2, 0>, + Conv::template process_tile<0, 0, 0, 2, 2, 1>, + Conv::template process_tile<0, 0, 0, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 3, 0, 0>, + Conv::template process_tile<0, 0, 0, 3, 0, 1>, + Conv::template process_tile<0, 0, 0, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 3, 1, 0>, + Conv::template process_tile<0, 0, 0, 3, 1, 1>, + Conv::template process_tile<0, 0, 0, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 3, 2, 0>, + Conv::template process_tile<0, 0, 0, 3, 2, 1>, + Conv::template process_tile<0, 0, 0, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 4, 0, 0>, + Conv::template process_tile<0, 0, 0, 4, 0, 1>, + Conv::template process_tile<0, 0, 0, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 4, 1, 0>, + Conv::template process_tile<0, 0, 0, 4, 1, 1>, + Conv::template process_tile<0, 0, 0, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 4, 2, 0>, + Conv::template process_tile<0, 0, 0, 4, 2, 1>, + Conv::template process_tile<0, 0, 0, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 5, 0, 0>, + Conv::template process_tile<0, 0, 0, 5, 0, 1>, + Conv::template process_tile<0, 0, 0, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 5, 1, 0>, + Conv::template process_tile<0, 0, 0, 5, 1, 1>, + Conv::template process_tile<0, 0, 0, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 5, 2, 0>, + Conv::template process_tile<0, 0, 0, 5, 2, 1>, + Conv::template process_tile<0, 0, 0, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 6, 0, 0>, + Conv::template process_tile<0, 0, 0, 6, 0, 1>, + Conv::template process_tile<0, 0, 0, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 6, 1, 0>, + Conv::template process_tile<0, 0, 0, 6, 1, 1>, + Conv::template process_tile<0, 0, 0, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 6, 2, 0>, + Conv::template process_tile<0, 0, 0, 6, 2, 1>, + Conv::template process_tile<0, 0, 0, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 0, 0, 0>, + Conv::template process_tile<0, 0, 1, 0, 0, 1>, + Conv::template process_tile<0, 0, 1, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 0, 1, 0>, + Conv::template process_tile<0, 0, 1, 0, 1, 1>, + Conv::template process_tile<0, 0, 1, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 0, 2, 0>, + Conv::template process_tile<0, 0, 1, 0, 2, 1>, + Conv::template process_tile<0, 0, 1, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 1, 0, 0>, + Conv::template process_tile<0, 0, 1, 1, 0, 1>, + Conv::template process_tile<0, 0, 1, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 1, 1, 0>, + Conv::template process_tile<0, 0, 1, 1, 1, 1>, + Conv::template process_tile<0, 0, 1, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 1, 2, 0>, + Conv::template process_tile<0, 0, 1, 1, 2, 1>, + Conv::template process_tile<0, 0, 1, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 2, 0, 0>, + Conv::template process_tile<0, 0, 1, 2, 0, 1>, + Conv::template process_tile<0, 0, 1, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 2, 1, 0>, + Conv::template process_tile<0, 0, 1, 2, 1, 1>, + Conv::template process_tile<0, 0, 1, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 2, 2, 0>, + Conv::template process_tile<0, 0, 1, 2, 2, 1>, + Conv::template process_tile<0, 0, 1, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 3, 0, 0>, + Conv::template process_tile<0, 0, 1, 3, 0, 1>, + Conv::template process_tile<0, 0, 1, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 3, 1, 0>, + Conv::template process_tile<0, 0, 1, 3, 1, 1>, + Conv::template process_tile<0, 0, 1, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 3, 2, 0>, + Conv::template process_tile<0, 0, 1, 3, 2, 1>, + Conv::template process_tile<0, 0, 1, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 4, 0, 0>, + Conv::template process_tile<0, 0, 1, 4, 0, 1>, + Conv::template process_tile<0, 0, 1, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 4, 1, 0>, + Conv::template process_tile<0, 0, 1, 4, 1, 1>, + Conv::template process_tile<0, 0, 1, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 4, 2, 0>, + Conv::template process_tile<0, 0, 1, 4, 2, 1>, + Conv::template process_tile<0, 0, 1, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 5, 0, 0>, + Conv::template process_tile<0, 0, 1, 5, 0, 1>, + Conv::template process_tile<0, 0, 1, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 5, 1, 0>, + Conv::template process_tile<0, 0, 1, 5, 1, 1>, + Conv::template process_tile<0, 0, 1, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 5, 2, 0>, + Conv::template process_tile<0, 0, 1, 5, 2, 1>, + Conv::template process_tile<0, 0, 1, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 6, 0, 0>, + Conv::template process_tile<0, 0, 1, 6, 0, 1>, + Conv::template process_tile<0, 0, 1, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 6, 1, 0>, + Conv::template process_tile<0, 0, 1, 6, 1, 1>, + Conv::template process_tile<0, 0, 1, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 6, 2, 0>, + Conv::template process_tile<0, 0, 1, 6, 2, 1>, + Conv::template process_tile<0, 0, 1, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 0, 0, 0>, + Conv::template process_tile<0, 0, 2, 0, 0, 1>, + Conv::template process_tile<0, 0, 2, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 0, 1, 0>, + Conv::template process_tile<0, 0, 2, 0, 1, 1>, + Conv::template process_tile<0, 0, 2, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 0, 2, 0>, + Conv::template process_tile<0, 0, 2, 0, 2, 1>, + Conv::template process_tile<0, 0, 2, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 1, 0, 0>, + Conv::template process_tile<0, 0, 2, 1, 0, 1>, + Conv::template process_tile<0, 0, 2, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 1, 1, 0>, + Conv::template process_tile<0, 0, 2, 1, 1, 1>, + Conv::template process_tile<0, 0, 2, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 1, 2, 0>, + Conv::template process_tile<0, 0, 2, 1, 2, 1>, + Conv::template process_tile<0, 0, 2, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 2, 0, 0>, + Conv::template process_tile<0, 0, 2, 2, 0, 1>, + Conv::template process_tile<0, 0, 2, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 2, 1, 0>, + Conv::template process_tile<0, 0, 2, 2, 1, 1>, + Conv::template process_tile<0, 0, 2, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 2, 2, 0>, + Conv::template process_tile<0, 0, 2, 2, 2, 1>, + Conv::template process_tile<0, 0, 2, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 3, 0, 0>, + Conv::template process_tile<0, 0, 2, 3, 0, 1>, + Conv::template process_tile<0, 0, 2, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 3, 1, 0>, + Conv::template process_tile<0, 0, 2, 3, 1, 1>, + Conv::template process_tile<0, 0, 2, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 3, 2, 0>, + Conv::template process_tile<0, 0, 2, 3, 2, 1>, + Conv::template process_tile<0, 0, 2, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 4, 0, 0>, + Conv::template process_tile<0, 0, 2, 4, 0, 1>, + Conv::template process_tile<0, 0, 2, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 4, 1, 0>, + Conv::template process_tile<0, 0, 2, 4, 1, 1>, + Conv::template process_tile<0, 0, 2, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 4, 2, 0>, + Conv::template process_tile<0, 0, 2, 4, 2, 1>, + Conv::template process_tile<0, 0, 2, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 5, 0, 0>, + Conv::template process_tile<0, 0, 2, 5, 0, 1>, + Conv::template process_tile<0, 0, 2, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 5, 1, 0>, + Conv::template process_tile<0, 0, 2, 5, 1, 1>, + Conv::template process_tile<0, 0, 2, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 5, 2, 0>, + Conv::template process_tile<0, 0, 2, 5, 2, 1>, + Conv::template process_tile<0, 0, 2, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 6, 0, 0>, + Conv::template process_tile<0, 0, 2, 6, 0, 1>, + Conv::template process_tile<0, 0, 2, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 6, 1, 0>, + Conv::template process_tile<0, 0, 2, 6, 1, 1>, + Conv::template process_tile<0, 0, 2, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 6, 2, 0>, + Conv::template process_tile<0, 0, 2, 6, 2, 1>, + Conv::template process_tile<0, 0, 2, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 0, 0, 0>, + Conv::template process_tile<0, 0, 3, 0, 0, 1>, + Conv::template process_tile<0, 0, 3, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 0, 1, 0>, + Conv::template process_tile<0, 0, 3, 0, 1, 1>, + Conv::template process_tile<0, 0, 3, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 0, 2, 0>, + Conv::template process_tile<0, 0, 3, 0, 2, 1>, + Conv::template process_tile<0, 0, 3, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 1, 0, 0>, + Conv::template process_tile<0, 0, 3, 1, 0, 1>, + Conv::template process_tile<0, 0, 3, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 1, 1, 0>, + Conv::template process_tile<0, 0, 3, 1, 1, 1>, + Conv::template process_tile<0, 0, 3, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 1, 2, 0>, + Conv::template process_tile<0, 0, 3, 1, 2, 1>, + Conv::template process_tile<0, 0, 3, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 2, 0, 0>, + Conv::template process_tile<0, 0, 3, 2, 0, 1>, + Conv::template process_tile<0, 0, 3, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 2, 1, 0>, + Conv::template process_tile<0, 0, 3, 2, 1, 1>, + Conv::template process_tile<0, 0, 3, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 2, 2, 0>, + Conv::template process_tile<0, 0, 3, 2, 2, 1>, + Conv::template process_tile<0, 0, 3, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 3, 0, 0>, + Conv::template process_tile<0, 0, 3, 3, 0, 1>, + Conv::template process_tile<0, 0, 3, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 3, 1, 0>, + Conv::template process_tile<0, 0, 3, 3, 1, 1>, + Conv::template process_tile<0, 0, 3, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 3, 2, 0>, + Conv::template process_tile<0, 0, 3, 3, 2, 1>, + Conv::template process_tile<0, 0, 3, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 4, 0, 0>, + Conv::template process_tile<0, 0, 3, 4, 0, 1>, + Conv::template process_tile<0, 0, 3, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 4, 1, 0>, + Conv::template process_tile<0, 0, 3, 4, 1, 1>, + Conv::template process_tile<0, 0, 3, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 4, 2, 0>, + Conv::template process_tile<0, 0, 3, 4, 2, 1>, + Conv::template process_tile<0, 0, 3, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 5, 0, 0>, + Conv::template process_tile<0, 0, 3, 5, 0, 1>, + Conv::template process_tile<0, 0, 3, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 5, 1, 0>, + Conv::template process_tile<0, 0, 3, 5, 1, 1>, + Conv::template process_tile<0, 0, 3, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 5, 2, 0>, + Conv::template process_tile<0, 0, 3, 5, 2, 1>, + Conv::template process_tile<0, 0, 3, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 6, 0, 0>, + Conv::template process_tile<0, 0, 3, 6, 0, 1>, + Conv::template process_tile<0, 0, 3, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 6, 1, 0>, + Conv::template process_tile<0, 0, 3, 6, 1, 1>, + Conv::template process_tile<0, 0, 3, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 6, 2, 0>, + Conv::template process_tile<0, 0, 3, 6, 2, 1>, + Conv::template process_tile<0, 0, 3, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 0, 0, 0>, + Conv::template process_tile<0, 0, 4, 0, 0, 1>, + Conv::template process_tile<0, 0, 4, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 0, 1, 0>, + Conv::template process_tile<0, 0, 4, 0, 1, 1>, + Conv::template process_tile<0, 0, 4, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 0, 2, 0>, + Conv::template process_tile<0, 0, 4, 0, 2, 1>, + Conv::template process_tile<0, 0, 4, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 1, 0, 0>, + Conv::template process_tile<0, 0, 4, 1, 0, 1>, + Conv::template process_tile<0, 0, 4, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 1, 1, 0>, + Conv::template process_tile<0, 0, 4, 1, 1, 1>, + Conv::template process_tile<0, 0, 4, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 1, 2, 0>, + Conv::template process_tile<0, 0, 4, 1, 2, 1>, + Conv::template process_tile<0, 0, 4, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 2, 0, 0>, + Conv::template process_tile<0, 0, 4, 2, 0, 1>, + Conv::template process_tile<0, 0, 4, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 2, 1, 0>, + Conv::template process_tile<0, 0, 4, 2, 1, 1>, + Conv::template process_tile<0, 0, 4, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 2, 2, 0>, + Conv::template process_tile<0, 0, 4, 2, 2, 1>, + Conv::template process_tile<0, 0, 4, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 3, 0, 0>, + Conv::template process_tile<0, 0, 4, 3, 0, 1>, + Conv::template process_tile<0, 0, 4, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 3, 1, 0>, + Conv::template process_tile<0, 0, 4, 3, 1, 1>, + Conv::template process_tile<0, 0, 4, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 3, 2, 0>, + Conv::template process_tile<0, 0, 4, 3, 2, 1>, + Conv::template process_tile<0, 0, 4, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 4, 0, 0>, + Conv::template process_tile<0, 0, 4, 4, 0, 1>, + Conv::template process_tile<0, 0, 4, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 4, 1, 0>, + Conv::template process_tile<0, 0, 4, 4, 1, 1>, + Conv::template process_tile<0, 0, 4, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 4, 2, 0>, + Conv::template process_tile<0, 0, 4, 4, 2, 1>, + Conv::template process_tile<0, 0, 4, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 5, 0, 0>, + Conv::template process_tile<0, 0, 4, 5, 0, 1>, + Conv::template process_tile<0, 0, 4, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 5, 1, 0>, + Conv::template process_tile<0, 0, 4, 5, 1, 1>, + Conv::template process_tile<0, 0, 4, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 5, 2, 0>, + Conv::template process_tile<0, 0, 4, 5, 2, 1>, + Conv::template process_tile<0, 0, 4, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 6, 0, 0>, + Conv::template process_tile<0, 0, 4, 6, 0, 1>, + Conv::template process_tile<0, 0, 4, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 6, 1, 0>, + Conv::template process_tile<0, 0, 4, 6, 1, 1>, + Conv::template process_tile<0, 0, 4, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 6, 2, 0>, + Conv::template process_tile<0, 0, 4, 6, 2, 1>, + Conv::template process_tile<0, 0, 4, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 4 + { // Input pad bottom = 5 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 0, 0, 0>, + Conv::template process_tile<0, 0, 5, 0, 0, 1>, + Conv::template process_tile<0, 0, 5, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 0, 1, 0>, + Conv::template process_tile<0, 0, 5, 0, 1, 1>, + Conv::template process_tile<0, 0, 5, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 0, 2, 0>, + Conv::template process_tile<0, 0, 5, 0, 2, 1>, + Conv::template process_tile<0, 0, 5, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 1, 0, 0>, + Conv::template process_tile<0, 0, 5, 1, 0, 1>, + Conv::template process_tile<0, 0, 5, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 1, 1, 0>, + Conv::template process_tile<0, 0, 5, 1, 1, 1>, + Conv::template process_tile<0, 0, 5, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 1, 2, 0>, + Conv::template process_tile<0, 0, 5, 1, 2, 1>, + Conv::template process_tile<0, 0, 5, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 2, 0, 0>, + Conv::template process_tile<0, 0, 5, 2, 0, 1>, + Conv::template process_tile<0, 0, 5, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 2, 1, 0>, + Conv::template process_tile<0, 0, 5, 2, 1, 1>, + Conv::template process_tile<0, 0, 5, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 2, 2, 0>, + Conv::template process_tile<0, 0, 5, 2, 2, 1>, + Conv::template process_tile<0, 0, 5, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 3, 0, 0>, + Conv::template process_tile<0, 0, 5, 3, 0, 1>, + Conv::template process_tile<0, 0, 5, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 3, 1, 0>, + Conv::template process_tile<0, 0, 5, 3, 1, 1>, + Conv::template process_tile<0, 0, 5, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 3, 2, 0>, + Conv::template process_tile<0, 0, 5, 3, 2, 1>, + Conv::template process_tile<0, 0, 5, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 4, 0, 0>, + Conv::template process_tile<0, 0, 5, 4, 0, 1>, + Conv::template process_tile<0, 0, 5, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 4, 1, 0>, + Conv::template process_tile<0, 0, 5, 4, 1, 1>, + Conv::template process_tile<0, 0, 5, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 4, 2, 0>, + Conv::template process_tile<0, 0, 5, 4, 2, 1>, + Conv::template process_tile<0, 0, 5, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 5, 0, 0>, + Conv::template process_tile<0, 0, 5, 5, 0, 1>, + Conv::template process_tile<0, 0, 5, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 5, 1, 0>, + Conv::template process_tile<0, 0, 5, 5, 1, 1>, + Conv::template process_tile<0, 0, 5, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 5, 2, 0>, + Conv::template process_tile<0, 0, 5, 5, 2, 1>, + Conv::template process_tile<0, 0, 5, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 6, 0, 0>, + Conv::template process_tile<0, 0, 5, 6, 0, 1>, + Conv::template process_tile<0, 0, 5, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 6, 1, 0>, + Conv::template process_tile<0, 0, 5, 6, 1, 1>, + Conv::template process_tile<0, 0, 5, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 6, 2, 0>, + Conv::template process_tile<0, 0, 5, 6, 2, 1>, + Conv::template process_tile<0, 0, 5, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 5 + { // Input pad bottom = 6 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 0, 0, 0>, + Conv::template process_tile<0, 0, 6, 0, 0, 1>, + Conv::template process_tile<0, 0, 6, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 0, 1, 0>, + Conv::template process_tile<0, 0, 6, 0, 1, 1>, + Conv::template process_tile<0, 0, 6, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 0, 2, 0>, + Conv::template process_tile<0, 0, 6, 0, 2, 1>, + Conv::template process_tile<0, 0, 6, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 1, 0, 0>, + Conv::template process_tile<0, 0, 6, 1, 0, 1>, + Conv::template process_tile<0, 0, 6, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 1, 1, 0>, + Conv::template process_tile<0, 0, 6, 1, 1, 1>, + Conv::template process_tile<0, 0, 6, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 1, 2, 0>, + Conv::template process_tile<0, 0, 6, 1, 2, 1>, + Conv::template process_tile<0, 0, 6, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 2, 0, 0>, + Conv::template process_tile<0, 0, 6, 2, 0, 1>, + Conv::template process_tile<0, 0, 6, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 2, 1, 0>, + Conv::template process_tile<0, 0, 6, 2, 1, 1>, + Conv::template process_tile<0, 0, 6, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 2, 2, 0>, + Conv::template process_tile<0, 0, 6, 2, 2, 1>, + Conv::template process_tile<0, 0, 6, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 3, 0, 0>, + Conv::template process_tile<0, 0, 6, 3, 0, 1>, + Conv::template process_tile<0, 0, 6, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 3, 1, 0>, + Conv::template process_tile<0, 0, 6, 3, 1, 1>, + Conv::template process_tile<0, 0, 6, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 3, 2, 0>, + Conv::template process_tile<0, 0, 6, 3, 2, 1>, + Conv::template process_tile<0, 0, 6, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 4, 0, 0>, + Conv::template process_tile<0, 0, 6, 4, 0, 1>, + Conv::template process_tile<0, 0, 6, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 4, 1, 0>, + Conv::template process_tile<0, 0, 6, 4, 1, 1>, + Conv::template process_tile<0, 0, 6, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 4, 2, 0>, + Conv::template process_tile<0, 0, 6, 4, 2, 1>, + Conv::template process_tile<0, 0, 6, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 5, 0, 0>, + Conv::template process_tile<0, 0, 6, 5, 0, 1>, + Conv::template process_tile<0, 0, 6, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 5, 1, 0>, + Conv::template process_tile<0, 0, 6, 5, 1, 1>, + Conv::template process_tile<0, 0, 6, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 5, 2, 0>, + Conv::template process_tile<0, 0, 6, 5, 2, 1>, + Conv::template process_tile<0, 0, 6, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 6, 0, 0>, + Conv::template process_tile<0, 0, 6, 6, 0, 1>, + Conv::template process_tile<0, 0, 6, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 6, 1, 0>, + Conv::template process_tile<0, 0, 6, 6, 1, 1>, + Conv::template process_tile<0, 0, 6, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 6, 2, 0>, + Conv::template process_tile<0, 0, 6, 6, 2, 1>, + Conv::template process_tile<0, 0, 6, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 6 + }, // Input pad left = 0 + { // Input pad left = 1 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 0, 0, 0>, + Conv::template process_tile<0, 1, 0, 0, 0, 1>, + Conv::template process_tile<0, 1, 0, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 0, 1, 0>, + Conv::template process_tile<0, 1, 0, 0, 1, 1>, + Conv::template process_tile<0, 1, 0, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 0, 2, 0>, + Conv::template process_tile<0, 1, 0, 0, 2, 1>, + Conv::template process_tile<0, 1, 0, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 1, 0, 0>, + Conv::template process_tile<0, 1, 0, 1, 0, 1>, + Conv::template process_tile<0, 1, 0, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 1, 1, 0>, + Conv::template process_tile<0, 1, 0, 1, 1, 1>, + Conv::template process_tile<0, 1, 0, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 1, 2, 0>, + Conv::template process_tile<0, 1, 0, 1, 2, 1>, + Conv::template process_tile<0, 1, 0, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 2, 0, 0>, + Conv::template process_tile<0, 1, 0, 2, 0, 1>, + Conv::template process_tile<0, 1, 0, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 2, 1, 0>, + Conv::template process_tile<0, 1, 0, 2, 1, 1>, + Conv::template process_tile<0, 1, 0, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 2, 2, 0>, + Conv::template process_tile<0, 1, 0, 2, 2, 1>, + Conv::template process_tile<0, 1, 0, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 3, 0, 0>, + Conv::template process_tile<0, 1, 0, 3, 0, 1>, + Conv::template process_tile<0, 1, 0, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 3, 1, 0>, + Conv::template process_tile<0, 1, 0, 3, 1, 1>, + Conv::template process_tile<0, 1, 0, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 3, 2, 0>, + Conv::template process_tile<0, 1, 0, 3, 2, 1>, + Conv::template process_tile<0, 1, 0, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 4, 0, 0>, + Conv::template process_tile<0, 1, 0, 4, 0, 1>, + Conv::template process_tile<0, 1, 0, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 4, 1, 0>, + Conv::template process_tile<0, 1, 0, 4, 1, 1>, + Conv::template process_tile<0, 1, 0, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 4, 2, 0>, + Conv::template process_tile<0, 1, 0, 4, 2, 1>, + Conv::template process_tile<0, 1, 0, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 5, 0, 0>, + Conv::template process_tile<0, 1, 0, 5, 0, 1>, + Conv::template process_tile<0, 1, 0, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 5, 1, 0>, + Conv::template process_tile<0, 1, 0, 5, 1, 1>, + Conv::template process_tile<0, 1, 0, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 5, 2, 0>, + Conv::template process_tile<0, 1, 0, 5, 2, 1>, + Conv::template process_tile<0, 1, 0, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 6, 0, 0>, + Conv::template process_tile<0, 1, 0, 6, 0, 1>, + Conv::template process_tile<0, 1, 0, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 6, 1, 0>, + Conv::template process_tile<0, 1, 0, 6, 1, 1>, + Conv::template process_tile<0, 1, 0, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 6, 2, 0>, + Conv::template process_tile<0, 1, 0, 6, 2, 1>, + Conv::template process_tile<0, 1, 0, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 0, 0, 0>, + Conv::template process_tile<0, 1, 1, 0, 0, 1>, + Conv::template process_tile<0, 1, 1, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 0, 1, 0>, + Conv::template process_tile<0, 1, 1, 0, 1, 1>, + Conv::template process_tile<0, 1, 1, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 0, 2, 0>, + Conv::template process_tile<0, 1, 1, 0, 2, 1>, + Conv::template process_tile<0, 1, 1, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 1, 0, 0>, + Conv::template process_tile<0, 1, 1, 1, 0, 1>, + Conv::template process_tile<0, 1, 1, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 1, 1, 0>, + Conv::template process_tile<0, 1, 1, 1, 1, 1>, + Conv::template process_tile<0, 1, 1, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 1, 2, 0>, + Conv::template process_tile<0, 1, 1, 1, 2, 1>, + Conv::template process_tile<0, 1, 1, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 2, 0, 0>, + Conv::template process_tile<0, 1, 1, 2, 0, 1>, + Conv::template process_tile<0, 1, 1, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 2, 1, 0>, + Conv::template process_tile<0, 1, 1, 2, 1, 1>, + Conv::template process_tile<0, 1, 1, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 2, 2, 0>, + Conv::template process_tile<0, 1, 1, 2, 2, 1>, + Conv::template process_tile<0, 1, 1, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 3, 0, 0>, + Conv::template process_tile<0, 1, 1, 3, 0, 1>, + Conv::template process_tile<0, 1, 1, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 3, 1, 0>, + Conv::template process_tile<0, 1, 1, 3, 1, 1>, + Conv::template process_tile<0, 1, 1, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 3, 2, 0>, + Conv::template process_tile<0, 1, 1, 3, 2, 1>, + Conv::template process_tile<0, 1, 1, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 4, 0, 0>, + Conv::template process_tile<0, 1, 1, 4, 0, 1>, + Conv::template process_tile<0, 1, 1, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 4, 1, 0>, + Conv::template process_tile<0, 1, 1, 4, 1, 1>, + Conv::template process_tile<0, 1, 1, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 4, 2, 0>, + Conv::template process_tile<0, 1, 1, 4, 2, 1>, + Conv::template process_tile<0, 1, 1, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 5, 0, 0>, + Conv::template process_tile<0, 1, 1, 5, 0, 1>, + Conv::template process_tile<0, 1, 1, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 5, 1, 0>, + Conv::template process_tile<0, 1, 1, 5, 1, 1>, + Conv::template process_tile<0, 1, 1, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 5, 2, 0>, + Conv::template process_tile<0, 1, 1, 5, 2, 1>, + Conv::template process_tile<0, 1, 1, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 6, 0, 0>, + Conv::template process_tile<0, 1, 1, 6, 0, 1>, + Conv::template process_tile<0, 1, 1, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 6, 1, 0>, + Conv::template process_tile<0, 1, 1, 6, 1, 1>, + Conv::template process_tile<0, 1, 1, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 6, 2, 0>, + Conv::template process_tile<0, 1, 1, 6, 2, 1>, + Conv::template process_tile<0, 1, 1, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 0, 0, 0>, + Conv::template process_tile<0, 1, 2, 0, 0, 1>, + Conv::template process_tile<0, 1, 2, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 0, 1, 0>, + Conv::template process_tile<0, 1, 2, 0, 1, 1>, + Conv::template process_tile<0, 1, 2, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 0, 2, 0>, + Conv::template process_tile<0, 1, 2, 0, 2, 1>, + Conv::template process_tile<0, 1, 2, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 1, 0, 0>, + Conv::template process_tile<0, 1, 2, 1, 0, 1>, + Conv::template process_tile<0, 1, 2, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 1, 1, 0>, + Conv::template process_tile<0, 1, 2, 1, 1, 1>, + Conv::template process_tile<0, 1, 2, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 1, 2, 0>, + Conv::template process_tile<0, 1, 2, 1, 2, 1>, + Conv::template process_tile<0, 1, 2, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 2, 0, 0>, + Conv::template process_tile<0, 1, 2, 2, 0, 1>, + Conv::template process_tile<0, 1, 2, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 2, 1, 0>, + Conv::template process_tile<0, 1, 2, 2, 1, 1>, + Conv::template process_tile<0, 1, 2, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 2, 2, 0>, + Conv::template process_tile<0, 1, 2, 2, 2, 1>, + Conv::template process_tile<0, 1, 2, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 3, 0, 0>, + Conv::template process_tile<0, 1, 2, 3, 0, 1>, + Conv::template process_tile<0, 1, 2, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 3, 1, 0>, + Conv::template process_tile<0, 1, 2, 3, 1, 1>, + Conv::template process_tile<0, 1, 2, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 3, 2, 0>, + Conv::template process_tile<0, 1, 2, 3, 2, 1>, + Conv::template process_tile<0, 1, 2, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 4, 0, 0>, + Conv::template process_tile<0, 1, 2, 4, 0, 1>, + Conv::template process_tile<0, 1, 2, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 4, 1, 0>, + Conv::template process_tile<0, 1, 2, 4, 1, 1>, + Conv::template process_tile<0, 1, 2, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 4, 2, 0>, + Conv::template process_tile<0, 1, 2, 4, 2, 1>, + Conv::template process_tile<0, 1, 2, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 5, 0, 0>, + Conv::template process_tile<0, 1, 2, 5, 0, 1>, + Conv::template process_tile<0, 1, 2, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 5, 1, 0>, + Conv::template process_tile<0, 1, 2, 5, 1, 1>, + Conv::template process_tile<0, 1, 2, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 5, 2, 0>, + Conv::template process_tile<0, 1, 2, 5, 2, 1>, + Conv::template process_tile<0, 1, 2, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 6, 0, 0>, + Conv::template process_tile<0, 1, 2, 6, 0, 1>, + Conv::template process_tile<0, 1, 2, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 6, 1, 0>, + Conv::template process_tile<0, 1, 2, 6, 1, 1>, + Conv::template process_tile<0, 1, 2, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 6, 2, 0>, + Conv::template process_tile<0, 1, 2, 6, 2, 1>, + Conv::template process_tile<0, 1, 2, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 0, 0, 0>, + Conv::template process_tile<0, 1, 3, 0, 0, 1>, + Conv::template process_tile<0, 1, 3, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 0, 1, 0>, + Conv::template process_tile<0, 1, 3, 0, 1, 1>, + Conv::template process_tile<0, 1, 3, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 0, 2, 0>, + Conv::template process_tile<0, 1, 3, 0, 2, 1>, + Conv::template process_tile<0, 1, 3, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 1, 0, 0>, + Conv::template process_tile<0, 1, 3, 1, 0, 1>, + Conv::template process_tile<0, 1, 3, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 1, 1, 0>, + Conv::template process_tile<0, 1, 3, 1, 1, 1>, + Conv::template process_tile<0, 1, 3, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 1, 2, 0>, + Conv::template process_tile<0, 1, 3, 1, 2, 1>, + Conv::template process_tile<0, 1, 3, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 2, 0, 0>, + Conv::template process_tile<0, 1, 3, 2, 0, 1>, + Conv::template process_tile<0, 1, 3, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 2, 1, 0>, + Conv::template process_tile<0, 1, 3, 2, 1, 1>, + Conv::template process_tile<0, 1, 3, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 2, 2, 0>, + Conv::template process_tile<0, 1, 3, 2, 2, 1>, + Conv::template process_tile<0, 1, 3, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 3, 0, 0>, + Conv::template process_tile<0, 1, 3, 3, 0, 1>, + Conv::template process_tile<0, 1, 3, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 3, 1, 0>, + Conv::template process_tile<0, 1, 3, 3, 1, 1>, + Conv::template process_tile<0, 1, 3, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 3, 2, 0>, + Conv::template process_tile<0, 1, 3, 3, 2, 1>, + Conv::template process_tile<0, 1, 3, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 4, 0, 0>, + Conv::template process_tile<0, 1, 3, 4, 0, 1>, + Conv::template process_tile<0, 1, 3, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 4, 1, 0>, + Conv::template process_tile<0, 1, 3, 4, 1, 1>, + Conv::template process_tile<0, 1, 3, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 4, 2, 0>, + Conv::template process_tile<0, 1, 3, 4, 2, 1>, + Conv::template process_tile<0, 1, 3, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 5, 0, 0>, + Conv::template process_tile<0, 1, 3, 5, 0, 1>, + Conv::template process_tile<0, 1, 3, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 5, 1, 0>, + Conv::template process_tile<0, 1, 3, 5, 1, 1>, + Conv::template process_tile<0, 1, 3, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 5, 2, 0>, + Conv::template process_tile<0, 1, 3, 5, 2, 1>, + Conv::template process_tile<0, 1, 3, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 6, 0, 0>, + Conv::template process_tile<0, 1, 3, 6, 0, 1>, + Conv::template process_tile<0, 1, 3, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 6, 1, 0>, + Conv::template process_tile<0, 1, 3, 6, 1, 1>, + Conv::template process_tile<0, 1, 3, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 6, 2, 0>, + Conv::template process_tile<0, 1, 3, 6, 2, 1>, + Conv::template process_tile<0, 1, 3, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 0, 0, 0>, + Conv::template process_tile<0, 1, 4, 0, 0, 1>, + Conv::template process_tile<0, 1, 4, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 0, 1, 0>, + Conv::template process_tile<0, 1, 4, 0, 1, 1>, + Conv::template process_tile<0, 1, 4, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 0, 2, 0>, + Conv::template process_tile<0, 1, 4, 0, 2, 1>, + Conv::template process_tile<0, 1, 4, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 1, 0, 0>, + Conv::template process_tile<0, 1, 4, 1, 0, 1>, + Conv::template process_tile<0, 1, 4, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 1, 1, 0>, + Conv::template process_tile<0, 1, 4, 1, 1, 1>, + Conv::template process_tile<0, 1, 4, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 1, 2, 0>, + Conv::template process_tile<0, 1, 4, 1, 2, 1>, + Conv::template process_tile<0, 1, 4, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 2, 0, 0>, + Conv::template process_tile<0, 1, 4, 2, 0, 1>, + Conv::template process_tile<0, 1, 4, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 2, 1, 0>, + Conv::template process_tile<0, 1, 4, 2, 1, 1>, + Conv::template process_tile<0, 1, 4, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 2, 2, 0>, + Conv::template process_tile<0, 1, 4, 2, 2, 1>, + Conv::template process_tile<0, 1, 4, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 3, 0, 0>, + Conv::template process_tile<0, 1, 4, 3, 0, 1>, + Conv::template process_tile<0, 1, 4, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 3, 1, 0>, + Conv::template process_tile<0, 1, 4, 3, 1, 1>, + Conv::template process_tile<0, 1, 4, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 3, 2, 0>, + Conv::template process_tile<0, 1, 4, 3, 2, 1>, + Conv::template process_tile<0, 1, 4, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 4, 0, 0>, + Conv::template process_tile<0, 1, 4, 4, 0, 1>, + Conv::template process_tile<0, 1, 4, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 4, 1, 0>, + Conv::template process_tile<0, 1, 4, 4, 1, 1>, + Conv::template process_tile<0, 1, 4, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 4, 2, 0>, + Conv::template process_tile<0, 1, 4, 4, 2, 1>, + Conv::template process_tile<0, 1, 4, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 5, 0, 0>, + Conv::template process_tile<0, 1, 4, 5, 0, 1>, + Conv::template process_tile<0, 1, 4, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 5, 1, 0>, + Conv::template process_tile<0, 1, 4, 5, 1, 1>, + Conv::template process_tile<0, 1, 4, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 5, 2, 0>, + Conv::template process_tile<0, 1, 4, 5, 2, 1>, + Conv::template process_tile<0, 1, 4, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 6, 0, 0>, + Conv::template process_tile<0, 1, 4, 6, 0, 1>, + Conv::template process_tile<0, 1, 4, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 6, 1, 0>, + Conv::template process_tile<0, 1, 4, 6, 1, 1>, + Conv::template process_tile<0, 1, 4, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 6, 2, 0>, + Conv::template process_tile<0, 1, 4, 6, 2, 1>, + Conv::template process_tile<0, 1, 4, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 4 + { // Input pad bottom = 5 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 0, 0, 0>, + Conv::template process_tile<0, 1, 5, 0, 0, 1>, + Conv::template process_tile<0, 1, 5, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 0, 1, 0>, + Conv::template process_tile<0, 1, 5, 0, 1, 1>, + Conv::template process_tile<0, 1, 5, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 0, 2, 0>, + Conv::template process_tile<0, 1, 5, 0, 2, 1>, + Conv::template process_tile<0, 1, 5, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 1, 0, 0>, + Conv::template process_tile<0, 1, 5, 1, 0, 1>, + Conv::template process_tile<0, 1, 5, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 1, 1, 0>, + Conv::template process_tile<0, 1, 5, 1, 1, 1>, + Conv::template process_tile<0, 1, 5, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 1, 2, 0>, + Conv::template process_tile<0, 1, 5, 1, 2, 1>, + Conv::template process_tile<0, 1, 5, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 2, 0, 0>, + Conv::template process_tile<0, 1, 5, 2, 0, 1>, + Conv::template process_tile<0, 1, 5, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 2, 1, 0>, + Conv::template process_tile<0, 1, 5, 2, 1, 1>, + Conv::template process_tile<0, 1, 5, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 2, 2, 0>, + Conv::template process_tile<0, 1, 5, 2, 2, 1>, + Conv::template process_tile<0, 1, 5, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 3, 0, 0>, + Conv::template process_tile<0, 1, 5, 3, 0, 1>, + Conv::template process_tile<0, 1, 5, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 3, 1, 0>, + Conv::template process_tile<0, 1, 5, 3, 1, 1>, + Conv::template process_tile<0, 1, 5, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 3, 2, 0>, + Conv::template process_tile<0, 1, 5, 3, 2, 1>, + Conv::template process_tile<0, 1, 5, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 4, 0, 0>, + Conv::template process_tile<0, 1, 5, 4, 0, 1>, + Conv::template process_tile<0, 1, 5, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 4, 1, 0>, + Conv::template process_tile<0, 1, 5, 4, 1, 1>, + Conv::template process_tile<0, 1, 5, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 4, 2, 0>, + Conv::template process_tile<0, 1, 5, 4, 2, 1>, + Conv::template process_tile<0, 1, 5, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 5, 0, 0>, + Conv::template process_tile<0, 1, 5, 5, 0, 1>, + Conv::template process_tile<0, 1, 5, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 5, 1, 0>, + Conv::template process_tile<0, 1, 5, 5, 1, 1>, + Conv::template process_tile<0, 1, 5, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 5, 2, 0>, + Conv::template process_tile<0, 1, 5, 5, 2, 1>, + Conv::template process_tile<0, 1, 5, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 6, 0, 0>, + Conv::template process_tile<0, 1, 5, 6, 0, 1>, + Conv::template process_tile<0, 1, 5, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 6, 1, 0>, + Conv::template process_tile<0, 1, 5, 6, 1, 1>, + Conv::template process_tile<0, 1, 5, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 6, 2, 0>, + Conv::template process_tile<0, 1, 5, 6, 2, 1>, + Conv::template process_tile<0, 1, 5, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 5 + { // Input pad bottom = 6 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 0, 0, 0>, + Conv::template process_tile<0, 1, 6, 0, 0, 1>, + Conv::template process_tile<0, 1, 6, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 0, 1, 0>, + Conv::template process_tile<0, 1, 6, 0, 1, 1>, + Conv::template process_tile<0, 1, 6, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 0, 2, 0>, + Conv::template process_tile<0, 1, 6, 0, 2, 1>, + Conv::template process_tile<0, 1, 6, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 1, 0, 0>, + Conv::template process_tile<0, 1, 6, 1, 0, 1>, + Conv::template process_tile<0, 1, 6, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 1, 1, 0>, + Conv::template process_tile<0, 1, 6, 1, 1, 1>, + Conv::template process_tile<0, 1, 6, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 1, 2, 0>, + Conv::template process_tile<0, 1, 6, 1, 2, 1>, + Conv::template process_tile<0, 1, 6, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 2, 0, 0>, + Conv::template process_tile<0, 1, 6, 2, 0, 1>, + Conv::template process_tile<0, 1, 6, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 2, 1, 0>, + Conv::template process_tile<0, 1, 6, 2, 1, 1>, + Conv::template process_tile<0, 1, 6, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 2, 2, 0>, + Conv::template process_tile<0, 1, 6, 2, 2, 1>, + Conv::template process_tile<0, 1, 6, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 3, 0, 0>, + Conv::template process_tile<0, 1, 6, 3, 0, 1>, + Conv::template process_tile<0, 1, 6, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 3, 1, 0>, + Conv::template process_tile<0, 1, 6, 3, 1, 1>, + Conv::template process_tile<0, 1, 6, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 3, 2, 0>, + Conv::template process_tile<0, 1, 6, 3, 2, 1>, + Conv::template process_tile<0, 1, 6, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 4, 0, 0>, + Conv::template process_tile<0, 1, 6, 4, 0, 1>, + Conv::template process_tile<0, 1, 6, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 4, 1, 0>, + Conv::template process_tile<0, 1, 6, 4, 1, 1>, + Conv::template process_tile<0, 1, 6, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 4, 2, 0>, + Conv::template process_tile<0, 1, 6, 4, 2, 1>, + Conv::template process_tile<0, 1, 6, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 5, 0, 0>, + Conv::template process_tile<0, 1, 6, 5, 0, 1>, + Conv::template process_tile<0, 1, 6, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 5, 1, 0>, + Conv::template process_tile<0, 1, 6, 5, 1, 1>, + Conv::template process_tile<0, 1, 6, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 5, 2, 0>, + Conv::template process_tile<0, 1, 6, 5, 2, 1>, + Conv::template process_tile<0, 1, 6, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 6, 0, 0>, + Conv::template process_tile<0, 1, 6, 6, 0, 1>, + Conv::template process_tile<0, 1, 6, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 6, 1, 0>, + Conv::template process_tile<0, 1, 6, 6, 1, 1>, + Conv::template process_tile<0, 1, 6, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 6, 2, 0>, + Conv::template process_tile<0, 1, 6, 6, 2, 1>, + Conv::template process_tile<0, 1, 6, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 6 + }, // Input pad left = 1 + }, // Input pad top = 0 + { // Input pad top = 1 + { // Input pad left = 0 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 0, 0, 0>, + Conv::template process_tile<1, 0, 0, 0, 0, 1>, + Conv::template process_tile<1, 0, 0, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 0, 1, 0>, + Conv::template process_tile<1, 0, 0, 0, 1, 1>, + Conv::template process_tile<1, 0, 0, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 0, 2, 0>, + Conv::template process_tile<1, 0, 0, 0, 2, 1>, + Conv::template process_tile<1, 0, 0, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 1, 0, 0>, + Conv::template process_tile<1, 0, 0, 1, 0, 1>, + Conv::template process_tile<1, 0, 0, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 1, 1, 0>, + Conv::template process_tile<1, 0, 0, 1, 1, 1>, + Conv::template process_tile<1, 0, 0, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 1, 2, 0>, + Conv::template process_tile<1, 0, 0, 1, 2, 1>, + Conv::template process_tile<1, 0, 0, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 2, 0, 0>, + Conv::template process_tile<1, 0, 0, 2, 0, 1>, + Conv::template process_tile<1, 0, 0, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 2, 1, 0>, + Conv::template process_tile<1, 0, 0, 2, 1, 1>, + Conv::template process_tile<1, 0, 0, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 2, 2, 0>, + Conv::template process_tile<1, 0, 0, 2, 2, 1>, + Conv::template process_tile<1, 0, 0, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 3, 0, 0>, + Conv::template process_tile<1, 0, 0, 3, 0, 1>, + Conv::template process_tile<1, 0, 0, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 3, 1, 0>, + Conv::template process_tile<1, 0, 0, 3, 1, 1>, + Conv::template process_tile<1, 0, 0, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 3, 2, 0>, + Conv::template process_tile<1, 0, 0, 3, 2, 1>, + Conv::template process_tile<1, 0, 0, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 4, 0, 0>, + Conv::template process_tile<1, 0, 0, 4, 0, 1>, + Conv::template process_tile<1, 0, 0, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 4, 1, 0>, + Conv::template process_tile<1, 0, 0, 4, 1, 1>, + Conv::template process_tile<1, 0, 0, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 4, 2, 0>, + Conv::template process_tile<1, 0, 0, 4, 2, 1>, + Conv::template process_tile<1, 0, 0, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 5, 0, 0>, + Conv::template process_tile<1, 0, 0, 5, 0, 1>, + Conv::template process_tile<1, 0, 0, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 5, 1, 0>, + Conv::template process_tile<1, 0, 0, 5, 1, 1>, + Conv::template process_tile<1, 0, 0, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 5, 2, 0>, + Conv::template process_tile<1, 0, 0, 5, 2, 1>, + Conv::template process_tile<1, 0, 0, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 6, 0, 0>, + Conv::template process_tile<1, 0, 0, 6, 0, 1>, + Conv::template process_tile<1, 0, 0, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 6, 1, 0>, + Conv::template process_tile<1, 0, 0, 6, 1, 1>, + Conv::template process_tile<1, 0, 0, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 6, 2, 0>, + Conv::template process_tile<1, 0, 0, 6, 2, 1>, + Conv::template process_tile<1, 0, 0, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 0, 0, 0>, + Conv::template process_tile<1, 0, 1, 0, 0, 1>, + Conv::template process_tile<1, 0, 1, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 0, 1, 0>, + Conv::template process_tile<1, 0, 1, 0, 1, 1>, + Conv::template process_tile<1, 0, 1, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 0, 2, 0>, + Conv::template process_tile<1, 0, 1, 0, 2, 1>, + Conv::template process_tile<1, 0, 1, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 1, 0, 0>, + Conv::template process_tile<1, 0, 1, 1, 0, 1>, + Conv::template process_tile<1, 0, 1, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 1, 1, 0>, + Conv::template process_tile<1, 0, 1, 1, 1, 1>, + Conv::template process_tile<1, 0, 1, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 1, 2, 0>, + Conv::template process_tile<1, 0, 1, 1, 2, 1>, + Conv::template process_tile<1, 0, 1, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 2, 0, 0>, + Conv::template process_tile<1, 0, 1, 2, 0, 1>, + Conv::template process_tile<1, 0, 1, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 2, 1, 0>, + Conv::template process_tile<1, 0, 1, 2, 1, 1>, + Conv::template process_tile<1, 0, 1, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 2, 2, 0>, + Conv::template process_tile<1, 0, 1, 2, 2, 1>, + Conv::template process_tile<1, 0, 1, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 3, 0, 0>, + Conv::template process_tile<1, 0, 1, 3, 0, 1>, + Conv::template process_tile<1, 0, 1, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 3, 1, 0>, + Conv::template process_tile<1, 0, 1, 3, 1, 1>, + Conv::template process_tile<1, 0, 1, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 3, 2, 0>, + Conv::template process_tile<1, 0, 1, 3, 2, 1>, + Conv::template process_tile<1, 0, 1, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 4, 0, 0>, + Conv::template process_tile<1, 0, 1, 4, 0, 1>, + Conv::template process_tile<1, 0, 1, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 4, 1, 0>, + Conv::template process_tile<1, 0, 1, 4, 1, 1>, + Conv::template process_tile<1, 0, 1, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 4, 2, 0>, + Conv::template process_tile<1, 0, 1, 4, 2, 1>, + Conv::template process_tile<1, 0, 1, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 5, 0, 0>, + Conv::template process_tile<1, 0, 1, 5, 0, 1>, + Conv::template process_tile<1, 0, 1, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 5, 1, 0>, + Conv::template process_tile<1, 0, 1, 5, 1, 1>, + Conv::template process_tile<1, 0, 1, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 5, 2, 0>, + Conv::template process_tile<1, 0, 1, 5, 2, 1>, + Conv::template process_tile<1, 0, 1, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 6, 0, 0>, + Conv::template process_tile<1, 0, 1, 6, 0, 1>, + Conv::template process_tile<1, 0, 1, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 6, 1, 0>, + Conv::template process_tile<1, 0, 1, 6, 1, 1>, + Conv::template process_tile<1, 0, 1, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 6, 2, 0>, + Conv::template process_tile<1, 0, 1, 6, 2, 1>, + Conv::template process_tile<1, 0, 1, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 0, 0, 0>, + Conv::template process_tile<1, 0, 2, 0, 0, 1>, + Conv::template process_tile<1, 0, 2, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 0, 1, 0>, + Conv::template process_tile<1, 0, 2, 0, 1, 1>, + Conv::template process_tile<1, 0, 2, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 0, 2, 0>, + Conv::template process_tile<1, 0, 2, 0, 2, 1>, + Conv::template process_tile<1, 0, 2, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 1, 0, 0>, + Conv::template process_tile<1, 0, 2, 1, 0, 1>, + Conv::template process_tile<1, 0, 2, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 1, 1, 0>, + Conv::template process_tile<1, 0, 2, 1, 1, 1>, + Conv::template process_tile<1, 0, 2, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 1, 2, 0>, + Conv::template process_tile<1, 0, 2, 1, 2, 1>, + Conv::template process_tile<1, 0, 2, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 2, 0, 0>, + Conv::template process_tile<1, 0, 2, 2, 0, 1>, + Conv::template process_tile<1, 0, 2, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 2, 1, 0>, + Conv::template process_tile<1, 0, 2, 2, 1, 1>, + Conv::template process_tile<1, 0, 2, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 2, 2, 0>, + Conv::template process_tile<1, 0, 2, 2, 2, 1>, + Conv::template process_tile<1, 0, 2, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 3, 0, 0>, + Conv::template process_tile<1, 0, 2, 3, 0, 1>, + Conv::template process_tile<1, 0, 2, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 3, 1, 0>, + Conv::template process_tile<1, 0, 2, 3, 1, 1>, + Conv::template process_tile<1, 0, 2, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 3, 2, 0>, + Conv::template process_tile<1, 0, 2, 3, 2, 1>, + Conv::template process_tile<1, 0, 2, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 4, 0, 0>, + Conv::template process_tile<1, 0, 2, 4, 0, 1>, + Conv::template process_tile<1, 0, 2, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 4, 1, 0>, + Conv::template process_tile<1, 0, 2, 4, 1, 1>, + Conv::template process_tile<1, 0, 2, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 4, 2, 0>, + Conv::template process_tile<1, 0, 2, 4, 2, 1>, + Conv::template process_tile<1, 0, 2, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 5, 0, 0>, + Conv::template process_tile<1, 0, 2, 5, 0, 1>, + Conv::template process_tile<1, 0, 2, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 5, 1, 0>, + Conv::template process_tile<1, 0, 2, 5, 1, 1>, + Conv::template process_tile<1, 0, 2, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 5, 2, 0>, + Conv::template process_tile<1, 0, 2, 5, 2, 1>, + Conv::template process_tile<1, 0, 2, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 6, 0, 0>, + Conv::template process_tile<1, 0, 2, 6, 0, 1>, + Conv::template process_tile<1, 0, 2, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 6, 1, 0>, + Conv::template process_tile<1, 0, 2, 6, 1, 1>, + Conv::template process_tile<1, 0, 2, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 6, 2, 0>, + Conv::template process_tile<1, 0, 2, 6, 2, 1>, + Conv::template process_tile<1, 0, 2, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 0, 0, 0>, + Conv::template process_tile<1, 0, 3, 0, 0, 1>, + Conv::template process_tile<1, 0, 3, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 0, 1, 0>, + Conv::template process_tile<1, 0, 3, 0, 1, 1>, + Conv::template process_tile<1, 0, 3, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 0, 2, 0>, + Conv::template process_tile<1, 0, 3, 0, 2, 1>, + Conv::template process_tile<1, 0, 3, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 1, 0, 0>, + Conv::template process_tile<1, 0, 3, 1, 0, 1>, + Conv::template process_tile<1, 0, 3, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 1, 1, 0>, + Conv::template process_tile<1, 0, 3, 1, 1, 1>, + Conv::template process_tile<1, 0, 3, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 1, 2, 0>, + Conv::template process_tile<1, 0, 3, 1, 2, 1>, + Conv::template process_tile<1, 0, 3, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 2, 0, 0>, + Conv::template process_tile<1, 0, 3, 2, 0, 1>, + Conv::template process_tile<1, 0, 3, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 2, 1, 0>, + Conv::template process_tile<1, 0, 3, 2, 1, 1>, + Conv::template process_tile<1, 0, 3, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 2, 2, 0>, + Conv::template process_tile<1, 0, 3, 2, 2, 1>, + Conv::template process_tile<1, 0, 3, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 3, 0, 0>, + Conv::template process_tile<1, 0, 3, 3, 0, 1>, + Conv::template process_tile<1, 0, 3, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 3, 1, 0>, + Conv::template process_tile<1, 0, 3, 3, 1, 1>, + Conv::template process_tile<1, 0, 3, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 3, 2, 0>, + Conv::template process_tile<1, 0, 3, 3, 2, 1>, + Conv::template process_tile<1, 0, 3, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 4, 0, 0>, + Conv::template process_tile<1, 0, 3, 4, 0, 1>, + Conv::template process_tile<1, 0, 3, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 4, 1, 0>, + Conv::template process_tile<1, 0, 3, 4, 1, 1>, + Conv::template process_tile<1, 0, 3, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 4, 2, 0>, + Conv::template process_tile<1, 0, 3, 4, 2, 1>, + Conv::template process_tile<1, 0, 3, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 5, 0, 0>, + Conv::template process_tile<1, 0, 3, 5, 0, 1>, + Conv::template process_tile<1, 0, 3, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 5, 1, 0>, + Conv::template process_tile<1, 0, 3, 5, 1, 1>, + Conv::template process_tile<1, 0, 3, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 5, 2, 0>, + Conv::template process_tile<1, 0, 3, 5, 2, 1>, + Conv::template process_tile<1, 0, 3, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 6, 0, 0>, + Conv::template process_tile<1, 0, 3, 6, 0, 1>, + Conv::template process_tile<1, 0, 3, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 6, 1, 0>, + Conv::template process_tile<1, 0, 3, 6, 1, 1>, + Conv::template process_tile<1, 0, 3, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 6, 2, 0>, + Conv::template process_tile<1, 0, 3, 6, 2, 1>, + Conv::template process_tile<1, 0, 3, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 0, 0, 0>, + Conv::template process_tile<1, 0, 4, 0, 0, 1>, + Conv::template process_tile<1, 0, 4, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 0, 1, 0>, + Conv::template process_tile<1, 0, 4, 0, 1, 1>, + Conv::template process_tile<1, 0, 4, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 0, 2, 0>, + Conv::template process_tile<1, 0, 4, 0, 2, 1>, + Conv::template process_tile<1, 0, 4, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 1, 0, 0>, + Conv::template process_tile<1, 0, 4, 1, 0, 1>, + Conv::template process_tile<1, 0, 4, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 1, 1, 0>, + Conv::template process_tile<1, 0, 4, 1, 1, 1>, + Conv::template process_tile<1, 0, 4, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 1, 2, 0>, + Conv::template process_tile<1, 0, 4, 1, 2, 1>, + Conv::template process_tile<1, 0, 4, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 2, 0, 0>, + Conv::template process_tile<1, 0, 4, 2, 0, 1>, + Conv::template process_tile<1, 0, 4, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 2, 1, 0>, + Conv::template process_tile<1, 0, 4, 2, 1, 1>, + Conv::template process_tile<1, 0, 4, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 2, 2, 0>, + Conv::template process_tile<1, 0, 4, 2, 2, 1>, + Conv::template process_tile<1, 0, 4, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 3, 0, 0>, + Conv::template process_tile<1, 0, 4, 3, 0, 1>, + Conv::template process_tile<1, 0, 4, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 3, 1, 0>, + Conv::template process_tile<1, 0, 4, 3, 1, 1>, + Conv::template process_tile<1, 0, 4, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 3, 2, 0>, + Conv::template process_tile<1, 0, 4, 3, 2, 1>, + Conv::template process_tile<1, 0, 4, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 4, 0, 0>, + Conv::template process_tile<1, 0, 4, 4, 0, 1>, + Conv::template process_tile<1, 0, 4, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 4, 1, 0>, + Conv::template process_tile<1, 0, 4, 4, 1, 1>, + Conv::template process_tile<1, 0, 4, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 4, 2, 0>, + Conv::template process_tile<1, 0, 4, 4, 2, 1>, + Conv::template process_tile<1, 0, 4, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 5, 0, 0>, + Conv::template process_tile<1, 0, 4, 5, 0, 1>, + Conv::template process_tile<1, 0, 4, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 5, 1, 0>, + Conv::template process_tile<1, 0, 4, 5, 1, 1>, + Conv::template process_tile<1, 0, 4, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 5, 2, 0>, + Conv::template process_tile<1, 0, 4, 5, 2, 1>, + Conv::template process_tile<1, 0, 4, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 6, 0, 0>, + Conv::template process_tile<1, 0, 4, 6, 0, 1>, + Conv::template process_tile<1, 0, 4, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 6, 1, 0>, + Conv::template process_tile<1, 0, 4, 6, 1, 1>, + Conv::template process_tile<1, 0, 4, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 6, 2, 0>, + Conv::template process_tile<1, 0, 4, 6, 2, 1>, + Conv::template process_tile<1, 0, 4, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 4 + { // Input pad bottom = 5 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 0, 0, 0>, + Conv::template process_tile<1, 0, 5, 0, 0, 1>, + Conv::template process_tile<1, 0, 5, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 0, 1, 0>, + Conv::template process_tile<1, 0, 5, 0, 1, 1>, + Conv::template process_tile<1, 0, 5, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 0, 2, 0>, + Conv::template process_tile<1, 0, 5, 0, 2, 1>, + Conv::template process_tile<1, 0, 5, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 1, 0, 0>, + Conv::template process_tile<1, 0, 5, 1, 0, 1>, + Conv::template process_tile<1, 0, 5, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 1, 1, 0>, + Conv::template process_tile<1, 0, 5, 1, 1, 1>, + Conv::template process_tile<1, 0, 5, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 1, 2, 0>, + Conv::template process_tile<1, 0, 5, 1, 2, 1>, + Conv::template process_tile<1, 0, 5, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 2, 0, 0>, + Conv::template process_tile<1, 0, 5, 2, 0, 1>, + Conv::template process_tile<1, 0, 5, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 2, 1, 0>, + Conv::template process_tile<1, 0, 5, 2, 1, 1>, + Conv::template process_tile<1, 0, 5, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 2, 2, 0>, + Conv::template process_tile<1, 0, 5, 2, 2, 1>, + Conv::template process_tile<1, 0, 5, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 3, 0, 0>, + Conv::template process_tile<1, 0, 5, 3, 0, 1>, + Conv::template process_tile<1, 0, 5, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 3, 1, 0>, + Conv::template process_tile<1, 0, 5, 3, 1, 1>, + Conv::template process_tile<1, 0, 5, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 3, 2, 0>, + Conv::template process_tile<1, 0, 5, 3, 2, 1>, + Conv::template process_tile<1, 0, 5, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 4, 0, 0>, + Conv::template process_tile<1, 0, 5, 4, 0, 1>, + Conv::template process_tile<1, 0, 5, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 4, 1, 0>, + Conv::template process_tile<1, 0, 5, 4, 1, 1>, + Conv::template process_tile<1, 0, 5, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 4, 2, 0>, + Conv::template process_tile<1, 0, 5, 4, 2, 1>, + Conv::template process_tile<1, 0, 5, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 5, 0, 0>, + Conv::template process_tile<1, 0, 5, 5, 0, 1>, + Conv::template process_tile<1, 0, 5, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 5, 1, 0>, + Conv::template process_tile<1, 0, 5, 5, 1, 1>, + Conv::template process_tile<1, 0, 5, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 5, 2, 0>, + Conv::template process_tile<1, 0, 5, 5, 2, 1>, + Conv::template process_tile<1, 0, 5, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 6, 0, 0>, + Conv::template process_tile<1, 0, 5, 6, 0, 1>, + Conv::template process_tile<1, 0, 5, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 6, 1, 0>, + Conv::template process_tile<1, 0, 5, 6, 1, 1>, + Conv::template process_tile<1, 0, 5, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 6, 2, 0>, + Conv::template process_tile<1, 0, 5, 6, 2, 1>, + Conv::template process_tile<1, 0, 5, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 5 + { // Input pad bottom = 6 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 0, 0, 0>, + Conv::template process_tile<1, 0, 6, 0, 0, 1>, + Conv::template process_tile<1, 0, 6, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 0, 1, 0>, + Conv::template process_tile<1, 0, 6, 0, 1, 1>, + Conv::template process_tile<1, 0, 6, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 0, 2, 0>, + Conv::template process_tile<1, 0, 6, 0, 2, 1>, + Conv::template process_tile<1, 0, 6, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 1, 0, 0>, + Conv::template process_tile<1, 0, 6, 1, 0, 1>, + Conv::template process_tile<1, 0, 6, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 1, 1, 0>, + Conv::template process_tile<1, 0, 6, 1, 1, 1>, + Conv::template process_tile<1, 0, 6, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 1, 2, 0>, + Conv::template process_tile<1, 0, 6, 1, 2, 1>, + Conv::template process_tile<1, 0, 6, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 2, 0, 0>, + Conv::template process_tile<1, 0, 6, 2, 0, 1>, + Conv::template process_tile<1, 0, 6, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 2, 1, 0>, + Conv::template process_tile<1, 0, 6, 2, 1, 1>, + Conv::template process_tile<1, 0, 6, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 2, 2, 0>, + Conv::template process_tile<1, 0, 6, 2, 2, 1>, + Conv::template process_tile<1, 0, 6, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 3, 0, 0>, + Conv::template process_tile<1, 0, 6, 3, 0, 1>, + Conv::template process_tile<1, 0, 6, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 3, 1, 0>, + Conv::template process_tile<1, 0, 6, 3, 1, 1>, + Conv::template process_tile<1, 0, 6, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 3, 2, 0>, + Conv::template process_tile<1, 0, 6, 3, 2, 1>, + Conv::template process_tile<1, 0, 6, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 4, 0, 0>, + Conv::template process_tile<1, 0, 6, 4, 0, 1>, + Conv::template process_tile<1, 0, 6, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 4, 1, 0>, + Conv::template process_tile<1, 0, 6, 4, 1, 1>, + Conv::template process_tile<1, 0, 6, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 4, 2, 0>, + Conv::template process_tile<1, 0, 6, 4, 2, 1>, + Conv::template process_tile<1, 0, 6, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 5, 0, 0>, + Conv::template process_tile<1, 0, 6, 5, 0, 1>, + Conv::template process_tile<1, 0, 6, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 5, 1, 0>, + Conv::template process_tile<1, 0, 6, 5, 1, 1>, + Conv::template process_tile<1, 0, 6, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 5, 2, 0>, + Conv::template process_tile<1, 0, 6, 5, 2, 1>, + Conv::template process_tile<1, 0, 6, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 6, 0, 0>, + Conv::template process_tile<1, 0, 6, 6, 0, 1>, + Conv::template process_tile<1, 0, 6, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 6, 1, 0>, + Conv::template process_tile<1, 0, 6, 6, 1, 1>, + Conv::template process_tile<1, 0, 6, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 6, 2, 0>, + Conv::template process_tile<1, 0, 6, 6, 2, 1>, + Conv::template process_tile<1, 0, 6, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 6 + }, // Input pad left = 0 + { // Input pad left = 1 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 0, 0, 0>, + Conv::template process_tile<1, 1, 0, 0, 0, 1>, + Conv::template process_tile<1, 1, 0, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 0, 1, 0>, + Conv::template process_tile<1, 1, 0, 0, 1, 1>, + Conv::template process_tile<1, 1, 0, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 0, 2, 0>, + Conv::template process_tile<1, 1, 0, 0, 2, 1>, + Conv::template process_tile<1, 1, 0, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 1, 0, 0>, + Conv::template process_tile<1, 1, 0, 1, 0, 1>, + Conv::template process_tile<1, 1, 0, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 1, 1, 0>, + Conv::template process_tile<1, 1, 0, 1, 1, 1>, + Conv::template process_tile<1, 1, 0, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 1, 2, 0>, + Conv::template process_tile<1, 1, 0, 1, 2, 1>, + Conv::template process_tile<1, 1, 0, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 2, 0, 0>, + Conv::template process_tile<1, 1, 0, 2, 0, 1>, + Conv::template process_tile<1, 1, 0, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 2, 1, 0>, + Conv::template process_tile<1, 1, 0, 2, 1, 1>, + Conv::template process_tile<1, 1, 0, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 2, 2, 0>, + Conv::template process_tile<1, 1, 0, 2, 2, 1>, + Conv::template process_tile<1, 1, 0, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 3, 0, 0>, + Conv::template process_tile<1, 1, 0, 3, 0, 1>, + Conv::template process_tile<1, 1, 0, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 3, 1, 0>, + Conv::template process_tile<1, 1, 0, 3, 1, 1>, + Conv::template process_tile<1, 1, 0, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 3, 2, 0>, + Conv::template process_tile<1, 1, 0, 3, 2, 1>, + Conv::template process_tile<1, 1, 0, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 4, 0, 0>, + Conv::template process_tile<1, 1, 0, 4, 0, 1>, + Conv::template process_tile<1, 1, 0, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 4, 1, 0>, + Conv::template process_tile<1, 1, 0, 4, 1, 1>, + Conv::template process_tile<1, 1, 0, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 4, 2, 0>, + Conv::template process_tile<1, 1, 0, 4, 2, 1>, + Conv::template process_tile<1, 1, 0, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 5, 0, 0>, + Conv::template process_tile<1, 1, 0, 5, 0, 1>, + Conv::template process_tile<1, 1, 0, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 5, 1, 0>, + Conv::template process_tile<1, 1, 0, 5, 1, 1>, + Conv::template process_tile<1, 1, 0, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 5, 2, 0>, + Conv::template process_tile<1, 1, 0, 5, 2, 1>, + Conv::template process_tile<1, 1, 0, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 6, 0, 0>, + Conv::template process_tile<1, 1, 0, 6, 0, 1>, + Conv::template process_tile<1, 1, 0, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 6, 1, 0>, + Conv::template process_tile<1, 1, 0, 6, 1, 1>, + Conv::template process_tile<1, 1, 0, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 6, 2, 0>, + Conv::template process_tile<1, 1, 0, 6, 2, 1>, + Conv::template process_tile<1, 1, 0, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 0, 0, 0>, + Conv::template process_tile<1, 1, 1, 0, 0, 1>, + Conv::template process_tile<1, 1, 1, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 0, 1, 0>, + Conv::template process_tile<1, 1, 1, 0, 1, 1>, + Conv::template process_tile<1, 1, 1, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 0, 2, 0>, + Conv::template process_tile<1, 1, 1, 0, 2, 1>, + Conv::template process_tile<1, 1, 1, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 1, 0, 0>, + Conv::template process_tile<1, 1, 1, 1, 0, 1>, + Conv::template process_tile<1, 1, 1, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 1, 1, 0>, + Conv::template process_tile<1, 1, 1, 1, 1, 1>, + Conv::template process_tile<1, 1, 1, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 1, 2, 0>, + Conv::template process_tile<1, 1, 1, 1, 2, 1>, + Conv::template process_tile<1, 1, 1, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 2, 0, 0>, + Conv::template process_tile<1, 1, 1, 2, 0, 1>, + Conv::template process_tile<1, 1, 1, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 2, 1, 0>, + Conv::template process_tile<1, 1, 1, 2, 1, 1>, + Conv::template process_tile<1, 1, 1, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 2, 2, 0>, + Conv::template process_tile<1, 1, 1, 2, 2, 1>, + Conv::template process_tile<1, 1, 1, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 3, 0, 0>, + Conv::template process_tile<1, 1, 1, 3, 0, 1>, + Conv::template process_tile<1, 1, 1, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 3, 1, 0>, + Conv::template process_tile<1, 1, 1, 3, 1, 1>, + Conv::template process_tile<1, 1, 1, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 3, 2, 0>, + Conv::template process_tile<1, 1, 1, 3, 2, 1>, + Conv::template process_tile<1, 1, 1, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 4, 0, 0>, + Conv::template process_tile<1, 1, 1, 4, 0, 1>, + Conv::template process_tile<1, 1, 1, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 4, 1, 0>, + Conv::template process_tile<1, 1, 1, 4, 1, 1>, + Conv::template process_tile<1, 1, 1, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 4, 2, 0>, + Conv::template process_tile<1, 1, 1, 4, 2, 1>, + Conv::template process_tile<1, 1, 1, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 5, 0, 0>, + Conv::template process_tile<1, 1, 1, 5, 0, 1>, + Conv::template process_tile<1, 1, 1, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 5, 1, 0>, + Conv::template process_tile<1, 1, 1, 5, 1, 1>, + Conv::template process_tile<1, 1, 1, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 5, 2, 0>, + Conv::template process_tile<1, 1, 1, 5, 2, 1>, + Conv::template process_tile<1, 1, 1, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 6, 0, 0>, + Conv::template process_tile<1, 1, 1, 6, 0, 1>, + Conv::template process_tile<1, 1, 1, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 6, 1, 0>, + Conv::template process_tile<1, 1, 1, 6, 1, 1>, + Conv::template process_tile<1, 1, 1, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 6, 2, 0>, + Conv::template process_tile<1, 1, 1, 6, 2, 1>, + Conv::template process_tile<1, 1, 1, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 0, 0, 0>, + Conv::template process_tile<1, 1, 2, 0, 0, 1>, + Conv::template process_tile<1, 1, 2, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 0, 1, 0>, + Conv::template process_tile<1, 1, 2, 0, 1, 1>, + Conv::template process_tile<1, 1, 2, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 0, 2, 0>, + Conv::template process_tile<1, 1, 2, 0, 2, 1>, + Conv::template process_tile<1, 1, 2, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 1, 0, 0>, + Conv::template process_tile<1, 1, 2, 1, 0, 1>, + Conv::template process_tile<1, 1, 2, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 1, 1, 0>, + Conv::template process_tile<1, 1, 2, 1, 1, 1>, + Conv::template process_tile<1, 1, 2, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 1, 2, 0>, + Conv::template process_tile<1, 1, 2, 1, 2, 1>, + Conv::template process_tile<1, 1, 2, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 2, 0, 0>, + Conv::template process_tile<1, 1, 2, 2, 0, 1>, + Conv::template process_tile<1, 1, 2, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 2, 1, 0>, + Conv::template process_tile<1, 1, 2, 2, 1, 1>, + Conv::template process_tile<1, 1, 2, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 2, 2, 0>, + Conv::template process_tile<1, 1, 2, 2, 2, 1>, + Conv::template process_tile<1, 1, 2, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 3, 0, 0>, + Conv::template process_tile<1, 1, 2, 3, 0, 1>, + Conv::template process_tile<1, 1, 2, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 3, 1, 0>, + Conv::template process_tile<1, 1, 2, 3, 1, 1>, + Conv::template process_tile<1, 1, 2, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 3, 2, 0>, + Conv::template process_tile<1, 1, 2, 3, 2, 1>, + Conv::template process_tile<1, 1, 2, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 4, 0, 0>, + Conv::template process_tile<1, 1, 2, 4, 0, 1>, + Conv::template process_tile<1, 1, 2, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 4, 1, 0>, + Conv::template process_tile<1, 1, 2, 4, 1, 1>, + Conv::template process_tile<1, 1, 2, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 4, 2, 0>, + Conv::template process_tile<1, 1, 2, 4, 2, 1>, + Conv::template process_tile<1, 1, 2, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 5, 0, 0>, + Conv::template process_tile<1, 1, 2, 5, 0, 1>, + Conv::template process_tile<1, 1, 2, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 5, 1, 0>, + Conv::template process_tile<1, 1, 2, 5, 1, 1>, + Conv::template process_tile<1, 1, 2, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 5, 2, 0>, + Conv::template process_tile<1, 1, 2, 5, 2, 1>, + Conv::template process_tile<1, 1, 2, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 6, 0, 0>, + Conv::template process_tile<1, 1, 2, 6, 0, 1>, + Conv::template process_tile<1, 1, 2, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 6, 1, 0>, + Conv::template process_tile<1, 1, 2, 6, 1, 1>, + Conv::template process_tile<1, 1, 2, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 6, 2, 0>, + Conv::template process_tile<1, 1, 2, 6, 2, 1>, + Conv::template process_tile<1, 1, 2, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 0, 0, 0>, + Conv::template process_tile<1, 1, 3, 0, 0, 1>, + Conv::template process_tile<1, 1, 3, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 0, 1, 0>, + Conv::template process_tile<1, 1, 3, 0, 1, 1>, + Conv::template process_tile<1, 1, 3, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 0, 2, 0>, + Conv::template process_tile<1, 1, 3, 0, 2, 1>, + Conv::template process_tile<1, 1, 3, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 1, 0, 0>, + Conv::template process_tile<1, 1, 3, 1, 0, 1>, + Conv::template process_tile<1, 1, 3, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 1, 1, 0>, + Conv::template process_tile<1, 1, 3, 1, 1, 1>, + Conv::template process_tile<1, 1, 3, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 1, 2, 0>, + Conv::template process_tile<1, 1, 3, 1, 2, 1>, + Conv::template process_tile<1, 1, 3, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 2, 0, 0>, + Conv::template process_tile<1, 1, 3, 2, 0, 1>, + Conv::template process_tile<1, 1, 3, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 2, 1, 0>, + Conv::template process_tile<1, 1, 3, 2, 1, 1>, + Conv::template process_tile<1, 1, 3, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 2, 2, 0>, + Conv::template process_tile<1, 1, 3, 2, 2, 1>, + Conv::template process_tile<1, 1, 3, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 3, 0, 0>, + Conv::template process_tile<1, 1, 3, 3, 0, 1>, + Conv::template process_tile<1, 1, 3, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 3, 1, 0>, + Conv::template process_tile<1, 1, 3, 3, 1, 1>, + Conv::template process_tile<1, 1, 3, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 3, 2, 0>, + Conv::template process_tile<1, 1, 3, 3, 2, 1>, + Conv::template process_tile<1, 1, 3, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 4, 0, 0>, + Conv::template process_tile<1, 1, 3, 4, 0, 1>, + Conv::template process_tile<1, 1, 3, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 4, 1, 0>, + Conv::template process_tile<1, 1, 3, 4, 1, 1>, + Conv::template process_tile<1, 1, 3, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 4, 2, 0>, + Conv::template process_tile<1, 1, 3, 4, 2, 1>, + Conv::template process_tile<1, 1, 3, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 5, 0, 0>, + Conv::template process_tile<1, 1, 3, 5, 0, 1>, + Conv::template process_tile<1, 1, 3, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 5, 1, 0>, + Conv::template process_tile<1, 1, 3, 5, 1, 1>, + Conv::template process_tile<1, 1, 3, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 5, 2, 0>, + Conv::template process_tile<1, 1, 3, 5, 2, 1>, + Conv::template process_tile<1, 1, 3, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 6, 0, 0>, + Conv::template process_tile<1, 1, 3, 6, 0, 1>, + Conv::template process_tile<1, 1, 3, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 6, 1, 0>, + Conv::template process_tile<1, 1, 3, 6, 1, 1>, + Conv::template process_tile<1, 1, 3, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 6, 2, 0>, + Conv::template process_tile<1, 1, 3, 6, 2, 1>, + Conv::template process_tile<1, 1, 3, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 0, 0, 0>, + Conv::template process_tile<1, 1, 4, 0, 0, 1>, + Conv::template process_tile<1, 1, 4, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 0, 1, 0>, + Conv::template process_tile<1, 1, 4, 0, 1, 1>, + Conv::template process_tile<1, 1, 4, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 0, 2, 0>, + Conv::template process_tile<1, 1, 4, 0, 2, 1>, + Conv::template process_tile<1, 1, 4, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 1, 0, 0>, + Conv::template process_tile<1, 1, 4, 1, 0, 1>, + Conv::template process_tile<1, 1, 4, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 1, 1, 0>, + Conv::template process_tile<1, 1, 4, 1, 1, 1>, + Conv::template process_tile<1, 1, 4, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 1, 2, 0>, + Conv::template process_tile<1, 1, 4, 1, 2, 1>, + Conv::template process_tile<1, 1, 4, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 2, 0, 0>, + Conv::template process_tile<1, 1, 4, 2, 0, 1>, + Conv::template process_tile<1, 1, 4, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 2, 1, 0>, + Conv::template process_tile<1, 1, 4, 2, 1, 1>, + Conv::template process_tile<1, 1, 4, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 2, 2, 0>, + Conv::template process_tile<1, 1, 4, 2, 2, 1>, + Conv::template process_tile<1, 1, 4, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 3, 0, 0>, + Conv::template process_tile<1, 1, 4, 3, 0, 1>, + Conv::template process_tile<1, 1, 4, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 3, 1, 0>, + Conv::template process_tile<1, 1, 4, 3, 1, 1>, + Conv::template process_tile<1, 1, 4, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 3, 2, 0>, + Conv::template process_tile<1, 1, 4, 3, 2, 1>, + Conv::template process_tile<1, 1, 4, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 4, 0, 0>, + Conv::template process_tile<1, 1, 4, 4, 0, 1>, + Conv::template process_tile<1, 1, 4, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 4, 1, 0>, + Conv::template process_tile<1, 1, 4, 4, 1, 1>, + Conv::template process_tile<1, 1, 4, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 4, 2, 0>, + Conv::template process_tile<1, 1, 4, 4, 2, 1>, + Conv::template process_tile<1, 1, 4, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 5, 0, 0>, + Conv::template process_tile<1, 1, 4, 5, 0, 1>, + Conv::template process_tile<1, 1, 4, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 5, 1, 0>, + Conv::template process_tile<1, 1, 4, 5, 1, 1>, + Conv::template process_tile<1, 1, 4, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 5, 2, 0>, + Conv::template process_tile<1, 1, 4, 5, 2, 1>, + Conv::template process_tile<1, 1, 4, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 6, 0, 0>, + Conv::template process_tile<1, 1, 4, 6, 0, 1>, + Conv::template process_tile<1, 1, 4, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 6, 1, 0>, + Conv::template process_tile<1, 1, 4, 6, 1, 1>, + Conv::template process_tile<1, 1, 4, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 6, 2, 0>, + Conv::template process_tile<1, 1, 4, 6, 2, 1>, + Conv::template process_tile<1, 1, 4, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 4 + { // Input pad bottom = 5 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 0, 0, 0>, + Conv::template process_tile<1, 1, 5, 0, 0, 1>, + Conv::template process_tile<1, 1, 5, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 0, 1, 0>, + Conv::template process_tile<1, 1, 5, 0, 1, 1>, + Conv::template process_tile<1, 1, 5, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 0, 2, 0>, + Conv::template process_tile<1, 1, 5, 0, 2, 1>, + Conv::template process_tile<1, 1, 5, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 1, 0, 0>, + Conv::template process_tile<1, 1, 5, 1, 0, 1>, + Conv::template process_tile<1, 1, 5, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 1, 1, 0>, + Conv::template process_tile<1, 1, 5, 1, 1, 1>, + Conv::template process_tile<1, 1, 5, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 1, 2, 0>, + Conv::template process_tile<1, 1, 5, 1, 2, 1>, + Conv::template process_tile<1, 1, 5, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 2, 0, 0>, + Conv::template process_tile<1, 1, 5, 2, 0, 1>, + Conv::template process_tile<1, 1, 5, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 2, 1, 0>, + Conv::template process_tile<1, 1, 5, 2, 1, 1>, + Conv::template process_tile<1, 1, 5, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 2, 2, 0>, + Conv::template process_tile<1, 1, 5, 2, 2, 1>, + Conv::template process_tile<1, 1, 5, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 3, 0, 0>, + Conv::template process_tile<1, 1, 5, 3, 0, 1>, + Conv::template process_tile<1, 1, 5, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 3, 1, 0>, + Conv::template process_tile<1, 1, 5, 3, 1, 1>, + Conv::template process_tile<1, 1, 5, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 3, 2, 0>, + Conv::template process_tile<1, 1, 5, 3, 2, 1>, + Conv::template process_tile<1, 1, 5, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 4, 0, 0>, + Conv::template process_tile<1, 1, 5, 4, 0, 1>, + Conv::template process_tile<1, 1, 5, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 4, 1, 0>, + Conv::template process_tile<1, 1, 5, 4, 1, 1>, + Conv::template process_tile<1, 1, 5, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 4, 2, 0>, + Conv::template process_tile<1, 1, 5, 4, 2, 1>, + Conv::template process_tile<1, 1, 5, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 5, 0, 0>, + Conv::template process_tile<1, 1, 5, 5, 0, 1>, + Conv::template process_tile<1, 1, 5, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 5, 1, 0>, + Conv::template process_tile<1, 1, 5, 5, 1, 1>, + Conv::template process_tile<1, 1, 5, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 5, 2, 0>, + Conv::template process_tile<1, 1, 5, 5, 2, 1>, + Conv::template process_tile<1, 1, 5, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 6, 0, 0>, + Conv::template process_tile<1, 1, 5, 6, 0, 1>, + Conv::template process_tile<1, 1, 5, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 6, 1, 0>, + Conv::template process_tile<1, 1, 5, 6, 1, 1>, + Conv::template process_tile<1, 1, 5, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 6, 2, 0>, + Conv::template process_tile<1, 1, 5, 6, 2, 1>, + Conv::template process_tile<1, 1, 5, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 5 + { // Input pad bottom = 6 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 0, 0, 0>, + Conv::template process_tile<1, 1, 6, 0, 0, 1>, + Conv::template process_tile<1, 1, 6, 0, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 0, 1, 0>, + Conv::template process_tile<1, 1, 6, 0, 1, 1>, + Conv::template process_tile<1, 1, 6, 0, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 0, 2, 0>, + Conv::template process_tile<1, 1, 6, 0, 2, 1>, + Conv::template process_tile<1, 1, 6, 0, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 1, 0, 0>, + Conv::template process_tile<1, 1, 6, 1, 0, 1>, + Conv::template process_tile<1, 1, 6, 1, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 1, 1, 0>, + Conv::template process_tile<1, 1, 6, 1, 1, 1>, + Conv::template process_tile<1, 1, 6, 1, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 1, 2, 0>, + Conv::template process_tile<1, 1, 6, 1, 2, 1>, + Conv::template process_tile<1, 1, 6, 1, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 2, 0, 0>, + Conv::template process_tile<1, 1, 6, 2, 0, 1>, + Conv::template process_tile<1, 1, 6, 2, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 2, 1, 0>, + Conv::template process_tile<1, 1, 6, 2, 1, 1>, + Conv::template process_tile<1, 1, 6, 2, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 2, 2, 0>, + Conv::template process_tile<1, 1, 6, 2, 2, 1>, + Conv::template process_tile<1, 1, 6, 2, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 3, 0, 0>, + Conv::template process_tile<1, 1, 6, 3, 0, 1>, + Conv::template process_tile<1, 1, 6, 3, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 3, 1, 0>, + Conv::template process_tile<1, 1, 6, 3, 1, 1>, + Conv::template process_tile<1, 1, 6, 3, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 3, 2, 0>, + Conv::template process_tile<1, 1, 6, 3, 2, 1>, + Conv::template process_tile<1, 1, 6, 3, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 4, 0, 0>, + Conv::template process_tile<1, 1, 6, 4, 0, 1>, + Conv::template process_tile<1, 1, 6, 4, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 4, 1, 0>, + Conv::template process_tile<1, 1, 6, 4, 1, 1>, + Conv::template process_tile<1, 1, 6, 4, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 4, 2, 0>, + Conv::template process_tile<1, 1, 6, 4, 2, 1>, + Conv::template process_tile<1, 1, 6, 4, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 5, 0, 0>, + Conv::template process_tile<1, 1, 6, 5, 0, 1>, + Conv::template process_tile<1, 1, 6, 5, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 5, 1, 0>, + Conv::template process_tile<1, 1, 6, 5, 1, 1>, + Conv::template process_tile<1, 1, 6, 5, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 5, 2, 0>, + Conv::template process_tile<1, 1, 6, 5, 2, 1>, + Conv::template process_tile<1, 1, 6, 5, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 6, 0, 0>, + Conv::template process_tile<1, 1, 6, 6, 0, 1>, + Conv::template process_tile<1, 1, 6, 6, 0, 2>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 6, 1, 0>, + Conv::template process_tile<1, 1, 6, 6, 1, 1>, + Conv::template process_tile<1, 1, 6, 6, 1, 2>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 6, 2, 0>, + Conv::template process_tile<1, 1, 6, 6, 2, 1>, + Conv::template process_tile<1, 1, 6, 6, 2, 2>, + }, // Output pad bottom = 2 + }, // Input pad right = 6 + }, // Input pad bottom = 6 + }, // Input pad left = 1 + }, // Input pad top = 1 +}; + + +template class DepthwiseConvolution<3, 3, 3, 3, 2, 2, float, float>; +} // namespace depthwise diff --git a/src/core/NEON/kernels/convolution/depthwise/depthwise_4x4_3x3_1x1_fp32_fp32.cpp b/src/core/NEON/kernels/convolution/depthwise/depthwise_4x4_3x3_1x1_fp32_fp32.cpp new file mode 100644 index 0000000000..a1aaaa078c --- /dev/null +++ b/src/core/NEON/kernels/convolution/depthwise/depthwise_4x4_3x3_1x1_fp32_fp32.cpp @@ -0,0 +1,2695 @@ +/* + * Copyright (c) 2018 ARM Limited. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include "arm_compute/core/NEON/kernels/convolution/depthwise/impl_fp32_fp32.hpp" + +namespace depthwise +{ +using Conv = DepthwiseConvolution<4, 4, 3, 3, 1, 1, float, float>; +using ConvImpl = DepthwiseConvolutionImpl<4, 4, 3, 3, 1, 1, float, float>; + +template <> +const Conv::TileFn Conv::tile_fns + [max_in_pad_top] + [max_in_pad_left] + [max_in_pad_bottom] + [max_in_pad_right] + [max_out_pad_bottom] + [max_out_pad_right] = { + { // Input pad top = 0 + { // Input pad left = 0 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 0, 0, 0, 0>, + ConvImpl::template process_tile<0, 0, 0, 0, 0, 1>, + ConvImpl::template process_tile<0, 0, 0, 0, 0, 2>, + ConvImpl::template process_tile<0, 0, 0, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 0, 0, 1, 0>, + ConvImpl::template process_tile<0, 0, 0, 0, 1, 1>, + ConvImpl::template process_tile<0, 0, 0, 0, 1, 2>, + ConvImpl::template process_tile<0, 0, 0, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 0, 0, 2, 0>, + ConvImpl::template process_tile<0, 0, 0, 0, 2, 1>, + ConvImpl::template process_tile<0, 0, 0, 0, 2, 2>, + ConvImpl::template process_tile<0, 0, 0, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 0, 0, 3, 0>, + ConvImpl::template process_tile<0, 0, 0, 0, 3, 1>, + ConvImpl::template process_tile<0, 0, 0, 0, 3, 2>, + ConvImpl::template process_tile<0, 0, 0, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 0, 1, 0, 0>, + ConvImpl::template process_tile<0, 0, 0, 1, 0, 1>, + ConvImpl::template process_tile<0, 0, 0, 1, 0, 2>, + ConvImpl::template process_tile<0, 0, 0, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 0, 1, 1, 0>, + ConvImpl::template process_tile<0, 0, 0, 1, 1, 1>, + ConvImpl::template process_tile<0, 0, 0, 1, 1, 2>, + ConvImpl::template process_tile<0, 0, 0, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 0, 1, 2, 0>, + ConvImpl::template process_tile<0, 0, 0, 1, 2, 1>, + ConvImpl::template process_tile<0, 0, 0, 1, 2, 2>, + ConvImpl::template process_tile<0, 0, 0, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 0, 1, 3, 0>, + ConvImpl::template process_tile<0, 0, 0, 1, 3, 1>, + ConvImpl::template process_tile<0, 0, 0, 1, 3, 2>, + ConvImpl::template process_tile<0, 0, 0, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 0, 2, 0, 0>, + ConvImpl::template process_tile<0, 0, 0, 2, 0, 1>, + ConvImpl::template process_tile<0, 0, 0, 2, 0, 2>, + ConvImpl::template process_tile<0, 0, 0, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 0, 2, 1, 0>, + ConvImpl::template process_tile<0, 0, 0, 2, 1, 1>, + ConvImpl::template process_tile<0, 0, 0, 2, 1, 2>, + ConvImpl::template process_tile<0, 0, 0, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 0, 2, 2, 0>, + ConvImpl::template process_tile<0, 0, 0, 2, 2, 1>, + ConvImpl::template process_tile<0, 0, 0, 2, 2, 2>, + ConvImpl::template process_tile<0, 0, 0, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 0, 2, 3, 0>, + ConvImpl::template process_tile<0, 0, 0, 2, 3, 1>, + ConvImpl::template process_tile<0, 0, 0, 2, 3, 2>, + ConvImpl::template process_tile<0, 0, 0, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 0, 3, 0, 0>, + ConvImpl::template process_tile<0, 0, 0, 3, 0, 1>, + ConvImpl::template process_tile<0, 0, 0, 3, 0, 2>, + ConvImpl::template process_tile<0, 0, 0, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 0, 3, 1, 0>, + ConvImpl::template process_tile<0, 0, 0, 3, 1, 1>, + ConvImpl::template process_tile<0, 0, 0, 3, 1, 2>, + ConvImpl::template process_tile<0, 0, 0, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 0, 3, 2, 0>, + ConvImpl::template process_tile<0, 0, 0, 3, 2, 1>, + ConvImpl::template process_tile<0, 0, 0, 3, 2, 2>, + ConvImpl::template process_tile<0, 0, 0, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 0, 3, 3, 0>, + ConvImpl::template process_tile<0, 0, 0, 3, 3, 1>, + ConvImpl::template process_tile<0, 0, 0, 3, 3, 2>, + ConvImpl::template process_tile<0, 0, 0, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 0, 4, 0, 0>, + ConvImpl::template process_tile<0, 0, 0, 4, 0, 1>, + ConvImpl::template process_tile<0, 0, 0, 4, 0, 2>, + ConvImpl::template process_tile<0, 0, 0, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 0, 4, 1, 0>, + ConvImpl::template process_tile<0, 0, 0, 4, 1, 1>, + ConvImpl::template process_tile<0, 0, 0, 4, 1, 2>, + ConvImpl::template process_tile<0, 0, 0, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 0, 4, 2, 0>, + ConvImpl::template process_tile<0, 0, 0, 4, 2, 1>, + ConvImpl::template process_tile<0, 0, 0, 4, 2, 2>, + ConvImpl::template process_tile<0, 0, 0, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 0, 4, 3, 0>, + ConvImpl::template process_tile<0, 0, 0, 4, 3, 1>, + ConvImpl::template process_tile<0, 0, 0, 4, 3, 2>, + ConvImpl::template process_tile<0, 0, 0, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 1, 0, 0, 0>, + ConvImpl::template process_tile<0, 0, 1, 0, 0, 1>, + ConvImpl::template process_tile<0, 0, 1, 0, 0, 2>, + ConvImpl::template process_tile<0, 0, 1, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 1, 0, 1, 0>, + ConvImpl::template process_tile<0, 0, 1, 0, 1, 1>, + ConvImpl::template process_tile<0, 0, 1, 0, 1, 2>, + ConvImpl::template process_tile<0, 0, 1, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 1, 0, 2, 0>, + ConvImpl::template process_tile<0, 0, 1, 0, 2, 1>, + ConvImpl::template process_tile<0, 0, 1, 0, 2, 2>, + ConvImpl::template process_tile<0, 0, 1, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 1, 0, 3, 0>, + ConvImpl::template process_tile<0, 0, 1, 0, 3, 1>, + ConvImpl::template process_tile<0, 0, 1, 0, 3, 2>, + ConvImpl::template process_tile<0, 0, 1, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 1, 1, 0, 0>, + ConvImpl::template process_tile<0, 0, 1, 1, 0, 1>, + ConvImpl::template process_tile<0, 0, 1, 1, 0, 2>, + ConvImpl::template process_tile<0, 0, 1, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 1, 1, 1, 0>, + ConvImpl::template process_tile<0, 0, 1, 1, 1, 1>, + ConvImpl::template process_tile<0, 0, 1, 1, 1, 2>, + ConvImpl::template process_tile<0, 0, 1, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 1, 1, 2, 0>, + ConvImpl::template process_tile<0, 0, 1, 1, 2, 1>, + ConvImpl::template process_tile<0, 0, 1, 1, 2, 2>, + ConvImpl::template process_tile<0, 0, 1, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 1, 1, 3, 0>, + ConvImpl::template process_tile<0, 0, 1, 1, 3, 1>, + ConvImpl::template process_tile<0, 0, 1, 1, 3, 2>, + ConvImpl::template process_tile<0, 0, 1, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 1, 2, 0, 0>, + ConvImpl::template process_tile<0, 0, 1, 2, 0, 1>, + ConvImpl::template process_tile<0, 0, 1, 2, 0, 2>, + ConvImpl::template process_tile<0, 0, 1, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 1, 2, 1, 0>, + ConvImpl::template process_tile<0, 0, 1, 2, 1, 1>, + ConvImpl::template process_tile<0, 0, 1, 2, 1, 2>, + ConvImpl::template process_tile<0, 0, 1, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 1, 2, 2, 0>, + ConvImpl::template process_tile<0, 0, 1, 2, 2, 1>, + ConvImpl::template process_tile<0, 0, 1, 2, 2, 2>, + ConvImpl::template process_tile<0, 0, 1, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 1, 2, 3, 0>, + ConvImpl::template process_tile<0, 0, 1, 2, 3, 1>, + ConvImpl::template process_tile<0, 0, 1, 2, 3, 2>, + ConvImpl::template process_tile<0, 0, 1, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 1, 3, 0, 0>, + ConvImpl::template process_tile<0, 0, 1, 3, 0, 1>, + ConvImpl::template process_tile<0, 0, 1, 3, 0, 2>, + ConvImpl::template process_tile<0, 0, 1, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 1, 3, 1, 0>, + ConvImpl::template process_tile<0, 0, 1, 3, 1, 1>, + ConvImpl::template process_tile<0, 0, 1, 3, 1, 2>, + ConvImpl::template process_tile<0, 0, 1, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 1, 3, 2, 0>, + ConvImpl::template process_tile<0, 0, 1, 3, 2, 1>, + ConvImpl::template process_tile<0, 0, 1, 3, 2, 2>, + ConvImpl::template process_tile<0, 0, 1, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 1, 3, 3, 0>, + ConvImpl::template process_tile<0, 0, 1, 3, 3, 1>, + ConvImpl::template process_tile<0, 0, 1, 3, 3, 2>, + ConvImpl::template process_tile<0, 0, 1, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 1, 4, 0, 0>, + ConvImpl::template process_tile<0, 0, 1, 4, 0, 1>, + ConvImpl::template process_tile<0, 0, 1, 4, 0, 2>, + ConvImpl::template process_tile<0, 0, 1, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 1, 4, 1, 0>, + ConvImpl::template process_tile<0, 0, 1, 4, 1, 1>, + ConvImpl::template process_tile<0, 0, 1, 4, 1, 2>, + ConvImpl::template process_tile<0, 0, 1, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 1, 4, 2, 0>, + ConvImpl::template process_tile<0, 0, 1, 4, 2, 1>, + ConvImpl::template process_tile<0, 0, 1, 4, 2, 2>, + ConvImpl::template process_tile<0, 0, 1, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 1, 4, 3, 0>, + ConvImpl::template process_tile<0, 0, 1, 4, 3, 1>, + ConvImpl::template process_tile<0, 0, 1, 4, 3, 2>, + ConvImpl::template process_tile<0, 0, 1, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 2, 0, 0, 0>, + ConvImpl::template process_tile<0, 0, 2, 0, 0, 1>, + ConvImpl::template process_tile<0, 0, 2, 0, 0, 2>, + ConvImpl::template process_tile<0, 0, 2, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 2, 0, 1, 0>, + ConvImpl::template process_tile<0, 0, 2, 0, 1, 1>, + ConvImpl::template process_tile<0, 0, 2, 0, 1, 2>, + ConvImpl::template process_tile<0, 0, 2, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 2, 0, 2, 0>, + ConvImpl::template process_tile<0, 0, 2, 0, 2, 1>, + ConvImpl::template process_tile<0, 0, 2, 0, 2, 2>, + ConvImpl::template process_tile<0, 0, 2, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 2, 0, 3, 0>, + ConvImpl::template process_tile<0, 0, 2, 0, 3, 1>, + ConvImpl::template process_tile<0, 0, 2, 0, 3, 2>, + ConvImpl::template process_tile<0, 0, 2, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 2, 1, 0, 0>, + ConvImpl::template process_tile<0, 0, 2, 1, 0, 1>, + ConvImpl::template process_tile<0, 0, 2, 1, 0, 2>, + ConvImpl::template process_tile<0, 0, 2, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 2, 1, 1, 0>, + ConvImpl::template process_tile<0, 0, 2, 1, 1, 1>, + ConvImpl::template process_tile<0, 0, 2, 1, 1, 2>, + ConvImpl::template process_tile<0, 0, 2, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 2, 1, 2, 0>, + ConvImpl::template process_tile<0, 0, 2, 1, 2, 1>, + ConvImpl::template process_tile<0, 0, 2, 1, 2, 2>, + ConvImpl::template process_tile<0, 0, 2, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 2, 1, 3, 0>, + ConvImpl::template process_tile<0, 0, 2, 1, 3, 1>, + ConvImpl::template process_tile<0, 0, 2, 1, 3, 2>, + ConvImpl::template process_tile<0, 0, 2, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 2, 2, 0, 0>, + ConvImpl::template process_tile<0, 0, 2, 2, 0, 1>, + ConvImpl::template process_tile<0, 0, 2, 2, 0, 2>, + ConvImpl::template process_tile<0, 0, 2, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 2, 2, 1, 0>, + ConvImpl::template process_tile<0, 0, 2, 2, 1, 1>, + ConvImpl::template process_tile<0, 0, 2, 2, 1, 2>, + ConvImpl::template process_tile<0, 0, 2, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 2, 2, 2, 0>, + ConvImpl::template process_tile<0, 0, 2, 2, 2, 1>, + ConvImpl::template process_tile<0, 0, 2, 2, 2, 2>, + ConvImpl::template process_tile<0, 0, 2, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 2, 2, 3, 0>, + ConvImpl::template process_tile<0, 0, 2, 2, 3, 1>, + ConvImpl::template process_tile<0, 0, 2, 2, 3, 2>, + ConvImpl::template process_tile<0, 0, 2, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 2, 3, 0, 0>, + ConvImpl::template process_tile<0, 0, 2, 3, 0, 1>, + ConvImpl::template process_tile<0, 0, 2, 3, 0, 2>, + ConvImpl::template process_tile<0, 0, 2, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 2, 3, 1, 0>, + ConvImpl::template process_tile<0, 0, 2, 3, 1, 1>, + ConvImpl::template process_tile<0, 0, 2, 3, 1, 2>, + ConvImpl::template process_tile<0, 0, 2, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 2, 3, 2, 0>, + ConvImpl::template process_tile<0, 0, 2, 3, 2, 1>, + ConvImpl::template process_tile<0, 0, 2, 3, 2, 2>, + ConvImpl::template process_tile<0, 0, 2, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 2, 3, 3, 0>, + ConvImpl::template process_tile<0, 0, 2, 3, 3, 1>, + ConvImpl::template process_tile<0, 0, 2, 3, 3, 2>, + ConvImpl::template process_tile<0, 0, 2, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 2, 4, 0, 0>, + ConvImpl::template process_tile<0, 0, 2, 4, 0, 1>, + ConvImpl::template process_tile<0, 0, 2, 4, 0, 2>, + ConvImpl::template process_tile<0, 0, 2, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 2, 4, 1, 0>, + ConvImpl::template process_tile<0, 0, 2, 4, 1, 1>, + ConvImpl::template process_tile<0, 0, 2, 4, 1, 2>, + ConvImpl::template process_tile<0, 0, 2, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 2, 4, 2, 0>, + ConvImpl::template process_tile<0, 0, 2, 4, 2, 1>, + ConvImpl::template process_tile<0, 0, 2, 4, 2, 2>, + ConvImpl::template process_tile<0, 0, 2, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 2, 4, 3, 0>, + ConvImpl::template process_tile<0, 0, 2, 4, 3, 1>, + ConvImpl::template process_tile<0, 0, 2, 4, 3, 2>, + ConvImpl::template process_tile<0, 0, 2, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 3, 0, 0, 0>, + ConvImpl::template process_tile<0, 0, 3, 0, 0, 1>, + ConvImpl::template process_tile<0, 0, 3, 0, 0, 2>, + ConvImpl::template process_tile<0, 0, 3, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 3, 0, 1, 0>, + ConvImpl::template process_tile<0, 0, 3, 0, 1, 1>, + ConvImpl::template process_tile<0, 0, 3, 0, 1, 2>, + ConvImpl::template process_tile<0, 0, 3, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 3, 0, 2, 0>, + ConvImpl::template process_tile<0, 0, 3, 0, 2, 1>, + ConvImpl::template process_tile<0, 0, 3, 0, 2, 2>, + ConvImpl::template process_tile<0, 0, 3, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 3, 0, 3, 0>, + ConvImpl::template process_tile<0, 0, 3, 0, 3, 1>, + ConvImpl::template process_tile<0, 0, 3, 0, 3, 2>, + ConvImpl::template process_tile<0, 0, 3, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 3, 1, 0, 0>, + ConvImpl::template process_tile<0, 0, 3, 1, 0, 1>, + ConvImpl::template process_tile<0, 0, 3, 1, 0, 2>, + ConvImpl::template process_tile<0, 0, 3, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 3, 1, 1, 0>, + ConvImpl::template process_tile<0, 0, 3, 1, 1, 1>, + ConvImpl::template process_tile<0, 0, 3, 1, 1, 2>, + ConvImpl::template process_tile<0, 0, 3, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 3, 1, 2, 0>, + ConvImpl::template process_tile<0, 0, 3, 1, 2, 1>, + ConvImpl::template process_tile<0, 0, 3, 1, 2, 2>, + ConvImpl::template process_tile<0, 0, 3, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 3, 1, 3, 0>, + ConvImpl::template process_tile<0, 0, 3, 1, 3, 1>, + ConvImpl::template process_tile<0, 0, 3, 1, 3, 2>, + ConvImpl::template process_tile<0, 0, 3, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 3, 2, 0, 0>, + ConvImpl::template process_tile<0, 0, 3, 2, 0, 1>, + ConvImpl::template process_tile<0, 0, 3, 2, 0, 2>, + ConvImpl::template process_tile<0, 0, 3, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 3, 2, 1, 0>, + ConvImpl::template process_tile<0, 0, 3, 2, 1, 1>, + ConvImpl::template process_tile<0, 0, 3, 2, 1, 2>, + ConvImpl::template process_tile<0, 0, 3, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 3, 2, 2, 0>, + ConvImpl::template process_tile<0, 0, 3, 2, 2, 1>, + ConvImpl::template process_tile<0, 0, 3, 2, 2, 2>, + ConvImpl::template process_tile<0, 0, 3, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 3, 2, 3, 0>, + ConvImpl::template process_tile<0, 0, 3, 2, 3, 1>, + ConvImpl::template process_tile<0, 0, 3, 2, 3, 2>, + ConvImpl::template process_tile<0, 0, 3, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 3, 3, 0, 0>, + ConvImpl::template process_tile<0, 0, 3, 3, 0, 1>, + ConvImpl::template process_tile<0, 0, 3, 3, 0, 2>, + ConvImpl::template process_tile<0, 0, 3, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 3, 3, 1, 0>, + ConvImpl::template process_tile<0, 0, 3, 3, 1, 1>, + ConvImpl::template process_tile<0, 0, 3, 3, 1, 2>, + ConvImpl::template process_tile<0, 0, 3, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 3, 3, 2, 0>, + ConvImpl::template process_tile<0, 0, 3, 3, 2, 1>, + ConvImpl::template process_tile<0, 0, 3, 3, 2, 2>, + ConvImpl::template process_tile<0, 0, 3, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 3, 3, 3, 0>, + ConvImpl::template process_tile<0, 0, 3, 3, 3, 1>, + ConvImpl::template process_tile<0, 0, 3, 3, 3, 2>, + ConvImpl::template process_tile<0, 0, 3, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 3, 4, 0, 0>, + ConvImpl::template process_tile<0, 0, 3, 4, 0, 1>, + ConvImpl::template process_tile<0, 0, 3, 4, 0, 2>, + ConvImpl::template process_tile<0, 0, 3, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 3, 4, 1, 0>, + ConvImpl::template process_tile<0, 0, 3, 4, 1, 1>, + ConvImpl::template process_tile<0, 0, 3, 4, 1, 2>, + ConvImpl::template process_tile<0, 0, 3, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 3, 4, 2, 0>, + ConvImpl::template process_tile<0, 0, 3, 4, 2, 1>, + ConvImpl::template process_tile<0, 0, 3, 4, 2, 2>, + ConvImpl::template process_tile<0, 0, 3, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 3, 4, 3, 0>, + ConvImpl::template process_tile<0, 0, 3, 4, 3, 1>, + ConvImpl::template process_tile<0, 0, 3, 4, 3, 2>, + ConvImpl::template process_tile<0, 0, 3, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 4, 0, 0, 0>, + ConvImpl::template process_tile<0, 0, 4, 0, 0, 1>, + ConvImpl::template process_tile<0, 0, 4, 0, 0, 2>, + ConvImpl::template process_tile<0, 0, 4, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 4, 0, 1, 0>, + ConvImpl::template process_tile<0, 0, 4, 0, 1, 1>, + ConvImpl::template process_tile<0, 0, 4, 0, 1, 2>, + ConvImpl::template process_tile<0, 0, 4, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 4, 0, 2, 0>, + ConvImpl::template process_tile<0, 0, 4, 0, 2, 1>, + ConvImpl::template process_tile<0, 0, 4, 0, 2, 2>, + ConvImpl::template process_tile<0, 0, 4, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 4, 0, 3, 0>, + ConvImpl::template process_tile<0, 0, 4, 0, 3, 1>, + ConvImpl::template process_tile<0, 0, 4, 0, 3, 2>, + ConvImpl::template process_tile<0, 0, 4, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 4, 1, 0, 0>, + ConvImpl::template process_tile<0, 0, 4, 1, 0, 1>, + ConvImpl::template process_tile<0, 0, 4, 1, 0, 2>, + ConvImpl::template process_tile<0, 0, 4, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 4, 1, 1, 0>, + ConvImpl::template process_tile<0, 0, 4, 1, 1, 1>, + ConvImpl::template process_tile<0, 0, 4, 1, 1, 2>, + ConvImpl::template process_tile<0, 0, 4, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 4, 1, 2, 0>, + ConvImpl::template process_tile<0, 0, 4, 1, 2, 1>, + ConvImpl::template process_tile<0, 0, 4, 1, 2, 2>, + ConvImpl::template process_tile<0, 0, 4, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 4, 1, 3, 0>, + ConvImpl::template process_tile<0, 0, 4, 1, 3, 1>, + ConvImpl::template process_tile<0, 0, 4, 1, 3, 2>, + ConvImpl::template process_tile<0, 0, 4, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 4, 2, 0, 0>, + ConvImpl::template process_tile<0, 0, 4, 2, 0, 1>, + ConvImpl::template process_tile<0, 0, 4, 2, 0, 2>, + ConvImpl::template process_tile<0, 0, 4, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 4, 2, 1, 0>, + ConvImpl::template process_tile<0, 0, 4, 2, 1, 1>, + ConvImpl::template process_tile<0, 0, 4, 2, 1, 2>, + ConvImpl::template process_tile<0, 0, 4, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 4, 2, 2, 0>, + ConvImpl::template process_tile<0, 0, 4, 2, 2, 1>, + ConvImpl::template process_tile<0, 0, 4, 2, 2, 2>, + ConvImpl::template process_tile<0, 0, 4, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 4, 2, 3, 0>, + ConvImpl::template process_tile<0, 0, 4, 2, 3, 1>, + ConvImpl::template process_tile<0, 0, 4, 2, 3, 2>, + ConvImpl::template process_tile<0, 0, 4, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 4, 3, 0, 0>, + ConvImpl::template process_tile<0, 0, 4, 3, 0, 1>, + ConvImpl::template process_tile<0, 0, 4, 3, 0, 2>, + ConvImpl::template process_tile<0, 0, 4, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 4, 3, 1, 0>, + ConvImpl::template process_tile<0, 0, 4, 3, 1, 1>, + ConvImpl::template process_tile<0, 0, 4, 3, 1, 2>, + ConvImpl::template process_tile<0, 0, 4, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 4, 3, 2, 0>, + ConvImpl::template process_tile<0, 0, 4, 3, 2, 1>, + ConvImpl::template process_tile<0, 0, 4, 3, 2, 2>, + ConvImpl::template process_tile<0, 0, 4, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 4, 3, 3, 0>, + ConvImpl::template process_tile<0, 0, 4, 3, 3, 1>, + ConvImpl::template process_tile<0, 0, 4, 3, 3, 2>, + ConvImpl::template process_tile<0, 0, 4, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 0, 4, 4, 0, 0>, + ConvImpl::template process_tile<0, 0, 4, 4, 0, 1>, + ConvImpl::template process_tile<0, 0, 4, 4, 0, 2>, + ConvImpl::template process_tile<0, 0, 4, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 0, 4, 4, 1, 0>, + ConvImpl::template process_tile<0, 0, 4, 4, 1, 1>, + ConvImpl::template process_tile<0, 0, 4, 4, 1, 2>, + ConvImpl::template process_tile<0, 0, 4, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 0, 4, 4, 2, 0>, + ConvImpl::template process_tile<0, 0, 4, 4, 2, 1>, + ConvImpl::template process_tile<0, 0, 4, 4, 2, 2>, + ConvImpl::template process_tile<0, 0, 4, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 0, 4, 4, 3, 0>, + ConvImpl::template process_tile<0, 0, 4, 4, 3, 1>, + ConvImpl::template process_tile<0, 0, 4, 4, 3, 2>, + ConvImpl::template process_tile<0, 0, 4, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 4 + }, // Input pad left = 0 + { // Input pad left = 1 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 0, 0, 0, 0>, + ConvImpl::template process_tile<0, 1, 0, 0, 0, 1>, + ConvImpl::template process_tile<0, 1, 0, 0, 0, 2>, + ConvImpl::template process_tile<0, 1, 0, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 0, 0, 1, 0>, + ConvImpl::template process_tile<0, 1, 0, 0, 1, 1>, + ConvImpl::template process_tile<0, 1, 0, 0, 1, 2>, + ConvImpl::template process_tile<0, 1, 0, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 0, 0, 2, 0>, + ConvImpl::template process_tile<0, 1, 0, 0, 2, 1>, + ConvImpl::template process_tile<0, 1, 0, 0, 2, 2>, + ConvImpl::template process_tile<0, 1, 0, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 0, 0, 3, 0>, + ConvImpl::template process_tile<0, 1, 0, 0, 3, 1>, + ConvImpl::template process_tile<0, 1, 0, 0, 3, 2>, + ConvImpl::template process_tile<0, 1, 0, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 0, 1, 0, 0>, + ConvImpl::template process_tile<0, 1, 0, 1, 0, 1>, + ConvImpl::template process_tile<0, 1, 0, 1, 0, 2>, + ConvImpl::template process_tile<0, 1, 0, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 0, 1, 1, 0>, + ConvImpl::template process_tile<0, 1, 0, 1, 1, 1>, + ConvImpl::template process_tile<0, 1, 0, 1, 1, 2>, + ConvImpl::template process_tile<0, 1, 0, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 0, 1, 2, 0>, + ConvImpl::template process_tile<0, 1, 0, 1, 2, 1>, + ConvImpl::template process_tile<0, 1, 0, 1, 2, 2>, + ConvImpl::template process_tile<0, 1, 0, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 0, 1, 3, 0>, + ConvImpl::template process_tile<0, 1, 0, 1, 3, 1>, + ConvImpl::template process_tile<0, 1, 0, 1, 3, 2>, + ConvImpl::template process_tile<0, 1, 0, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 0, 2, 0, 0>, + ConvImpl::template process_tile<0, 1, 0, 2, 0, 1>, + ConvImpl::template process_tile<0, 1, 0, 2, 0, 2>, + ConvImpl::template process_tile<0, 1, 0, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 0, 2, 1, 0>, + ConvImpl::template process_tile<0, 1, 0, 2, 1, 1>, + ConvImpl::template process_tile<0, 1, 0, 2, 1, 2>, + ConvImpl::template process_tile<0, 1, 0, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 0, 2, 2, 0>, + ConvImpl::template process_tile<0, 1, 0, 2, 2, 1>, + ConvImpl::template process_tile<0, 1, 0, 2, 2, 2>, + ConvImpl::template process_tile<0, 1, 0, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 0, 2, 3, 0>, + ConvImpl::template process_tile<0, 1, 0, 2, 3, 1>, + ConvImpl::template process_tile<0, 1, 0, 2, 3, 2>, + ConvImpl::template process_tile<0, 1, 0, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 0, 3, 0, 0>, + ConvImpl::template process_tile<0, 1, 0, 3, 0, 1>, + ConvImpl::template process_tile<0, 1, 0, 3, 0, 2>, + ConvImpl::template process_tile<0, 1, 0, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 0, 3, 1, 0>, + ConvImpl::template process_tile<0, 1, 0, 3, 1, 1>, + ConvImpl::template process_tile<0, 1, 0, 3, 1, 2>, + ConvImpl::template process_tile<0, 1, 0, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 0, 3, 2, 0>, + ConvImpl::template process_tile<0, 1, 0, 3, 2, 1>, + ConvImpl::template process_tile<0, 1, 0, 3, 2, 2>, + ConvImpl::template process_tile<0, 1, 0, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 0, 3, 3, 0>, + ConvImpl::template process_tile<0, 1, 0, 3, 3, 1>, + ConvImpl::template process_tile<0, 1, 0, 3, 3, 2>, + ConvImpl::template process_tile<0, 1, 0, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 0, 4, 0, 0>, + ConvImpl::template process_tile<0, 1, 0, 4, 0, 1>, + ConvImpl::template process_tile<0, 1, 0, 4, 0, 2>, + ConvImpl::template process_tile<0, 1, 0, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 0, 4, 1, 0>, + ConvImpl::template process_tile<0, 1, 0, 4, 1, 1>, + ConvImpl::template process_tile<0, 1, 0, 4, 1, 2>, + ConvImpl::template process_tile<0, 1, 0, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 0, 4, 2, 0>, + ConvImpl::template process_tile<0, 1, 0, 4, 2, 1>, + ConvImpl::template process_tile<0, 1, 0, 4, 2, 2>, + ConvImpl::template process_tile<0, 1, 0, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 0, 4, 3, 0>, + ConvImpl::template process_tile<0, 1, 0, 4, 3, 1>, + ConvImpl::template process_tile<0, 1, 0, 4, 3, 2>, + ConvImpl::template process_tile<0, 1, 0, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 1, 0, 0, 0>, + ConvImpl::template process_tile<0, 1, 1, 0, 0, 1>, + ConvImpl::template process_tile<0, 1, 1, 0, 0, 2>, + ConvImpl::template process_tile<0, 1, 1, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 1, 0, 1, 0>, + ConvImpl::template process_tile<0, 1, 1, 0, 1, 1>, + ConvImpl::template process_tile<0, 1, 1, 0, 1, 2>, + ConvImpl::template process_tile<0, 1, 1, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 1, 0, 2, 0>, + ConvImpl::template process_tile<0, 1, 1, 0, 2, 1>, + ConvImpl::template process_tile<0, 1, 1, 0, 2, 2>, + ConvImpl::template process_tile<0, 1, 1, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 1, 0, 3, 0>, + ConvImpl::template process_tile<0, 1, 1, 0, 3, 1>, + ConvImpl::template process_tile<0, 1, 1, 0, 3, 2>, + ConvImpl::template process_tile<0, 1, 1, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 1, 1, 0, 0>, + ConvImpl::template process_tile<0, 1, 1, 1, 0, 1>, + ConvImpl::template process_tile<0, 1, 1, 1, 0, 2>, + ConvImpl::template process_tile<0, 1, 1, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 1, 1, 1, 0>, + ConvImpl::template process_tile<0, 1, 1, 1, 1, 1>, + ConvImpl::template process_tile<0, 1, 1, 1, 1, 2>, + ConvImpl::template process_tile<0, 1, 1, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 1, 1, 2, 0>, + ConvImpl::template process_tile<0, 1, 1, 1, 2, 1>, + ConvImpl::template process_tile<0, 1, 1, 1, 2, 2>, + ConvImpl::template process_tile<0, 1, 1, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 1, 1, 3, 0>, + ConvImpl::template process_tile<0, 1, 1, 1, 3, 1>, + ConvImpl::template process_tile<0, 1, 1, 1, 3, 2>, + ConvImpl::template process_tile<0, 1, 1, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 1, 2, 0, 0>, + ConvImpl::template process_tile<0, 1, 1, 2, 0, 1>, + ConvImpl::template process_tile<0, 1, 1, 2, 0, 2>, + ConvImpl::template process_tile<0, 1, 1, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 1, 2, 1, 0>, + ConvImpl::template process_tile<0, 1, 1, 2, 1, 1>, + ConvImpl::template process_tile<0, 1, 1, 2, 1, 2>, + ConvImpl::template process_tile<0, 1, 1, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 1, 2, 2, 0>, + ConvImpl::template process_tile<0, 1, 1, 2, 2, 1>, + ConvImpl::template process_tile<0, 1, 1, 2, 2, 2>, + ConvImpl::template process_tile<0, 1, 1, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 1, 2, 3, 0>, + ConvImpl::template process_tile<0, 1, 1, 2, 3, 1>, + ConvImpl::template process_tile<0, 1, 1, 2, 3, 2>, + ConvImpl::template process_tile<0, 1, 1, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 1, 3, 0, 0>, + ConvImpl::template process_tile<0, 1, 1, 3, 0, 1>, + ConvImpl::template process_tile<0, 1, 1, 3, 0, 2>, + ConvImpl::template process_tile<0, 1, 1, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 1, 3, 1, 0>, + ConvImpl::template process_tile<0, 1, 1, 3, 1, 1>, + ConvImpl::template process_tile<0, 1, 1, 3, 1, 2>, + ConvImpl::template process_tile<0, 1, 1, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 1, 3, 2, 0>, + ConvImpl::template process_tile<0, 1, 1, 3, 2, 1>, + ConvImpl::template process_tile<0, 1, 1, 3, 2, 2>, + ConvImpl::template process_tile<0, 1, 1, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 1, 3, 3, 0>, + ConvImpl::template process_tile<0, 1, 1, 3, 3, 1>, + ConvImpl::template process_tile<0, 1, 1, 3, 3, 2>, + ConvImpl::template process_tile<0, 1, 1, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 1, 4, 0, 0>, + ConvImpl::template process_tile<0, 1, 1, 4, 0, 1>, + ConvImpl::template process_tile<0, 1, 1, 4, 0, 2>, + ConvImpl::template process_tile<0, 1, 1, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 1, 4, 1, 0>, + ConvImpl::template process_tile<0, 1, 1, 4, 1, 1>, + ConvImpl::template process_tile<0, 1, 1, 4, 1, 2>, + ConvImpl::template process_tile<0, 1, 1, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 1, 4, 2, 0>, + ConvImpl::template process_tile<0, 1, 1, 4, 2, 1>, + ConvImpl::template process_tile<0, 1, 1, 4, 2, 2>, + ConvImpl::template process_tile<0, 1, 1, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 1, 4, 3, 0>, + ConvImpl::template process_tile<0, 1, 1, 4, 3, 1>, + ConvImpl::template process_tile<0, 1, 1, 4, 3, 2>, + ConvImpl::template process_tile<0, 1, 1, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 2, 0, 0, 0>, + ConvImpl::template process_tile<0, 1, 2, 0, 0, 1>, + ConvImpl::template process_tile<0, 1, 2, 0, 0, 2>, + ConvImpl::template process_tile<0, 1, 2, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 2, 0, 1, 0>, + ConvImpl::template process_tile<0, 1, 2, 0, 1, 1>, + ConvImpl::template process_tile<0, 1, 2, 0, 1, 2>, + ConvImpl::template process_tile<0, 1, 2, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 2, 0, 2, 0>, + ConvImpl::template process_tile<0, 1, 2, 0, 2, 1>, + ConvImpl::template process_tile<0, 1, 2, 0, 2, 2>, + ConvImpl::template process_tile<0, 1, 2, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 2, 0, 3, 0>, + ConvImpl::template process_tile<0, 1, 2, 0, 3, 1>, + ConvImpl::template process_tile<0, 1, 2, 0, 3, 2>, + ConvImpl::template process_tile<0, 1, 2, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 2, 1, 0, 0>, + ConvImpl::template process_tile<0, 1, 2, 1, 0, 1>, + ConvImpl::template process_tile<0, 1, 2, 1, 0, 2>, + ConvImpl::template process_tile<0, 1, 2, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 2, 1, 1, 0>, + ConvImpl::template process_tile<0, 1, 2, 1, 1, 1>, + ConvImpl::template process_tile<0, 1, 2, 1, 1, 2>, + ConvImpl::template process_tile<0, 1, 2, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 2, 1, 2, 0>, + ConvImpl::template process_tile<0, 1, 2, 1, 2, 1>, + ConvImpl::template process_tile<0, 1, 2, 1, 2, 2>, + ConvImpl::template process_tile<0, 1, 2, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 2, 1, 3, 0>, + ConvImpl::template process_tile<0, 1, 2, 1, 3, 1>, + ConvImpl::template process_tile<0, 1, 2, 1, 3, 2>, + ConvImpl::template process_tile<0, 1, 2, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 2, 2, 0, 0>, + ConvImpl::template process_tile<0, 1, 2, 2, 0, 1>, + ConvImpl::template process_tile<0, 1, 2, 2, 0, 2>, + ConvImpl::template process_tile<0, 1, 2, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 2, 2, 1, 0>, + ConvImpl::template process_tile<0, 1, 2, 2, 1, 1>, + ConvImpl::template process_tile<0, 1, 2, 2, 1, 2>, + ConvImpl::template process_tile<0, 1, 2, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 2, 2, 2, 0>, + ConvImpl::template process_tile<0, 1, 2, 2, 2, 1>, + ConvImpl::template process_tile<0, 1, 2, 2, 2, 2>, + ConvImpl::template process_tile<0, 1, 2, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 2, 2, 3, 0>, + ConvImpl::template process_tile<0, 1, 2, 2, 3, 1>, + ConvImpl::template process_tile<0, 1, 2, 2, 3, 2>, + ConvImpl::template process_tile<0, 1, 2, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 2, 3, 0, 0>, + ConvImpl::template process_tile<0, 1, 2, 3, 0, 1>, + ConvImpl::template process_tile<0, 1, 2, 3, 0, 2>, + ConvImpl::template process_tile<0, 1, 2, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 2, 3, 1, 0>, + ConvImpl::template process_tile<0, 1, 2, 3, 1, 1>, + ConvImpl::template process_tile<0, 1, 2, 3, 1, 2>, + ConvImpl::template process_tile<0, 1, 2, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 2, 3, 2, 0>, + ConvImpl::template process_tile<0, 1, 2, 3, 2, 1>, + ConvImpl::template process_tile<0, 1, 2, 3, 2, 2>, + ConvImpl::template process_tile<0, 1, 2, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 2, 3, 3, 0>, + ConvImpl::template process_tile<0, 1, 2, 3, 3, 1>, + ConvImpl::template process_tile<0, 1, 2, 3, 3, 2>, + ConvImpl::template process_tile<0, 1, 2, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 2, 4, 0, 0>, + ConvImpl::template process_tile<0, 1, 2, 4, 0, 1>, + ConvImpl::template process_tile<0, 1, 2, 4, 0, 2>, + ConvImpl::template process_tile<0, 1, 2, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 2, 4, 1, 0>, + ConvImpl::template process_tile<0, 1, 2, 4, 1, 1>, + ConvImpl::template process_tile<0, 1, 2, 4, 1, 2>, + ConvImpl::template process_tile<0, 1, 2, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 2, 4, 2, 0>, + ConvImpl::template process_tile<0, 1, 2, 4, 2, 1>, + ConvImpl::template process_tile<0, 1, 2, 4, 2, 2>, + ConvImpl::template process_tile<0, 1, 2, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 2, 4, 3, 0>, + ConvImpl::template process_tile<0, 1, 2, 4, 3, 1>, + ConvImpl::template process_tile<0, 1, 2, 4, 3, 2>, + ConvImpl::template process_tile<0, 1, 2, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 3, 0, 0, 0>, + ConvImpl::template process_tile<0, 1, 3, 0, 0, 1>, + ConvImpl::template process_tile<0, 1, 3, 0, 0, 2>, + ConvImpl::template process_tile<0, 1, 3, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 3, 0, 1, 0>, + ConvImpl::template process_tile<0, 1, 3, 0, 1, 1>, + ConvImpl::template process_tile<0, 1, 3, 0, 1, 2>, + ConvImpl::template process_tile<0, 1, 3, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 3, 0, 2, 0>, + ConvImpl::template process_tile<0, 1, 3, 0, 2, 1>, + ConvImpl::template process_tile<0, 1, 3, 0, 2, 2>, + ConvImpl::template process_tile<0, 1, 3, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 3, 0, 3, 0>, + ConvImpl::template process_tile<0, 1, 3, 0, 3, 1>, + ConvImpl::template process_tile<0, 1, 3, 0, 3, 2>, + ConvImpl::template process_tile<0, 1, 3, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 3, 1, 0, 0>, + ConvImpl::template process_tile<0, 1, 3, 1, 0, 1>, + ConvImpl::template process_tile<0, 1, 3, 1, 0, 2>, + ConvImpl::template process_tile<0, 1, 3, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 3, 1, 1, 0>, + ConvImpl::template process_tile<0, 1, 3, 1, 1, 1>, + ConvImpl::template process_tile<0, 1, 3, 1, 1, 2>, + ConvImpl::template process_tile<0, 1, 3, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 3, 1, 2, 0>, + ConvImpl::template process_tile<0, 1, 3, 1, 2, 1>, + ConvImpl::template process_tile<0, 1, 3, 1, 2, 2>, + ConvImpl::template process_tile<0, 1, 3, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 3, 1, 3, 0>, + ConvImpl::template process_tile<0, 1, 3, 1, 3, 1>, + ConvImpl::template process_tile<0, 1, 3, 1, 3, 2>, + ConvImpl::template process_tile<0, 1, 3, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 3, 2, 0, 0>, + ConvImpl::template process_tile<0, 1, 3, 2, 0, 1>, + ConvImpl::template process_tile<0, 1, 3, 2, 0, 2>, + ConvImpl::template process_tile<0, 1, 3, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 3, 2, 1, 0>, + ConvImpl::template process_tile<0, 1, 3, 2, 1, 1>, + ConvImpl::template process_tile<0, 1, 3, 2, 1, 2>, + ConvImpl::template process_tile<0, 1, 3, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 3, 2, 2, 0>, + ConvImpl::template process_tile<0, 1, 3, 2, 2, 1>, + ConvImpl::template process_tile<0, 1, 3, 2, 2, 2>, + ConvImpl::template process_tile<0, 1, 3, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 3, 2, 3, 0>, + ConvImpl::template process_tile<0, 1, 3, 2, 3, 1>, + ConvImpl::template process_tile<0, 1, 3, 2, 3, 2>, + ConvImpl::template process_tile<0, 1, 3, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 3, 3, 0, 0>, + ConvImpl::template process_tile<0, 1, 3, 3, 0, 1>, + ConvImpl::template process_tile<0, 1, 3, 3, 0, 2>, + ConvImpl::template process_tile<0, 1, 3, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 3, 3, 1, 0>, + ConvImpl::template process_tile<0, 1, 3, 3, 1, 1>, + ConvImpl::template process_tile<0, 1, 3, 3, 1, 2>, + ConvImpl::template process_tile<0, 1, 3, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 3, 3, 2, 0>, + ConvImpl::template process_tile<0, 1, 3, 3, 2, 1>, + ConvImpl::template process_tile<0, 1, 3, 3, 2, 2>, + ConvImpl::template process_tile<0, 1, 3, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 3, 3, 3, 0>, + ConvImpl::template process_tile<0, 1, 3, 3, 3, 1>, + ConvImpl::template process_tile<0, 1, 3, 3, 3, 2>, + ConvImpl::template process_tile<0, 1, 3, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 3, 4, 0, 0>, + ConvImpl::template process_tile<0, 1, 3, 4, 0, 1>, + ConvImpl::template process_tile<0, 1, 3, 4, 0, 2>, + ConvImpl::template process_tile<0, 1, 3, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 3, 4, 1, 0>, + ConvImpl::template process_tile<0, 1, 3, 4, 1, 1>, + ConvImpl::template process_tile<0, 1, 3, 4, 1, 2>, + ConvImpl::template process_tile<0, 1, 3, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 3, 4, 2, 0>, + ConvImpl::template process_tile<0, 1, 3, 4, 2, 1>, + ConvImpl::template process_tile<0, 1, 3, 4, 2, 2>, + ConvImpl::template process_tile<0, 1, 3, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 3, 4, 3, 0>, + ConvImpl::template process_tile<0, 1, 3, 4, 3, 1>, + ConvImpl::template process_tile<0, 1, 3, 4, 3, 2>, + ConvImpl::template process_tile<0, 1, 3, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 4, 0, 0, 0>, + ConvImpl::template process_tile<0, 1, 4, 0, 0, 1>, + ConvImpl::template process_tile<0, 1, 4, 0, 0, 2>, + ConvImpl::template process_tile<0, 1, 4, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 4, 0, 1, 0>, + ConvImpl::template process_tile<0, 1, 4, 0, 1, 1>, + ConvImpl::template process_tile<0, 1, 4, 0, 1, 2>, + ConvImpl::template process_tile<0, 1, 4, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 4, 0, 2, 0>, + ConvImpl::template process_tile<0, 1, 4, 0, 2, 1>, + ConvImpl::template process_tile<0, 1, 4, 0, 2, 2>, + ConvImpl::template process_tile<0, 1, 4, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 4, 0, 3, 0>, + ConvImpl::template process_tile<0, 1, 4, 0, 3, 1>, + ConvImpl::template process_tile<0, 1, 4, 0, 3, 2>, + ConvImpl::template process_tile<0, 1, 4, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 4, 1, 0, 0>, + ConvImpl::template process_tile<0, 1, 4, 1, 0, 1>, + ConvImpl::template process_tile<0, 1, 4, 1, 0, 2>, + ConvImpl::template process_tile<0, 1, 4, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 4, 1, 1, 0>, + ConvImpl::template process_tile<0, 1, 4, 1, 1, 1>, + ConvImpl::template process_tile<0, 1, 4, 1, 1, 2>, + ConvImpl::template process_tile<0, 1, 4, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 4, 1, 2, 0>, + ConvImpl::template process_tile<0, 1, 4, 1, 2, 1>, + ConvImpl::template process_tile<0, 1, 4, 1, 2, 2>, + ConvImpl::template process_tile<0, 1, 4, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 4, 1, 3, 0>, + ConvImpl::template process_tile<0, 1, 4, 1, 3, 1>, + ConvImpl::template process_tile<0, 1, 4, 1, 3, 2>, + ConvImpl::template process_tile<0, 1, 4, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 4, 2, 0, 0>, + ConvImpl::template process_tile<0, 1, 4, 2, 0, 1>, + ConvImpl::template process_tile<0, 1, 4, 2, 0, 2>, + ConvImpl::template process_tile<0, 1, 4, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 4, 2, 1, 0>, + ConvImpl::template process_tile<0, 1, 4, 2, 1, 1>, + ConvImpl::template process_tile<0, 1, 4, 2, 1, 2>, + ConvImpl::template process_tile<0, 1, 4, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 4, 2, 2, 0>, + ConvImpl::template process_tile<0, 1, 4, 2, 2, 1>, + ConvImpl::template process_tile<0, 1, 4, 2, 2, 2>, + ConvImpl::template process_tile<0, 1, 4, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 4, 2, 3, 0>, + ConvImpl::template process_tile<0, 1, 4, 2, 3, 1>, + ConvImpl::template process_tile<0, 1, 4, 2, 3, 2>, + ConvImpl::template process_tile<0, 1, 4, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 4, 3, 0, 0>, + ConvImpl::template process_tile<0, 1, 4, 3, 0, 1>, + ConvImpl::template process_tile<0, 1, 4, 3, 0, 2>, + ConvImpl::template process_tile<0, 1, 4, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 4, 3, 1, 0>, + ConvImpl::template process_tile<0, 1, 4, 3, 1, 1>, + ConvImpl::template process_tile<0, 1, 4, 3, 1, 2>, + ConvImpl::template process_tile<0, 1, 4, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 4, 3, 2, 0>, + ConvImpl::template process_tile<0, 1, 4, 3, 2, 1>, + ConvImpl::template process_tile<0, 1, 4, 3, 2, 2>, + ConvImpl::template process_tile<0, 1, 4, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 4, 3, 3, 0>, + ConvImpl::template process_tile<0, 1, 4, 3, 3, 1>, + ConvImpl::template process_tile<0, 1, 4, 3, 3, 2>, + ConvImpl::template process_tile<0, 1, 4, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<0, 1, 4, 4, 0, 0>, + ConvImpl::template process_tile<0, 1, 4, 4, 0, 1>, + ConvImpl::template process_tile<0, 1, 4, 4, 0, 2>, + ConvImpl::template process_tile<0, 1, 4, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<0, 1, 4, 4, 1, 0>, + ConvImpl::template process_tile<0, 1, 4, 4, 1, 1>, + ConvImpl::template process_tile<0, 1, 4, 4, 1, 2>, + ConvImpl::template process_tile<0, 1, 4, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<0, 1, 4, 4, 2, 0>, + ConvImpl::template process_tile<0, 1, 4, 4, 2, 1>, + ConvImpl::template process_tile<0, 1, 4, 4, 2, 2>, + ConvImpl::template process_tile<0, 1, 4, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<0, 1, 4, 4, 3, 0>, + ConvImpl::template process_tile<0, 1, 4, 4, 3, 1>, + ConvImpl::template process_tile<0, 1, 4, 4, 3, 2>, + ConvImpl::template process_tile<0, 1, 4, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 4 + }, // Input pad left = 1 + }, // Input pad top = 0 + { // Input pad top = 1 + { // Input pad left = 0 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 0, 0, 0, 0>, + ConvImpl::template process_tile<1, 0, 0, 0, 0, 1>, + ConvImpl::template process_tile<1, 0, 0, 0, 0, 2>, + ConvImpl::template process_tile<1, 0, 0, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 0, 0, 1, 0>, + ConvImpl::template process_tile<1, 0, 0, 0, 1, 1>, + ConvImpl::template process_tile<1, 0, 0, 0, 1, 2>, + ConvImpl::template process_tile<1, 0, 0, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 0, 0, 2, 0>, + ConvImpl::template process_tile<1, 0, 0, 0, 2, 1>, + ConvImpl::template process_tile<1, 0, 0, 0, 2, 2>, + ConvImpl::template process_tile<1, 0, 0, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 0, 0, 3, 0>, + ConvImpl::template process_tile<1, 0, 0, 0, 3, 1>, + ConvImpl::template process_tile<1, 0, 0, 0, 3, 2>, + ConvImpl::template process_tile<1, 0, 0, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 0, 1, 0, 0>, + ConvImpl::template process_tile<1, 0, 0, 1, 0, 1>, + ConvImpl::template process_tile<1, 0, 0, 1, 0, 2>, + ConvImpl::template process_tile<1, 0, 0, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 0, 1, 1, 0>, + ConvImpl::template process_tile<1, 0, 0, 1, 1, 1>, + ConvImpl::template process_tile<1, 0, 0, 1, 1, 2>, + ConvImpl::template process_tile<1, 0, 0, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 0, 1, 2, 0>, + ConvImpl::template process_tile<1, 0, 0, 1, 2, 1>, + ConvImpl::template process_tile<1, 0, 0, 1, 2, 2>, + ConvImpl::template process_tile<1, 0, 0, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 0, 1, 3, 0>, + ConvImpl::template process_tile<1, 0, 0, 1, 3, 1>, + ConvImpl::template process_tile<1, 0, 0, 1, 3, 2>, + ConvImpl::template process_tile<1, 0, 0, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 0, 2, 0, 0>, + ConvImpl::template process_tile<1, 0, 0, 2, 0, 1>, + ConvImpl::template process_tile<1, 0, 0, 2, 0, 2>, + ConvImpl::template process_tile<1, 0, 0, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 0, 2, 1, 0>, + ConvImpl::template process_tile<1, 0, 0, 2, 1, 1>, + ConvImpl::template process_tile<1, 0, 0, 2, 1, 2>, + ConvImpl::template process_tile<1, 0, 0, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 0, 2, 2, 0>, + ConvImpl::template process_tile<1, 0, 0, 2, 2, 1>, + ConvImpl::template process_tile<1, 0, 0, 2, 2, 2>, + ConvImpl::template process_tile<1, 0, 0, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 0, 2, 3, 0>, + ConvImpl::template process_tile<1, 0, 0, 2, 3, 1>, + ConvImpl::template process_tile<1, 0, 0, 2, 3, 2>, + ConvImpl::template process_tile<1, 0, 0, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 0, 3, 0, 0>, + ConvImpl::template process_tile<1, 0, 0, 3, 0, 1>, + ConvImpl::template process_tile<1, 0, 0, 3, 0, 2>, + ConvImpl::template process_tile<1, 0, 0, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 0, 3, 1, 0>, + ConvImpl::template process_tile<1, 0, 0, 3, 1, 1>, + ConvImpl::template process_tile<1, 0, 0, 3, 1, 2>, + ConvImpl::template process_tile<1, 0, 0, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 0, 3, 2, 0>, + ConvImpl::template process_tile<1, 0, 0, 3, 2, 1>, + ConvImpl::template process_tile<1, 0, 0, 3, 2, 2>, + ConvImpl::template process_tile<1, 0, 0, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 0, 3, 3, 0>, + ConvImpl::template process_tile<1, 0, 0, 3, 3, 1>, + ConvImpl::template process_tile<1, 0, 0, 3, 3, 2>, + ConvImpl::template process_tile<1, 0, 0, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 0, 4, 0, 0>, + ConvImpl::template process_tile<1, 0, 0, 4, 0, 1>, + ConvImpl::template process_tile<1, 0, 0, 4, 0, 2>, + ConvImpl::template process_tile<1, 0, 0, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 0, 4, 1, 0>, + ConvImpl::template process_tile<1, 0, 0, 4, 1, 1>, + ConvImpl::template process_tile<1, 0, 0, 4, 1, 2>, + ConvImpl::template process_tile<1, 0, 0, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 0, 4, 2, 0>, + ConvImpl::template process_tile<1, 0, 0, 4, 2, 1>, + ConvImpl::template process_tile<1, 0, 0, 4, 2, 2>, + ConvImpl::template process_tile<1, 0, 0, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 0, 4, 3, 0>, + ConvImpl::template process_tile<1, 0, 0, 4, 3, 1>, + ConvImpl::template process_tile<1, 0, 0, 4, 3, 2>, + ConvImpl::template process_tile<1, 0, 0, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 1, 0, 0, 0>, + ConvImpl::template process_tile<1, 0, 1, 0, 0, 1>, + ConvImpl::template process_tile<1, 0, 1, 0, 0, 2>, + ConvImpl::template process_tile<1, 0, 1, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 1, 0, 1, 0>, + ConvImpl::template process_tile<1, 0, 1, 0, 1, 1>, + ConvImpl::template process_tile<1, 0, 1, 0, 1, 2>, + ConvImpl::template process_tile<1, 0, 1, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 1, 0, 2, 0>, + ConvImpl::template process_tile<1, 0, 1, 0, 2, 1>, + ConvImpl::template process_tile<1, 0, 1, 0, 2, 2>, + ConvImpl::template process_tile<1, 0, 1, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 1, 0, 3, 0>, + ConvImpl::template process_tile<1, 0, 1, 0, 3, 1>, + ConvImpl::template process_tile<1, 0, 1, 0, 3, 2>, + ConvImpl::template process_tile<1, 0, 1, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 1, 1, 0, 0>, + ConvImpl::template process_tile<1, 0, 1, 1, 0, 1>, + ConvImpl::template process_tile<1, 0, 1, 1, 0, 2>, + ConvImpl::template process_tile<1, 0, 1, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 1, 1, 1, 0>, + ConvImpl::template process_tile<1, 0, 1, 1, 1, 1>, + ConvImpl::template process_tile<1, 0, 1, 1, 1, 2>, + ConvImpl::template process_tile<1, 0, 1, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 1, 1, 2, 0>, + ConvImpl::template process_tile<1, 0, 1, 1, 2, 1>, + ConvImpl::template process_tile<1, 0, 1, 1, 2, 2>, + ConvImpl::template process_tile<1, 0, 1, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 1, 1, 3, 0>, + ConvImpl::template process_tile<1, 0, 1, 1, 3, 1>, + ConvImpl::template process_tile<1, 0, 1, 1, 3, 2>, + ConvImpl::template process_tile<1, 0, 1, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 1, 2, 0, 0>, + ConvImpl::template process_tile<1, 0, 1, 2, 0, 1>, + ConvImpl::template process_tile<1, 0, 1, 2, 0, 2>, + ConvImpl::template process_tile<1, 0, 1, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 1, 2, 1, 0>, + ConvImpl::template process_tile<1, 0, 1, 2, 1, 1>, + ConvImpl::template process_tile<1, 0, 1, 2, 1, 2>, + ConvImpl::template process_tile<1, 0, 1, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 1, 2, 2, 0>, + ConvImpl::template process_tile<1, 0, 1, 2, 2, 1>, + ConvImpl::template process_tile<1, 0, 1, 2, 2, 2>, + ConvImpl::template process_tile<1, 0, 1, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 1, 2, 3, 0>, + ConvImpl::template process_tile<1, 0, 1, 2, 3, 1>, + ConvImpl::template process_tile<1, 0, 1, 2, 3, 2>, + ConvImpl::template process_tile<1, 0, 1, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 1, 3, 0, 0>, + ConvImpl::template process_tile<1, 0, 1, 3, 0, 1>, + ConvImpl::template process_tile<1, 0, 1, 3, 0, 2>, + ConvImpl::template process_tile<1, 0, 1, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 1, 3, 1, 0>, + ConvImpl::template process_tile<1, 0, 1, 3, 1, 1>, + ConvImpl::template process_tile<1, 0, 1, 3, 1, 2>, + ConvImpl::template process_tile<1, 0, 1, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 1, 3, 2, 0>, + ConvImpl::template process_tile<1, 0, 1, 3, 2, 1>, + ConvImpl::template process_tile<1, 0, 1, 3, 2, 2>, + ConvImpl::template process_tile<1, 0, 1, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 1, 3, 3, 0>, + ConvImpl::template process_tile<1, 0, 1, 3, 3, 1>, + ConvImpl::template process_tile<1, 0, 1, 3, 3, 2>, + ConvImpl::template process_tile<1, 0, 1, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 1, 4, 0, 0>, + ConvImpl::template process_tile<1, 0, 1, 4, 0, 1>, + ConvImpl::template process_tile<1, 0, 1, 4, 0, 2>, + ConvImpl::template process_tile<1, 0, 1, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 1, 4, 1, 0>, + ConvImpl::template process_tile<1, 0, 1, 4, 1, 1>, + ConvImpl::template process_tile<1, 0, 1, 4, 1, 2>, + ConvImpl::template process_tile<1, 0, 1, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 1, 4, 2, 0>, + ConvImpl::template process_tile<1, 0, 1, 4, 2, 1>, + ConvImpl::template process_tile<1, 0, 1, 4, 2, 2>, + ConvImpl::template process_tile<1, 0, 1, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 1, 4, 3, 0>, + ConvImpl::template process_tile<1, 0, 1, 4, 3, 1>, + ConvImpl::template process_tile<1, 0, 1, 4, 3, 2>, + ConvImpl::template process_tile<1, 0, 1, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 2, 0, 0, 0>, + ConvImpl::template process_tile<1, 0, 2, 0, 0, 1>, + ConvImpl::template process_tile<1, 0, 2, 0, 0, 2>, + ConvImpl::template process_tile<1, 0, 2, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 2, 0, 1, 0>, + ConvImpl::template process_tile<1, 0, 2, 0, 1, 1>, + ConvImpl::template process_tile<1, 0, 2, 0, 1, 2>, + ConvImpl::template process_tile<1, 0, 2, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 2, 0, 2, 0>, + ConvImpl::template process_tile<1, 0, 2, 0, 2, 1>, + ConvImpl::template process_tile<1, 0, 2, 0, 2, 2>, + ConvImpl::template process_tile<1, 0, 2, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 2, 0, 3, 0>, + ConvImpl::template process_tile<1, 0, 2, 0, 3, 1>, + ConvImpl::template process_tile<1, 0, 2, 0, 3, 2>, + ConvImpl::template process_tile<1, 0, 2, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 2, 1, 0, 0>, + ConvImpl::template process_tile<1, 0, 2, 1, 0, 1>, + ConvImpl::template process_tile<1, 0, 2, 1, 0, 2>, + ConvImpl::template process_tile<1, 0, 2, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 2, 1, 1, 0>, + ConvImpl::template process_tile<1, 0, 2, 1, 1, 1>, + ConvImpl::template process_tile<1, 0, 2, 1, 1, 2>, + ConvImpl::template process_tile<1, 0, 2, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 2, 1, 2, 0>, + ConvImpl::template process_tile<1, 0, 2, 1, 2, 1>, + ConvImpl::template process_tile<1, 0, 2, 1, 2, 2>, + ConvImpl::template process_tile<1, 0, 2, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 2, 1, 3, 0>, + ConvImpl::template process_tile<1, 0, 2, 1, 3, 1>, + ConvImpl::template process_tile<1, 0, 2, 1, 3, 2>, + ConvImpl::template process_tile<1, 0, 2, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 2, 2, 0, 0>, + ConvImpl::template process_tile<1, 0, 2, 2, 0, 1>, + ConvImpl::template process_tile<1, 0, 2, 2, 0, 2>, + ConvImpl::template process_tile<1, 0, 2, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 2, 2, 1, 0>, + ConvImpl::template process_tile<1, 0, 2, 2, 1, 1>, + ConvImpl::template process_tile<1, 0, 2, 2, 1, 2>, + ConvImpl::template process_tile<1, 0, 2, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 2, 2, 2, 0>, + ConvImpl::template process_tile<1, 0, 2, 2, 2, 1>, + ConvImpl::template process_tile<1, 0, 2, 2, 2, 2>, + ConvImpl::template process_tile<1, 0, 2, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 2, 2, 3, 0>, + ConvImpl::template process_tile<1, 0, 2, 2, 3, 1>, + ConvImpl::template process_tile<1, 0, 2, 2, 3, 2>, + ConvImpl::template process_tile<1, 0, 2, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 2, 3, 0, 0>, + ConvImpl::template process_tile<1, 0, 2, 3, 0, 1>, + ConvImpl::template process_tile<1, 0, 2, 3, 0, 2>, + ConvImpl::template process_tile<1, 0, 2, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 2, 3, 1, 0>, + ConvImpl::template process_tile<1, 0, 2, 3, 1, 1>, + ConvImpl::template process_tile<1, 0, 2, 3, 1, 2>, + ConvImpl::template process_tile<1, 0, 2, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 2, 3, 2, 0>, + ConvImpl::template process_tile<1, 0, 2, 3, 2, 1>, + ConvImpl::template process_tile<1, 0, 2, 3, 2, 2>, + ConvImpl::template process_tile<1, 0, 2, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 2, 3, 3, 0>, + ConvImpl::template process_tile<1, 0, 2, 3, 3, 1>, + ConvImpl::template process_tile<1, 0, 2, 3, 3, 2>, + ConvImpl::template process_tile<1, 0, 2, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 2, 4, 0, 0>, + ConvImpl::template process_tile<1, 0, 2, 4, 0, 1>, + ConvImpl::template process_tile<1, 0, 2, 4, 0, 2>, + ConvImpl::template process_tile<1, 0, 2, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 2, 4, 1, 0>, + ConvImpl::template process_tile<1, 0, 2, 4, 1, 1>, + ConvImpl::template process_tile<1, 0, 2, 4, 1, 2>, + ConvImpl::template process_tile<1, 0, 2, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 2, 4, 2, 0>, + ConvImpl::template process_tile<1, 0, 2, 4, 2, 1>, + ConvImpl::template process_tile<1, 0, 2, 4, 2, 2>, + ConvImpl::template process_tile<1, 0, 2, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 2, 4, 3, 0>, + ConvImpl::template process_tile<1, 0, 2, 4, 3, 1>, + ConvImpl::template process_tile<1, 0, 2, 4, 3, 2>, + ConvImpl::template process_tile<1, 0, 2, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 3, 0, 0, 0>, + ConvImpl::template process_tile<1, 0, 3, 0, 0, 1>, + ConvImpl::template process_tile<1, 0, 3, 0, 0, 2>, + ConvImpl::template process_tile<1, 0, 3, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 3, 0, 1, 0>, + ConvImpl::template process_tile<1, 0, 3, 0, 1, 1>, + ConvImpl::template process_tile<1, 0, 3, 0, 1, 2>, + ConvImpl::template process_tile<1, 0, 3, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 3, 0, 2, 0>, + ConvImpl::template process_tile<1, 0, 3, 0, 2, 1>, + ConvImpl::template process_tile<1, 0, 3, 0, 2, 2>, + ConvImpl::template process_tile<1, 0, 3, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 3, 0, 3, 0>, + ConvImpl::template process_tile<1, 0, 3, 0, 3, 1>, + ConvImpl::template process_tile<1, 0, 3, 0, 3, 2>, + ConvImpl::template process_tile<1, 0, 3, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 3, 1, 0, 0>, + ConvImpl::template process_tile<1, 0, 3, 1, 0, 1>, + ConvImpl::template process_tile<1, 0, 3, 1, 0, 2>, + ConvImpl::template process_tile<1, 0, 3, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 3, 1, 1, 0>, + ConvImpl::template process_tile<1, 0, 3, 1, 1, 1>, + ConvImpl::template process_tile<1, 0, 3, 1, 1, 2>, + ConvImpl::template process_tile<1, 0, 3, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 3, 1, 2, 0>, + ConvImpl::template process_tile<1, 0, 3, 1, 2, 1>, + ConvImpl::template process_tile<1, 0, 3, 1, 2, 2>, + ConvImpl::template process_tile<1, 0, 3, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 3, 1, 3, 0>, + ConvImpl::template process_tile<1, 0, 3, 1, 3, 1>, + ConvImpl::template process_tile<1, 0, 3, 1, 3, 2>, + ConvImpl::template process_tile<1, 0, 3, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 3, 2, 0, 0>, + ConvImpl::template process_tile<1, 0, 3, 2, 0, 1>, + ConvImpl::template process_tile<1, 0, 3, 2, 0, 2>, + ConvImpl::template process_tile<1, 0, 3, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 3, 2, 1, 0>, + ConvImpl::template process_tile<1, 0, 3, 2, 1, 1>, + ConvImpl::template process_tile<1, 0, 3, 2, 1, 2>, + ConvImpl::template process_tile<1, 0, 3, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 3, 2, 2, 0>, + ConvImpl::template process_tile<1, 0, 3, 2, 2, 1>, + ConvImpl::template process_tile<1, 0, 3, 2, 2, 2>, + ConvImpl::template process_tile<1, 0, 3, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 3, 2, 3, 0>, + ConvImpl::template process_tile<1, 0, 3, 2, 3, 1>, + ConvImpl::template process_tile<1, 0, 3, 2, 3, 2>, + ConvImpl::template process_tile<1, 0, 3, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 3, 3, 0, 0>, + ConvImpl::template process_tile<1, 0, 3, 3, 0, 1>, + ConvImpl::template process_tile<1, 0, 3, 3, 0, 2>, + ConvImpl::template process_tile<1, 0, 3, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 3, 3, 1, 0>, + ConvImpl::template process_tile<1, 0, 3, 3, 1, 1>, + ConvImpl::template process_tile<1, 0, 3, 3, 1, 2>, + ConvImpl::template process_tile<1, 0, 3, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 3, 3, 2, 0>, + ConvImpl::template process_tile<1, 0, 3, 3, 2, 1>, + ConvImpl::template process_tile<1, 0, 3, 3, 2, 2>, + ConvImpl::template process_tile<1, 0, 3, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 3, 3, 3, 0>, + ConvImpl::template process_tile<1, 0, 3, 3, 3, 1>, + ConvImpl::template process_tile<1, 0, 3, 3, 3, 2>, + ConvImpl::template process_tile<1, 0, 3, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 3, 4, 0, 0>, + ConvImpl::template process_tile<1, 0, 3, 4, 0, 1>, + ConvImpl::template process_tile<1, 0, 3, 4, 0, 2>, + ConvImpl::template process_tile<1, 0, 3, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 3, 4, 1, 0>, + ConvImpl::template process_tile<1, 0, 3, 4, 1, 1>, + ConvImpl::template process_tile<1, 0, 3, 4, 1, 2>, + ConvImpl::template process_tile<1, 0, 3, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 3, 4, 2, 0>, + ConvImpl::template process_tile<1, 0, 3, 4, 2, 1>, + ConvImpl::template process_tile<1, 0, 3, 4, 2, 2>, + ConvImpl::template process_tile<1, 0, 3, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 3, 4, 3, 0>, + ConvImpl::template process_tile<1, 0, 3, 4, 3, 1>, + ConvImpl::template process_tile<1, 0, 3, 4, 3, 2>, + ConvImpl::template process_tile<1, 0, 3, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 4, 0, 0, 0>, + ConvImpl::template process_tile<1, 0, 4, 0, 0, 1>, + ConvImpl::template process_tile<1, 0, 4, 0, 0, 2>, + ConvImpl::template process_tile<1, 0, 4, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 4, 0, 1, 0>, + ConvImpl::template process_tile<1, 0, 4, 0, 1, 1>, + ConvImpl::template process_tile<1, 0, 4, 0, 1, 2>, + ConvImpl::template process_tile<1, 0, 4, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 4, 0, 2, 0>, + ConvImpl::template process_tile<1, 0, 4, 0, 2, 1>, + ConvImpl::template process_tile<1, 0, 4, 0, 2, 2>, + ConvImpl::template process_tile<1, 0, 4, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 4, 0, 3, 0>, + ConvImpl::template process_tile<1, 0, 4, 0, 3, 1>, + ConvImpl::template process_tile<1, 0, 4, 0, 3, 2>, + ConvImpl::template process_tile<1, 0, 4, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 4, 1, 0, 0>, + ConvImpl::template process_tile<1, 0, 4, 1, 0, 1>, + ConvImpl::template process_tile<1, 0, 4, 1, 0, 2>, + ConvImpl::template process_tile<1, 0, 4, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 4, 1, 1, 0>, + ConvImpl::template process_tile<1, 0, 4, 1, 1, 1>, + ConvImpl::template process_tile<1, 0, 4, 1, 1, 2>, + ConvImpl::template process_tile<1, 0, 4, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 4, 1, 2, 0>, + ConvImpl::template process_tile<1, 0, 4, 1, 2, 1>, + ConvImpl::template process_tile<1, 0, 4, 1, 2, 2>, + ConvImpl::template process_tile<1, 0, 4, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 4, 1, 3, 0>, + ConvImpl::template process_tile<1, 0, 4, 1, 3, 1>, + ConvImpl::template process_tile<1, 0, 4, 1, 3, 2>, + ConvImpl::template process_tile<1, 0, 4, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 4, 2, 0, 0>, + ConvImpl::template process_tile<1, 0, 4, 2, 0, 1>, + ConvImpl::template process_tile<1, 0, 4, 2, 0, 2>, + ConvImpl::template process_tile<1, 0, 4, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 4, 2, 1, 0>, + ConvImpl::template process_tile<1, 0, 4, 2, 1, 1>, + ConvImpl::template process_tile<1, 0, 4, 2, 1, 2>, + ConvImpl::template process_tile<1, 0, 4, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 4, 2, 2, 0>, + ConvImpl::template process_tile<1, 0, 4, 2, 2, 1>, + ConvImpl::template process_tile<1, 0, 4, 2, 2, 2>, + ConvImpl::template process_tile<1, 0, 4, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 4, 2, 3, 0>, + ConvImpl::template process_tile<1, 0, 4, 2, 3, 1>, + ConvImpl::template process_tile<1, 0, 4, 2, 3, 2>, + ConvImpl::template process_tile<1, 0, 4, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 4, 3, 0, 0>, + ConvImpl::template process_tile<1, 0, 4, 3, 0, 1>, + ConvImpl::template process_tile<1, 0, 4, 3, 0, 2>, + ConvImpl::template process_tile<1, 0, 4, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 4, 3, 1, 0>, + ConvImpl::template process_tile<1, 0, 4, 3, 1, 1>, + ConvImpl::template process_tile<1, 0, 4, 3, 1, 2>, + ConvImpl::template process_tile<1, 0, 4, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 4, 3, 2, 0>, + ConvImpl::template process_tile<1, 0, 4, 3, 2, 1>, + ConvImpl::template process_tile<1, 0, 4, 3, 2, 2>, + ConvImpl::template process_tile<1, 0, 4, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 4, 3, 3, 0>, + ConvImpl::template process_tile<1, 0, 4, 3, 3, 1>, + ConvImpl::template process_tile<1, 0, 4, 3, 3, 2>, + ConvImpl::template process_tile<1, 0, 4, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 0, 4, 4, 0, 0>, + ConvImpl::template process_tile<1, 0, 4, 4, 0, 1>, + ConvImpl::template process_tile<1, 0, 4, 4, 0, 2>, + ConvImpl::template process_tile<1, 0, 4, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 0, 4, 4, 1, 0>, + ConvImpl::template process_tile<1, 0, 4, 4, 1, 1>, + ConvImpl::template process_tile<1, 0, 4, 4, 1, 2>, + ConvImpl::template process_tile<1, 0, 4, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 0, 4, 4, 2, 0>, + ConvImpl::template process_tile<1, 0, 4, 4, 2, 1>, + ConvImpl::template process_tile<1, 0, 4, 4, 2, 2>, + ConvImpl::template process_tile<1, 0, 4, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 0, 4, 4, 3, 0>, + ConvImpl::template process_tile<1, 0, 4, 4, 3, 1>, + ConvImpl::template process_tile<1, 0, 4, 4, 3, 2>, + ConvImpl::template process_tile<1, 0, 4, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 4 + }, // Input pad left = 0 + { // Input pad left = 1 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 0, 0, 0, 0>, + ConvImpl::template process_tile<1, 1, 0, 0, 0, 1>, + ConvImpl::template process_tile<1, 1, 0, 0, 0, 2>, + ConvImpl::template process_tile<1, 1, 0, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 0, 0, 1, 0>, + ConvImpl::template process_tile<1, 1, 0, 0, 1, 1>, + ConvImpl::template process_tile<1, 1, 0, 0, 1, 2>, + ConvImpl::template process_tile<1, 1, 0, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 0, 0, 2, 0>, + ConvImpl::template process_tile<1, 1, 0, 0, 2, 1>, + ConvImpl::template process_tile<1, 1, 0, 0, 2, 2>, + ConvImpl::template process_tile<1, 1, 0, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 0, 0, 3, 0>, + ConvImpl::template process_tile<1, 1, 0, 0, 3, 1>, + ConvImpl::template process_tile<1, 1, 0, 0, 3, 2>, + ConvImpl::template process_tile<1, 1, 0, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 0, 1, 0, 0>, + ConvImpl::template process_tile<1, 1, 0, 1, 0, 1>, + ConvImpl::template process_tile<1, 1, 0, 1, 0, 2>, + ConvImpl::template process_tile<1, 1, 0, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 0, 1, 1, 0>, + ConvImpl::template process_tile<1, 1, 0, 1, 1, 1>, + ConvImpl::template process_tile<1, 1, 0, 1, 1, 2>, + ConvImpl::template process_tile<1, 1, 0, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 0, 1, 2, 0>, + ConvImpl::template process_tile<1, 1, 0, 1, 2, 1>, + ConvImpl::template process_tile<1, 1, 0, 1, 2, 2>, + ConvImpl::template process_tile<1, 1, 0, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 0, 1, 3, 0>, + ConvImpl::template process_tile<1, 1, 0, 1, 3, 1>, + ConvImpl::template process_tile<1, 1, 0, 1, 3, 2>, + ConvImpl::template process_tile<1, 1, 0, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 0, 2, 0, 0>, + ConvImpl::template process_tile<1, 1, 0, 2, 0, 1>, + ConvImpl::template process_tile<1, 1, 0, 2, 0, 2>, + ConvImpl::template process_tile<1, 1, 0, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 0, 2, 1, 0>, + ConvImpl::template process_tile<1, 1, 0, 2, 1, 1>, + ConvImpl::template process_tile<1, 1, 0, 2, 1, 2>, + ConvImpl::template process_tile<1, 1, 0, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 0, 2, 2, 0>, + ConvImpl::template process_tile<1, 1, 0, 2, 2, 1>, + ConvImpl::template process_tile<1, 1, 0, 2, 2, 2>, + ConvImpl::template process_tile<1, 1, 0, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 0, 2, 3, 0>, + ConvImpl::template process_tile<1, 1, 0, 2, 3, 1>, + ConvImpl::template process_tile<1, 1, 0, 2, 3, 2>, + ConvImpl::template process_tile<1, 1, 0, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 0, 3, 0, 0>, + ConvImpl::template process_tile<1, 1, 0, 3, 0, 1>, + ConvImpl::template process_tile<1, 1, 0, 3, 0, 2>, + ConvImpl::template process_tile<1, 1, 0, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 0, 3, 1, 0>, + ConvImpl::template process_tile<1, 1, 0, 3, 1, 1>, + ConvImpl::template process_tile<1, 1, 0, 3, 1, 2>, + ConvImpl::template process_tile<1, 1, 0, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 0, 3, 2, 0>, + ConvImpl::template process_tile<1, 1, 0, 3, 2, 1>, + ConvImpl::template process_tile<1, 1, 0, 3, 2, 2>, + ConvImpl::template process_tile<1, 1, 0, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 0, 3, 3, 0>, + ConvImpl::template process_tile<1, 1, 0, 3, 3, 1>, + ConvImpl::template process_tile<1, 1, 0, 3, 3, 2>, + ConvImpl::template process_tile<1, 1, 0, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 0, 4, 0, 0>, + ConvImpl::template process_tile<1, 1, 0, 4, 0, 1>, + ConvImpl::template process_tile<1, 1, 0, 4, 0, 2>, + ConvImpl::template process_tile<1, 1, 0, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 0, 4, 1, 0>, + ConvImpl::template process_tile<1, 1, 0, 4, 1, 1>, + ConvImpl::template process_tile<1, 1, 0, 4, 1, 2>, + ConvImpl::template process_tile<1, 1, 0, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 0, 4, 2, 0>, + ConvImpl::template process_tile<1, 1, 0, 4, 2, 1>, + ConvImpl::template process_tile<1, 1, 0, 4, 2, 2>, + ConvImpl::template process_tile<1, 1, 0, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 0, 4, 3, 0>, + ConvImpl::template process_tile<1, 1, 0, 4, 3, 1>, + ConvImpl::template process_tile<1, 1, 0, 4, 3, 2>, + ConvImpl::template process_tile<1, 1, 0, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 1, 0, 0, 0>, + ConvImpl::template process_tile<1, 1, 1, 0, 0, 1>, + ConvImpl::template process_tile<1, 1, 1, 0, 0, 2>, + ConvImpl::template process_tile<1, 1, 1, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 1, 0, 1, 0>, + ConvImpl::template process_tile<1, 1, 1, 0, 1, 1>, + ConvImpl::template process_tile<1, 1, 1, 0, 1, 2>, + ConvImpl::template process_tile<1, 1, 1, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 1, 0, 2, 0>, + ConvImpl::template process_tile<1, 1, 1, 0, 2, 1>, + ConvImpl::template process_tile<1, 1, 1, 0, 2, 2>, + ConvImpl::template process_tile<1, 1, 1, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 1, 0, 3, 0>, + ConvImpl::template process_tile<1, 1, 1, 0, 3, 1>, + ConvImpl::template process_tile<1, 1, 1, 0, 3, 2>, + ConvImpl::template process_tile<1, 1, 1, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 1, 1, 0, 0>, + ConvImpl::template process_tile<1, 1, 1, 1, 0, 1>, + ConvImpl::template process_tile<1, 1, 1, 1, 0, 2>, + ConvImpl::template process_tile<1, 1, 1, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 1, 1, 1, 0>, + ConvImpl::template process_tile<1, 1, 1, 1, 1, 1>, + ConvImpl::template process_tile<1, 1, 1, 1, 1, 2>, + ConvImpl::template process_tile<1, 1, 1, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 1, 1, 2, 0>, + ConvImpl::template process_tile<1, 1, 1, 1, 2, 1>, + ConvImpl::template process_tile<1, 1, 1, 1, 2, 2>, + ConvImpl::template process_tile<1, 1, 1, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 1, 1, 3, 0>, + ConvImpl::template process_tile<1, 1, 1, 1, 3, 1>, + ConvImpl::template process_tile<1, 1, 1, 1, 3, 2>, + ConvImpl::template process_tile<1, 1, 1, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 1, 2, 0, 0>, + ConvImpl::template process_tile<1, 1, 1, 2, 0, 1>, + ConvImpl::template process_tile<1, 1, 1, 2, 0, 2>, + ConvImpl::template process_tile<1, 1, 1, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 1, 2, 1, 0>, + ConvImpl::template process_tile<1, 1, 1, 2, 1, 1>, + ConvImpl::template process_tile<1, 1, 1, 2, 1, 2>, + ConvImpl::template process_tile<1, 1, 1, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 1, 2, 2, 0>, + ConvImpl::template process_tile<1, 1, 1, 2, 2, 1>, + ConvImpl::template process_tile<1, 1, 1, 2, 2, 2>, + ConvImpl::template process_tile<1, 1, 1, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 1, 2, 3, 0>, + ConvImpl::template process_tile<1, 1, 1, 2, 3, 1>, + ConvImpl::template process_tile<1, 1, 1, 2, 3, 2>, + ConvImpl::template process_tile<1, 1, 1, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 1, 3, 0, 0>, + ConvImpl::template process_tile<1, 1, 1, 3, 0, 1>, + ConvImpl::template process_tile<1, 1, 1, 3, 0, 2>, + ConvImpl::template process_tile<1, 1, 1, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 1, 3, 1, 0>, + ConvImpl::template process_tile<1, 1, 1, 3, 1, 1>, + ConvImpl::template process_tile<1, 1, 1, 3, 1, 2>, + ConvImpl::template process_tile<1, 1, 1, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 1, 3, 2, 0>, + ConvImpl::template process_tile<1, 1, 1, 3, 2, 1>, + ConvImpl::template process_tile<1, 1, 1, 3, 2, 2>, + ConvImpl::template process_tile<1, 1, 1, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 1, 3, 3, 0>, + ConvImpl::template process_tile<1, 1, 1, 3, 3, 1>, + ConvImpl::template process_tile<1, 1, 1, 3, 3, 2>, + ConvImpl::template process_tile<1, 1, 1, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 1, 4, 0, 0>, + ConvImpl::template process_tile<1, 1, 1, 4, 0, 1>, + ConvImpl::template process_tile<1, 1, 1, 4, 0, 2>, + ConvImpl::template process_tile<1, 1, 1, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 1, 4, 1, 0>, + ConvImpl::template process_tile<1, 1, 1, 4, 1, 1>, + ConvImpl::template process_tile<1, 1, 1, 4, 1, 2>, + ConvImpl::template process_tile<1, 1, 1, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 1, 4, 2, 0>, + ConvImpl::template process_tile<1, 1, 1, 4, 2, 1>, + ConvImpl::template process_tile<1, 1, 1, 4, 2, 2>, + ConvImpl::template process_tile<1, 1, 1, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 1, 4, 3, 0>, + ConvImpl::template process_tile<1, 1, 1, 4, 3, 1>, + ConvImpl::template process_tile<1, 1, 1, 4, 3, 2>, + ConvImpl::template process_tile<1, 1, 1, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 2, 0, 0, 0>, + ConvImpl::template process_tile<1, 1, 2, 0, 0, 1>, + ConvImpl::template process_tile<1, 1, 2, 0, 0, 2>, + ConvImpl::template process_tile<1, 1, 2, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 2, 0, 1, 0>, + ConvImpl::template process_tile<1, 1, 2, 0, 1, 1>, + ConvImpl::template process_tile<1, 1, 2, 0, 1, 2>, + ConvImpl::template process_tile<1, 1, 2, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 2, 0, 2, 0>, + ConvImpl::template process_tile<1, 1, 2, 0, 2, 1>, + ConvImpl::template process_tile<1, 1, 2, 0, 2, 2>, + ConvImpl::template process_tile<1, 1, 2, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 2, 0, 3, 0>, + ConvImpl::template process_tile<1, 1, 2, 0, 3, 1>, + ConvImpl::template process_tile<1, 1, 2, 0, 3, 2>, + ConvImpl::template process_tile<1, 1, 2, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 2, 1, 0, 0>, + ConvImpl::template process_tile<1, 1, 2, 1, 0, 1>, + ConvImpl::template process_tile<1, 1, 2, 1, 0, 2>, + ConvImpl::template process_tile<1, 1, 2, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 2, 1, 1, 0>, + ConvImpl::template process_tile<1, 1, 2, 1, 1, 1>, + ConvImpl::template process_tile<1, 1, 2, 1, 1, 2>, + ConvImpl::template process_tile<1, 1, 2, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 2, 1, 2, 0>, + ConvImpl::template process_tile<1, 1, 2, 1, 2, 1>, + ConvImpl::template process_tile<1, 1, 2, 1, 2, 2>, + ConvImpl::template process_tile<1, 1, 2, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 2, 1, 3, 0>, + ConvImpl::template process_tile<1, 1, 2, 1, 3, 1>, + ConvImpl::template process_tile<1, 1, 2, 1, 3, 2>, + ConvImpl::template process_tile<1, 1, 2, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 2, 2, 0, 0>, + ConvImpl::template process_tile<1, 1, 2, 2, 0, 1>, + ConvImpl::template process_tile<1, 1, 2, 2, 0, 2>, + ConvImpl::template process_tile<1, 1, 2, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 2, 2, 1, 0>, + ConvImpl::template process_tile<1, 1, 2, 2, 1, 1>, + ConvImpl::template process_tile<1, 1, 2, 2, 1, 2>, + ConvImpl::template process_tile<1, 1, 2, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 2, 2, 2, 0>, + ConvImpl::template process_tile<1, 1, 2, 2, 2, 1>, + ConvImpl::template process_tile<1, 1, 2, 2, 2, 2>, + ConvImpl::template process_tile<1, 1, 2, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 2, 2, 3, 0>, + ConvImpl::template process_tile<1, 1, 2, 2, 3, 1>, + ConvImpl::template process_tile<1, 1, 2, 2, 3, 2>, + ConvImpl::template process_tile<1, 1, 2, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 2, 3, 0, 0>, + ConvImpl::template process_tile<1, 1, 2, 3, 0, 1>, + ConvImpl::template process_tile<1, 1, 2, 3, 0, 2>, + ConvImpl::template process_tile<1, 1, 2, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 2, 3, 1, 0>, + ConvImpl::template process_tile<1, 1, 2, 3, 1, 1>, + ConvImpl::template process_tile<1, 1, 2, 3, 1, 2>, + ConvImpl::template process_tile<1, 1, 2, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 2, 3, 2, 0>, + ConvImpl::template process_tile<1, 1, 2, 3, 2, 1>, + ConvImpl::template process_tile<1, 1, 2, 3, 2, 2>, + ConvImpl::template process_tile<1, 1, 2, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 2, 3, 3, 0>, + ConvImpl::template process_tile<1, 1, 2, 3, 3, 1>, + ConvImpl::template process_tile<1, 1, 2, 3, 3, 2>, + ConvImpl::template process_tile<1, 1, 2, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 2, 4, 0, 0>, + ConvImpl::template process_tile<1, 1, 2, 4, 0, 1>, + ConvImpl::template process_tile<1, 1, 2, 4, 0, 2>, + ConvImpl::template process_tile<1, 1, 2, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 2, 4, 1, 0>, + ConvImpl::template process_tile<1, 1, 2, 4, 1, 1>, + ConvImpl::template process_tile<1, 1, 2, 4, 1, 2>, + ConvImpl::template process_tile<1, 1, 2, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 2, 4, 2, 0>, + ConvImpl::template process_tile<1, 1, 2, 4, 2, 1>, + ConvImpl::template process_tile<1, 1, 2, 4, 2, 2>, + ConvImpl::template process_tile<1, 1, 2, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 2, 4, 3, 0>, + ConvImpl::template process_tile<1, 1, 2, 4, 3, 1>, + ConvImpl::template process_tile<1, 1, 2, 4, 3, 2>, + ConvImpl::template process_tile<1, 1, 2, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 3, 0, 0, 0>, + ConvImpl::template process_tile<1, 1, 3, 0, 0, 1>, + ConvImpl::template process_tile<1, 1, 3, 0, 0, 2>, + ConvImpl::template process_tile<1, 1, 3, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 3, 0, 1, 0>, + ConvImpl::template process_tile<1, 1, 3, 0, 1, 1>, + ConvImpl::template process_tile<1, 1, 3, 0, 1, 2>, + ConvImpl::template process_tile<1, 1, 3, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 3, 0, 2, 0>, + ConvImpl::template process_tile<1, 1, 3, 0, 2, 1>, + ConvImpl::template process_tile<1, 1, 3, 0, 2, 2>, + ConvImpl::template process_tile<1, 1, 3, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 3, 0, 3, 0>, + ConvImpl::template process_tile<1, 1, 3, 0, 3, 1>, + ConvImpl::template process_tile<1, 1, 3, 0, 3, 2>, + ConvImpl::template process_tile<1, 1, 3, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 3, 1, 0, 0>, + ConvImpl::template process_tile<1, 1, 3, 1, 0, 1>, + ConvImpl::template process_tile<1, 1, 3, 1, 0, 2>, + ConvImpl::template process_tile<1, 1, 3, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 3, 1, 1, 0>, + ConvImpl::template process_tile<1, 1, 3, 1, 1, 1>, + ConvImpl::template process_tile<1, 1, 3, 1, 1, 2>, + ConvImpl::template process_tile<1, 1, 3, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 3, 1, 2, 0>, + ConvImpl::template process_tile<1, 1, 3, 1, 2, 1>, + ConvImpl::template process_tile<1, 1, 3, 1, 2, 2>, + ConvImpl::template process_tile<1, 1, 3, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 3, 1, 3, 0>, + ConvImpl::template process_tile<1, 1, 3, 1, 3, 1>, + ConvImpl::template process_tile<1, 1, 3, 1, 3, 2>, + ConvImpl::template process_tile<1, 1, 3, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 3, 2, 0, 0>, + ConvImpl::template process_tile<1, 1, 3, 2, 0, 1>, + ConvImpl::template process_tile<1, 1, 3, 2, 0, 2>, + ConvImpl::template process_tile<1, 1, 3, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 3, 2, 1, 0>, + ConvImpl::template process_tile<1, 1, 3, 2, 1, 1>, + ConvImpl::template process_tile<1, 1, 3, 2, 1, 2>, + ConvImpl::template process_tile<1, 1, 3, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 3, 2, 2, 0>, + ConvImpl::template process_tile<1, 1, 3, 2, 2, 1>, + ConvImpl::template process_tile<1, 1, 3, 2, 2, 2>, + ConvImpl::template process_tile<1, 1, 3, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 3, 2, 3, 0>, + ConvImpl::template process_tile<1, 1, 3, 2, 3, 1>, + ConvImpl::template process_tile<1, 1, 3, 2, 3, 2>, + ConvImpl::template process_tile<1, 1, 3, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 3, 3, 0, 0>, + ConvImpl::template process_tile<1, 1, 3, 3, 0, 1>, + ConvImpl::template process_tile<1, 1, 3, 3, 0, 2>, + ConvImpl::template process_tile<1, 1, 3, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 3, 3, 1, 0>, + ConvImpl::template process_tile<1, 1, 3, 3, 1, 1>, + ConvImpl::template process_tile<1, 1, 3, 3, 1, 2>, + ConvImpl::template process_tile<1, 1, 3, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 3, 3, 2, 0>, + ConvImpl::template process_tile<1, 1, 3, 3, 2, 1>, + ConvImpl::template process_tile<1, 1, 3, 3, 2, 2>, + ConvImpl::template process_tile<1, 1, 3, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 3, 3, 3, 0>, + ConvImpl::template process_tile<1, 1, 3, 3, 3, 1>, + ConvImpl::template process_tile<1, 1, 3, 3, 3, 2>, + ConvImpl::template process_tile<1, 1, 3, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 3, 4, 0, 0>, + ConvImpl::template process_tile<1, 1, 3, 4, 0, 1>, + ConvImpl::template process_tile<1, 1, 3, 4, 0, 2>, + ConvImpl::template process_tile<1, 1, 3, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 3, 4, 1, 0>, + ConvImpl::template process_tile<1, 1, 3, 4, 1, 1>, + ConvImpl::template process_tile<1, 1, 3, 4, 1, 2>, + ConvImpl::template process_tile<1, 1, 3, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 3, 4, 2, 0>, + ConvImpl::template process_tile<1, 1, 3, 4, 2, 1>, + ConvImpl::template process_tile<1, 1, 3, 4, 2, 2>, + ConvImpl::template process_tile<1, 1, 3, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 3, 4, 3, 0>, + ConvImpl::template process_tile<1, 1, 3, 4, 3, 1>, + ConvImpl::template process_tile<1, 1, 3, 4, 3, 2>, + ConvImpl::template process_tile<1, 1, 3, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 4, 0, 0, 0>, + ConvImpl::template process_tile<1, 1, 4, 0, 0, 1>, + ConvImpl::template process_tile<1, 1, 4, 0, 0, 2>, + ConvImpl::template process_tile<1, 1, 4, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 4, 0, 1, 0>, + ConvImpl::template process_tile<1, 1, 4, 0, 1, 1>, + ConvImpl::template process_tile<1, 1, 4, 0, 1, 2>, + ConvImpl::template process_tile<1, 1, 4, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 4, 0, 2, 0>, + ConvImpl::template process_tile<1, 1, 4, 0, 2, 1>, + ConvImpl::template process_tile<1, 1, 4, 0, 2, 2>, + ConvImpl::template process_tile<1, 1, 4, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 4, 0, 3, 0>, + ConvImpl::template process_tile<1, 1, 4, 0, 3, 1>, + ConvImpl::template process_tile<1, 1, 4, 0, 3, 2>, + ConvImpl::template process_tile<1, 1, 4, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 4, 1, 0, 0>, + ConvImpl::template process_tile<1, 1, 4, 1, 0, 1>, + ConvImpl::template process_tile<1, 1, 4, 1, 0, 2>, + ConvImpl::template process_tile<1, 1, 4, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 4, 1, 1, 0>, + ConvImpl::template process_tile<1, 1, 4, 1, 1, 1>, + ConvImpl::template process_tile<1, 1, 4, 1, 1, 2>, + ConvImpl::template process_tile<1, 1, 4, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 4, 1, 2, 0>, + ConvImpl::template process_tile<1, 1, 4, 1, 2, 1>, + ConvImpl::template process_tile<1, 1, 4, 1, 2, 2>, + ConvImpl::template process_tile<1, 1, 4, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 4, 1, 3, 0>, + ConvImpl::template process_tile<1, 1, 4, 1, 3, 1>, + ConvImpl::template process_tile<1, 1, 4, 1, 3, 2>, + ConvImpl::template process_tile<1, 1, 4, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 4, 2, 0, 0>, + ConvImpl::template process_tile<1, 1, 4, 2, 0, 1>, + ConvImpl::template process_tile<1, 1, 4, 2, 0, 2>, + ConvImpl::template process_tile<1, 1, 4, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 4, 2, 1, 0>, + ConvImpl::template process_tile<1, 1, 4, 2, 1, 1>, + ConvImpl::template process_tile<1, 1, 4, 2, 1, 2>, + ConvImpl::template process_tile<1, 1, 4, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 4, 2, 2, 0>, + ConvImpl::template process_tile<1, 1, 4, 2, 2, 1>, + ConvImpl::template process_tile<1, 1, 4, 2, 2, 2>, + ConvImpl::template process_tile<1, 1, 4, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 4, 2, 3, 0>, + ConvImpl::template process_tile<1, 1, 4, 2, 3, 1>, + ConvImpl::template process_tile<1, 1, 4, 2, 3, 2>, + ConvImpl::template process_tile<1, 1, 4, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 4, 3, 0, 0>, + ConvImpl::template process_tile<1, 1, 4, 3, 0, 1>, + ConvImpl::template process_tile<1, 1, 4, 3, 0, 2>, + ConvImpl::template process_tile<1, 1, 4, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 4, 3, 1, 0>, + ConvImpl::template process_tile<1, 1, 4, 3, 1, 1>, + ConvImpl::template process_tile<1, 1, 4, 3, 1, 2>, + ConvImpl::template process_tile<1, 1, 4, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 4, 3, 2, 0>, + ConvImpl::template process_tile<1, 1, 4, 3, 2, 1>, + ConvImpl::template process_tile<1, 1, 4, 3, 2, 2>, + ConvImpl::template process_tile<1, 1, 4, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 4, 3, 3, 0>, + ConvImpl::template process_tile<1, 1, 4, 3, 3, 1>, + ConvImpl::template process_tile<1, 1, 4, 3, 3, 2>, + ConvImpl::template process_tile<1, 1, 4, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + ConvImpl::template process_tile<1, 1, 4, 4, 0, 0>, + ConvImpl::template process_tile<1, 1, 4, 4, 0, 1>, + ConvImpl::template process_tile<1, 1, 4, 4, 0, 2>, + ConvImpl::template process_tile<1, 1, 4, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + ConvImpl::template process_tile<1, 1, 4, 4, 1, 0>, + ConvImpl::template process_tile<1, 1, 4, 4, 1, 1>, + ConvImpl::template process_tile<1, 1, 4, 4, 1, 2>, + ConvImpl::template process_tile<1, 1, 4, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + ConvImpl::template process_tile<1, 1, 4, 4, 2, 0>, + ConvImpl::template process_tile<1, 1, 4, 4, 2, 1>, + ConvImpl::template process_tile<1, 1, 4, 4, 2, 2>, + ConvImpl::template process_tile<1, 1, 4, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + ConvImpl::template process_tile<1, 1, 4, 4, 3, 0>, + ConvImpl::template process_tile<1, 1, 4, 4, 3, 1>, + ConvImpl::template process_tile<1, 1, 4, 4, 3, 2>, + ConvImpl::template process_tile<1, 1, 4, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + }, // Input pad bottom = 4 + }, // Input pad left = 1 + }, // Input pad top = 1 +}; + + +template class DepthwiseConvolution<4, 4, 3, 3, 1, 1, float, float>; +} // namespace depthwise diff --git a/src/core/NEON/kernels/convolution/depthwise/depthwise_4x4_3x3_2x2_fp32_fp32.cpp b/src/core/NEON/kernels/convolution/depthwise/depthwise_4x4_3x3_2x2_fp32_fp32.cpp new file mode 100644 index 0000000000..2104c0bbf7 --- /dev/null +++ b/src/core/NEON/kernels/convolution/depthwise/depthwise_4x4_3x3_2x2_fp32_fp32.cpp @@ -0,0 +1,5207 @@ +/* + * Copyright (c) 2018 ARM Limited. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include "arm_compute/core/NEON/kernels/convolution/depthwise/impl_fp32_fp32.hpp" + +namespace depthwise +{ +using Conv = DepthwiseConvolution<4, 4, 3, 3, 2, 2, float, float>; +using ConvImpl = DepthwiseConvolutionImpl<4, 4, 3, 3, 2, 2, float, float>; + +template <> +const Conv::TileFn Conv::tile_fns + [max_in_pad_top] + [max_in_pad_left] + [max_in_pad_bottom] + [max_in_pad_right] + [max_out_pad_bottom] + [max_out_pad_right] = { + { // Input pad top = 0 + { // Input pad left = 0 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 0, 0, 0>, + Conv::template process_tile<0, 0, 0, 0, 0, 1>, + Conv::template process_tile<0, 0, 0, 0, 0, 2>, + Conv::template process_tile<0, 0, 0, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 0, 1, 0>, + Conv::template process_tile<0, 0, 0, 0, 1, 1>, + Conv::template process_tile<0, 0, 0, 0, 1, 2>, + Conv::template process_tile<0, 0, 0, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 0, 2, 0>, + Conv::template process_tile<0, 0, 0, 0, 2, 1>, + Conv::template process_tile<0, 0, 0, 0, 2, 2>, + Conv::template process_tile<0, 0, 0, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 0, 0, 3, 0>, + Conv::template process_tile<0, 0, 0, 0, 3, 1>, + Conv::template process_tile<0, 0, 0, 0, 3, 2>, + Conv::template process_tile<0, 0, 0, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 1, 0, 0>, + Conv::template process_tile<0, 0, 0, 1, 0, 1>, + Conv::template process_tile<0, 0, 0, 1, 0, 2>, + Conv::template process_tile<0, 0, 0, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 1, 1, 0>, + Conv::template process_tile<0, 0, 0, 1, 1, 1>, + Conv::template process_tile<0, 0, 0, 1, 1, 2>, + Conv::template process_tile<0, 0, 0, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 1, 2, 0>, + Conv::template process_tile<0, 0, 0, 1, 2, 1>, + Conv::template process_tile<0, 0, 0, 1, 2, 2>, + Conv::template process_tile<0, 0, 0, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 0, 1, 3, 0>, + Conv::template process_tile<0, 0, 0, 1, 3, 1>, + Conv::template process_tile<0, 0, 0, 1, 3, 2>, + Conv::template process_tile<0, 0, 0, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 2, 0, 0>, + Conv::template process_tile<0, 0, 0, 2, 0, 1>, + Conv::template process_tile<0, 0, 0, 2, 0, 2>, + Conv::template process_tile<0, 0, 0, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 2, 1, 0>, + Conv::template process_tile<0, 0, 0, 2, 1, 1>, + Conv::template process_tile<0, 0, 0, 2, 1, 2>, + Conv::template process_tile<0, 0, 0, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 2, 2, 0>, + Conv::template process_tile<0, 0, 0, 2, 2, 1>, + Conv::template process_tile<0, 0, 0, 2, 2, 2>, + Conv::template process_tile<0, 0, 0, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 0, 2, 3, 0>, + Conv::template process_tile<0, 0, 0, 2, 3, 1>, + Conv::template process_tile<0, 0, 0, 2, 3, 2>, + Conv::template process_tile<0, 0, 0, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 3, 0, 0>, + Conv::template process_tile<0, 0, 0, 3, 0, 1>, + Conv::template process_tile<0, 0, 0, 3, 0, 2>, + Conv::template process_tile<0, 0, 0, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 3, 1, 0>, + Conv::template process_tile<0, 0, 0, 3, 1, 1>, + Conv::template process_tile<0, 0, 0, 3, 1, 2>, + Conv::template process_tile<0, 0, 0, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 3, 2, 0>, + Conv::template process_tile<0, 0, 0, 3, 2, 1>, + Conv::template process_tile<0, 0, 0, 3, 2, 2>, + Conv::template process_tile<0, 0, 0, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 0, 3, 3, 0>, + Conv::template process_tile<0, 0, 0, 3, 3, 1>, + Conv::template process_tile<0, 0, 0, 3, 3, 2>, + Conv::template process_tile<0, 0, 0, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 4, 0, 0>, + Conv::template process_tile<0, 0, 0, 4, 0, 1>, + Conv::template process_tile<0, 0, 0, 4, 0, 2>, + Conv::template process_tile<0, 0, 0, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 4, 1, 0>, + Conv::template process_tile<0, 0, 0, 4, 1, 1>, + Conv::template process_tile<0, 0, 0, 4, 1, 2>, + Conv::template process_tile<0, 0, 0, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 4, 2, 0>, + Conv::template process_tile<0, 0, 0, 4, 2, 1>, + Conv::template process_tile<0, 0, 0, 4, 2, 2>, + Conv::template process_tile<0, 0, 0, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 0, 4, 3, 0>, + Conv::template process_tile<0, 0, 0, 4, 3, 1>, + Conv::template process_tile<0, 0, 0, 4, 3, 2>, + Conv::template process_tile<0, 0, 0, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 5, 0, 0>, + Conv::template process_tile<0, 0, 0, 5, 0, 1>, + Conv::template process_tile<0, 0, 0, 5, 0, 2>, + Conv::template process_tile<0, 0, 0, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 5, 1, 0>, + Conv::template process_tile<0, 0, 0, 5, 1, 1>, + Conv::template process_tile<0, 0, 0, 5, 1, 2>, + Conv::template process_tile<0, 0, 0, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 5, 2, 0>, + Conv::template process_tile<0, 0, 0, 5, 2, 1>, + Conv::template process_tile<0, 0, 0, 5, 2, 2>, + Conv::template process_tile<0, 0, 0, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 0, 5, 3, 0>, + Conv::template process_tile<0, 0, 0, 5, 3, 1>, + Conv::template process_tile<0, 0, 0, 5, 3, 2>, + Conv::template process_tile<0, 0, 0, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 0, 6, 0, 0>, + Conv::template process_tile<0, 0, 0, 6, 0, 1>, + Conv::template process_tile<0, 0, 0, 6, 0, 2>, + Conv::template process_tile<0, 0, 0, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 0, 6, 1, 0>, + Conv::template process_tile<0, 0, 0, 6, 1, 1>, + Conv::template process_tile<0, 0, 0, 6, 1, 2>, + Conv::template process_tile<0, 0, 0, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 0, 6, 2, 0>, + Conv::template process_tile<0, 0, 0, 6, 2, 1>, + Conv::template process_tile<0, 0, 0, 6, 2, 2>, + Conv::template process_tile<0, 0, 0, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 0, 6, 3, 0>, + Conv::template process_tile<0, 0, 0, 6, 3, 1>, + Conv::template process_tile<0, 0, 0, 6, 3, 2>, + Conv::template process_tile<0, 0, 0, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 0, 0, 0>, + Conv::template process_tile<0, 0, 1, 0, 0, 1>, + Conv::template process_tile<0, 0, 1, 0, 0, 2>, + Conv::template process_tile<0, 0, 1, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 0, 1, 0>, + Conv::template process_tile<0, 0, 1, 0, 1, 1>, + Conv::template process_tile<0, 0, 1, 0, 1, 2>, + Conv::template process_tile<0, 0, 1, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 0, 2, 0>, + Conv::template process_tile<0, 0, 1, 0, 2, 1>, + Conv::template process_tile<0, 0, 1, 0, 2, 2>, + Conv::template process_tile<0, 0, 1, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 1, 0, 3, 0>, + Conv::template process_tile<0, 0, 1, 0, 3, 1>, + Conv::template process_tile<0, 0, 1, 0, 3, 2>, + Conv::template process_tile<0, 0, 1, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 1, 0, 0>, + Conv::template process_tile<0, 0, 1, 1, 0, 1>, + Conv::template process_tile<0, 0, 1, 1, 0, 2>, + Conv::template process_tile<0, 0, 1, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 1, 1, 0>, + Conv::template process_tile<0, 0, 1, 1, 1, 1>, + Conv::template process_tile<0, 0, 1, 1, 1, 2>, + Conv::template process_tile<0, 0, 1, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 1, 2, 0>, + Conv::template process_tile<0, 0, 1, 1, 2, 1>, + Conv::template process_tile<0, 0, 1, 1, 2, 2>, + Conv::template process_tile<0, 0, 1, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 1, 1, 3, 0>, + Conv::template process_tile<0, 0, 1, 1, 3, 1>, + Conv::template process_tile<0, 0, 1, 1, 3, 2>, + Conv::template process_tile<0, 0, 1, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 2, 0, 0>, + Conv::template process_tile<0, 0, 1, 2, 0, 1>, + Conv::template process_tile<0, 0, 1, 2, 0, 2>, + Conv::template process_tile<0, 0, 1, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 2, 1, 0>, + Conv::template process_tile<0, 0, 1, 2, 1, 1>, + Conv::template process_tile<0, 0, 1, 2, 1, 2>, + Conv::template process_tile<0, 0, 1, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 2, 2, 0>, + Conv::template process_tile<0, 0, 1, 2, 2, 1>, + Conv::template process_tile<0, 0, 1, 2, 2, 2>, + Conv::template process_tile<0, 0, 1, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 1, 2, 3, 0>, + Conv::template process_tile<0, 0, 1, 2, 3, 1>, + Conv::template process_tile<0, 0, 1, 2, 3, 2>, + Conv::template process_tile<0, 0, 1, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 3, 0, 0>, + Conv::template process_tile<0, 0, 1, 3, 0, 1>, + Conv::template process_tile<0, 0, 1, 3, 0, 2>, + Conv::template process_tile<0, 0, 1, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 3, 1, 0>, + Conv::template process_tile<0, 0, 1, 3, 1, 1>, + Conv::template process_tile<0, 0, 1, 3, 1, 2>, + Conv::template process_tile<0, 0, 1, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 3, 2, 0>, + Conv::template process_tile<0, 0, 1, 3, 2, 1>, + Conv::template process_tile<0, 0, 1, 3, 2, 2>, + Conv::template process_tile<0, 0, 1, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 1, 3, 3, 0>, + Conv::template process_tile<0, 0, 1, 3, 3, 1>, + Conv::template process_tile<0, 0, 1, 3, 3, 2>, + Conv::template process_tile<0, 0, 1, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 4, 0, 0>, + Conv::template process_tile<0, 0, 1, 4, 0, 1>, + Conv::template process_tile<0, 0, 1, 4, 0, 2>, + Conv::template process_tile<0, 0, 1, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 4, 1, 0>, + Conv::template process_tile<0, 0, 1, 4, 1, 1>, + Conv::template process_tile<0, 0, 1, 4, 1, 2>, + Conv::template process_tile<0, 0, 1, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 4, 2, 0>, + Conv::template process_tile<0, 0, 1, 4, 2, 1>, + Conv::template process_tile<0, 0, 1, 4, 2, 2>, + Conv::template process_tile<0, 0, 1, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 1, 4, 3, 0>, + Conv::template process_tile<0, 0, 1, 4, 3, 1>, + Conv::template process_tile<0, 0, 1, 4, 3, 2>, + Conv::template process_tile<0, 0, 1, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 5, 0, 0>, + Conv::template process_tile<0, 0, 1, 5, 0, 1>, + Conv::template process_tile<0, 0, 1, 5, 0, 2>, + Conv::template process_tile<0, 0, 1, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 5, 1, 0>, + Conv::template process_tile<0, 0, 1, 5, 1, 1>, + Conv::template process_tile<0, 0, 1, 5, 1, 2>, + Conv::template process_tile<0, 0, 1, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 5, 2, 0>, + Conv::template process_tile<0, 0, 1, 5, 2, 1>, + Conv::template process_tile<0, 0, 1, 5, 2, 2>, + Conv::template process_tile<0, 0, 1, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 1, 5, 3, 0>, + Conv::template process_tile<0, 0, 1, 5, 3, 1>, + Conv::template process_tile<0, 0, 1, 5, 3, 2>, + Conv::template process_tile<0, 0, 1, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 1, 6, 0, 0>, + Conv::template process_tile<0, 0, 1, 6, 0, 1>, + Conv::template process_tile<0, 0, 1, 6, 0, 2>, + Conv::template process_tile<0, 0, 1, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 1, 6, 1, 0>, + Conv::template process_tile<0, 0, 1, 6, 1, 1>, + Conv::template process_tile<0, 0, 1, 6, 1, 2>, + Conv::template process_tile<0, 0, 1, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 1, 6, 2, 0>, + Conv::template process_tile<0, 0, 1, 6, 2, 1>, + Conv::template process_tile<0, 0, 1, 6, 2, 2>, + Conv::template process_tile<0, 0, 1, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 1, 6, 3, 0>, + Conv::template process_tile<0, 0, 1, 6, 3, 1>, + Conv::template process_tile<0, 0, 1, 6, 3, 2>, + Conv::template process_tile<0, 0, 1, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 0, 0, 0>, + Conv::template process_tile<0, 0, 2, 0, 0, 1>, + Conv::template process_tile<0, 0, 2, 0, 0, 2>, + Conv::template process_tile<0, 0, 2, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 0, 1, 0>, + Conv::template process_tile<0, 0, 2, 0, 1, 1>, + Conv::template process_tile<0, 0, 2, 0, 1, 2>, + Conv::template process_tile<0, 0, 2, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 0, 2, 0>, + Conv::template process_tile<0, 0, 2, 0, 2, 1>, + Conv::template process_tile<0, 0, 2, 0, 2, 2>, + Conv::template process_tile<0, 0, 2, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 2, 0, 3, 0>, + Conv::template process_tile<0, 0, 2, 0, 3, 1>, + Conv::template process_tile<0, 0, 2, 0, 3, 2>, + Conv::template process_tile<0, 0, 2, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 1, 0, 0>, + Conv::template process_tile<0, 0, 2, 1, 0, 1>, + Conv::template process_tile<0, 0, 2, 1, 0, 2>, + Conv::template process_tile<0, 0, 2, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 1, 1, 0>, + Conv::template process_tile<0, 0, 2, 1, 1, 1>, + Conv::template process_tile<0, 0, 2, 1, 1, 2>, + Conv::template process_tile<0, 0, 2, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 1, 2, 0>, + Conv::template process_tile<0, 0, 2, 1, 2, 1>, + Conv::template process_tile<0, 0, 2, 1, 2, 2>, + Conv::template process_tile<0, 0, 2, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 2, 1, 3, 0>, + Conv::template process_tile<0, 0, 2, 1, 3, 1>, + Conv::template process_tile<0, 0, 2, 1, 3, 2>, + Conv::template process_tile<0, 0, 2, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 2, 0, 0>, + Conv::template process_tile<0, 0, 2, 2, 0, 1>, + Conv::template process_tile<0, 0, 2, 2, 0, 2>, + Conv::template process_tile<0, 0, 2, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 2, 1, 0>, + Conv::template process_tile<0, 0, 2, 2, 1, 1>, + Conv::template process_tile<0, 0, 2, 2, 1, 2>, + Conv::template process_tile<0, 0, 2, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 2, 2, 0>, + Conv::template process_tile<0, 0, 2, 2, 2, 1>, + Conv::template process_tile<0, 0, 2, 2, 2, 2>, + Conv::template process_tile<0, 0, 2, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 2, 2, 3, 0>, + Conv::template process_tile<0, 0, 2, 2, 3, 1>, + Conv::template process_tile<0, 0, 2, 2, 3, 2>, + Conv::template process_tile<0, 0, 2, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 3, 0, 0>, + Conv::template process_tile<0, 0, 2, 3, 0, 1>, + Conv::template process_tile<0, 0, 2, 3, 0, 2>, + Conv::template process_tile<0, 0, 2, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 3, 1, 0>, + Conv::template process_tile<0, 0, 2, 3, 1, 1>, + Conv::template process_tile<0, 0, 2, 3, 1, 2>, + Conv::template process_tile<0, 0, 2, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 3, 2, 0>, + Conv::template process_tile<0, 0, 2, 3, 2, 1>, + Conv::template process_tile<0, 0, 2, 3, 2, 2>, + Conv::template process_tile<0, 0, 2, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 2, 3, 3, 0>, + Conv::template process_tile<0, 0, 2, 3, 3, 1>, + Conv::template process_tile<0, 0, 2, 3, 3, 2>, + Conv::template process_tile<0, 0, 2, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 4, 0, 0>, + Conv::template process_tile<0, 0, 2, 4, 0, 1>, + Conv::template process_tile<0, 0, 2, 4, 0, 2>, + Conv::template process_tile<0, 0, 2, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 4, 1, 0>, + Conv::template process_tile<0, 0, 2, 4, 1, 1>, + Conv::template process_tile<0, 0, 2, 4, 1, 2>, + Conv::template process_tile<0, 0, 2, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 4, 2, 0>, + Conv::template process_tile<0, 0, 2, 4, 2, 1>, + Conv::template process_tile<0, 0, 2, 4, 2, 2>, + Conv::template process_tile<0, 0, 2, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 2, 4, 3, 0>, + Conv::template process_tile<0, 0, 2, 4, 3, 1>, + Conv::template process_tile<0, 0, 2, 4, 3, 2>, + Conv::template process_tile<0, 0, 2, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 5, 0, 0>, + Conv::template process_tile<0, 0, 2, 5, 0, 1>, + Conv::template process_tile<0, 0, 2, 5, 0, 2>, + Conv::template process_tile<0, 0, 2, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 5, 1, 0>, + Conv::template process_tile<0, 0, 2, 5, 1, 1>, + Conv::template process_tile<0, 0, 2, 5, 1, 2>, + Conv::template process_tile<0, 0, 2, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 5, 2, 0>, + Conv::template process_tile<0, 0, 2, 5, 2, 1>, + Conv::template process_tile<0, 0, 2, 5, 2, 2>, + Conv::template process_tile<0, 0, 2, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 2, 5, 3, 0>, + Conv::template process_tile<0, 0, 2, 5, 3, 1>, + Conv::template process_tile<0, 0, 2, 5, 3, 2>, + Conv::template process_tile<0, 0, 2, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 2, 6, 0, 0>, + Conv::template process_tile<0, 0, 2, 6, 0, 1>, + Conv::template process_tile<0, 0, 2, 6, 0, 2>, + Conv::template process_tile<0, 0, 2, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 2, 6, 1, 0>, + Conv::template process_tile<0, 0, 2, 6, 1, 1>, + Conv::template process_tile<0, 0, 2, 6, 1, 2>, + Conv::template process_tile<0, 0, 2, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 2, 6, 2, 0>, + Conv::template process_tile<0, 0, 2, 6, 2, 1>, + Conv::template process_tile<0, 0, 2, 6, 2, 2>, + Conv::template process_tile<0, 0, 2, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 2, 6, 3, 0>, + Conv::template process_tile<0, 0, 2, 6, 3, 1>, + Conv::template process_tile<0, 0, 2, 6, 3, 2>, + Conv::template process_tile<0, 0, 2, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 0, 0, 0>, + Conv::template process_tile<0, 0, 3, 0, 0, 1>, + Conv::template process_tile<0, 0, 3, 0, 0, 2>, + Conv::template process_tile<0, 0, 3, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 0, 1, 0>, + Conv::template process_tile<0, 0, 3, 0, 1, 1>, + Conv::template process_tile<0, 0, 3, 0, 1, 2>, + Conv::template process_tile<0, 0, 3, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 0, 2, 0>, + Conv::template process_tile<0, 0, 3, 0, 2, 1>, + Conv::template process_tile<0, 0, 3, 0, 2, 2>, + Conv::template process_tile<0, 0, 3, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 3, 0, 3, 0>, + Conv::template process_tile<0, 0, 3, 0, 3, 1>, + Conv::template process_tile<0, 0, 3, 0, 3, 2>, + Conv::template process_tile<0, 0, 3, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 1, 0, 0>, + Conv::template process_tile<0, 0, 3, 1, 0, 1>, + Conv::template process_tile<0, 0, 3, 1, 0, 2>, + Conv::template process_tile<0, 0, 3, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 1, 1, 0>, + Conv::template process_tile<0, 0, 3, 1, 1, 1>, + Conv::template process_tile<0, 0, 3, 1, 1, 2>, + Conv::template process_tile<0, 0, 3, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 1, 2, 0>, + Conv::template process_tile<0, 0, 3, 1, 2, 1>, + Conv::template process_tile<0, 0, 3, 1, 2, 2>, + Conv::template process_tile<0, 0, 3, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 3, 1, 3, 0>, + Conv::template process_tile<0, 0, 3, 1, 3, 1>, + Conv::template process_tile<0, 0, 3, 1, 3, 2>, + Conv::template process_tile<0, 0, 3, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 2, 0, 0>, + Conv::template process_tile<0, 0, 3, 2, 0, 1>, + Conv::template process_tile<0, 0, 3, 2, 0, 2>, + Conv::template process_tile<0, 0, 3, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 2, 1, 0>, + Conv::template process_tile<0, 0, 3, 2, 1, 1>, + Conv::template process_tile<0, 0, 3, 2, 1, 2>, + Conv::template process_tile<0, 0, 3, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 2, 2, 0>, + Conv::template process_tile<0, 0, 3, 2, 2, 1>, + Conv::template process_tile<0, 0, 3, 2, 2, 2>, + Conv::template process_tile<0, 0, 3, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 3, 2, 3, 0>, + Conv::template process_tile<0, 0, 3, 2, 3, 1>, + Conv::template process_tile<0, 0, 3, 2, 3, 2>, + Conv::template process_tile<0, 0, 3, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 3, 0, 0>, + Conv::template process_tile<0, 0, 3, 3, 0, 1>, + Conv::template process_tile<0, 0, 3, 3, 0, 2>, + Conv::template process_tile<0, 0, 3, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 3, 1, 0>, + Conv::template process_tile<0, 0, 3, 3, 1, 1>, + Conv::template process_tile<0, 0, 3, 3, 1, 2>, + Conv::template process_tile<0, 0, 3, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 3, 2, 0>, + Conv::template process_tile<0, 0, 3, 3, 2, 1>, + Conv::template process_tile<0, 0, 3, 3, 2, 2>, + Conv::template process_tile<0, 0, 3, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 3, 3, 3, 0>, + Conv::template process_tile<0, 0, 3, 3, 3, 1>, + Conv::template process_tile<0, 0, 3, 3, 3, 2>, + Conv::template process_tile<0, 0, 3, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 4, 0, 0>, + Conv::template process_tile<0, 0, 3, 4, 0, 1>, + Conv::template process_tile<0, 0, 3, 4, 0, 2>, + Conv::template process_tile<0, 0, 3, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 4, 1, 0>, + Conv::template process_tile<0, 0, 3, 4, 1, 1>, + Conv::template process_tile<0, 0, 3, 4, 1, 2>, + Conv::template process_tile<0, 0, 3, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 4, 2, 0>, + Conv::template process_tile<0, 0, 3, 4, 2, 1>, + Conv::template process_tile<0, 0, 3, 4, 2, 2>, + Conv::template process_tile<0, 0, 3, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 3, 4, 3, 0>, + Conv::template process_tile<0, 0, 3, 4, 3, 1>, + Conv::template process_tile<0, 0, 3, 4, 3, 2>, + Conv::template process_tile<0, 0, 3, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 5, 0, 0>, + Conv::template process_tile<0, 0, 3, 5, 0, 1>, + Conv::template process_tile<0, 0, 3, 5, 0, 2>, + Conv::template process_tile<0, 0, 3, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 5, 1, 0>, + Conv::template process_tile<0, 0, 3, 5, 1, 1>, + Conv::template process_tile<0, 0, 3, 5, 1, 2>, + Conv::template process_tile<0, 0, 3, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 5, 2, 0>, + Conv::template process_tile<0, 0, 3, 5, 2, 1>, + Conv::template process_tile<0, 0, 3, 5, 2, 2>, + Conv::template process_tile<0, 0, 3, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 3, 5, 3, 0>, + Conv::template process_tile<0, 0, 3, 5, 3, 1>, + Conv::template process_tile<0, 0, 3, 5, 3, 2>, + Conv::template process_tile<0, 0, 3, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 3, 6, 0, 0>, + Conv::template process_tile<0, 0, 3, 6, 0, 1>, + Conv::template process_tile<0, 0, 3, 6, 0, 2>, + Conv::template process_tile<0, 0, 3, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 3, 6, 1, 0>, + Conv::template process_tile<0, 0, 3, 6, 1, 1>, + Conv::template process_tile<0, 0, 3, 6, 1, 2>, + Conv::template process_tile<0, 0, 3, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 3, 6, 2, 0>, + Conv::template process_tile<0, 0, 3, 6, 2, 1>, + Conv::template process_tile<0, 0, 3, 6, 2, 2>, + Conv::template process_tile<0, 0, 3, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 3, 6, 3, 0>, + Conv::template process_tile<0, 0, 3, 6, 3, 1>, + Conv::template process_tile<0, 0, 3, 6, 3, 2>, + Conv::template process_tile<0, 0, 3, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 0, 0, 0>, + Conv::template process_tile<0, 0, 4, 0, 0, 1>, + Conv::template process_tile<0, 0, 4, 0, 0, 2>, + Conv::template process_tile<0, 0, 4, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 0, 1, 0>, + Conv::template process_tile<0, 0, 4, 0, 1, 1>, + Conv::template process_tile<0, 0, 4, 0, 1, 2>, + Conv::template process_tile<0, 0, 4, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 0, 2, 0>, + Conv::template process_tile<0, 0, 4, 0, 2, 1>, + Conv::template process_tile<0, 0, 4, 0, 2, 2>, + Conv::template process_tile<0, 0, 4, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 4, 0, 3, 0>, + Conv::template process_tile<0, 0, 4, 0, 3, 1>, + Conv::template process_tile<0, 0, 4, 0, 3, 2>, + Conv::template process_tile<0, 0, 4, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 1, 0, 0>, + Conv::template process_tile<0, 0, 4, 1, 0, 1>, + Conv::template process_tile<0, 0, 4, 1, 0, 2>, + Conv::template process_tile<0, 0, 4, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 1, 1, 0>, + Conv::template process_tile<0, 0, 4, 1, 1, 1>, + Conv::template process_tile<0, 0, 4, 1, 1, 2>, + Conv::template process_tile<0, 0, 4, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 1, 2, 0>, + Conv::template process_tile<0, 0, 4, 1, 2, 1>, + Conv::template process_tile<0, 0, 4, 1, 2, 2>, + Conv::template process_tile<0, 0, 4, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 4, 1, 3, 0>, + Conv::template process_tile<0, 0, 4, 1, 3, 1>, + Conv::template process_tile<0, 0, 4, 1, 3, 2>, + Conv::template process_tile<0, 0, 4, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 2, 0, 0>, + Conv::template process_tile<0, 0, 4, 2, 0, 1>, + Conv::template process_tile<0, 0, 4, 2, 0, 2>, + Conv::template process_tile<0, 0, 4, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 2, 1, 0>, + Conv::template process_tile<0, 0, 4, 2, 1, 1>, + Conv::template process_tile<0, 0, 4, 2, 1, 2>, + Conv::template process_tile<0, 0, 4, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 2, 2, 0>, + Conv::template process_tile<0, 0, 4, 2, 2, 1>, + Conv::template process_tile<0, 0, 4, 2, 2, 2>, + Conv::template process_tile<0, 0, 4, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 4, 2, 3, 0>, + Conv::template process_tile<0, 0, 4, 2, 3, 1>, + Conv::template process_tile<0, 0, 4, 2, 3, 2>, + Conv::template process_tile<0, 0, 4, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 3, 0, 0>, + Conv::template process_tile<0, 0, 4, 3, 0, 1>, + Conv::template process_tile<0, 0, 4, 3, 0, 2>, + Conv::template process_tile<0, 0, 4, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 3, 1, 0>, + Conv::template process_tile<0, 0, 4, 3, 1, 1>, + Conv::template process_tile<0, 0, 4, 3, 1, 2>, + Conv::template process_tile<0, 0, 4, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 3, 2, 0>, + Conv::template process_tile<0, 0, 4, 3, 2, 1>, + Conv::template process_tile<0, 0, 4, 3, 2, 2>, + Conv::template process_tile<0, 0, 4, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 4, 3, 3, 0>, + Conv::template process_tile<0, 0, 4, 3, 3, 1>, + Conv::template process_tile<0, 0, 4, 3, 3, 2>, + Conv::template process_tile<0, 0, 4, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 4, 0, 0>, + Conv::template process_tile<0, 0, 4, 4, 0, 1>, + Conv::template process_tile<0, 0, 4, 4, 0, 2>, + Conv::template process_tile<0, 0, 4, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 4, 1, 0>, + Conv::template process_tile<0, 0, 4, 4, 1, 1>, + Conv::template process_tile<0, 0, 4, 4, 1, 2>, + Conv::template process_tile<0, 0, 4, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 4, 2, 0>, + Conv::template process_tile<0, 0, 4, 4, 2, 1>, + Conv::template process_tile<0, 0, 4, 4, 2, 2>, + Conv::template process_tile<0, 0, 4, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 4, 4, 3, 0>, + Conv::template process_tile<0, 0, 4, 4, 3, 1>, + Conv::template process_tile<0, 0, 4, 4, 3, 2>, + Conv::template process_tile<0, 0, 4, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 5, 0, 0>, + Conv::template process_tile<0, 0, 4, 5, 0, 1>, + Conv::template process_tile<0, 0, 4, 5, 0, 2>, + Conv::template process_tile<0, 0, 4, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 5, 1, 0>, + Conv::template process_tile<0, 0, 4, 5, 1, 1>, + Conv::template process_tile<0, 0, 4, 5, 1, 2>, + Conv::template process_tile<0, 0, 4, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 5, 2, 0>, + Conv::template process_tile<0, 0, 4, 5, 2, 1>, + Conv::template process_tile<0, 0, 4, 5, 2, 2>, + Conv::template process_tile<0, 0, 4, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 4, 5, 3, 0>, + Conv::template process_tile<0, 0, 4, 5, 3, 1>, + Conv::template process_tile<0, 0, 4, 5, 3, 2>, + Conv::template process_tile<0, 0, 4, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 4, 6, 0, 0>, + Conv::template process_tile<0, 0, 4, 6, 0, 1>, + Conv::template process_tile<0, 0, 4, 6, 0, 2>, + Conv::template process_tile<0, 0, 4, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 4, 6, 1, 0>, + Conv::template process_tile<0, 0, 4, 6, 1, 1>, + Conv::template process_tile<0, 0, 4, 6, 1, 2>, + Conv::template process_tile<0, 0, 4, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 4, 6, 2, 0>, + Conv::template process_tile<0, 0, 4, 6, 2, 1>, + Conv::template process_tile<0, 0, 4, 6, 2, 2>, + Conv::template process_tile<0, 0, 4, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 4, 6, 3, 0>, + Conv::template process_tile<0, 0, 4, 6, 3, 1>, + Conv::template process_tile<0, 0, 4, 6, 3, 2>, + Conv::template process_tile<0, 0, 4, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 4 + { // Input pad bottom = 5 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 0, 0, 0>, + Conv::template process_tile<0, 0, 5, 0, 0, 1>, + Conv::template process_tile<0, 0, 5, 0, 0, 2>, + Conv::template process_tile<0, 0, 5, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 0, 1, 0>, + Conv::template process_tile<0, 0, 5, 0, 1, 1>, + Conv::template process_tile<0, 0, 5, 0, 1, 2>, + Conv::template process_tile<0, 0, 5, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 0, 2, 0>, + Conv::template process_tile<0, 0, 5, 0, 2, 1>, + Conv::template process_tile<0, 0, 5, 0, 2, 2>, + Conv::template process_tile<0, 0, 5, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 5, 0, 3, 0>, + Conv::template process_tile<0, 0, 5, 0, 3, 1>, + Conv::template process_tile<0, 0, 5, 0, 3, 2>, + Conv::template process_tile<0, 0, 5, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 1, 0, 0>, + Conv::template process_tile<0, 0, 5, 1, 0, 1>, + Conv::template process_tile<0, 0, 5, 1, 0, 2>, + Conv::template process_tile<0, 0, 5, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 1, 1, 0>, + Conv::template process_tile<0, 0, 5, 1, 1, 1>, + Conv::template process_tile<0, 0, 5, 1, 1, 2>, + Conv::template process_tile<0, 0, 5, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 1, 2, 0>, + Conv::template process_tile<0, 0, 5, 1, 2, 1>, + Conv::template process_tile<0, 0, 5, 1, 2, 2>, + Conv::template process_tile<0, 0, 5, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 5, 1, 3, 0>, + Conv::template process_tile<0, 0, 5, 1, 3, 1>, + Conv::template process_tile<0, 0, 5, 1, 3, 2>, + Conv::template process_tile<0, 0, 5, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 2, 0, 0>, + Conv::template process_tile<0, 0, 5, 2, 0, 1>, + Conv::template process_tile<0, 0, 5, 2, 0, 2>, + Conv::template process_tile<0, 0, 5, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 2, 1, 0>, + Conv::template process_tile<0, 0, 5, 2, 1, 1>, + Conv::template process_tile<0, 0, 5, 2, 1, 2>, + Conv::template process_tile<0, 0, 5, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 2, 2, 0>, + Conv::template process_tile<0, 0, 5, 2, 2, 1>, + Conv::template process_tile<0, 0, 5, 2, 2, 2>, + Conv::template process_tile<0, 0, 5, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 5, 2, 3, 0>, + Conv::template process_tile<0, 0, 5, 2, 3, 1>, + Conv::template process_tile<0, 0, 5, 2, 3, 2>, + Conv::template process_tile<0, 0, 5, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 3, 0, 0>, + Conv::template process_tile<0, 0, 5, 3, 0, 1>, + Conv::template process_tile<0, 0, 5, 3, 0, 2>, + Conv::template process_tile<0, 0, 5, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 3, 1, 0>, + Conv::template process_tile<0, 0, 5, 3, 1, 1>, + Conv::template process_tile<0, 0, 5, 3, 1, 2>, + Conv::template process_tile<0, 0, 5, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 3, 2, 0>, + Conv::template process_tile<0, 0, 5, 3, 2, 1>, + Conv::template process_tile<0, 0, 5, 3, 2, 2>, + Conv::template process_tile<0, 0, 5, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 5, 3, 3, 0>, + Conv::template process_tile<0, 0, 5, 3, 3, 1>, + Conv::template process_tile<0, 0, 5, 3, 3, 2>, + Conv::template process_tile<0, 0, 5, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 4, 0, 0>, + Conv::template process_tile<0, 0, 5, 4, 0, 1>, + Conv::template process_tile<0, 0, 5, 4, 0, 2>, + Conv::template process_tile<0, 0, 5, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 4, 1, 0>, + Conv::template process_tile<0, 0, 5, 4, 1, 1>, + Conv::template process_tile<0, 0, 5, 4, 1, 2>, + Conv::template process_tile<0, 0, 5, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 4, 2, 0>, + Conv::template process_tile<0, 0, 5, 4, 2, 1>, + Conv::template process_tile<0, 0, 5, 4, 2, 2>, + Conv::template process_tile<0, 0, 5, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 5, 4, 3, 0>, + Conv::template process_tile<0, 0, 5, 4, 3, 1>, + Conv::template process_tile<0, 0, 5, 4, 3, 2>, + Conv::template process_tile<0, 0, 5, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 5, 0, 0>, + Conv::template process_tile<0, 0, 5, 5, 0, 1>, + Conv::template process_tile<0, 0, 5, 5, 0, 2>, + Conv::template process_tile<0, 0, 5, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 5, 1, 0>, + Conv::template process_tile<0, 0, 5, 5, 1, 1>, + Conv::template process_tile<0, 0, 5, 5, 1, 2>, + Conv::template process_tile<0, 0, 5, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 5, 2, 0>, + Conv::template process_tile<0, 0, 5, 5, 2, 1>, + Conv::template process_tile<0, 0, 5, 5, 2, 2>, + Conv::template process_tile<0, 0, 5, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 5, 5, 3, 0>, + Conv::template process_tile<0, 0, 5, 5, 3, 1>, + Conv::template process_tile<0, 0, 5, 5, 3, 2>, + Conv::template process_tile<0, 0, 5, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 5, 6, 0, 0>, + Conv::template process_tile<0, 0, 5, 6, 0, 1>, + Conv::template process_tile<0, 0, 5, 6, 0, 2>, + Conv::template process_tile<0, 0, 5, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 5, 6, 1, 0>, + Conv::template process_tile<0, 0, 5, 6, 1, 1>, + Conv::template process_tile<0, 0, 5, 6, 1, 2>, + Conv::template process_tile<0, 0, 5, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 5, 6, 2, 0>, + Conv::template process_tile<0, 0, 5, 6, 2, 1>, + Conv::template process_tile<0, 0, 5, 6, 2, 2>, + Conv::template process_tile<0, 0, 5, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 5, 6, 3, 0>, + Conv::template process_tile<0, 0, 5, 6, 3, 1>, + Conv::template process_tile<0, 0, 5, 6, 3, 2>, + Conv::template process_tile<0, 0, 5, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 5 + { // Input pad bottom = 6 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 0, 0, 0>, + Conv::template process_tile<0, 0, 6, 0, 0, 1>, + Conv::template process_tile<0, 0, 6, 0, 0, 2>, + Conv::template process_tile<0, 0, 6, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 0, 1, 0>, + Conv::template process_tile<0, 0, 6, 0, 1, 1>, + Conv::template process_tile<0, 0, 6, 0, 1, 2>, + Conv::template process_tile<0, 0, 6, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 0, 2, 0>, + Conv::template process_tile<0, 0, 6, 0, 2, 1>, + Conv::template process_tile<0, 0, 6, 0, 2, 2>, + Conv::template process_tile<0, 0, 6, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 6, 0, 3, 0>, + Conv::template process_tile<0, 0, 6, 0, 3, 1>, + Conv::template process_tile<0, 0, 6, 0, 3, 2>, + Conv::template process_tile<0, 0, 6, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 1, 0, 0>, + Conv::template process_tile<0, 0, 6, 1, 0, 1>, + Conv::template process_tile<0, 0, 6, 1, 0, 2>, + Conv::template process_tile<0, 0, 6, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 1, 1, 0>, + Conv::template process_tile<0, 0, 6, 1, 1, 1>, + Conv::template process_tile<0, 0, 6, 1, 1, 2>, + Conv::template process_tile<0, 0, 6, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 1, 2, 0>, + Conv::template process_tile<0, 0, 6, 1, 2, 1>, + Conv::template process_tile<0, 0, 6, 1, 2, 2>, + Conv::template process_tile<0, 0, 6, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 6, 1, 3, 0>, + Conv::template process_tile<0, 0, 6, 1, 3, 1>, + Conv::template process_tile<0, 0, 6, 1, 3, 2>, + Conv::template process_tile<0, 0, 6, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 2, 0, 0>, + Conv::template process_tile<0, 0, 6, 2, 0, 1>, + Conv::template process_tile<0, 0, 6, 2, 0, 2>, + Conv::template process_tile<0, 0, 6, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 2, 1, 0>, + Conv::template process_tile<0, 0, 6, 2, 1, 1>, + Conv::template process_tile<0, 0, 6, 2, 1, 2>, + Conv::template process_tile<0, 0, 6, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 2, 2, 0>, + Conv::template process_tile<0, 0, 6, 2, 2, 1>, + Conv::template process_tile<0, 0, 6, 2, 2, 2>, + Conv::template process_tile<0, 0, 6, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 6, 2, 3, 0>, + Conv::template process_tile<0, 0, 6, 2, 3, 1>, + Conv::template process_tile<0, 0, 6, 2, 3, 2>, + Conv::template process_tile<0, 0, 6, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 3, 0, 0>, + Conv::template process_tile<0, 0, 6, 3, 0, 1>, + Conv::template process_tile<0, 0, 6, 3, 0, 2>, + Conv::template process_tile<0, 0, 6, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 3, 1, 0>, + Conv::template process_tile<0, 0, 6, 3, 1, 1>, + Conv::template process_tile<0, 0, 6, 3, 1, 2>, + Conv::template process_tile<0, 0, 6, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 3, 2, 0>, + Conv::template process_tile<0, 0, 6, 3, 2, 1>, + Conv::template process_tile<0, 0, 6, 3, 2, 2>, + Conv::template process_tile<0, 0, 6, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 6, 3, 3, 0>, + Conv::template process_tile<0, 0, 6, 3, 3, 1>, + Conv::template process_tile<0, 0, 6, 3, 3, 2>, + Conv::template process_tile<0, 0, 6, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 4, 0, 0>, + Conv::template process_tile<0, 0, 6, 4, 0, 1>, + Conv::template process_tile<0, 0, 6, 4, 0, 2>, + Conv::template process_tile<0, 0, 6, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 4, 1, 0>, + Conv::template process_tile<0, 0, 6, 4, 1, 1>, + Conv::template process_tile<0, 0, 6, 4, 1, 2>, + Conv::template process_tile<0, 0, 6, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 4, 2, 0>, + Conv::template process_tile<0, 0, 6, 4, 2, 1>, + Conv::template process_tile<0, 0, 6, 4, 2, 2>, + Conv::template process_tile<0, 0, 6, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 6, 4, 3, 0>, + Conv::template process_tile<0, 0, 6, 4, 3, 1>, + Conv::template process_tile<0, 0, 6, 4, 3, 2>, + Conv::template process_tile<0, 0, 6, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 5, 0, 0>, + Conv::template process_tile<0, 0, 6, 5, 0, 1>, + Conv::template process_tile<0, 0, 6, 5, 0, 2>, + Conv::template process_tile<0, 0, 6, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 5, 1, 0>, + Conv::template process_tile<0, 0, 6, 5, 1, 1>, + Conv::template process_tile<0, 0, 6, 5, 1, 2>, + Conv::template process_tile<0, 0, 6, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 5, 2, 0>, + Conv::template process_tile<0, 0, 6, 5, 2, 1>, + Conv::template process_tile<0, 0, 6, 5, 2, 2>, + Conv::template process_tile<0, 0, 6, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 6, 5, 3, 0>, + Conv::template process_tile<0, 0, 6, 5, 3, 1>, + Conv::template process_tile<0, 0, 6, 5, 3, 2>, + Conv::template process_tile<0, 0, 6, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 0, 6, 6, 0, 0>, + Conv::template process_tile<0, 0, 6, 6, 0, 1>, + Conv::template process_tile<0, 0, 6, 6, 0, 2>, + Conv::template process_tile<0, 0, 6, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 0, 6, 6, 1, 0>, + Conv::template process_tile<0, 0, 6, 6, 1, 1>, + Conv::template process_tile<0, 0, 6, 6, 1, 2>, + Conv::template process_tile<0, 0, 6, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 0, 6, 6, 2, 0>, + Conv::template process_tile<0, 0, 6, 6, 2, 1>, + Conv::template process_tile<0, 0, 6, 6, 2, 2>, + Conv::template process_tile<0, 0, 6, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 0, 6, 6, 3, 0>, + Conv::template process_tile<0, 0, 6, 6, 3, 1>, + Conv::template process_tile<0, 0, 6, 6, 3, 2>, + Conv::template process_tile<0, 0, 6, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 6 + }, // Input pad left = 0 + { // Input pad left = 1 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 0, 0, 0>, + Conv::template process_tile<0, 1, 0, 0, 0, 1>, + Conv::template process_tile<0, 1, 0, 0, 0, 2>, + Conv::template process_tile<0, 1, 0, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 0, 1, 0>, + Conv::template process_tile<0, 1, 0, 0, 1, 1>, + Conv::template process_tile<0, 1, 0, 0, 1, 2>, + Conv::template process_tile<0, 1, 0, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 0, 2, 0>, + Conv::template process_tile<0, 1, 0, 0, 2, 1>, + Conv::template process_tile<0, 1, 0, 0, 2, 2>, + Conv::template process_tile<0, 1, 0, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 0, 0, 3, 0>, + Conv::template process_tile<0, 1, 0, 0, 3, 1>, + Conv::template process_tile<0, 1, 0, 0, 3, 2>, + Conv::template process_tile<0, 1, 0, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 1, 0, 0>, + Conv::template process_tile<0, 1, 0, 1, 0, 1>, + Conv::template process_tile<0, 1, 0, 1, 0, 2>, + Conv::template process_tile<0, 1, 0, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 1, 1, 0>, + Conv::template process_tile<0, 1, 0, 1, 1, 1>, + Conv::template process_tile<0, 1, 0, 1, 1, 2>, + Conv::template process_tile<0, 1, 0, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 1, 2, 0>, + Conv::template process_tile<0, 1, 0, 1, 2, 1>, + Conv::template process_tile<0, 1, 0, 1, 2, 2>, + Conv::template process_tile<0, 1, 0, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 0, 1, 3, 0>, + Conv::template process_tile<0, 1, 0, 1, 3, 1>, + Conv::template process_tile<0, 1, 0, 1, 3, 2>, + Conv::template process_tile<0, 1, 0, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 2, 0, 0>, + Conv::template process_tile<0, 1, 0, 2, 0, 1>, + Conv::template process_tile<0, 1, 0, 2, 0, 2>, + Conv::template process_tile<0, 1, 0, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 2, 1, 0>, + Conv::template process_tile<0, 1, 0, 2, 1, 1>, + Conv::template process_tile<0, 1, 0, 2, 1, 2>, + Conv::template process_tile<0, 1, 0, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 2, 2, 0>, + Conv::template process_tile<0, 1, 0, 2, 2, 1>, + Conv::template process_tile<0, 1, 0, 2, 2, 2>, + Conv::template process_tile<0, 1, 0, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 0, 2, 3, 0>, + Conv::template process_tile<0, 1, 0, 2, 3, 1>, + Conv::template process_tile<0, 1, 0, 2, 3, 2>, + Conv::template process_tile<0, 1, 0, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 3, 0, 0>, + Conv::template process_tile<0, 1, 0, 3, 0, 1>, + Conv::template process_tile<0, 1, 0, 3, 0, 2>, + Conv::template process_tile<0, 1, 0, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 3, 1, 0>, + Conv::template process_tile<0, 1, 0, 3, 1, 1>, + Conv::template process_tile<0, 1, 0, 3, 1, 2>, + Conv::template process_tile<0, 1, 0, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 3, 2, 0>, + Conv::template process_tile<0, 1, 0, 3, 2, 1>, + Conv::template process_tile<0, 1, 0, 3, 2, 2>, + Conv::template process_tile<0, 1, 0, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 0, 3, 3, 0>, + Conv::template process_tile<0, 1, 0, 3, 3, 1>, + Conv::template process_tile<0, 1, 0, 3, 3, 2>, + Conv::template process_tile<0, 1, 0, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 4, 0, 0>, + Conv::template process_tile<0, 1, 0, 4, 0, 1>, + Conv::template process_tile<0, 1, 0, 4, 0, 2>, + Conv::template process_tile<0, 1, 0, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 4, 1, 0>, + Conv::template process_tile<0, 1, 0, 4, 1, 1>, + Conv::template process_tile<0, 1, 0, 4, 1, 2>, + Conv::template process_tile<0, 1, 0, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 4, 2, 0>, + Conv::template process_tile<0, 1, 0, 4, 2, 1>, + Conv::template process_tile<0, 1, 0, 4, 2, 2>, + Conv::template process_tile<0, 1, 0, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 0, 4, 3, 0>, + Conv::template process_tile<0, 1, 0, 4, 3, 1>, + Conv::template process_tile<0, 1, 0, 4, 3, 2>, + Conv::template process_tile<0, 1, 0, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 5, 0, 0>, + Conv::template process_tile<0, 1, 0, 5, 0, 1>, + Conv::template process_tile<0, 1, 0, 5, 0, 2>, + Conv::template process_tile<0, 1, 0, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 5, 1, 0>, + Conv::template process_tile<0, 1, 0, 5, 1, 1>, + Conv::template process_tile<0, 1, 0, 5, 1, 2>, + Conv::template process_tile<0, 1, 0, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 5, 2, 0>, + Conv::template process_tile<0, 1, 0, 5, 2, 1>, + Conv::template process_tile<0, 1, 0, 5, 2, 2>, + Conv::template process_tile<0, 1, 0, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 0, 5, 3, 0>, + Conv::template process_tile<0, 1, 0, 5, 3, 1>, + Conv::template process_tile<0, 1, 0, 5, 3, 2>, + Conv::template process_tile<0, 1, 0, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 0, 6, 0, 0>, + Conv::template process_tile<0, 1, 0, 6, 0, 1>, + Conv::template process_tile<0, 1, 0, 6, 0, 2>, + Conv::template process_tile<0, 1, 0, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 0, 6, 1, 0>, + Conv::template process_tile<0, 1, 0, 6, 1, 1>, + Conv::template process_tile<0, 1, 0, 6, 1, 2>, + Conv::template process_tile<0, 1, 0, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 0, 6, 2, 0>, + Conv::template process_tile<0, 1, 0, 6, 2, 1>, + Conv::template process_tile<0, 1, 0, 6, 2, 2>, + Conv::template process_tile<0, 1, 0, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 0, 6, 3, 0>, + Conv::template process_tile<0, 1, 0, 6, 3, 1>, + Conv::template process_tile<0, 1, 0, 6, 3, 2>, + Conv::template process_tile<0, 1, 0, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 0, 0, 0>, + Conv::template process_tile<0, 1, 1, 0, 0, 1>, + Conv::template process_tile<0, 1, 1, 0, 0, 2>, + Conv::template process_tile<0, 1, 1, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 0, 1, 0>, + Conv::template process_tile<0, 1, 1, 0, 1, 1>, + Conv::template process_tile<0, 1, 1, 0, 1, 2>, + Conv::template process_tile<0, 1, 1, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 0, 2, 0>, + Conv::template process_tile<0, 1, 1, 0, 2, 1>, + Conv::template process_tile<0, 1, 1, 0, 2, 2>, + Conv::template process_tile<0, 1, 1, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 1, 0, 3, 0>, + Conv::template process_tile<0, 1, 1, 0, 3, 1>, + Conv::template process_tile<0, 1, 1, 0, 3, 2>, + Conv::template process_tile<0, 1, 1, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 1, 0, 0>, + Conv::template process_tile<0, 1, 1, 1, 0, 1>, + Conv::template process_tile<0, 1, 1, 1, 0, 2>, + Conv::template process_tile<0, 1, 1, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 1, 1, 0>, + Conv::template process_tile<0, 1, 1, 1, 1, 1>, + Conv::template process_tile<0, 1, 1, 1, 1, 2>, + Conv::template process_tile<0, 1, 1, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 1, 2, 0>, + Conv::template process_tile<0, 1, 1, 1, 2, 1>, + Conv::template process_tile<0, 1, 1, 1, 2, 2>, + Conv::template process_tile<0, 1, 1, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 1, 1, 3, 0>, + Conv::template process_tile<0, 1, 1, 1, 3, 1>, + Conv::template process_tile<0, 1, 1, 1, 3, 2>, + Conv::template process_tile<0, 1, 1, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 2, 0, 0>, + Conv::template process_tile<0, 1, 1, 2, 0, 1>, + Conv::template process_tile<0, 1, 1, 2, 0, 2>, + Conv::template process_tile<0, 1, 1, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 2, 1, 0>, + Conv::template process_tile<0, 1, 1, 2, 1, 1>, + Conv::template process_tile<0, 1, 1, 2, 1, 2>, + Conv::template process_tile<0, 1, 1, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 2, 2, 0>, + Conv::template process_tile<0, 1, 1, 2, 2, 1>, + Conv::template process_tile<0, 1, 1, 2, 2, 2>, + Conv::template process_tile<0, 1, 1, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 1, 2, 3, 0>, + Conv::template process_tile<0, 1, 1, 2, 3, 1>, + Conv::template process_tile<0, 1, 1, 2, 3, 2>, + Conv::template process_tile<0, 1, 1, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 3, 0, 0>, + Conv::template process_tile<0, 1, 1, 3, 0, 1>, + Conv::template process_tile<0, 1, 1, 3, 0, 2>, + Conv::template process_tile<0, 1, 1, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 3, 1, 0>, + Conv::template process_tile<0, 1, 1, 3, 1, 1>, + Conv::template process_tile<0, 1, 1, 3, 1, 2>, + Conv::template process_tile<0, 1, 1, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 3, 2, 0>, + Conv::template process_tile<0, 1, 1, 3, 2, 1>, + Conv::template process_tile<0, 1, 1, 3, 2, 2>, + Conv::template process_tile<0, 1, 1, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 1, 3, 3, 0>, + Conv::template process_tile<0, 1, 1, 3, 3, 1>, + Conv::template process_tile<0, 1, 1, 3, 3, 2>, + Conv::template process_tile<0, 1, 1, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 4, 0, 0>, + Conv::template process_tile<0, 1, 1, 4, 0, 1>, + Conv::template process_tile<0, 1, 1, 4, 0, 2>, + Conv::template process_tile<0, 1, 1, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 4, 1, 0>, + Conv::template process_tile<0, 1, 1, 4, 1, 1>, + Conv::template process_tile<0, 1, 1, 4, 1, 2>, + Conv::template process_tile<0, 1, 1, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 4, 2, 0>, + Conv::template process_tile<0, 1, 1, 4, 2, 1>, + Conv::template process_tile<0, 1, 1, 4, 2, 2>, + Conv::template process_tile<0, 1, 1, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 1, 4, 3, 0>, + Conv::template process_tile<0, 1, 1, 4, 3, 1>, + Conv::template process_tile<0, 1, 1, 4, 3, 2>, + Conv::template process_tile<0, 1, 1, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 5, 0, 0>, + Conv::template process_tile<0, 1, 1, 5, 0, 1>, + Conv::template process_tile<0, 1, 1, 5, 0, 2>, + Conv::template process_tile<0, 1, 1, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 5, 1, 0>, + Conv::template process_tile<0, 1, 1, 5, 1, 1>, + Conv::template process_tile<0, 1, 1, 5, 1, 2>, + Conv::template process_tile<0, 1, 1, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 5, 2, 0>, + Conv::template process_tile<0, 1, 1, 5, 2, 1>, + Conv::template process_tile<0, 1, 1, 5, 2, 2>, + Conv::template process_tile<0, 1, 1, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 1, 5, 3, 0>, + Conv::template process_tile<0, 1, 1, 5, 3, 1>, + Conv::template process_tile<0, 1, 1, 5, 3, 2>, + Conv::template process_tile<0, 1, 1, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 1, 6, 0, 0>, + Conv::template process_tile<0, 1, 1, 6, 0, 1>, + Conv::template process_tile<0, 1, 1, 6, 0, 2>, + Conv::template process_tile<0, 1, 1, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 1, 6, 1, 0>, + Conv::template process_tile<0, 1, 1, 6, 1, 1>, + Conv::template process_tile<0, 1, 1, 6, 1, 2>, + Conv::template process_tile<0, 1, 1, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 1, 6, 2, 0>, + Conv::template process_tile<0, 1, 1, 6, 2, 1>, + Conv::template process_tile<0, 1, 1, 6, 2, 2>, + Conv::template process_tile<0, 1, 1, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 1, 6, 3, 0>, + Conv::template process_tile<0, 1, 1, 6, 3, 1>, + Conv::template process_tile<0, 1, 1, 6, 3, 2>, + Conv::template process_tile<0, 1, 1, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 0, 0, 0>, + Conv::template process_tile<0, 1, 2, 0, 0, 1>, + Conv::template process_tile<0, 1, 2, 0, 0, 2>, + Conv::template process_tile<0, 1, 2, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 0, 1, 0>, + Conv::template process_tile<0, 1, 2, 0, 1, 1>, + Conv::template process_tile<0, 1, 2, 0, 1, 2>, + Conv::template process_tile<0, 1, 2, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 0, 2, 0>, + Conv::template process_tile<0, 1, 2, 0, 2, 1>, + Conv::template process_tile<0, 1, 2, 0, 2, 2>, + Conv::template process_tile<0, 1, 2, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 2, 0, 3, 0>, + Conv::template process_tile<0, 1, 2, 0, 3, 1>, + Conv::template process_tile<0, 1, 2, 0, 3, 2>, + Conv::template process_tile<0, 1, 2, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 1, 0, 0>, + Conv::template process_tile<0, 1, 2, 1, 0, 1>, + Conv::template process_tile<0, 1, 2, 1, 0, 2>, + Conv::template process_tile<0, 1, 2, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 1, 1, 0>, + Conv::template process_tile<0, 1, 2, 1, 1, 1>, + Conv::template process_tile<0, 1, 2, 1, 1, 2>, + Conv::template process_tile<0, 1, 2, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 1, 2, 0>, + Conv::template process_tile<0, 1, 2, 1, 2, 1>, + Conv::template process_tile<0, 1, 2, 1, 2, 2>, + Conv::template process_tile<0, 1, 2, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 2, 1, 3, 0>, + Conv::template process_tile<0, 1, 2, 1, 3, 1>, + Conv::template process_tile<0, 1, 2, 1, 3, 2>, + Conv::template process_tile<0, 1, 2, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 2, 0, 0>, + Conv::template process_tile<0, 1, 2, 2, 0, 1>, + Conv::template process_tile<0, 1, 2, 2, 0, 2>, + Conv::template process_tile<0, 1, 2, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 2, 1, 0>, + Conv::template process_tile<0, 1, 2, 2, 1, 1>, + Conv::template process_tile<0, 1, 2, 2, 1, 2>, + Conv::template process_tile<0, 1, 2, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 2, 2, 0>, + Conv::template process_tile<0, 1, 2, 2, 2, 1>, + Conv::template process_tile<0, 1, 2, 2, 2, 2>, + Conv::template process_tile<0, 1, 2, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 2, 2, 3, 0>, + Conv::template process_tile<0, 1, 2, 2, 3, 1>, + Conv::template process_tile<0, 1, 2, 2, 3, 2>, + Conv::template process_tile<0, 1, 2, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 3, 0, 0>, + Conv::template process_tile<0, 1, 2, 3, 0, 1>, + Conv::template process_tile<0, 1, 2, 3, 0, 2>, + Conv::template process_tile<0, 1, 2, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 3, 1, 0>, + Conv::template process_tile<0, 1, 2, 3, 1, 1>, + Conv::template process_tile<0, 1, 2, 3, 1, 2>, + Conv::template process_tile<0, 1, 2, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 3, 2, 0>, + Conv::template process_tile<0, 1, 2, 3, 2, 1>, + Conv::template process_tile<0, 1, 2, 3, 2, 2>, + Conv::template process_tile<0, 1, 2, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 2, 3, 3, 0>, + Conv::template process_tile<0, 1, 2, 3, 3, 1>, + Conv::template process_tile<0, 1, 2, 3, 3, 2>, + Conv::template process_tile<0, 1, 2, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 4, 0, 0>, + Conv::template process_tile<0, 1, 2, 4, 0, 1>, + Conv::template process_tile<0, 1, 2, 4, 0, 2>, + Conv::template process_tile<0, 1, 2, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 4, 1, 0>, + Conv::template process_tile<0, 1, 2, 4, 1, 1>, + Conv::template process_tile<0, 1, 2, 4, 1, 2>, + Conv::template process_tile<0, 1, 2, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 4, 2, 0>, + Conv::template process_tile<0, 1, 2, 4, 2, 1>, + Conv::template process_tile<0, 1, 2, 4, 2, 2>, + Conv::template process_tile<0, 1, 2, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 2, 4, 3, 0>, + Conv::template process_tile<0, 1, 2, 4, 3, 1>, + Conv::template process_tile<0, 1, 2, 4, 3, 2>, + Conv::template process_tile<0, 1, 2, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 5, 0, 0>, + Conv::template process_tile<0, 1, 2, 5, 0, 1>, + Conv::template process_tile<0, 1, 2, 5, 0, 2>, + Conv::template process_tile<0, 1, 2, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 5, 1, 0>, + Conv::template process_tile<0, 1, 2, 5, 1, 1>, + Conv::template process_tile<0, 1, 2, 5, 1, 2>, + Conv::template process_tile<0, 1, 2, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 5, 2, 0>, + Conv::template process_tile<0, 1, 2, 5, 2, 1>, + Conv::template process_tile<0, 1, 2, 5, 2, 2>, + Conv::template process_tile<0, 1, 2, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 2, 5, 3, 0>, + Conv::template process_tile<0, 1, 2, 5, 3, 1>, + Conv::template process_tile<0, 1, 2, 5, 3, 2>, + Conv::template process_tile<0, 1, 2, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 2, 6, 0, 0>, + Conv::template process_tile<0, 1, 2, 6, 0, 1>, + Conv::template process_tile<0, 1, 2, 6, 0, 2>, + Conv::template process_tile<0, 1, 2, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 2, 6, 1, 0>, + Conv::template process_tile<0, 1, 2, 6, 1, 1>, + Conv::template process_tile<0, 1, 2, 6, 1, 2>, + Conv::template process_tile<0, 1, 2, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 2, 6, 2, 0>, + Conv::template process_tile<0, 1, 2, 6, 2, 1>, + Conv::template process_tile<0, 1, 2, 6, 2, 2>, + Conv::template process_tile<0, 1, 2, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 2, 6, 3, 0>, + Conv::template process_tile<0, 1, 2, 6, 3, 1>, + Conv::template process_tile<0, 1, 2, 6, 3, 2>, + Conv::template process_tile<0, 1, 2, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 0, 0, 0>, + Conv::template process_tile<0, 1, 3, 0, 0, 1>, + Conv::template process_tile<0, 1, 3, 0, 0, 2>, + Conv::template process_tile<0, 1, 3, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 0, 1, 0>, + Conv::template process_tile<0, 1, 3, 0, 1, 1>, + Conv::template process_tile<0, 1, 3, 0, 1, 2>, + Conv::template process_tile<0, 1, 3, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 0, 2, 0>, + Conv::template process_tile<0, 1, 3, 0, 2, 1>, + Conv::template process_tile<0, 1, 3, 0, 2, 2>, + Conv::template process_tile<0, 1, 3, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 3, 0, 3, 0>, + Conv::template process_tile<0, 1, 3, 0, 3, 1>, + Conv::template process_tile<0, 1, 3, 0, 3, 2>, + Conv::template process_tile<0, 1, 3, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 1, 0, 0>, + Conv::template process_tile<0, 1, 3, 1, 0, 1>, + Conv::template process_tile<0, 1, 3, 1, 0, 2>, + Conv::template process_tile<0, 1, 3, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 1, 1, 0>, + Conv::template process_tile<0, 1, 3, 1, 1, 1>, + Conv::template process_tile<0, 1, 3, 1, 1, 2>, + Conv::template process_tile<0, 1, 3, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 1, 2, 0>, + Conv::template process_tile<0, 1, 3, 1, 2, 1>, + Conv::template process_tile<0, 1, 3, 1, 2, 2>, + Conv::template process_tile<0, 1, 3, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 3, 1, 3, 0>, + Conv::template process_tile<0, 1, 3, 1, 3, 1>, + Conv::template process_tile<0, 1, 3, 1, 3, 2>, + Conv::template process_tile<0, 1, 3, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 2, 0, 0>, + Conv::template process_tile<0, 1, 3, 2, 0, 1>, + Conv::template process_tile<0, 1, 3, 2, 0, 2>, + Conv::template process_tile<0, 1, 3, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 2, 1, 0>, + Conv::template process_tile<0, 1, 3, 2, 1, 1>, + Conv::template process_tile<0, 1, 3, 2, 1, 2>, + Conv::template process_tile<0, 1, 3, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 2, 2, 0>, + Conv::template process_tile<0, 1, 3, 2, 2, 1>, + Conv::template process_tile<0, 1, 3, 2, 2, 2>, + Conv::template process_tile<0, 1, 3, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 3, 2, 3, 0>, + Conv::template process_tile<0, 1, 3, 2, 3, 1>, + Conv::template process_tile<0, 1, 3, 2, 3, 2>, + Conv::template process_tile<0, 1, 3, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 3, 0, 0>, + Conv::template process_tile<0, 1, 3, 3, 0, 1>, + Conv::template process_tile<0, 1, 3, 3, 0, 2>, + Conv::template process_tile<0, 1, 3, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 3, 1, 0>, + Conv::template process_tile<0, 1, 3, 3, 1, 1>, + Conv::template process_tile<0, 1, 3, 3, 1, 2>, + Conv::template process_tile<0, 1, 3, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 3, 2, 0>, + Conv::template process_tile<0, 1, 3, 3, 2, 1>, + Conv::template process_tile<0, 1, 3, 3, 2, 2>, + Conv::template process_tile<0, 1, 3, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 3, 3, 3, 0>, + Conv::template process_tile<0, 1, 3, 3, 3, 1>, + Conv::template process_tile<0, 1, 3, 3, 3, 2>, + Conv::template process_tile<0, 1, 3, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 4, 0, 0>, + Conv::template process_tile<0, 1, 3, 4, 0, 1>, + Conv::template process_tile<0, 1, 3, 4, 0, 2>, + Conv::template process_tile<0, 1, 3, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 4, 1, 0>, + Conv::template process_tile<0, 1, 3, 4, 1, 1>, + Conv::template process_tile<0, 1, 3, 4, 1, 2>, + Conv::template process_tile<0, 1, 3, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 4, 2, 0>, + Conv::template process_tile<0, 1, 3, 4, 2, 1>, + Conv::template process_tile<0, 1, 3, 4, 2, 2>, + Conv::template process_tile<0, 1, 3, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 3, 4, 3, 0>, + Conv::template process_tile<0, 1, 3, 4, 3, 1>, + Conv::template process_tile<0, 1, 3, 4, 3, 2>, + Conv::template process_tile<0, 1, 3, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 5, 0, 0>, + Conv::template process_tile<0, 1, 3, 5, 0, 1>, + Conv::template process_tile<0, 1, 3, 5, 0, 2>, + Conv::template process_tile<0, 1, 3, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 5, 1, 0>, + Conv::template process_tile<0, 1, 3, 5, 1, 1>, + Conv::template process_tile<0, 1, 3, 5, 1, 2>, + Conv::template process_tile<0, 1, 3, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 5, 2, 0>, + Conv::template process_tile<0, 1, 3, 5, 2, 1>, + Conv::template process_tile<0, 1, 3, 5, 2, 2>, + Conv::template process_tile<0, 1, 3, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 3, 5, 3, 0>, + Conv::template process_tile<0, 1, 3, 5, 3, 1>, + Conv::template process_tile<0, 1, 3, 5, 3, 2>, + Conv::template process_tile<0, 1, 3, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 3, 6, 0, 0>, + Conv::template process_tile<0, 1, 3, 6, 0, 1>, + Conv::template process_tile<0, 1, 3, 6, 0, 2>, + Conv::template process_tile<0, 1, 3, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 3, 6, 1, 0>, + Conv::template process_tile<0, 1, 3, 6, 1, 1>, + Conv::template process_tile<0, 1, 3, 6, 1, 2>, + Conv::template process_tile<0, 1, 3, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 3, 6, 2, 0>, + Conv::template process_tile<0, 1, 3, 6, 2, 1>, + Conv::template process_tile<0, 1, 3, 6, 2, 2>, + Conv::template process_tile<0, 1, 3, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 3, 6, 3, 0>, + Conv::template process_tile<0, 1, 3, 6, 3, 1>, + Conv::template process_tile<0, 1, 3, 6, 3, 2>, + Conv::template process_tile<0, 1, 3, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 0, 0, 0>, + Conv::template process_tile<0, 1, 4, 0, 0, 1>, + Conv::template process_tile<0, 1, 4, 0, 0, 2>, + Conv::template process_tile<0, 1, 4, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 0, 1, 0>, + Conv::template process_tile<0, 1, 4, 0, 1, 1>, + Conv::template process_tile<0, 1, 4, 0, 1, 2>, + Conv::template process_tile<0, 1, 4, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 0, 2, 0>, + Conv::template process_tile<0, 1, 4, 0, 2, 1>, + Conv::template process_tile<0, 1, 4, 0, 2, 2>, + Conv::template process_tile<0, 1, 4, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 4, 0, 3, 0>, + Conv::template process_tile<0, 1, 4, 0, 3, 1>, + Conv::template process_tile<0, 1, 4, 0, 3, 2>, + Conv::template process_tile<0, 1, 4, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 1, 0, 0>, + Conv::template process_tile<0, 1, 4, 1, 0, 1>, + Conv::template process_tile<0, 1, 4, 1, 0, 2>, + Conv::template process_tile<0, 1, 4, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 1, 1, 0>, + Conv::template process_tile<0, 1, 4, 1, 1, 1>, + Conv::template process_tile<0, 1, 4, 1, 1, 2>, + Conv::template process_tile<0, 1, 4, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 1, 2, 0>, + Conv::template process_tile<0, 1, 4, 1, 2, 1>, + Conv::template process_tile<0, 1, 4, 1, 2, 2>, + Conv::template process_tile<0, 1, 4, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 4, 1, 3, 0>, + Conv::template process_tile<0, 1, 4, 1, 3, 1>, + Conv::template process_tile<0, 1, 4, 1, 3, 2>, + Conv::template process_tile<0, 1, 4, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 2, 0, 0>, + Conv::template process_tile<0, 1, 4, 2, 0, 1>, + Conv::template process_tile<0, 1, 4, 2, 0, 2>, + Conv::template process_tile<0, 1, 4, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 2, 1, 0>, + Conv::template process_tile<0, 1, 4, 2, 1, 1>, + Conv::template process_tile<0, 1, 4, 2, 1, 2>, + Conv::template process_tile<0, 1, 4, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 2, 2, 0>, + Conv::template process_tile<0, 1, 4, 2, 2, 1>, + Conv::template process_tile<0, 1, 4, 2, 2, 2>, + Conv::template process_tile<0, 1, 4, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 4, 2, 3, 0>, + Conv::template process_tile<0, 1, 4, 2, 3, 1>, + Conv::template process_tile<0, 1, 4, 2, 3, 2>, + Conv::template process_tile<0, 1, 4, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 3, 0, 0>, + Conv::template process_tile<0, 1, 4, 3, 0, 1>, + Conv::template process_tile<0, 1, 4, 3, 0, 2>, + Conv::template process_tile<0, 1, 4, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 3, 1, 0>, + Conv::template process_tile<0, 1, 4, 3, 1, 1>, + Conv::template process_tile<0, 1, 4, 3, 1, 2>, + Conv::template process_tile<0, 1, 4, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 3, 2, 0>, + Conv::template process_tile<0, 1, 4, 3, 2, 1>, + Conv::template process_tile<0, 1, 4, 3, 2, 2>, + Conv::template process_tile<0, 1, 4, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 4, 3, 3, 0>, + Conv::template process_tile<0, 1, 4, 3, 3, 1>, + Conv::template process_tile<0, 1, 4, 3, 3, 2>, + Conv::template process_tile<0, 1, 4, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 4, 0, 0>, + Conv::template process_tile<0, 1, 4, 4, 0, 1>, + Conv::template process_tile<0, 1, 4, 4, 0, 2>, + Conv::template process_tile<0, 1, 4, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 4, 1, 0>, + Conv::template process_tile<0, 1, 4, 4, 1, 1>, + Conv::template process_tile<0, 1, 4, 4, 1, 2>, + Conv::template process_tile<0, 1, 4, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 4, 2, 0>, + Conv::template process_tile<0, 1, 4, 4, 2, 1>, + Conv::template process_tile<0, 1, 4, 4, 2, 2>, + Conv::template process_tile<0, 1, 4, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 4, 4, 3, 0>, + Conv::template process_tile<0, 1, 4, 4, 3, 1>, + Conv::template process_tile<0, 1, 4, 4, 3, 2>, + Conv::template process_tile<0, 1, 4, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 5, 0, 0>, + Conv::template process_tile<0, 1, 4, 5, 0, 1>, + Conv::template process_tile<0, 1, 4, 5, 0, 2>, + Conv::template process_tile<0, 1, 4, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 5, 1, 0>, + Conv::template process_tile<0, 1, 4, 5, 1, 1>, + Conv::template process_tile<0, 1, 4, 5, 1, 2>, + Conv::template process_tile<0, 1, 4, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 5, 2, 0>, + Conv::template process_tile<0, 1, 4, 5, 2, 1>, + Conv::template process_tile<0, 1, 4, 5, 2, 2>, + Conv::template process_tile<0, 1, 4, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 4, 5, 3, 0>, + Conv::template process_tile<0, 1, 4, 5, 3, 1>, + Conv::template process_tile<0, 1, 4, 5, 3, 2>, + Conv::template process_tile<0, 1, 4, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 4, 6, 0, 0>, + Conv::template process_tile<0, 1, 4, 6, 0, 1>, + Conv::template process_tile<0, 1, 4, 6, 0, 2>, + Conv::template process_tile<0, 1, 4, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 4, 6, 1, 0>, + Conv::template process_tile<0, 1, 4, 6, 1, 1>, + Conv::template process_tile<0, 1, 4, 6, 1, 2>, + Conv::template process_tile<0, 1, 4, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 4, 6, 2, 0>, + Conv::template process_tile<0, 1, 4, 6, 2, 1>, + Conv::template process_tile<0, 1, 4, 6, 2, 2>, + Conv::template process_tile<0, 1, 4, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 4, 6, 3, 0>, + Conv::template process_tile<0, 1, 4, 6, 3, 1>, + Conv::template process_tile<0, 1, 4, 6, 3, 2>, + Conv::template process_tile<0, 1, 4, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 4 + { // Input pad bottom = 5 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 0, 0, 0>, + Conv::template process_tile<0, 1, 5, 0, 0, 1>, + Conv::template process_tile<0, 1, 5, 0, 0, 2>, + Conv::template process_tile<0, 1, 5, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 0, 1, 0>, + Conv::template process_tile<0, 1, 5, 0, 1, 1>, + Conv::template process_tile<0, 1, 5, 0, 1, 2>, + Conv::template process_tile<0, 1, 5, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 0, 2, 0>, + Conv::template process_tile<0, 1, 5, 0, 2, 1>, + Conv::template process_tile<0, 1, 5, 0, 2, 2>, + Conv::template process_tile<0, 1, 5, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 5, 0, 3, 0>, + Conv::template process_tile<0, 1, 5, 0, 3, 1>, + Conv::template process_tile<0, 1, 5, 0, 3, 2>, + Conv::template process_tile<0, 1, 5, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 1, 0, 0>, + Conv::template process_tile<0, 1, 5, 1, 0, 1>, + Conv::template process_tile<0, 1, 5, 1, 0, 2>, + Conv::template process_tile<0, 1, 5, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 1, 1, 0>, + Conv::template process_tile<0, 1, 5, 1, 1, 1>, + Conv::template process_tile<0, 1, 5, 1, 1, 2>, + Conv::template process_tile<0, 1, 5, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 1, 2, 0>, + Conv::template process_tile<0, 1, 5, 1, 2, 1>, + Conv::template process_tile<0, 1, 5, 1, 2, 2>, + Conv::template process_tile<0, 1, 5, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 5, 1, 3, 0>, + Conv::template process_tile<0, 1, 5, 1, 3, 1>, + Conv::template process_tile<0, 1, 5, 1, 3, 2>, + Conv::template process_tile<0, 1, 5, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 2, 0, 0>, + Conv::template process_tile<0, 1, 5, 2, 0, 1>, + Conv::template process_tile<0, 1, 5, 2, 0, 2>, + Conv::template process_tile<0, 1, 5, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 2, 1, 0>, + Conv::template process_tile<0, 1, 5, 2, 1, 1>, + Conv::template process_tile<0, 1, 5, 2, 1, 2>, + Conv::template process_tile<0, 1, 5, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 2, 2, 0>, + Conv::template process_tile<0, 1, 5, 2, 2, 1>, + Conv::template process_tile<0, 1, 5, 2, 2, 2>, + Conv::template process_tile<0, 1, 5, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 5, 2, 3, 0>, + Conv::template process_tile<0, 1, 5, 2, 3, 1>, + Conv::template process_tile<0, 1, 5, 2, 3, 2>, + Conv::template process_tile<0, 1, 5, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 3, 0, 0>, + Conv::template process_tile<0, 1, 5, 3, 0, 1>, + Conv::template process_tile<0, 1, 5, 3, 0, 2>, + Conv::template process_tile<0, 1, 5, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 3, 1, 0>, + Conv::template process_tile<0, 1, 5, 3, 1, 1>, + Conv::template process_tile<0, 1, 5, 3, 1, 2>, + Conv::template process_tile<0, 1, 5, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 3, 2, 0>, + Conv::template process_tile<0, 1, 5, 3, 2, 1>, + Conv::template process_tile<0, 1, 5, 3, 2, 2>, + Conv::template process_tile<0, 1, 5, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 5, 3, 3, 0>, + Conv::template process_tile<0, 1, 5, 3, 3, 1>, + Conv::template process_tile<0, 1, 5, 3, 3, 2>, + Conv::template process_tile<0, 1, 5, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 4, 0, 0>, + Conv::template process_tile<0, 1, 5, 4, 0, 1>, + Conv::template process_tile<0, 1, 5, 4, 0, 2>, + Conv::template process_tile<0, 1, 5, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 4, 1, 0>, + Conv::template process_tile<0, 1, 5, 4, 1, 1>, + Conv::template process_tile<0, 1, 5, 4, 1, 2>, + Conv::template process_tile<0, 1, 5, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 4, 2, 0>, + Conv::template process_tile<0, 1, 5, 4, 2, 1>, + Conv::template process_tile<0, 1, 5, 4, 2, 2>, + Conv::template process_tile<0, 1, 5, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 5, 4, 3, 0>, + Conv::template process_tile<0, 1, 5, 4, 3, 1>, + Conv::template process_tile<0, 1, 5, 4, 3, 2>, + Conv::template process_tile<0, 1, 5, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 5, 0, 0>, + Conv::template process_tile<0, 1, 5, 5, 0, 1>, + Conv::template process_tile<0, 1, 5, 5, 0, 2>, + Conv::template process_tile<0, 1, 5, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 5, 1, 0>, + Conv::template process_tile<0, 1, 5, 5, 1, 1>, + Conv::template process_tile<0, 1, 5, 5, 1, 2>, + Conv::template process_tile<0, 1, 5, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 5, 2, 0>, + Conv::template process_tile<0, 1, 5, 5, 2, 1>, + Conv::template process_tile<0, 1, 5, 5, 2, 2>, + Conv::template process_tile<0, 1, 5, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 5, 5, 3, 0>, + Conv::template process_tile<0, 1, 5, 5, 3, 1>, + Conv::template process_tile<0, 1, 5, 5, 3, 2>, + Conv::template process_tile<0, 1, 5, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 5, 6, 0, 0>, + Conv::template process_tile<0, 1, 5, 6, 0, 1>, + Conv::template process_tile<0, 1, 5, 6, 0, 2>, + Conv::template process_tile<0, 1, 5, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 5, 6, 1, 0>, + Conv::template process_tile<0, 1, 5, 6, 1, 1>, + Conv::template process_tile<0, 1, 5, 6, 1, 2>, + Conv::template process_tile<0, 1, 5, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 5, 6, 2, 0>, + Conv::template process_tile<0, 1, 5, 6, 2, 1>, + Conv::template process_tile<0, 1, 5, 6, 2, 2>, + Conv::template process_tile<0, 1, 5, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 5, 6, 3, 0>, + Conv::template process_tile<0, 1, 5, 6, 3, 1>, + Conv::template process_tile<0, 1, 5, 6, 3, 2>, + Conv::template process_tile<0, 1, 5, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 5 + { // Input pad bottom = 6 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 0, 0, 0>, + Conv::template process_tile<0, 1, 6, 0, 0, 1>, + Conv::template process_tile<0, 1, 6, 0, 0, 2>, + Conv::template process_tile<0, 1, 6, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 0, 1, 0>, + Conv::template process_tile<0, 1, 6, 0, 1, 1>, + Conv::template process_tile<0, 1, 6, 0, 1, 2>, + Conv::template process_tile<0, 1, 6, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 0, 2, 0>, + Conv::template process_tile<0, 1, 6, 0, 2, 1>, + Conv::template process_tile<0, 1, 6, 0, 2, 2>, + Conv::template process_tile<0, 1, 6, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 6, 0, 3, 0>, + Conv::template process_tile<0, 1, 6, 0, 3, 1>, + Conv::template process_tile<0, 1, 6, 0, 3, 2>, + Conv::template process_tile<0, 1, 6, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 1, 0, 0>, + Conv::template process_tile<0, 1, 6, 1, 0, 1>, + Conv::template process_tile<0, 1, 6, 1, 0, 2>, + Conv::template process_tile<0, 1, 6, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 1, 1, 0>, + Conv::template process_tile<0, 1, 6, 1, 1, 1>, + Conv::template process_tile<0, 1, 6, 1, 1, 2>, + Conv::template process_tile<0, 1, 6, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 1, 2, 0>, + Conv::template process_tile<0, 1, 6, 1, 2, 1>, + Conv::template process_tile<0, 1, 6, 1, 2, 2>, + Conv::template process_tile<0, 1, 6, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 6, 1, 3, 0>, + Conv::template process_tile<0, 1, 6, 1, 3, 1>, + Conv::template process_tile<0, 1, 6, 1, 3, 2>, + Conv::template process_tile<0, 1, 6, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 2, 0, 0>, + Conv::template process_tile<0, 1, 6, 2, 0, 1>, + Conv::template process_tile<0, 1, 6, 2, 0, 2>, + Conv::template process_tile<0, 1, 6, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 2, 1, 0>, + Conv::template process_tile<0, 1, 6, 2, 1, 1>, + Conv::template process_tile<0, 1, 6, 2, 1, 2>, + Conv::template process_tile<0, 1, 6, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 2, 2, 0>, + Conv::template process_tile<0, 1, 6, 2, 2, 1>, + Conv::template process_tile<0, 1, 6, 2, 2, 2>, + Conv::template process_tile<0, 1, 6, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 6, 2, 3, 0>, + Conv::template process_tile<0, 1, 6, 2, 3, 1>, + Conv::template process_tile<0, 1, 6, 2, 3, 2>, + Conv::template process_tile<0, 1, 6, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 3, 0, 0>, + Conv::template process_tile<0, 1, 6, 3, 0, 1>, + Conv::template process_tile<0, 1, 6, 3, 0, 2>, + Conv::template process_tile<0, 1, 6, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 3, 1, 0>, + Conv::template process_tile<0, 1, 6, 3, 1, 1>, + Conv::template process_tile<0, 1, 6, 3, 1, 2>, + Conv::template process_tile<0, 1, 6, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 3, 2, 0>, + Conv::template process_tile<0, 1, 6, 3, 2, 1>, + Conv::template process_tile<0, 1, 6, 3, 2, 2>, + Conv::template process_tile<0, 1, 6, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 6, 3, 3, 0>, + Conv::template process_tile<0, 1, 6, 3, 3, 1>, + Conv::template process_tile<0, 1, 6, 3, 3, 2>, + Conv::template process_tile<0, 1, 6, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 4, 0, 0>, + Conv::template process_tile<0, 1, 6, 4, 0, 1>, + Conv::template process_tile<0, 1, 6, 4, 0, 2>, + Conv::template process_tile<0, 1, 6, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 4, 1, 0>, + Conv::template process_tile<0, 1, 6, 4, 1, 1>, + Conv::template process_tile<0, 1, 6, 4, 1, 2>, + Conv::template process_tile<0, 1, 6, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 4, 2, 0>, + Conv::template process_tile<0, 1, 6, 4, 2, 1>, + Conv::template process_tile<0, 1, 6, 4, 2, 2>, + Conv::template process_tile<0, 1, 6, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 6, 4, 3, 0>, + Conv::template process_tile<0, 1, 6, 4, 3, 1>, + Conv::template process_tile<0, 1, 6, 4, 3, 2>, + Conv::template process_tile<0, 1, 6, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 5, 0, 0>, + Conv::template process_tile<0, 1, 6, 5, 0, 1>, + Conv::template process_tile<0, 1, 6, 5, 0, 2>, + Conv::template process_tile<0, 1, 6, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 5, 1, 0>, + Conv::template process_tile<0, 1, 6, 5, 1, 1>, + Conv::template process_tile<0, 1, 6, 5, 1, 2>, + Conv::template process_tile<0, 1, 6, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 5, 2, 0>, + Conv::template process_tile<0, 1, 6, 5, 2, 1>, + Conv::template process_tile<0, 1, 6, 5, 2, 2>, + Conv::template process_tile<0, 1, 6, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 6, 5, 3, 0>, + Conv::template process_tile<0, 1, 6, 5, 3, 1>, + Conv::template process_tile<0, 1, 6, 5, 3, 2>, + Conv::template process_tile<0, 1, 6, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<0, 1, 6, 6, 0, 0>, + Conv::template process_tile<0, 1, 6, 6, 0, 1>, + Conv::template process_tile<0, 1, 6, 6, 0, 2>, + Conv::template process_tile<0, 1, 6, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<0, 1, 6, 6, 1, 0>, + Conv::template process_tile<0, 1, 6, 6, 1, 1>, + Conv::template process_tile<0, 1, 6, 6, 1, 2>, + Conv::template process_tile<0, 1, 6, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<0, 1, 6, 6, 2, 0>, + Conv::template process_tile<0, 1, 6, 6, 2, 1>, + Conv::template process_tile<0, 1, 6, 6, 2, 2>, + Conv::template process_tile<0, 1, 6, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<0, 1, 6, 6, 3, 0>, + Conv::template process_tile<0, 1, 6, 6, 3, 1>, + Conv::template process_tile<0, 1, 6, 6, 3, 2>, + Conv::template process_tile<0, 1, 6, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 6 + }, // Input pad left = 1 + }, // Input pad top = 0 + { // Input pad top = 1 + { // Input pad left = 0 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 0, 0, 0>, + Conv::template process_tile<1, 0, 0, 0, 0, 1>, + Conv::template process_tile<1, 0, 0, 0, 0, 2>, + Conv::template process_tile<1, 0, 0, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 0, 1, 0>, + Conv::template process_tile<1, 0, 0, 0, 1, 1>, + Conv::template process_tile<1, 0, 0, 0, 1, 2>, + Conv::template process_tile<1, 0, 0, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 0, 2, 0>, + Conv::template process_tile<1, 0, 0, 0, 2, 1>, + Conv::template process_tile<1, 0, 0, 0, 2, 2>, + Conv::template process_tile<1, 0, 0, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 0, 0, 3, 0>, + Conv::template process_tile<1, 0, 0, 0, 3, 1>, + Conv::template process_tile<1, 0, 0, 0, 3, 2>, + Conv::template process_tile<1, 0, 0, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 1, 0, 0>, + Conv::template process_tile<1, 0, 0, 1, 0, 1>, + Conv::template process_tile<1, 0, 0, 1, 0, 2>, + Conv::template process_tile<1, 0, 0, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 1, 1, 0>, + Conv::template process_tile<1, 0, 0, 1, 1, 1>, + Conv::template process_tile<1, 0, 0, 1, 1, 2>, + Conv::template process_tile<1, 0, 0, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 1, 2, 0>, + Conv::template process_tile<1, 0, 0, 1, 2, 1>, + Conv::template process_tile<1, 0, 0, 1, 2, 2>, + Conv::template process_tile<1, 0, 0, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 0, 1, 3, 0>, + Conv::template process_tile<1, 0, 0, 1, 3, 1>, + Conv::template process_tile<1, 0, 0, 1, 3, 2>, + Conv::template process_tile<1, 0, 0, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 2, 0, 0>, + Conv::template process_tile<1, 0, 0, 2, 0, 1>, + Conv::template process_tile<1, 0, 0, 2, 0, 2>, + Conv::template process_tile<1, 0, 0, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 2, 1, 0>, + Conv::template process_tile<1, 0, 0, 2, 1, 1>, + Conv::template process_tile<1, 0, 0, 2, 1, 2>, + Conv::template process_tile<1, 0, 0, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 2, 2, 0>, + Conv::template process_tile<1, 0, 0, 2, 2, 1>, + Conv::template process_tile<1, 0, 0, 2, 2, 2>, + Conv::template process_tile<1, 0, 0, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 0, 2, 3, 0>, + Conv::template process_tile<1, 0, 0, 2, 3, 1>, + Conv::template process_tile<1, 0, 0, 2, 3, 2>, + Conv::template process_tile<1, 0, 0, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 3, 0, 0>, + Conv::template process_tile<1, 0, 0, 3, 0, 1>, + Conv::template process_tile<1, 0, 0, 3, 0, 2>, + Conv::template process_tile<1, 0, 0, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 3, 1, 0>, + Conv::template process_tile<1, 0, 0, 3, 1, 1>, + Conv::template process_tile<1, 0, 0, 3, 1, 2>, + Conv::template process_tile<1, 0, 0, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 3, 2, 0>, + Conv::template process_tile<1, 0, 0, 3, 2, 1>, + Conv::template process_tile<1, 0, 0, 3, 2, 2>, + Conv::template process_tile<1, 0, 0, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 0, 3, 3, 0>, + Conv::template process_tile<1, 0, 0, 3, 3, 1>, + Conv::template process_tile<1, 0, 0, 3, 3, 2>, + Conv::template process_tile<1, 0, 0, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 4, 0, 0>, + Conv::template process_tile<1, 0, 0, 4, 0, 1>, + Conv::template process_tile<1, 0, 0, 4, 0, 2>, + Conv::template process_tile<1, 0, 0, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 4, 1, 0>, + Conv::template process_tile<1, 0, 0, 4, 1, 1>, + Conv::template process_tile<1, 0, 0, 4, 1, 2>, + Conv::template process_tile<1, 0, 0, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 4, 2, 0>, + Conv::template process_tile<1, 0, 0, 4, 2, 1>, + Conv::template process_tile<1, 0, 0, 4, 2, 2>, + Conv::template process_tile<1, 0, 0, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 0, 4, 3, 0>, + Conv::template process_tile<1, 0, 0, 4, 3, 1>, + Conv::template process_tile<1, 0, 0, 4, 3, 2>, + Conv::template process_tile<1, 0, 0, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 5, 0, 0>, + Conv::template process_tile<1, 0, 0, 5, 0, 1>, + Conv::template process_tile<1, 0, 0, 5, 0, 2>, + Conv::template process_tile<1, 0, 0, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 5, 1, 0>, + Conv::template process_tile<1, 0, 0, 5, 1, 1>, + Conv::template process_tile<1, 0, 0, 5, 1, 2>, + Conv::template process_tile<1, 0, 0, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 5, 2, 0>, + Conv::template process_tile<1, 0, 0, 5, 2, 1>, + Conv::template process_tile<1, 0, 0, 5, 2, 2>, + Conv::template process_tile<1, 0, 0, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 0, 5, 3, 0>, + Conv::template process_tile<1, 0, 0, 5, 3, 1>, + Conv::template process_tile<1, 0, 0, 5, 3, 2>, + Conv::template process_tile<1, 0, 0, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 0, 6, 0, 0>, + Conv::template process_tile<1, 0, 0, 6, 0, 1>, + Conv::template process_tile<1, 0, 0, 6, 0, 2>, + Conv::template process_tile<1, 0, 0, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 0, 6, 1, 0>, + Conv::template process_tile<1, 0, 0, 6, 1, 1>, + Conv::template process_tile<1, 0, 0, 6, 1, 2>, + Conv::template process_tile<1, 0, 0, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 0, 6, 2, 0>, + Conv::template process_tile<1, 0, 0, 6, 2, 1>, + Conv::template process_tile<1, 0, 0, 6, 2, 2>, + Conv::template process_tile<1, 0, 0, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 0, 6, 3, 0>, + Conv::template process_tile<1, 0, 0, 6, 3, 1>, + Conv::template process_tile<1, 0, 0, 6, 3, 2>, + Conv::template process_tile<1, 0, 0, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 0, 0, 0>, + Conv::template process_tile<1, 0, 1, 0, 0, 1>, + Conv::template process_tile<1, 0, 1, 0, 0, 2>, + Conv::template process_tile<1, 0, 1, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 0, 1, 0>, + Conv::template process_tile<1, 0, 1, 0, 1, 1>, + Conv::template process_tile<1, 0, 1, 0, 1, 2>, + Conv::template process_tile<1, 0, 1, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 0, 2, 0>, + Conv::template process_tile<1, 0, 1, 0, 2, 1>, + Conv::template process_tile<1, 0, 1, 0, 2, 2>, + Conv::template process_tile<1, 0, 1, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 1, 0, 3, 0>, + Conv::template process_tile<1, 0, 1, 0, 3, 1>, + Conv::template process_tile<1, 0, 1, 0, 3, 2>, + Conv::template process_tile<1, 0, 1, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 1, 0, 0>, + Conv::template process_tile<1, 0, 1, 1, 0, 1>, + Conv::template process_tile<1, 0, 1, 1, 0, 2>, + Conv::template process_tile<1, 0, 1, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 1, 1, 0>, + Conv::template process_tile<1, 0, 1, 1, 1, 1>, + Conv::template process_tile<1, 0, 1, 1, 1, 2>, + Conv::template process_tile<1, 0, 1, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 1, 2, 0>, + Conv::template process_tile<1, 0, 1, 1, 2, 1>, + Conv::template process_tile<1, 0, 1, 1, 2, 2>, + Conv::template process_tile<1, 0, 1, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 1, 1, 3, 0>, + Conv::template process_tile<1, 0, 1, 1, 3, 1>, + Conv::template process_tile<1, 0, 1, 1, 3, 2>, + Conv::template process_tile<1, 0, 1, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 2, 0, 0>, + Conv::template process_tile<1, 0, 1, 2, 0, 1>, + Conv::template process_tile<1, 0, 1, 2, 0, 2>, + Conv::template process_tile<1, 0, 1, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 2, 1, 0>, + Conv::template process_tile<1, 0, 1, 2, 1, 1>, + Conv::template process_tile<1, 0, 1, 2, 1, 2>, + Conv::template process_tile<1, 0, 1, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 2, 2, 0>, + Conv::template process_tile<1, 0, 1, 2, 2, 1>, + Conv::template process_tile<1, 0, 1, 2, 2, 2>, + Conv::template process_tile<1, 0, 1, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 1, 2, 3, 0>, + Conv::template process_tile<1, 0, 1, 2, 3, 1>, + Conv::template process_tile<1, 0, 1, 2, 3, 2>, + Conv::template process_tile<1, 0, 1, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 3, 0, 0>, + Conv::template process_tile<1, 0, 1, 3, 0, 1>, + Conv::template process_tile<1, 0, 1, 3, 0, 2>, + Conv::template process_tile<1, 0, 1, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 3, 1, 0>, + Conv::template process_tile<1, 0, 1, 3, 1, 1>, + Conv::template process_tile<1, 0, 1, 3, 1, 2>, + Conv::template process_tile<1, 0, 1, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 3, 2, 0>, + Conv::template process_tile<1, 0, 1, 3, 2, 1>, + Conv::template process_tile<1, 0, 1, 3, 2, 2>, + Conv::template process_tile<1, 0, 1, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 1, 3, 3, 0>, + Conv::template process_tile<1, 0, 1, 3, 3, 1>, + Conv::template process_tile<1, 0, 1, 3, 3, 2>, + Conv::template process_tile<1, 0, 1, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 4, 0, 0>, + Conv::template process_tile<1, 0, 1, 4, 0, 1>, + Conv::template process_tile<1, 0, 1, 4, 0, 2>, + Conv::template process_tile<1, 0, 1, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 4, 1, 0>, + Conv::template process_tile<1, 0, 1, 4, 1, 1>, + Conv::template process_tile<1, 0, 1, 4, 1, 2>, + Conv::template process_tile<1, 0, 1, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 4, 2, 0>, + Conv::template process_tile<1, 0, 1, 4, 2, 1>, + Conv::template process_tile<1, 0, 1, 4, 2, 2>, + Conv::template process_tile<1, 0, 1, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 1, 4, 3, 0>, + Conv::template process_tile<1, 0, 1, 4, 3, 1>, + Conv::template process_tile<1, 0, 1, 4, 3, 2>, + Conv::template process_tile<1, 0, 1, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 5, 0, 0>, + Conv::template process_tile<1, 0, 1, 5, 0, 1>, + Conv::template process_tile<1, 0, 1, 5, 0, 2>, + Conv::template process_tile<1, 0, 1, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 5, 1, 0>, + Conv::template process_tile<1, 0, 1, 5, 1, 1>, + Conv::template process_tile<1, 0, 1, 5, 1, 2>, + Conv::template process_tile<1, 0, 1, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 5, 2, 0>, + Conv::template process_tile<1, 0, 1, 5, 2, 1>, + Conv::template process_tile<1, 0, 1, 5, 2, 2>, + Conv::template process_tile<1, 0, 1, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 1, 5, 3, 0>, + Conv::template process_tile<1, 0, 1, 5, 3, 1>, + Conv::template process_tile<1, 0, 1, 5, 3, 2>, + Conv::template process_tile<1, 0, 1, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 1, 6, 0, 0>, + Conv::template process_tile<1, 0, 1, 6, 0, 1>, + Conv::template process_tile<1, 0, 1, 6, 0, 2>, + Conv::template process_tile<1, 0, 1, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 1, 6, 1, 0>, + Conv::template process_tile<1, 0, 1, 6, 1, 1>, + Conv::template process_tile<1, 0, 1, 6, 1, 2>, + Conv::template process_tile<1, 0, 1, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 1, 6, 2, 0>, + Conv::template process_tile<1, 0, 1, 6, 2, 1>, + Conv::template process_tile<1, 0, 1, 6, 2, 2>, + Conv::template process_tile<1, 0, 1, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 1, 6, 3, 0>, + Conv::template process_tile<1, 0, 1, 6, 3, 1>, + Conv::template process_tile<1, 0, 1, 6, 3, 2>, + Conv::template process_tile<1, 0, 1, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 0, 0, 0>, + Conv::template process_tile<1, 0, 2, 0, 0, 1>, + Conv::template process_tile<1, 0, 2, 0, 0, 2>, + Conv::template process_tile<1, 0, 2, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 0, 1, 0>, + Conv::template process_tile<1, 0, 2, 0, 1, 1>, + Conv::template process_tile<1, 0, 2, 0, 1, 2>, + Conv::template process_tile<1, 0, 2, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 0, 2, 0>, + Conv::template process_tile<1, 0, 2, 0, 2, 1>, + Conv::template process_tile<1, 0, 2, 0, 2, 2>, + Conv::template process_tile<1, 0, 2, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 2, 0, 3, 0>, + Conv::template process_tile<1, 0, 2, 0, 3, 1>, + Conv::template process_tile<1, 0, 2, 0, 3, 2>, + Conv::template process_tile<1, 0, 2, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 1, 0, 0>, + Conv::template process_tile<1, 0, 2, 1, 0, 1>, + Conv::template process_tile<1, 0, 2, 1, 0, 2>, + Conv::template process_tile<1, 0, 2, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 1, 1, 0>, + Conv::template process_tile<1, 0, 2, 1, 1, 1>, + Conv::template process_tile<1, 0, 2, 1, 1, 2>, + Conv::template process_tile<1, 0, 2, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 1, 2, 0>, + Conv::template process_tile<1, 0, 2, 1, 2, 1>, + Conv::template process_tile<1, 0, 2, 1, 2, 2>, + Conv::template process_tile<1, 0, 2, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 2, 1, 3, 0>, + Conv::template process_tile<1, 0, 2, 1, 3, 1>, + Conv::template process_tile<1, 0, 2, 1, 3, 2>, + Conv::template process_tile<1, 0, 2, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 2, 0, 0>, + Conv::template process_tile<1, 0, 2, 2, 0, 1>, + Conv::template process_tile<1, 0, 2, 2, 0, 2>, + Conv::template process_tile<1, 0, 2, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 2, 1, 0>, + Conv::template process_tile<1, 0, 2, 2, 1, 1>, + Conv::template process_tile<1, 0, 2, 2, 1, 2>, + Conv::template process_tile<1, 0, 2, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 2, 2, 0>, + Conv::template process_tile<1, 0, 2, 2, 2, 1>, + Conv::template process_tile<1, 0, 2, 2, 2, 2>, + Conv::template process_tile<1, 0, 2, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 2, 2, 3, 0>, + Conv::template process_tile<1, 0, 2, 2, 3, 1>, + Conv::template process_tile<1, 0, 2, 2, 3, 2>, + Conv::template process_tile<1, 0, 2, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 3, 0, 0>, + Conv::template process_tile<1, 0, 2, 3, 0, 1>, + Conv::template process_tile<1, 0, 2, 3, 0, 2>, + Conv::template process_tile<1, 0, 2, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 3, 1, 0>, + Conv::template process_tile<1, 0, 2, 3, 1, 1>, + Conv::template process_tile<1, 0, 2, 3, 1, 2>, + Conv::template process_tile<1, 0, 2, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 3, 2, 0>, + Conv::template process_tile<1, 0, 2, 3, 2, 1>, + Conv::template process_tile<1, 0, 2, 3, 2, 2>, + Conv::template process_tile<1, 0, 2, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 2, 3, 3, 0>, + Conv::template process_tile<1, 0, 2, 3, 3, 1>, + Conv::template process_tile<1, 0, 2, 3, 3, 2>, + Conv::template process_tile<1, 0, 2, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 4, 0, 0>, + Conv::template process_tile<1, 0, 2, 4, 0, 1>, + Conv::template process_tile<1, 0, 2, 4, 0, 2>, + Conv::template process_tile<1, 0, 2, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 4, 1, 0>, + Conv::template process_tile<1, 0, 2, 4, 1, 1>, + Conv::template process_tile<1, 0, 2, 4, 1, 2>, + Conv::template process_tile<1, 0, 2, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 4, 2, 0>, + Conv::template process_tile<1, 0, 2, 4, 2, 1>, + Conv::template process_tile<1, 0, 2, 4, 2, 2>, + Conv::template process_tile<1, 0, 2, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 2, 4, 3, 0>, + Conv::template process_tile<1, 0, 2, 4, 3, 1>, + Conv::template process_tile<1, 0, 2, 4, 3, 2>, + Conv::template process_tile<1, 0, 2, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 5, 0, 0>, + Conv::template process_tile<1, 0, 2, 5, 0, 1>, + Conv::template process_tile<1, 0, 2, 5, 0, 2>, + Conv::template process_tile<1, 0, 2, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 5, 1, 0>, + Conv::template process_tile<1, 0, 2, 5, 1, 1>, + Conv::template process_tile<1, 0, 2, 5, 1, 2>, + Conv::template process_tile<1, 0, 2, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 5, 2, 0>, + Conv::template process_tile<1, 0, 2, 5, 2, 1>, + Conv::template process_tile<1, 0, 2, 5, 2, 2>, + Conv::template process_tile<1, 0, 2, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 2, 5, 3, 0>, + Conv::template process_tile<1, 0, 2, 5, 3, 1>, + Conv::template process_tile<1, 0, 2, 5, 3, 2>, + Conv::template process_tile<1, 0, 2, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 2, 6, 0, 0>, + Conv::template process_tile<1, 0, 2, 6, 0, 1>, + Conv::template process_tile<1, 0, 2, 6, 0, 2>, + Conv::template process_tile<1, 0, 2, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 2, 6, 1, 0>, + Conv::template process_tile<1, 0, 2, 6, 1, 1>, + Conv::template process_tile<1, 0, 2, 6, 1, 2>, + Conv::template process_tile<1, 0, 2, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 2, 6, 2, 0>, + Conv::template process_tile<1, 0, 2, 6, 2, 1>, + Conv::template process_tile<1, 0, 2, 6, 2, 2>, + Conv::template process_tile<1, 0, 2, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 2, 6, 3, 0>, + Conv::template process_tile<1, 0, 2, 6, 3, 1>, + Conv::template process_tile<1, 0, 2, 6, 3, 2>, + Conv::template process_tile<1, 0, 2, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 0, 0, 0>, + Conv::template process_tile<1, 0, 3, 0, 0, 1>, + Conv::template process_tile<1, 0, 3, 0, 0, 2>, + Conv::template process_tile<1, 0, 3, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 0, 1, 0>, + Conv::template process_tile<1, 0, 3, 0, 1, 1>, + Conv::template process_tile<1, 0, 3, 0, 1, 2>, + Conv::template process_tile<1, 0, 3, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 0, 2, 0>, + Conv::template process_tile<1, 0, 3, 0, 2, 1>, + Conv::template process_tile<1, 0, 3, 0, 2, 2>, + Conv::template process_tile<1, 0, 3, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 3, 0, 3, 0>, + Conv::template process_tile<1, 0, 3, 0, 3, 1>, + Conv::template process_tile<1, 0, 3, 0, 3, 2>, + Conv::template process_tile<1, 0, 3, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 1, 0, 0>, + Conv::template process_tile<1, 0, 3, 1, 0, 1>, + Conv::template process_tile<1, 0, 3, 1, 0, 2>, + Conv::template process_tile<1, 0, 3, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 1, 1, 0>, + Conv::template process_tile<1, 0, 3, 1, 1, 1>, + Conv::template process_tile<1, 0, 3, 1, 1, 2>, + Conv::template process_tile<1, 0, 3, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 1, 2, 0>, + Conv::template process_tile<1, 0, 3, 1, 2, 1>, + Conv::template process_tile<1, 0, 3, 1, 2, 2>, + Conv::template process_tile<1, 0, 3, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 3, 1, 3, 0>, + Conv::template process_tile<1, 0, 3, 1, 3, 1>, + Conv::template process_tile<1, 0, 3, 1, 3, 2>, + Conv::template process_tile<1, 0, 3, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 2, 0, 0>, + Conv::template process_tile<1, 0, 3, 2, 0, 1>, + Conv::template process_tile<1, 0, 3, 2, 0, 2>, + Conv::template process_tile<1, 0, 3, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 2, 1, 0>, + Conv::template process_tile<1, 0, 3, 2, 1, 1>, + Conv::template process_tile<1, 0, 3, 2, 1, 2>, + Conv::template process_tile<1, 0, 3, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 2, 2, 0>, + Conv::template process_tile<1, 0, 3, 2, 2, 1>, + Conv::template process_tile<1, 0, 3, 2, 2, 2>, + Conv::template process_tile<1, 0, 3, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 3, 2, 3, 0>, + Conv::template process_tile<1, 0, 3, 2, 3, 1>, + Conv::template process_tile<1, 0, 3, 2, 3, 2>, + Conv::template process_tile<1, 0, 3, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 3, 0, 0>, + Conv::template process_tile<1, 0, 3, 3, 0, 1>, + Conv::template process_tile<1, 0, 3, 3, 0, 2>, + Conv::template process_tile<1, 0, 3, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 3, 1, 0>, + Conv::template process_tile<1, 0, 3, 3, 1, 1>, + Conv::template process_tile<1, 0, 3, 3, 1, 2>, + Conv::template process_tile<1, 0, 3, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 3, 2, 0>, + Conv::template process_tile<1, 0, 3, 3, 2, 1>, + Conv::template process_tile<1, 0, 3, 3, 2, 2>, + Conv::template process_tile<1, 0, 3, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 3, 3, 3, 0>, + Conv::template process_tile<1, 0, 3, 3, 3, 1>, + Conv::template process_tile<1, 0, 3, 3, 3, 2>, + Conv::template process_tile<1, 0, 3, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 4, 0, 0>, + Conv::template process_tile<1, 0, 3, 4, 0, 1>, + Conv::template process_tile<1, 0, 3, 4, 0, 2>, + Conv::template process_tile<1, 0, 3, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 4, 1, 0>, + Conv::template process_tile<1, 0, 3, 4, 1, 1>, + Conv::template process_tile<1, 0, 3, 4, 1, 2>, + Conv::template process_tile<1, 0, 3, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 4, 2, 0>, + Conv::template process_tile<1, 0, 3, 4, 2, 1>, + Conv::template process_tile<1, 0, 3, 4, 2, 2>, + Conv::template process_tile<1, 0, 3, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 3, 4, 3, 0>, + Conv::template process_tile<1, 0, 3, 4, 3, 1>, + Conv::template process_tile<1, 0, 3, 4, 3, 2>, + Conv::template process_tile<1, 0, 3, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 5, 0, 0>, + Conv::template process_tile<1, 0, 3, 5, 0, 1>, + Conv::template process_tile<1, 0, 3, 5, 0, 2>, + Conv::template process_tile<1, 0, 3, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 5, 1, 0>, + Conv::template process_tile<1, 0, 3, 5, 1, 1>, + Conv::template process_tile<1, 0, 3, 5, 1, 2>, + Conv::template process_tile<1, 0, 3, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 5, 2, 0>, + Conv::template process_tile<1, 0, 3, 5, 2, 1>, + Conv::template process_tile<1, 0, 3, 5, 2, 2>, + Conv::template process_tile<1, 0, 3, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 3, 5, 3, 0>, + Conv::template process_tile<1, 0, 3, 5, 3, 1>, + Conv::template process_tile<1, 0, 3, 5, 3, 2>, + Conv::template process_tile<1, 0, 3, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 3, 6, 0, 0>, + Conv::template process_tile<1, 0, 3, 6, 0, 1>, + Conv::template process_tile<1, 0, 3, 6, 0, 2>, + Conv::template process_tile<1, 0, 3, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 3, 6, 1, 0>, + Conv::template process_tile<1, 0, 3, 6, 1, 1>, + Conv::template process_tile<1, 0, 3, 6, 1, 2>, + Conv::template process_tile<1, 0, 3, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 3, 6, 2, 0>, + Conv::template process_tile<1, 0, 3, 6, 2, 1>, + Conv::template process_tile<1, 0, 3, 6, 2, 2>, + Conv::template process_tile<1, 0, 3, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 3, 6, 3, 0>, + Conv::template process_tile<1, 0, 3, 6, 3, 1>, + Conv::template process_tile<1, 0, 3, 6, 3, 2>, + Conv::template process_tile<1, 0, 3, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 0, 0, 0>, + Conv::template process_tile<1, 0, 4, 0, 0, 1>, + Conv::template process_tile<1, 0, 4, 0, 0, 2>, + Conv::template process_tile<1, 0, 4, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 0, 1, 0>, + Conv::template process_tile<1, 0, 4, 0, 1, 1>, + Conv::template process_tile<1, 0, 4, 0, 1, 2>, + Conv::template process_tile<1, 0, 4, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 0, 2, 0>, + Conv::template process_tile<1, 0, 4, 0, 2, 1>, + Conv::template process_tile<1, 0, 4, 0, 2, 2>, + Conv::template process_tile<1, 0, 4, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 4, 0, 3, 0>, + Conv::template process_tile<1, 0, 4, 0, 3, 1>, + Conv::template process_tile<1, 0, 4, 0, 3, 2>, + Conv::template process_tile<1, 0, 4, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 1, 0, 0>, + Conv::template process_tile<1, 0, 4, 1, 0, 1>, + Conv::template process_tile<1, 0, 4, 1, 0, 2>, + Conv::template process_tile<1, 0, 4, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 1, 1, 0>, + Conv::template process_tile<1, 0, 4, 1, 1, 1>, + Conv::template process_tile<1, 0, 4, 1, 1, 2>, + Conv::template process_tile<1, 0, 4, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 1, 2, 0>, + Conv::template process_tile<1, 0, 4, 1, 2, 1>, + Conv::template process_tile<1, 0, 4, 1, 2, 2>, + Conv::template process_tile<1, 0, 4, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 4, 1, 3, 0>, + Conv::template process_tile<1, 0, 4, 1, 3, 1>, + Conv::template process_tile<1, 0, 4, 1, 3, 2>, + Conv::template process_tile<1, 0, 4, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 2, 0, 0>, + Conv::template process_tile<1, 0, 4, 2, 0, 1>, + Conv::template process_tile<1, 0, 4, 2, 0, 2>, + Conv::template process_tile<1, 0, 4, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 2, 1, 0>, + Conv::template process_tile<1, 0, 4, 2, 1, 1>, + Conv::template process_tile<1, 0, 4, 2, 1, 2>, + Conv::template process_tile<1, 0, 4, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 2, 2, 0>, + Conv::template process_tile<1, 0, 4, 2, 2, 1>, + Conv::template process_tile<1, 0, 4, 2, 2, 2>, + Conv::template process_tile<1, 0, 4, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 4, 2, 3, 0>, + Conv::template process_tile<1, 0, 4, 2, 3, 1>, + Conv::template process_tile<1, 0, 4, 2, 3, 2>, + Conv::template process_tile<1, 0, 4, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 3, 0, 0>, + Conv::template process_tile<1, 0, 4, 3, 0, 1>, + Conv::template process_tile<1, 0, 4, 3, 0, 2>, + Conv::template process_tile<1, 0, 4, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 3, 1, 0>, + Conv::template process_tile<1, 0, 4, 3, 1, 1>, + Conv::template process_tile<1, 0, 4, 3, 1, 2>, + Conv::template process_tile<1, 0, 4, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 3, 2, 0>, + Conv::template process_tile<1, 0, 4, 3, 2, 1>, + Conv::template process_tile<1, 0, 4, 3, 2, 2>, + Conv::template process_tile<1, 0, 4, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 4, 3, 3, 0>, + Conv::template process_tile<1, 0, 4, 3, 3, 1>, + Conv::template process_tile<1, 0, 4, 3, 3, 2>, + Conv::template process_tile<1, 0, 4, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 4, 0, 0>, + Conv::template process_tile<1, 0, 4, 4, 0, 1>, + Conv::template process_tile<1, 0, 4, 4, 0, 2>, + Conv::template process_tile<1, 0, 4, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 4, 1, 0>, + Conv::template process_tile<1, 0, 4, 4, 1, 1>, + Conv::template process_tile<1, 0, 4, 4, 1, 2>, + Conv::template process_tile<1, 0, 4, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 4, 2, 0>, + Conv::template process_tile<1, 0, 4, 4, 2, 1>, + Conv::template process_tile<1, 0, 4, 4, 2, 2>, + Conv::template process_tile<1, 0, 4, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 4, 4, 3, 0>, + Conv::template process_tile<1, 0, 4, 4, 3, 1>, + Conv::template process_tile<1, 0, 4, 4, 3, 2>, + Conv::template process_tile<1, 0, 4, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 5, 0, 0>, + Conv::template process_tile<1, 0, 4, 5, 0, 1>, + Conv::template process_tile<1, 0, 4, 5, 0, 2>, + Conv::template process_tile<1, 0, 4, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 5, 1, 0>, + Conv::template process_tile<1, 0, 4, 5, 1, 1>, + Conv::template process_tile<1, 0, 4, 5, 1, 2>, + Conv::template process_tile<1, 0, 4, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 5, 2, 0>, + Conv::template process_tile<1, 0, 4, 5, 2, 1>, + Conv::template process_tile<1, 0, 4, 5, 2, 2>, + Conv::template process_tile<1, 0, 4, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 4, 5, 3, 0>, + Conv::template process_tile<1, 0, 4, 5, 3, 1>, + Conv::template process_tile<1, 0, 4, 5, 3, 2>, + Conv::template process_tile<1, 0, 4, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 4, 6, 0, 0>, + Conv::template process_tile<1, 0, 4, 6, 0, 1>, + Conv::template process_tile<1, 0, 4, 6, 0, 2>, + Conv::template process_tile<1, 0, 4, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 4, 6, 1, 0>, + Conv::template process_tile<1, 0, 4, 6, 1, 1>, + Conv::template process_tile<1, 0, 4, 6, 1, 2>, + Conv::template process_tile<1, 0, 4, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 4, 6, 2, 0>, + Conv::template process_tile<1, 0, 4, 6, 2, 1>, + Conv::template process_tile<1, 0, 4, 6, 2, 2>, + Conv::template process_tile<1, 0, 4, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 4, 6, 3, 0>, + Conv::template process_tile<1, 0, 4, 6, 3, 1>, + Conv::template process_tile<1, 0, 4, 6, 3, 2>, + Conv::template process_tile<1, 0, 4, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 4 + { // Input pad bottom = 5 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 0, 0, 0>, + Conv::template process_tile<1, 0, 5, 0, 0, 1>, + Conv::template process_tile<1, 0, 5, 0, 0, 2>, + Conv::template process_tile<1, 0, 5, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 0, 1, 0>, + Conv::template process_tile<1, 0, 5, 0, 1, 1>, + Conv::template process_tile<1, 0, 5, 0, 1, 2>, + Conv::template process_tile<1, 0, 5, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 0, 2, 0>, + Conv::template process_tile<1, 0, 5, 0, 2, 1>, + Conv::template process_tile<1, 0, 5, 0, 2, 2>, + Conv::template process_tile<1, 0, 5, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 5, 0, 3, 0>, + Conv::template process_tile<1, 0, 5, 0, 3, 1>, + Conv::template process_tile<1, 0, 5, 0, 3, 2>, + Conv::template process_tile<1, 0, 5, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 1, 0, 0>, + Conv::template process_tile<1, 0, 5, 1, 0, 1>, + Conv::template process_tile<1, 0, 5, 1, 0, 2>, + Conv::template process_tile<1, 0, 5, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 1, 1, 0>, + Conv::template process_tile<1, 0, 5, 1, 1, 1>, + Conv::template process_tile<1, 0, 5, 1, 1, 2>, + Conv::template process_tile<1, 0, 5, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 1, 2, 0>, + Conv::template process_tile<1, 0, 5, 1, 2, 1>, + Conv::template process_tile<1, 0, 5, 1, 2, 2>, + Conv::template process_tile<1, 0, 5, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 5, 1, 3, 0>, + Conv::template process_tile<1, 0, 5, 1, 3, 1>, + Conv::template process_tile<1, 0, 5, 1, 3, 2>, + Conv::template process_tile<1, 0, 5, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 2, 0, 0>, + Conv::template process_tile<1, 0, 5, 2, 0, 1>, + Conv::template process_tile<1, 0, 5, 2, 0, 2>, + Conv::template process_tile<1, 0, 5, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 2, 1, 0>, + Conv::template process_tile<1, 0, 5, 2, 1, 1>, + Conv::template process_tile<1, 0, 5, 2, 1, 2>, + Conv::template process_tile<1, 0, 5, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 2, 2, 0>, + Conv::template process_tile<1, 0, 5, 2, 2, 1>, + Conv::template process_tile<1, 0, 5, 2, 2, 2>, + Conv::template process_tile<1, 0, 5, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 5, 2, 3, 0>, + Conv::template process_tile<1, 0, 5, 2, 3, 1>, + Conv::template process_tile<1, 0, 5, 2, 3, 2>, + Conv::template process_tile<1, 0, 5, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 3, 0, 0>, + Conv::template process_tile<1, 0, 5, 3, 0, 1>, + Conv::template process_tile<1, 0, 5, 3, 0, 2>, + Conv::template process_tile<1, 0, 5, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 3, 1, 0>, + Conv::template process_tile<1, 0, 5, 3, 1, 1>, + Conv::template process_tile<1, 0, 5, 3, 1, 2>, + Conv::template process_tile<1, 0, 5, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 3, 2, 0>, + Conv::template process_tile<1, 0, 5, 3, 2, 1>, + Conv::template process_tile<1, 0, 5, 3, 2, 2>, + Conv::template process_tile<1, 0, 5, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 5, 3, 3, 0>, + Conv::template process_tile<1, 0, 5, 3, 3, 1>, + Conv::template process_tile<1, 0, 5, 3, 3, 2>, + Conv::template process_tile<1, 0, 5, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 4, 0, 0>, + Conv::template process_tile<1, 0, 5, 4, 0, 1>, + Conv::template process_tile<1, 0, 5, 4, 0, 2>, + Conv::template process_tile<1, 0, 5, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 4, 1, 0>, + Conv::template process_tile<1, 0, 5, 4, 1, 1>, + Conv::template process_tile<1, 0, 5, 4, 1, 2>, + Conv::template process_tile<1, 0, 5, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 4, 2, 0>, + Conv::template process_tile<1, 0, 5, 4, 2, 1>, + Conv::template process_tile<1, 0, 5, 4, 2, 2>, + Conv::template process_tile<1, 0, 5, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 5, 4, 3, 0>, + Conv::template process_tile<1, 0, 5, 4, 3, 1>, + Conv::template process_tile<1, 0, 5, 4, 3, 2>, + Conv::template process_tile<1, 0, 5, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 5, 0, 0>, + Conv::template process_tile<1, 0, 5, 5, 0, 1>, + Conv::template process_tile<1, 0, 5, 5, 0, 2>, + Conv::template process_tile<1, 0, 5, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 5, 1, 0>, + Conv::template process_tile<1, 0, 5, 5, 1, 1>, + Conv::template process_tile<1, 0, 5, 5, 1, 2>, + Conv::template process_tile<1, 0, 5, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 5, 2, 0>, + Conv::template process_tile<1, 0, 5, 5, 2, 1>, + Conv::template process_tile<1, 0, 5, 5, 2, 2>, + Conv::template process_tile<1, 0, 5, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 5, 5, 3, 0>, + Conv::template process_tile<1, 0, 5, 5, 3, 1>, + Conv::template process_tile<1, 0, 5, 5, 3, 2>, + Conv::template process_tile<1, 0, 5, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 5, 6, 0, 0>, + Conv::template process_tile<1, 0, 5, 6, 0, 1>, + Conv::template process_tile<1, 0, 5, 6, 0, 2>, + Conv::template process_tile<1, 0, 5, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 5, 6, 1, 0>, + Conv::template process_tile<1, 0, 5, 6, 1, 1>, + Conv::template process_tile<1, 0, 5, 6, 1, 2>, + Conv::template process_tile<1, 0, 5, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 5, 6, 2, 0>, + Conv::template process_tile<1, 0, 5, 6, 2, 1>, + Conv::template process_tile<1, 0, 5, 6, 2, 2>, + Conv::template process_tile<1, 0, 5, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 5, 6, 3, 0>, + Conv::template process_tile<1, 0, 5, 6, 3, 1>, + Conv::template process_tile<1, 0, 5, 6, 3, 2>, + Conv::template process_tile<1, 0, 5, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 5 + { // Input pad bottom = 6 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 0, 0, 0>, + Conv::template process_tile<1, 0, 6, 0, 0, 1>, + Conv::template process_tile<1, 0, 6, 0, 0, 2>, + Conv::template process_tile<1, 0, 6, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 0, 1, 0>, + Conv::template process_tile<1, 0, 6, 0, 1, 1>, + Conv::template process_tile<1, 0, 6, 0, 1, 2>, + Conv::template process_tile<1, 0, 6, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 0, 2, 0>, + Conv::template process_tile<1, 0, 6, 0, 2, 1>, + Conv::template process_tile<1, 0, 6, 0, 2, 2>, + Conv::template process_tile<1, 0, 6, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 6, 0, 3, 0>, + Conv::template process_tile<1, 0, 6, 0, 3, 1>, + Conv::template process_tile<1, 0, 6, 0, 3, 2>, + Conv::template process_tile<1, 0, 6, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 1, 0, 0>, + Conv::template process_tile<1, 0, 6, 1, 0, 1>, + Conv::template process_tile<1, 0, 6, 1, 0, 2>, + Conv::template process_tile<1, 0, 6, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 1, 1, 0>, + Conv::template process_tile<1, 0, 6, 1, 1, 1>, + Conv::template process_tile<1, 0, 6, 1, 1, 2>, + Conv::template process_tile<1, 0, 6, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 1, 2, 0>, + Conv::template process_tile<1, 0, 6, 1, 2, 1>, + Conv::template process_tile<1, 0, 6, 1, 2, 2>, + Conv::template process_tile<1, 0, 6, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 6, 1, 3, 0>, + Conv::template process_tile<1, 0, 6, 1, 3, 1>, + Conv::template process_tile<1, 0, 6, 1, 3, 2>, + Conv::template process_tile<1, 0, 6, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 2, 0, 0>, + Conv::template process_tile<1, 0, 6, 2, 0, 1>, + Conv::template process_tile<1, 0, 6, 2, 0, 2>, + Conv::template process_tile<1, 0, 6, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 2, 1, 0>, + Conv::template process_tile<1, 0, 6, 2, 1, 1>, + Conv::template process_tile<1, 0, 6, 2, 1, 2>, + Conv::template process_tile<1, 0, 6, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 2, 2, 0>, + Conv::template process_tile<1, 0, 6, 2, 2, 1>, + Conv::template process_tile<1, 0, 6, 2, 2, 2>, + Conv::template process_tile<1, 0, 6, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 6, 2, 3, 0>, + Conv::template process_tile<1, 0, 6, 2, 3, 1>, + Conv::template process_tile<1, 0, 6, 2, 3, 2>, + Conv::template process_tile<1, 0, 6, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 3, 0, 0>, + Conv::template process_tile<1, 0, 6, 3, 0, 1>, + Conv::template process_tile<1, 0, 6, 3, 0, 2>, + Conv::template process_tile<1, 0, 6, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 3, 1, 0>, + Conv::template process_tile<1, 0, 6, 3, 1, 1>, + Conv::template process_tile<1, 0, 6, 3, 1, 2>, + Conv::template process_tile<1, 0, 6, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 3, 2, 0>, + Conv::template process_tile<1, 0, 6, 3, 2, 1>, + Conv::template process_tile<1, 0, 6, 3, 2, 2>, + Conv::template process_tile<1, 0, 6, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 6, 3, 3, 0>, + Conv::template process_tile<1, 0, 6, 3, 3, 1>, + Conv::template process_tile<1, 0, 6, 3, 3, 2>, + Conv::template process_tile<1, 0, 6, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 4, 0, 0>, + Conv::template process_tile<1, 0, 6, 4, 0, 1>, + Conv::template process_tile<1, 0, 6, 4, 0, 2>, + Conv::template process_tile<1, 0, 6, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 4, 1, 0>, + Conv::template process_tile<1, 0, 6, 4, 1, 1>, + Conv::template process_tile<1, 0, 6, 4, 1, 2>, + Conv::template process_tile<1, 0, 6, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 4, 2, 0>, + Conv::template process_tile<1, 0, 6, 4, 2, 1>, + Conv::template process_tile<1, 0, 6, 4, 2, 2>, + Conv::template process_tile<1, 0, 6, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 6, 4, 3, 0>, + Conv::template process_tile<1, 0, 6, 4, 3, 1>, + Conv::template process_tile<1, 0, 6, 4, 3, 2>, + Conv::template process_tile<1, 0, 6, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 5, 0, 0>, + Conv::template process_tile<1, 0, 6, 5, 0, 1>, + Conv::template process_tile<1, 0, 6, 5, 0, 2>, + Conv::template process_tile<1, 0, 6, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 5, 1, 0>, + Conv::template process_tile<1, 0, 6, 5, 1, 1>, + Conv::template process_tile<1, 0, 6, 5, 1, 2>, + Conv::template process_tile<1, 0, 6, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 5, 2, 0>, + Conv::template process_tile<1, 0, 6, 5, 2, 1>, + Conv::template process_tile<1, 0, 6, 5, 2, 2>, + Conv::template process_tile<1, 0, 6, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 6, 5, 3, 0>, + Conv::template process_tile<1, 0, 6, 5, 3, 1>, + Conv::template process_tile<1, 0, 6, 5, 3, 2>, + Conv::template process_tile<1, 0, 6, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 0, 6, 6, 0, 0>, + Conv::template process_tile<1, 0, 6, 6, 0, 1>, + Conv::template process_tile<1, 0, 6, 6, 0, 2>, + Conv::template process_tile<1, 0, 6, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 0, 6, 6, 1, 0>, + Conv::template process_tile<1, 0, 6, 6, 1, 1>, + Conv::template process_tile<1, 0, 6, 6, 1, 2>, + Conv::template process_tile<1, 0, 6, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 0, 6, 6, 2, 0>, + Conv::template process_tile<1, 0, 6, 6, 2, 1>, + Conv::template process_tile<1, 0, 6, 6, 2, 2>, + Conv::template process_tile<1, 0, 6, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 0, 6, 6, 3, 0>, + Conv::template process_tile<1, 0, 6, 6, 3, 1>, + Conv::template process_tile<1, 0, 6, 6, 3, 2>, + Conv::template process_tile<1, 0, 6, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 6 + }, // Input pad left = 0 + { // Input pad left = 1 + { // Input pad bottom = 0 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 0, 0, 0>, + Conv::template process_tile<1, 1, 0, 0, 0, 1>, + Conv::template process_tile<1, 1, 0, 0, 0, 2>, + Conv::template process_tile<1, 1, 0, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 0, 1, 0>, + Conv::template process_tile<1, 1, 0, 0, 1, 1>, + Conv::template process_tile<1, 1, 0, 0, 1, 2>, + Conv::template process_tile<1, 1, 0, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 0, 2, 0>, + Conv::template process_tile<1, 1, 0, 0, 2, 1>, + Conv::template process_tile<1, 1, 0, 0, 2, 2>, + Conv::template process_tile<1, 1, 0, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 0, 0, 3, 0>, + Conv::template process_tile<1, 1, 0, 0, 3, 1>, + Conv::template process_tile<1, 1, 0, 0, 3, 2>, + Conv::template process_tile<1, 1, 0, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 1, 0, 0>, + Conv::template process_tile<1, 1, 0, 1, 0, 1>, + Conv::template process_tile<1, 1, 0, 1, 0, 2>, + Conv::template process_tile<1, 1, 0, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 1, 1, 0>, + Conv::template process_tile<1, 1, 0, 1, 1, 1>, + Conv::template process_tile<1, 1, 0, 1, 1, 2>, + Conv::template process_tile<1, 1, 0, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 1, 2, 0>, + Conv::template process_tile<1, 1, 0, 1, 2, 1>, + Conv::template process_tile<1, 1, 0, 1, 2, 2>, + Conv::template process_tile<1, 1, 0, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 0, 1, 3, 0>, + Conv::template process_tile<1, 1, 0, 1, 3, 1>, + Conv::template process_tile<1, 1, 0, 1, 3, 2>, + Conv::template process_tile<1, 1, 0, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 2, 0, 0>, + Conv::template process_tile<1, 1, 0, 2, 0, 1>, + Conv::template process_tile<1, 1, 0, 2, 0, 2>, + Conv::template process_tile<1, 1, 0, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 2, 1, 0>, + Conv::template process_tile<1, 1, 0, 2, 1, 1>, + Conv::template process_tile<1, 1, 0, 2, 1, 2>, + Conv::template process_tile<1, 1, 0, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 2, 2, 0>, + Conv::template process_tile<1, 1, 0, 2, 2, 1>, + Conv::template process_tile<1, 1, 0, 2, 2, 2>, + Conv::template process_tile<1, 1, 0, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 0, 2, 3, 0>, + Conv::template process_tile<1, 1, 0, 2, 3, 1>, + Conv::template process_tile<1, 1, 0, 2, 3, 2>, + Conv::template process_tile<1, 1, 0, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 3, 0, 0>, + Conv::template process_tile<1, 1, 0, 3, 0, 1>, + Conv::template process_tile<1, 1, 0, 3, 0, 2>, + Conv::template process_tile<1, 1, 0, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 3, 1, 0>, + Conv::template process_tile<1, 1, 0, 3, 1, 1>, + Conv::template process_tile<1, 1, 0, 3, 1, 2>, + Conv::template process_tile<1, 1, 0, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 3, 2, 0>, + Conv::template process_tile<1, 1, 0, 3, 2, 1>, + Conv::template process_tile<1, 1, 0, 3, 2, 2>, + Conv::template process_tile<1, 1, 0, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 0, 3, 3, 0>, + Conv::template process_tile<1, 1, 0, 3, 3, 1>, + Conv::template process_tile<1, 1, 0, 3, 3, 2>, + Conv::template process_tile<1, 1, 0, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 4, 0, 0>, + Conv::template process_tile<1, 1, 0, 4, 0, 1>, + Conv::template process_tile<1, 1, 0, 4, 0, 2>, + Conv::template process_tile<1, 1, 0, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 4, 1, 0>, + Conv::template process_tile<1, 1, 0, 4, 1, 1>, + Conv::template process_tile<1, 1, 0, 4, 1, 2>, + Conv::template process_tile<1, 1, 0, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 4, 2, 0>, + Conv::template process_tile<1, 1, 0, 4, 2, 1>, + Conv::template process_tile<1, 1, 0, 4, 2, 2>, + Conv::template process_tile<1, 1, 0, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 0, 4, 3, 0>, + Conv::template process_tile<1, 1, 0, 4, 3, 1>, + Conv::template process_tile<1, 1, 0, 4, 3, 2>, + Conv::template process_tile<1, 1, 0, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 5, 0, 0>, + Conv::template process_tile<1, 1, 0, 5, 0, 1>, + Conv::template process_tile<1, 1, 0, 5, 0, 2>, + Conv::template process_tile<1, 1, 0, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 5, 1, 0>, + Conv::template process_tile<1, 1, 0, 5, 1, 1>, + Conv::template process_tile<1, 1, 0, 5, 1, 2>, + Conv::template process_tile<1, 1, 0, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 5, 2, 0>, + Conv::template process_tile<1, 1, 0, 5, 2, 1>, + Conv::template process_tile<1, 1, 0, 5, 2, 2>, + Conv::template process_tile<1, 1, 0, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 0, 5, 3, 0>, + Conv::template process_tile<1, 1, 0, 5, 3, 1>, + Conv::template process_tile<1, 1, 0, 5, 3, 2>, + Conv::template process_tile<1, 1, 0, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 0, 6, 0, 0>, + Conv::template process_tile<1, 1, 0, 6, 0, 1>, + Conv::template process_tile<1, 1, 0, 6, 0, 2>, + Conv::template process_tile<1, 1, 0, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 0, 6, 1, 0>, + Conv::template process_tile<1, 1, 0, 6, 1, 1>, + Conv::template process_tile<1, 1, 0, 6, 1, 2>, + Conv::template process_tile<1, 1, 0, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 0, 6, 2, 0>, + Conv::template process_tile<1, 1, 0, 6, 2, 1>, + Conv::template process_tile<1, 1, 0, 6, 2, 2>, + Conv::template process_tile<1, 1, 0, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 0, 6, 3, 0>, + Conv::template process_tile<1, 1, 0, 6, 3, 1>, + Conv::template process_tile<1, 1, 0, 6, 3, 2>, + Conv::template process_tile<1, 1, 0, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 0 + { // Input pad bottom = 1 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 0, 0, 0>, + Conv::template process_tile<1, 1, 1, 0, 0, 1>, + Conv::template process_tile<1, 1, 1, 0, 0, 2>, + Conv::template process_tile<1, 1, 1, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 0, 1, 0>, + Conv::template process_tile<1, 1, 1, 0, 1, 1>, + Conv::template process_tile<1, 1, 1, 0, 1, 2>, + Conv::template process_tile<1, 1, 1, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 0, 2, 0>, + Conv::template process_tile<1, 1, 1, 0, 2, 1>, + Conv::template process_tile<1, 1, 1, 0, 2, 2>, + Conv::template process_tile<1, 1, 1, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 1, 0, 3, 0>, + Conv::template process_tile<1, 1, 1, 0, 3, 1>, + Conv::template process_tile<1, 1, 1, 0, 3, 2>, + Conv::template process_tile<1, 1, 1, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 1, 0, 0>, + Conv::template process_tile<1, 1, 1, 1, 0, 1>, + Conv::template process_tile<1, 1, 1, 1, 0, 2>, + Conv::template process_tile<1, 1, 1, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 1, 1, 0>, + Conv::template process_tile<1, 1, 1, 1, 1, 1>, + Conv::template process_tile<1, 1, 1, 1, 1, 2>, + Conv::template process_tile<1, 1, 1, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 1, 2, 0>, + Conv::template process_tile<1, 1, 1, 1, 2, 1>, + Conv::template process_tile<1, 1, 1, 1, 2, 2>, + Conv::template process_tile<1, 1, 1, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 1, 1, 3, 0>, + Conv::template process_tile<1, 1, 1, 1, 3, 1>, + Conv::template process_tile<1, 1, 1, 1, 3, 2>, + Conv::template process_tile<1, 1, 1, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 2, 0, 0>, + Conv::template process_tile<1, 1, 1, 2, 0, 1>, + Conv::template process_tile<1, 1, 1, 2, 0, 2>, + Conv::template process_tile<1, 1, 1, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 2, 1, 0>, + Conv::template process_tile<1, 1, 1, 2, 1, 1>, + Conv::template process_tile<1, 1, 1, 2, 1, 2>, + Conv::template process_tile<1, 1, 1, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 2, 2, 0>, + Conv::template process_tile<1, 1, 1, 2, 2, 1>, + Conv::template process_tile<1, 1, 1, 2, 2, 2>, + Conv::template process_tile<1, 1, 1, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 1, 2, 3, 0>, + Conv::template process_tile<1, 1, 1, 2, 3, 1>, + Conv::template process_tile<1, 1, 1, 2, 3, 2>, + Conv::template process_tile<1, 1, 1, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 3, 0, 0>, + Conv::template process_tile<1, 1, 1, 3, 0, 1>, + Conv::template process_tile<1, 1, 1, 3, 0, 2>, + Conv::template process_tile<1, 1, 1, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 3, 1, 0>, + Conv::template process_tile<1, 1, 1, 3, 1, 1>, + Conv::template process_tile<1, 1, 1, 3, 1, 2>, + Conv::template process_tile<1, 1, 1, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 3, 2, 0>, + Conv::template process_tile<1, 1, 1, 3, 2, 1>, + Conv::template process_tile<1, 1, 1, 3, 2, 2>, + Conv::template process_tile<1, 1, 1, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 1, 3, 3, 0>, + Conv::template process_tile<1, 1, 1, 3, 3, 1>, + Conv::template process_tile<1, 1, 1, 3, 3, 2>, + Conv::template process_tile<1, 1, 1, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 4, 0, 0>, + Conv::template process_tile<1, 1, 1, 4, 0, 1>, + Conv::template process_tile<1, 1, 1, 4, 0, 2>, + Conv::template process_tile<1, 1, 1, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 4, 1, 0>, + Conv::template process_tile<1, 1, 1, 4, 1, 1>, + Conv::template process_tile<1, 1, 1, 4, 1, 2>, + Conv::template process_tile<1, 1, 1, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 4, 2, 0>, + Conv::template process_tile<1, 1, 1, 4, 2, 1>, + Conv::template process_tile<1, 1, 1, 4, 2, 2>, + Conv::template process_tile<1, 1, 1, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 1, 4, 3, 0>, + Conv::template process_tile<1, 1, 1, 4, 3, 1>, + Conv::template process_tile<1, 1, 1, 4, 3, 2>, + Conv::template process_tile<1, 1, 1, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 5, 0, 0>, + Conv::template process_tile<1, 1, 1, 5, 0, 1>, + Conv::template process_tile<1, 1, 1, 5, 0, 2>, + Conv::template process_tile<1, 1, 1, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 5, 1, 0>, + Conv::template process_tile<1, 1, 1, 5, 1, 1>, + Conv::template process_tile<1, 1, 1, 5, 1, 2>, + Conv::template process_tile<1, 1, 1, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 5, 2, 0>, + Conv::template process_tile<1, 1, 1, 5, 2, 1>, + Conv::template process_tile<1, 1, 1, 5, 2, 2>, + Conv::template process_tile<1, 1, 1, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 1, 5, 3, 0>, + Conv::template process_tile<1, 1, 1, 5, 3, 1>, + Conv::template process_tile<1, 1, 1, 5, 3, 2>, + Conv::template process_tile<1, 1, 1, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 1, 6, 0, 0>, + Conv::template process_tile<1, 1, 1, 6, 0, 1>, + Conv::template process_tile<1, 1, 1, 6, 0, 2>, + Conv::template process_tile<1, 1, 1, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 1, 6, 1, 0>, + Conv::template process_tile<1, 1, 1, 6, 1, 1>, + Conv::template process_tile<1, 1, 1, 6, 1, 2>, + Conv::template process_tile<1, 1, 1, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 1, 6, 2, 0>, + Conv::template process_tile<1, 1, 1, 6, 2, 1>, + Conv::template process_tile<1, 1, 1, 6, 2, 2>, + Conv::template process_tile<1, 1, 1, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 1, 6, 3, 0>, + Conv::template process_tile<1, 1, 1, 6, 3, 1>, + Conv::template process_tile<1, 1, 1, 6, 3, 2>, + Conv::template process_tile<1, 1, 1, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 1 + { // Input pad bottom = 2 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 0, 0, 0>, + Conv::template process_tile<1, 1, 2, 0, 0, 1>, + Conv::template process_tile<1, 1, 2, 0, 0, 2>, + Conv::template process_tile<1, 1, 2, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 0, 1, 0>, + Conv::template process_tile<1, 1, 2, 0, 1, 1>, + Conv::template process_tile<1, 1, 2, 0, 1, 2>, + Conv::template process_tile<1, 1, 2, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 0, 2, 0>, + Conv::template process_tile<1, 1, 2, 0, 2, 1>, + Conv::template process_tile<1, 1, 2, 0, 2, 2>, + Conv::template process_tile<1, 1, 2, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 2, 0, 3, 0>, + Conv::template process_tile<1, 1, 2, 0, 3, 1>, + Conv::template process_tile<1, 1, 2, 0, 3, 2>, + Conv::template process_tile<1, 1, 2, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 1, 0, 0>, + Conv::template process_tile<1, 1, 2, 1, 0, 1>, + Conv::template process_tile<1, 1, 2, 1, 0, 2>, + Conv::template process_tile<1, 1, 2, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 1, 1, 0>, + Conv::template process_tile<1, 1, 2, 1, 1, 1>, + Conv::template process_tile<1, 1, 2, 1, 1, 2>, + Conv::template process_tile<1, 1, 2, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 1, 2, 0>, + Conv::template process_tile<1, 1, 2, 1, 2, 1>, + Conv::template process_tile<1, 1, 2, 1, 2, 2>, + Conv::template process_tile<1, 1, 2, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 2, 1, 3, 0>, + Conv::template process_tile<1, 1, 2, 1, 3, 1>, + Conv::template process_tile<1, 1, 2, 1, 3, 2>, + Conv::template process_tile<1, 1, 2, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 2, 0, 0>, + Conv::template process_tile<1, 1, 2, 2, 0, 1>, + Conv::template process_tile<1, 1, 2, 2, 0, 2>, + Conv::template process_tile<1, 1, 2, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 2, 1, 0>, + Conv::template process_tile<1, 1, 2, 2, 1, 1>, + Conv::template process_tile<1, 1, 2, 2, 1, 2>, + Conv::template process_tile<1, 1, 2, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 2, 2, 0>, + Conv::template process_tile<1, 1, 2, 2, 2, 1>, + Conv::template process_tile<1, 1, 2, 2, 2, 2>, + Conv::template process_tile<1, 1, 2, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 2, 2, 3, 0>, + Conv::template process_tile<1, 1, 2, 2, 3, 1>, + Conv::template process_tile<1, 1, 2, 2, 3, 2>, + Conv::template process_tile<1, 1, 2, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 3, 0, 0>, + Conv::template process_tile<1, 1, 2, 3, 0, 1>, + Conv::template process_tile<1, 1, 2, 3, 0, 2>, + Conv::template process_tile<1, 1, 2, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 3, 1, 0>, + Conv::template process_tile<1, 1, 2, 3, 1, 1>, + Conv::template process_tile<1, 1, 2, 3, 1, 2>, + Conv::template process_tile<1, 1, 2, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 3, 2, 0>, + Conv::template process_tile<1, 1, 2, 3, 2, 1>, + Conv::template process_tile<1, 1, 2, 3, 2, 2>, + Conv::template process_tile<1, 1, 2, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 2, 3, 3, 0>, + Conv::template process_tile<1, 1, 2, 3, 3, 1>, + Conv::template process_tile<1, 1, 2, 3, 3, 2>, + Conv::template process_tile<1, 1, 2, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 4, 0, 0>, + Conv::template process_tile<1, 1, 2, 4, 0, 1>, + Conv::template process_tile<1, 1, 2, 4, 0, 2>, + Conv::template process_tile<1, 1, 2, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 4, 1, 0>, + Conv::template process_tile<1, 1, 2, 4, 1, 1>, + Conv::template process_tile<1, 1, 2, 4, 1, 2>, + Conv::template process_tile<1, 1, 2, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 4, 2, 0>, + Conv::template process_tile<1, 1, 2, 4, 2, 1>, + Conv::template process_tile<1, 1, 2, 4, 2, 2>, + Conv::template process_tile<1, 1, 2, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 2, 4, 3, 0>, + Conv::template process_tile<1, 1, 2, 4, 3, 1>, + Conv::template process_tile<1, 1, 2, 4, 3, 2>, + Conv::template process_tile<1, 1, 2, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 5, 0, 0>, + Conv::template process_tile<1, 1, 2, 5, 0, 1>, + Conv::template process_tile<1, 1, 2, 5, 0, 2>, + Conv::template process_tile<1, 1, 2, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 5, 1, 0>, + Conv::template process_tile<1, 1, 2, 5, 1, 1>, + Conv::template process_tile<1, 1, 2, 5, 1, 2>, + Conv::template process_tile<1, 1, 2, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 5, 2, 0>, + Conv::template process_tile<1, 1, 2, 5, 2, 1>, + Conv::template process_tile<1, 1, 2, 5, 2, 2>, + Conv::template process_tile<1, 1, 2, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 2, 5, 3, 0>, + Conv::template process_tile<1, 1, 2, 5, 3, 1>, + Conv::template process_tile<1, 1, 2, 5, 3, 2>, + Conv::template process_tile<1, 1, 2, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 2, 6, 0, 0>, + Conv::template process_tile<1, 1, 2, 6, 0, 1>, + Conv::template process_tile<1, 1, 2, 6, 0, 2>, + Conv::template process_tile<1, 1, 2, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 2, 6, 1, 0>, + Conv::template process_tile<1, 1, 2, 6, 1, 1>, + Conv::template process_tile<1, 1, 2, 6, 1, 2>, + Conv::template process_tile<1, 1, 2, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 2, 6, 2, 0>, + Conv::template process_tile<1, 1, 2, 6, 2, 1>, + Conv::template process_tile<1, 1, 2, 6, 2, 2>, + Conv::template process_tile<1, 1, 2, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 2, 6, 3, 0>, + Conv::template process_tile<1, 1, 2, 6, 3, 1>, + Conv::template process_tile<1, 1, 2, 6, 3, 2>, + Conv::template process_tile<1, 1, 2, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 2 + { // Input pad bottom = 3 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 0, 0, 0>, + Conv::template process_tile<1, 1, 3, 0, 0, 1>, + Conv::template process_tile<1, 1, 3, 0, 0, 2>, + Conv::template process_tile<1, 1, 3, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 0, 1, 0>, + Conv::template process_tile<1, 1, 3, 0, 1, 1>, + Conv::template process_tile<1, 1, 3, 0, 1, 2>, + Conv::template process_tile<1, 1, 3, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 0, 2, 0>, + Conv::template process_tile<1, 1, 3, 0, 2, 1>, + Conv::template process_tile<1, 1, 3, 0, 2, 2>, + Conv::template process_tile<1, 1, 3, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 3, 0, 3, 0>, + Conv::template process_tile<1, 1, 3, 0, 3, 1>, + Conv::template process_tile<1, 1, 3, 0, 3, 2>, + Conv::template process_tile<1, 1, 3, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 1, 0, 0>, + Conv::template process_tile<1, 1, 3, 1, 0, 1>, + Conv::template process_tile<1, 1, 3, 1, 0, 2>, + Conv::template process_tile<1, 1, 3, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 1, 1, 0>, + Conv::template process_tile<1, 1, 3, 1, 1, 1>, + Conv::template process_tile<1, 1, 3, 1, 1, 2>, + Conv::template process_tile<1, 1, 3, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 1, 2, 0>, + Conv::template process_tile<1, 1, 3, 1, 2, 1>, + Conv::template process_tile<1, 1, 3, 1, 2, 2>, + Conv::template process_tile<1, 1, 3, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 3, 1, 3, 0>, + Conv::template process_tile<1, 1, 3, 1, 3, 1>, + Conv::template process_tile<1, 1, 3, 1, 3, 2>, + Conv::template process_tile<1, 1, 3, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 2, 0, 0>, + Conv::template process_tile<1, 1, 3, 2, 0, 1>, + Conv::template process_tile<1, 1, 3, 2, 0, 2>, + Conv::template process_tile<1, 1, 3, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 2, 1, 0>, + Conv::template process_tile<1, 1, 3, 2, 1, 1>, + Conv::template process_tile<1, 1, 3, 2, 1, 2>, + Conv::template process_tile<1, 1, 3, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 2, 2, 0>, + Conv::template process_tile<1, 1, 3, 2, 2, 1>, + Conv::template process_tile<1, 1, 3, 2, 2, 2>, + Conv::template process_tile<1, 1, 3, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 3, 2, 3, 0>, + Conv::template process_tile<1, 1, 3, 2, 3, 1>, + Conv::template process_tile<1, 1, 3, 2, 3, 2>, + Conv::template process_tile<1, 1, 3, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 3, 0, 0>, + Conv::template process_tile<1, 1, 3, 3, 0, 1>, + Conv::template process_tile<1, 1, 3, 3, 0, 2>, + Conv::template process_tile<1, 1, 3, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 3, 1, 0>, + Conv::template process_tile<1, 1, 3, 3, 1, 1>, + Conv::template process_tile<1, 1, 3, 3, 1, 2>, + Conv::template process_tile<1, 1, 3, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 3, 2, 0>, + Conv::template process_tile<1, 1, 3, 3, 2, 1>, + Conv::template process_tile<1, 1, 3, 3, 2, 2>, + Conv::template process_tile<1, 1, 3, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 3, 3, 3, 0>, + Conv::template process_tile<1, 1, 3, 3, 3, 1>, + Conv::template process_tile<1, 1, 3, 3, 3, 2>, + Conv::template process_tile<1, 1, 3, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 4, 0, 0>, + Conv::template process_tile<1, 1, 3, 4, 0, 1>, + Conv::template process_tile<1, 1, 3, 4, 0, 2>, + Conv::template process_tile<1, 1, 3, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 4, 1, 0>, + Conv::template process_tile<1, 1, 3, 4, 1, 1>, + Conv::template process_tile<1, 1, 3, 4, 1, 2>, + Conv::template process_tile<1, 1, 3, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 4, 2, 0>, + Conv::template process_tile<1, 1, 3, 4, 2, 1>, + Conv::template process_tile<1, 1, 3, 4, 2, 2>, + Conv::template process_tile<1, 1, 3, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 3, 4, 3, 0>, + Conv::template process_tile<1, 1, 3, 4, 3, 1>, + Conv::template process_tile<1, 1, 3, 4, 3, 2>, + Conv::template process_tile<1, 1, 3, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 5, 0, 0>, + Conv::template process_tile<1, 1, 3, 5, 0, 1>, + Conv::template process_tile<1, 1, 3, 5, 0, 2>, + Conv::template process_tile<1, 1, 3, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 5, 1, 0>, + Conv::template process_tile<1, 1, 3, 5, 1, 1>, + Conv::template process_tile<1, 1, 3, 5, 1, 2>, + Conv::template process_tile<1, 1, 3, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 5, 2, 0>, + Conv::template process_tile<1, 1, 3, 5, 2, 1>, + Conv::template process_tile<1, 1, 3, 5, 2, 2>, + Conv::template process_tile<1, 1, 3, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 3, 5, 3, 0>, + Conv::template process_tile<1, 1, 3, 5, 3, 1>, + Conv::template process_tile<1, 1, 3, 5, 3, 2>, + Conv::template process_tile<1, 1, 3, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 3, 6, 0, 0>, + Conv::template process_tile<1, 1, 3, 6, 0, 1>, + Conv::template process_tile<1, 1, 3, 6, 0, 2>, + Conv::template process_tile<1, 1, 3, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 3, 6, 1, 0>, + Conv::template process_tile<1, 1, 3, 6, 1, 1>, + Conv::template process_tile<1, 1, 3, 6, 1, 2>, + Conv::template process_tile<1, 1, 3, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 3, 6, 2, 0>, + Conv::template process_tile<1, 1, 3, 6, 2, 1>, + Conv::template process_tile<1, 1, 3, 6, 2, 2>, + Conv::template process_tile<1, 1, 3, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 3, 6, 3, 0>, + Conv::template process_tile<1, 1, 3, 6, 3, 1>, + Conv::template process_tile<1, 1, 3, 6, 3, 2>, + Conv::template process_tile<1, 1, 3, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 3 + { // Input pad bottom = 4 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 0, 0, 0>, + Conv::template process_tile<1, 1, 4, 0, 0, 1>, + Conv::template process_tile<1, 1, 4, 0, 0, 2>, + Conv::template process_tile<1, 1, 4, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 0, 1, 0>, + Conv::template process_tile<1, 1, 4, 0, 1, 1>, + Conv::template process_tile<1, 1, 4, 0, 1, 2>, + Conv::template process_tile<1, 1, 4, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 0, 2, 0>, + Conv::template process_tile<1, 1, 4, 0, 2, 1>, + Conv::template process_tile<1, 1, 4, 0, 2, 2>, + Conv::template process_tile<1, 1, 4, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 4, 0, 3, 0>, + Conv::template process_tile<1, 1, 4, 0, 3, 1>, + Conv::template process_tile<1, 1, 4, 0, 3, 2>, + Conv::template process_tile<1, 1, 4, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 1, 0, 0>, + Conv::template process_tile<1, 1, 4, 1, 0, 1>, + Conv::template process_tile<1, 1, 4, 1, 0, 2>, + Conv::template process_tile<1, 1, 4, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 1, 1, 0>, + Conv::template process_tile<1, 1, 4, 1, 1, 1>, + Conv::template process_tile<1, 1, 4, 1, 1, 2>, + Conv::template process_tile<1, 1, 4, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 1, 2, 0>, + Conv::template process_tile<1, 1, 4, 1, 2, 1>, + Conv::template process_tile<1, 1, 4, 1, 2, 2>, + Conv::template process_tile<1, 1, 4, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 4, 1, 3, 0>, + Conv::template process_tile<1, 1, 4, 1, 3, 1>, + Conv::template process_tile<1, 1, 4, 1, 3, 2>, + Conv::template process_tile<1, 1, 4, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 2, 0, 0>, + Conv::template process_tile<1, 1, 4, 2, 0, 1>, + Conv::template process_tile<1, 1, 4, 2, 0, 2>, + Conv::template process_tile<1, 1, 4, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 2, 1, 0>, + Conv::template process_tile<1, 1, 4, 2, 1, 1>, + Conv::template process_tile<1, 1, 4, 2, 1, 2>, + Conv::template process_tile<1, 1, 4, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 2, 2, 0>, + Conv::template process_tile<1, 1, 4, 2, 2, 1>, + Conv::template process_tile<1, 1, 4, 2, 2, 2>, + Conv::template process_tile<1, 1, 4, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 4, 2, 3, 0>, + Conv::template process_tile<1, 1, 4, 2, 3, 1>, + Conv::template process_tile<1, 1, 4, 2, 3, 2>, + Conv::template process_tile<1, 1, 4, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 3, 0, 0>, + Conv::template process_tile<1, 1, 4, 3, 0, 1>, + Conv::template process_tile<1, 1, 4, 3, 0, 2>, + Conv::template process_tile<1, 1, 4, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 3, 1, 0>, + Conv::template process_tile<1, 1, 4, 3, 1, 1>, + Conv::template process_tile<1, 1, 4, 3, 1, 2>, + Conv::template process_tile<1, 1, 4, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 3, 2, 0>, + Conv::template process_tile<1, 1, 4, 3, 2, 1>, + Conv::template process_tile<1, 1, 4, 3, 2, 2>, + Conv::template process_tile<1, 1, 4, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 4, 3, 3, 0>, + Conv::template process_tile<1, 1, 4, 3, 3, 1>, + Conv::template process_tile<1, 1, 4, 3, 3, 2>, + Conv::template process_tile<1, 1, 4, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 4, 0, 0>, + Conv::template process_tile<1, 1, 4, 4, 0, 1>, + Conv::template process_tile<1, 1, 4, 4, 0, 2>, + Conv::template process_tile<1, 1, 4, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 4, 1, 0>, + Conv::template process_tile<1, 1, 4, 4, 1, 1>, + Conv::template process_tile<1, 1, 4, 4, 1, 2>, + Conv::template process_tile<1, 1, 4, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 4, 2, 0>, + Conv::template process_tile<1, 1, 4, 4, 2, 1>, + Conv::template process_tile<1, 1, 4, 4, 2, 2>, + Conv::template process_tile<1, 1, 4, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 4, 4, 3, 0>, + Conv::template process_tile<1, 1, 4, 4, 3, 1>, + Conv::template process_tile<1, 1, 4, 4, 3, 2>, + Conv::template process_tile<1, 1, 4, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 5, 0, 0>, + Conv::template process_tile<1, 1, 4, 5, 0, 1>, + Conv::template process_tile<1, 1, 4, 5, 0, 2>, + Conv::template process_tile<1, 1, 4, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 5, 1, 0>, + Conv::template process_tile<1, 1, 4, 5, 1, 1>, + Conv::template process_tile<1, 1, 4, 5, 1, 2>, + Conv::template process_tile<1, 1, 4, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 5, 2, 0>, + Conv::template process_tile<1, 1, 4, 5, 2, 1>, + Conv::template process_tile<1, 1, 4, 5, 2, 2>, + Conv::template process_tile<1, 1, 4, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 4, 5, 3, 0>, + Conv::template process_tile<1, 1, 4, 5, 3, 1>, + Conv::template process_tile<1, 1, 4, 5, 3, 2>, + Conv::template process_tile<1, 1, 4, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 4, 6, 0, 0>, + Conv::template process_tile<1, 1, 4, 6, 0, 1>, + Conv::template process_tile<1, 1, 4, 6, 0, 2>, + Conv::template process_tile<1, 1, 4, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 4, 6, 1, 0>, + Conv::template process_tile<1, 1, 4, 6, 1, 1>, + Conv::template process_tile<1, 1, 4, 6, 1, 2>, + Conv::template process_tile<1, 1, 4, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 4, 6, 2, 0>, + Conv::template process_tile<1, 1, 4, 6, 2, 1>, + Conv::template process_tile<1, 1, 4, 6, 2, 2>, + Conv::template process_tile<1, 1, 4, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 4, 6, 3, 0>, + Conv::template process_tile<1, 1, 4, 6, 3, 1>, + Conv::template process_tile<1, 1, 4, 6, 3, 2>, + Conv::template process_tile<1, 1, 4, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 4 + { // Input pad bottom = 5 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 0, 0, 0>, + Conv::template process_tile<1, 1, 5, 0, 0, 1>, + Conv::template process_tile<1, 1, 5, 0, 0, 2>, + Conv::template process_tile<1, 1, 5, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 0, 1, 0>, + Conv::template process_tile<1, 1, 5, 0, 1, 1>, + Conv::template process_tile<1, 1, 5, 0, 1, 2>, + Conv::template process_tile<1, 1, 5, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 0, 2, 0>, + Conv::template process_tile<1, 1, 5, 0, 2, 1>, + Conv::template process_tile<1, 1, 5, 0, 2, 2>, + Conv::template process_tile<1, 1, 5, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 5, 0, 3, 0>, + Conv::template process_tile<1, 1, 5, 0, 3, 1>, + Conv::template process_tile<1, 1, 5, 0, 3, 2>, + Conv::template process_tile<1, 1, 5, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 1, 0, 0>, + Conv::template process_tile<1, 1, 5, 1, 0, 1>, + Conv::template process_tile<1, 1, 5, 1, 0, 2>, + Conv::template process_tile<1, 1, 5, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 1, 1, 0>, + Conv::template process_tile<1, 1, 5, 1, 1, 1>, + Conv::template process_tile<1, 1, 5, 1, 1, 2>, + Conv::template process_tile<1, 1, 5, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 1, 2, 0>, + Conv::template process_tile<1, 1, 5, 1, 2, 1>, + Conv::template process_tile<1, 1, 5, 1, 2, 2>, + Conv::template process_tile<1, 1, 5, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 5, 1, 3, 0>, + Conv::template process_tile<1, 1, 5, 1, 3, 1>, + Conv::template process_tile<1, 1, 5, 1, 3, 2>, + Conv::template process_tile<1, 1, 5, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 2, 0, 0>, + Conv::template process_tile<1, 1, 5, 2, 0, 1>, + Conv::template process_tile<1, 1, 5, 2, 0, 2>, + Conv::template process_tile<1, 1, 5, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 2, 1, 0>, + Conv::template process_tile<1, 1, 5, 2, 1, 1>, + Conv::template process_tile<1, 1, 5, 2, 1, 2>, + Conv::template process_tile<1, 1, 5, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 2, 2, 0>, + Conv::template process_tile<1, 1, 5, 2, 2, 1>, + Conv::template process_tile<1, 1, 5, 2, 2, 2>, + Conv::template process_tile<1, 1, 5, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 5, 2, 3, 0>, + Conv::template process_tile<1, 1, 5, 2, 3, 1>, + Conv::template process_tile<1, 1, 5, 2, 3, 2>, + Conv::template process_tile<1, 1, 5, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 3, 0, 0>, + Conv::template process_tile<1, 1, 5, 3, 0, 1>, + Conv::template process_tile<1, 1, 5, 3, 0, 2>, + Conv::template process_tile<1, 1, 5, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 3, 1, 0>, + Conv::template process_tile<1, 1, 5, 3, 1, 1>, + Conv::template process_tile<1, 1, 5, 3, 1, 2>, + Conv::template process_tile<1, 1, 5, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 3, 2, 0>, + Conv::template process_tile<1, 1, 5, 3, 2, 1>, + Conv::template process_tile<1, 1, 5, 3, 2, 2>, + Conv::template process_tile<1, 1, 5, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 5, 3, 3, 0>, + Conv::template process_tile<1, 1, 5, 3, 3, 1>, + Conv::template process_tile<1, 1, 5, 3, 3, 2>, + Conv::template process_tile<1, 1, 5, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 4, 0, 0>, + Conv::template process_tile<1, 1, 5, 4, 0, 1>, + Conv::template process_tile<1, 1, 5, 4, 0, 2>, + Conv::template process_tile<1, 1, 5, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 4, 1, 0>, + Conv::template process_tile<1, 1, 5, 4, 1, 1>, + Conv::template process_tile<1, 1, 5, 4, 1, 2>, + Conv::template process_tile<1, 1, 5, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 4, 2, 0>, + Conv::template process_tile<1, 1, 5, 4, 2, 1>, + Conv::template process_tile<1, 1, 5, 4, 2, 2>, + Conv::template process_tile<1, 1, 5, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 5, 4, 3, 0>, + Conv::template process_tile<1, 1, 5, 4, 3, 1>, + Conv::template process_tile<1, 1, 5, 4, 3, 2>, + Conv::template process_tile<1, 1, 5, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 5, 0, 0>, + Conv::template process_tile<1, 1, 5, 5, 0, 1>, + Conv::template process_tile<1, 1, 5, 5, 0, 2>, + Conv::template process_tile<1, 1, 5, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 5, 1, 0>, + Conv::template process_tile<1, 1, 5, 5, 1, 1>, + Conv::template process_tile<1, 1, 5, 5, 1, 2>, + Conv::template process_tile<1, 1, 5, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 5, 2, 0>, + Conv::template process_tile<1, 1, 5, 5, 2, 1>, + Conv::template process_tile<1, 1, 5, 5, 2, 2>, + Conv::template process_tile<1, 1, 5, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 5, 5, 3, 0>, + Conv::template process_tile<1, 1, 5, 5, 3, 1>, + Conv::template process_tile<1, 1, 5, 5, 3, 2>, + Conv::template process_tile<1, 1, 5, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 5, 6, 0, 0>, + Conv::template process_tile<1, 1, 5, 6, 0, 1>, + Conv::template process_tile<1, 1, 5, 6, 0, 2>, + Conv::template process_tile<1, 1, 5, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 5, 6, 1, 0>, + Conv::template process_tile<1, 1, 5, 6, 1, 1>, + Conv::template process_tile<1, 1, 5, 6, 1, 2>, + Conv::template process_tile<1, 1, 5, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 5, 6, 2, 0>, + Conv::template process_tile<1, 1, 5, 6, 2, 1>, + Conv::template process_tile<1, 1, 5, 6, 2, 2>, + Conv::template process_tile<1, 1, 5, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 5, 6, 3, 0>, + Conv::template process_tile<1, 1, 5, 6, 3, 1>, + Conv::template process_tile<1, 1, 5, 6, 3, 2>, + Conv::template process_tile<1, 1, 5, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 5 + { // Input pad bottom = 6 + { // Input pad right = 0 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 0, 0, 0>, + Conv::template process_tile<1, 1, 6, 0, 0, 1>, + Conv::template process_tile<1, 1, 6, 0, 0, 2>, + Conv::template process_tile<1, 1, 6, 0, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 0, 1, 0>, + Conv::template process_tile<1, 1, 6, 0, 1, 1>, + Conv::template process_tile<1, 1, 6, 0, 1, 2>, + Conv::template process_tile<1, 1, 6, 0, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 0, 2, 0>, + Conv::template process_tile<1, 1, 6, 0, 2, 1>, + Conv::template process_tile<1, 1, 6, 0, 2, 2>, + Conv::template process_tile<1, 1, 6, 0, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 6, 0, 3, 0>, + Conv::template process_tile<1, 1, 6, 0, 3, 1>, + Conv::template process_tile<1, 1, 6, 0, 3, 2>, + Conv::template process_tile<1, 1, 6, 0, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 0 + { // Input pad right = 1 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 1, 0, 0>, + Conv::template process_tile<1, 1, 6, 1, 0, 1>, + Conv::template process_tile<1, 1, 6, 1, 0, 2>, + Conv::template process_tile<1, 1, 6, 1, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 1, 1, 0>, + Conv::template process_tile<1, 1, 6, 1, 1, 1>, + Conv::template process_tile<1, 1, 6, 1, 1, 2>, + Conv::template process_tile<1, 1, 6, 1, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 1, 2, 0>, + Conv::template process_tile<1, 1, 6, 1, 2, 1>, + Conv::template process_tile<1, 1, 6, 1, 2, 2>, + Conv::template process_tile<1, 1, 6, 1, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 6, 1, 3, 0>, + Conv::template process_tile<1, 1, 6, 1, 3, 1>, + Conv::template process_tile<1, 1, 6, 1, 3, 2>, + Conv::template process_tile<1, 1, 6, 1, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 1 + { // Input pad right = 2 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 2, 0, 0>, + Conv::template process_tile<1, 1, 6, 2, 0, 1>, + Conv::template process_tile<1, 1, 6, 2, 0, 2>, + Conv::template process_tile<1, 1, 6, 2, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 2, 1, 0>, + Conv::template process_tile<1, 1, 6, 2, 1, 1>, + Conv::template process_tile<1, 1, 6, 2, 1, 2>, + Conv::template process_tile<1, 1, 6, 2, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 2, 2, 0>, + Conv::template process_tile<1, 1, 6, 2, 2, 1>, + Conv::template process_tile<1, 1, 6, 2, 2, 2>, + Conv::template process_tile<1, 1, 6, 2, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 6, 2, 3, 0>, + Conv::template process_tile<1, 1, 6, 2, 3, 1>, + Conv::template process_tile<1, 1, 6, 2, 3, 2>, + Conv::template process_tile<1, 1, 6, 2, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 2 + { // Input pad right = 3 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 3, 0, 0>, + Conv::template process_tile<1, 1, 6, 3, 0, 1>, + Conv::template process_tile<1, 1, 6, 3, 0, 2>, + Conv::template process_tile<1, 1, 6, 3, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 3, 1, 0>, + Conv::template process_tile<1, 1, 6, 3, 1, 1>, + Conv::template process_tile<1, 1, 6, 3, 1, 2>, + Conv::template process_tile<1, 1, 6, 3, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 3, 2, 0>, + Conv::template process_tile<1, 1, 6, 3, 2, 1>, + Conv::template process_tile<1, 1, 6, 3, 2, 2>, + Conv::template process_tile<1, 1, 6, 3, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 6, 3, 3, 0>, + Conv::template process_tile<1, 1, 6, 3, 3, 1>, + Conv::template process_tile<1, 1, 6, 3, 3, 2>, + Conv::template process_tile<1, 1, 6, 3, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 3 + { // Input pad right = 4 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 4, 0, 0>, + Conv::template process_tile<1, 1, 6, 4, 0, 1>, + Conv::template process_tile<1, 1, 6, 4, 0, 2>, + Conv::template process_tile<1, 1, 6, 4, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 4, 1, 0>, + Conv::template process_tile<1, 1, 6, 4, 1, 1>, + Conv::template process_tile<1, 1, 6, 4, 1, 2>, + Conv::template process_tile<1, 1, 6, 4, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 4, 2, 0>, + Conv::template process_tile<1, 1, 6, 4, 2, 1>, + Conv::template process_tile<1, 1, 6, 4, 2, 2>, + Conv::template process_tile<1, 1, 6, 4, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 6, 4, 3, 0>, + Conv::template process_tile<1, 1, 6, 4, 3, 1>, + Conv::template process_tile<1, 1, 6, 4, 3, 2>, + Conv::template process_tile<1, 1, 6, 4, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 4 + { // Input pad right = 5 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 5, 0, 0>, + Conv::template process_tile<1, 1, 6, 5, 0, 1>, + Conv::template process_tile<1, 1, 6, 5, 0, 2>, + Conv::template process_tile<1, 1, 6, 5, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 5, 1, 0>, + Conv::template process_tile<1, 1, 6, 5, 1, 1>, + Conv::template process_tile<1, 1, 6, 5, 1, 2>, + Conv::template process_tile<1, 1, 6, 5, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 5, 2, 0>, + Conv::template process_tile<1, 1, 6, 5, 2, 1>, + Conv::template process_tile<1, 1, 6, 5, 2, 2>, + Conv::template process_tile<1, 1, 6, 5, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 6, 5, 3, 0>, + Conv::template process_tile<1, 1, 6, 5, 3, 1>, + Conv::template process_tile<1, 1, 6, 5, 3, 2>, + Conv::template process_tile<1, 1, 6, 5, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 5 + { // Input pad right = 6 + { // Output pad bottom = 0 + Conv::template process_tile<1, 1, 6, 6, 0, 0>, + Conv::template process_tile<1, 1, 6, 6, 0, 1>, + Conv::template process_tile<1, 1, 6, 6, 0, 2>, + Conv::template process_tile<1, 1, 6, 6, 0, 3>, + }, // Output pad bottom = 0 + { // Output pad bottom = 1 + Conv::template process_tile<1, 1, 6, 6, 1, 0>, + Conv::template process_tile<1, 1, 6, 6, 1, 1>, + Conv::template process_tile<1, 1, 6, 6, 1, 2>, + Conv::template process_tile<1, 1, 6, 6, 1, 3>, + }, // Output pad bottom = 1 + { // Output pad bottom = 2 + Conv::template process_tile<1, 1, 6, 6, 2, 0>, + Conv::template process_tile<1, 1, 6, 6, 2, 1>, + Conv::template process_tile<1, 1, 6, 6, 2, 2>, + Conv::template process_tile<1, 1, 6, 6, 2, 3>, + }, // Output pad bottom = 2 + { // Output pad bottom = 3 + Conv::template process_tile<1, 1, 6, 6, 3, 0>, + Conv::template process_tile<1, 1, 6, 6, 3, 1>, + Conv::template process_tile<1, 1, 6, 6, 3, 2>, + Conv::template process_tile<1, 1, 6, 6, 3, 3>, + }, // Output pad bottom = 3 + }, // Input pad right = 6 + }, // Input pad bottom = 6 + }, // Input pad left = 1 + }, // Input pad top = 1 +}; + + +template class DepthwiseConvolution<4, 4, 3, 3, 2, 2, float, float>; +} // namespace depthwise diff --git a/src/core/NEON/kernels/winograd/batched_blocked_gemm.cpp b/src/core/NEON/kernels/convolution/winograd/batched_blocked_gemm.cpp index 52c2db866a..ac83bf9dd2 100644 --- a/src/core/NEON/kernels/winograd/batched_blocked_gemm.cpp +++ b/src/core/NEON/kernels/convolution/winograd/batched_blocked_gemm.cpp @@ -22,8 +22,9 @@ * SOFTWARE. */ -#include "batched_blocked_gemm.hpp" -#include "gemm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/batched_blocked_gemm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/gemm.hpp" + using namespace winograd; template <const int MB, const int NB, typename TIn, typename TOut> diff --git a/src/core/NEON/kernels/winograd/transforms/input_2x2_3x3_fp32.cpp b/src/core/NEON/kernels/convolution/winograd/transforms/input_2x2_3x3_fp32.cpp index 381ae92182..6d8afc0def 100644 --- a/src/core/NEON/kernels/winograd/transforms/input_2x2_3x3_fp32.cpp +++ b/src/core/NEON/kernels/convolution/winograd/transforms/input_2x2_3x3_fp32.cpp @@ -22,9 +22,9 @@ * SOFTWARE. */ -#include "transforms/input.hpp" -#include "winograd_gemm.hpp" -#include "arm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/transforms/input.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/common/arm.hpp" namespace winograd { diff --git a/src/core/NEON/kernels/winograd/transforms/input_2x2_5x5_fp32.cpp b/src/core/NEON/kernels/convolution/winograd/transforms/input_2x2_5x5_fp32.cpp index a6ebca1bce..d9ebe8b7cd 100644 --- a/src/core/NEON/kernels/winograd/transforms/input_2x2_5x5_fp32.cpp +++ b/src/core/NEON/kernels/convolution/winograd/transforms/input_2x2_5x5_fp32.cpp @@ -22,9 +22,9 @@ * SOFTWARE. */ -#include "transforms/input.hpp" -#include "winograd_gemm.hpp" -#include "arm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/transforms/input.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/common/arm.hpp" namespace winograd { diff --git a/src/core/NEON/kernels/winograd/transforms/input_4x4_3x3_fp32.cpp b/src/core/NEON/kernels/convolution/winograd/transforms/input_4x4_3x3_fp32.cpp index 477aaaf34e..04d1573e4c 100644 --- a/src/core/NEON/kernels/winograd/transforms/input_4x4_3x3_fp32.cpp +++ b/src/core/NEON/kernels/convolution/winograd/transforms/input_4x4_3x3_fp32.cpp @@ -22,9 +22,9 @@ * SOFTWARE. */ -#include "transforms/input.hpp" -#include "winograd_gemm.hpp" -#include "arm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/transforms/input.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/common/arm.hpp" namespace winograd { diff --git a/src/core/NEON/kernels/winograd/transforms/output_2x2_3x3_fp32.cpp b/src/core/NEON/kernels/convolution/winograd/transforms/output_2x2_3x3_fp32.cpp index 58db7d2ecd..a95ce0e7d2 100644 --- a/src/core/NEON/kernels/winograd/transforms/output_2x2_3x3_fp32.cpp +++ b/src/core/NEON/kernels/convolution/winograd/transforms/output_2x2_3x3_fp32.cpp @@ -22,9 +22,9 @@ * SOFTWARE. */ -#include "transforms/output.hpp" -#include "winograd_gemm.hpp" -#include "arm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/transforms/output.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/common/arm.hpp" namespace winograd { diff --git a/src/core/NEON/kernels/winograd/transforms/output_2x2_5x5_fp32.cpp b/src/core/NEON/kernels/convolution/winograd/transforms/output_2x2_5x5_fp32.cpp index bfd670090a..262f71118c 100644 --- a/src/core/NEON/kernels/winograd/transforms/output_2x2_5x5_fp32.cpp +++ b/src/core/NEON/kernels/convolution/winograd/transforms/output_2x2_5x5_fp32.cpp @@ -22,9 +22,9 @@ * SOFTWARE. */ -#include "transforms/output.hpp" -#include "winograd_gemm.hpp" -#include "arm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/transforms/output.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/common/arm.hpp" namespace winograd { diff --git a/src/core/NEON/kernels/winograd/transforms/output_4x4_3x3_fp32.cpp b/src/core/NEON/kernels/convolution/winograd/transforms/output_4x4_3x3_fp32.cpp index 45210d7976..8f47736f0c 100644 --- a/src/core/NEON/kernels/winograd/transforms/output_4x4_3x3_fp32.cpp +++ b/src/core/NEON/kernels/convolution/winograd/transforms/output_4x4_3x3_fp32.cpp @@ -22,9 +22,9 @@ * SOFTWARE. */ -#include "transforms/output.hpp" -#include "winograd_gemm.hpp" -#include "arm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/transforms/output.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/common/arm.hpp" namespace winograd { diff --git a/src/core/NEON/kernels/winograd/transforms/weights_2x2_3x3_fp32.cpp b/src/core/NEON/kernels/convolution/winograd/transforms/weights_2x2_3x3_fp32.cpp index c0b282431e..6c71461f81 100644 --- a/src/core/NEON/kernels/winograd/transforms/weights_2x2_3x3_fp32.cpp +++ b/src/core/NEON/kernels/convolution/winograd/transforms/weights_2x2_3x3_fp32.cpp @@ -22,9 +22,9 @@ * SOFTWARE. */ -#include "arm.hpp" -#include "winograd_gemm.hpp" -#include "transforms/kernel.hpp" +#include "arm_compute/core/NEON/kernels/convolution/common/arm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/transforms/kernel.hpp" namespace winograd { diff --git a/src/core/NEON/kernels/winograd/transforms/weights_2x2_5x5_fp32.cpp b/src/core/NEON/kernels/convolution/winograd/transforms/weights_2x2_5x5_fp32.cpp index acf6b913f8..2f4f6e1ba2 100644 --- a/src/core/NEON/kernels/winograd/transforms/weights_2x2_5x5_fp32.cpp +++ b/src/core/NEON/kernels/convolution/winograd/transforms/weights_2x2_5x5_fp32.cpp @@ -22,9 +22,9 @@ * SOFTWARE. */ -#include "arm.hpp" -#include "winograd_gemm.hpp" -#include "transforms/kernel.hpp" +#include "arm_compute/core/NEON/kernels/convolution/common/arm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/transforms/kernel.hpp" namespace winograd { diff --git a/src/core/NEON/kernels/winograd/transforms/weights_4x4_3x3_fp32.cpp b/src/core/NEON/kernels/convolution/winograd/transforms/weights_4x4_3x3_fp32.cpp index de659c38e0..a56a475fc9 100644 --- a/src/core/NEON/kernels/winograd/transforms/weights_4x4_3x3_fp32.cpp +++ b/src/core/NEON/kernels/convolution/winograd/transforms/weights_4x4_3x3_fp32.cpp @@ -22,9 +22,9 @@ * SOFTWARE. */ -#include "arm.hpp" -#include "winograd_gemm.hpp" -#include "transforms/kernel.hpp" +#include "arm_compute/core/NEON/kernels/convolution/common/arm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/transforms/kernel.hpp" namespace winograd { diff --git a/src/core/NEON/kernels/winograd/winograd_gemm.cpp b/src/core/NEON/kernels/convolution/winograd/winograd_gemm.cpp index 05426450a6..8f8cd250bf 100644 --- a/src/core/NEON/kernels/winograd/winograd_gemm.cpp +++ b/src/core/NEON/kernels/convolution/winograd/winograd_gemm.cpp @@ -21,8 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#include "winograd_gemm.hpp" -#include "batched_blocked_gemm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp" +#include "arm_compute/core/NEON/kernels/convolution/winograd/batched_blocked_gemm.hpp" + using namespace winograd; /** Get the output shape of a convolution. */ |