aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SConscript4
-rw-r--r--arm_compute/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.h51
-rw-r--r--arm_compute/core/NEON/kernels/NEWinogradLayerKernel.h8
-rw-r--r--arm_compute/core/NEON/kernels/convolution/common/alloc.hpp (renamed from arm_compute/core/NEON/kernels/winograd/alloc.hpp)0
-rw-r--r--arm_compute/core/NEON/kernels/convolution/common/arm.hpp (renamed from arm_compute/core/NEON/kernels/winograd/arm.hpp)0
-rw-r--r--arm_compute/core/NEON/kernels/convolution/common/convolution.hpp (renamed from arm_compute/core/NEON/kernels/winograd/convolution.hpp)0
-rw-r--r--arm_compute/core/NEON/kernels/convolution/common/perf.h (renamed from arm_compute/core/NEON/kernels/winograd/perf.h)0
-rw-r--r--arm_compute/core/NEON/kernels/convolution/common/profiler.hpp (renamed from arm_compute/core/NEON/kernels/winograd/profiler.hpp)0
-rw-r--r--arm_compute/core/NEON/kernels/convolution/common/shims.hpp (renamed from arm_compute/core/NEON/kernels/winograd/shims.hpp)0
-rw-r--r--arm_compute/core/NEON/kernels/convolution/common/tensor.hpp (renamed from arm_compute/core/NEON/kernels/winograd/tensor.hpp)0
-rw-r--r--arm_compute/core/NEON/kernels/convolution/common/tensor_utils.hpp (renamed from arm_compute/core/NEON/kernels/winograd/tensor_utils.hpp)0
-rw-r--r--arm_compute/core/NEON/kernels/convolution/common/utils.hpp (renamed from arm_compute/core/NEON/kernels/winograd/utils.hpp)0
-rw-r--r--arm_compute/core/NEON/kernels/convolution/depthwise/depthwise.hpp209
-rw-r--r--arm_compute/core/NEON/kernels/convolution/depthwise/impl_base.hpp348
-rw-r--r--arm_compute/core/NEON/kernels/convolution/depthwise/impl_fp32_fp32.hpp263
-rw-r--r--arm_compute/core/NEON/kernels/convolution/winograd/batched_blocked_gemm.hpp (renamed from arm_compute/core/NEON/kernels/winograd/batched_blocked_gemm.hpp)0
-rw-r--r--arm_compute/core/NEON/kernels/convolution/winograd/gemm.hpp (renamed from arm_compute/core/NEON/kernels/winograd/gemm.hpp)2
-rw-r--r--arm_compute/core/NEON/kernels/convolution/winograd/gemm/a64_sgemm.hpp (renamed from arm_compute/core/NEON/kernels/winograd/gemm/a64_sgemm.hpp)2
-rw-r--r--arm_compute/core/NEON/kernels/convolution/winograd/gemm/a64_sgemm_4x16.hpp (renamed from arm_compute/core/NEON/kernels/winograd/gemm/a64_sgemm_4x16.hpp)0
-rw-r--r--arm_compute/core/NEON/kernels/convolution/winograd/transforms/input.hpp (renamed from arm_compute/core/NEON/kernels/winograd/transforms/input.hpp)2
-rw-r--r--arm_compute/core/NEON/kernels/convolution/winograd/transforms/kernel.hpp (renamed from arm_compute/core/NEON/kernels/winograd/transforms/kernel.hpp)2
-rw-r--r--arm_compute/core/NEON/kernels/convolution/winograd/transforms/output.hpp (renamed from arm_compute/core/NEON/kernels/winograd/transforms/output.hpp)2
-rw-r--r--arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp (renamed from arm_compute/core/NEON/kernels/winograd/winograd_gemm.hpp)12
-rw-r--r--arm_compute/core/NEON/kernels/detail/NEDirectConvolution3x3.h (renamed from arm_compute/core/NEON/kernels/convolution/NEDirectConvolution3x3.h)2
-rw-r--r--arm_compute/core/NEON/kernels/detail/NEDirectConvolutionDetail.h (renamed from arm_compute/core/NEON/kernels/convolution/NEDirectConvolutionDetail.h)0
-rw-r--r--arm_compute/core/NEON/kernels/winograd/direct_convolution.hpp35
-rw-r--r--arm_compute/core/Types.h7
-rw-r--r--arm_compute/core/Utils.h10
-rw-r--r--arm_compute/runtime/NEON/functions/NEDepthwiseConvolutionLayer.h11
-rw-r--r--docs/Doxyfile2
-rw-r--r--examples/graph_mobilenet.cpp24
-rwxr-xr-xscripts/check_bad_style.sh16
-rwxr-xr-xscripts/clang_tidy_rules.py2
-rw-r--r--src/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.cpp195
-rw-r--r--src/core/NEON/kernels/NEDirectConvolutionLayerKernel.cpp2
-rw-r--r--src/core/NEON/kernels/convolution/common/utils.cpp (renamed from src/core/NEON/kernels/winograd/utils.cpp)0
-rw-r--r--src/core/NEON/kernels/convolution/depthwise/depthwise_2x2_3x3_1x1_fp32_fp32.cpp439
-rw-r--r--src/core/NEON/kernels/convolution/depthwise/depthwise_2x2_3x3_2x2_fp32_fp32.cpp1095
-rw-r--r--src/core/NEON/kernels/convolution/depthwise/depthwise_3x3_3x3_1x1_fp32_fp32.cpp1175
-rw-r--r--src/core/NEON/kernels/convolution/depthwise/depthwise_3x3_3x3_2x2_fp32_fp32.cpp3443
-rw-r--r--src/core/NEON/kernels/convolution/depthwise/depthwise_4x4_3x3_1x1_fp32_fp32.cpp2695
-rw-r--r--src/core/NEON/kernels/convolution/depthwise/depthwise_4x4_3x3_2x2_fp32_fp32.cpp5207
-rw-r--r--src/core/NEON/kernels/convolution/winograd/batched_blocked_gemm.cpp (renamed from src/core/NEON/kernels/winograd/batched_blocked_gemm.cpp)5
-rw-r--r--src/core/NEON/kernels/convolution/winograd/transforms/input_2x2_3x3_fp32.cpp (renamed from src/core/NEON/kernels/winograd/transforms/input_2x2_3x3_fp32.cpp)6
-rw-r--r--src/core/NEON/kernels/convolution/winograd/transforms/input_2x2_5x5_fp32.cpp (renamed from src/core/NEON/kernels/winograd/transforms/input_2x2_5x5_fp32.cpp)6
-rw-r--r--src/core/NEON/kernels/convolution/winograd/transforms/input_4x4_3x3_fp32.cpp (renamed from src/core/NEON/kernels/winograd/transforms/input_4x4_3x3_fp32.cpp)6
-rw-r--r--src/core/NEON/kernels/convolution/winograd/transforms/output_2x2_3x3_fp32.cpp (renamed from src/core/NEON/kernels/winograd/transforms/output_2x2_3x3_fp32.cpp)6
-rw-r--r--src/core/NEON/kernels/convolution/winograd/transforms/output_2x2_5x5_fp32.cpp (renamed from src/core/NEON/kernels/winograd/transforms/output_2x2_5x5_fp32.cpp)6
-rw-r--r--src/core/NEON/kernels/convolution/winograd/transforms/output_4x4_3x3_fp32.cpp (renamed from src/core/NEON/kernels/winograd/transforms/output_4x4_3x3_fp32.cpp)6
-rw-r--r--src/core/NEON/kernels/convolution/winograd/transforms/weights_2x2_3x3_fp32.cpp (renamed from src/core/NEON/kernels/winograd/transforms/weights_2x2_3x3_fp32.cpp)6
-rw-r--r--src/core/NEON/kernels/convolution/winograd/transforms/weights_2x2_5x5_fp32.cpp (renamed from src/core/NEON/kernels/winograd/transforms/weights_2x2_5x5_fp32.cpp)6
-rw-r--r--src/core/NEON/kernels/convolution/winograd/transforms/weights_4x4_3x3_fp32.cpp (renamed from src/core/NEON/kernels/winograd/transforms/weights_4x4_3x3_fp32.cpp)6
-rw-r--r--src/core/NEON/kernels/convolution/winograd/winograd_gemm.cpp (renamed from src/core/NEON/kernels/winograd/winograd_gemm.cpp)5
-rw-r--r--src/core/Utils.cpp15
-rw-r--r--src/graph/operations/NESimpleOperations.cpp20
-rw-r--r--src/runtime/NEON/functions/NEDepthwiseConvolutionLayer.cpp82
-rw-r--r--src/runtime/NEON/functions/NEWinogradLayer.cpp2
-rw-r--r--tests/datasets/DepthwiseConvolutionLayerDataset.h17
-rw-r--r--tests/validation/NEON/DepthwiseConvolutionLayer.cpp6
-rw-r--r--tests/validation/reference/DepthwiseConvolutionLayer.cpp8
60 files changed, 15309 insertions, 170 deletions
diff --git a/SConscript b/SConscript
index d813033676..f021f34615 100644
--- a/SConscript
+++ b/SConscript
@@ -176,8 +176,8 @@ if env['neon']:
core_files += Glob('src/core/NEON/kernels/*.cpp')
# build winograd sources for either v7a / v8a
- core_files += Glob('src/core/NEON/kernels/winograd/*.cpp')
- core_files += Glob('src/core/NEON/kernels/winograd/transforms/*.cpp')
+ core_files += Glob('src/core/NEON/kernels/convolution/*/*.cpp')
+ core_files += Glob('src/core/NEON/kernels/convolution/winograd/*/*.cpp')
arm_compute_env.Append(CPPPATH = ["arm_compute/core/NEON/kernels/winograd/", "arm_compute/core/NEON/kernels/assembly/"])
if env['arch'] == "armv7a":
diff --git a/arm_compute/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.h b/arm_compute/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.h
index a441fb44b3..1367f378f7 100644
--- a/arm_compute/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.h
+++ b/arm_compute/core/NEON/kernels/NEDepthwiseConvolutionLayer3x3Kernel.h
@@ -25,13 +25,15 @@
#define __ARM_COMPUTE_NEDEPTHWISECONVOLUTIONKERNEL3x3_H__
#include "arm_compute/core/NEON/INEKernel.h"
+#include "arm_compute/core/NEON/kernels/convolution/depthwise/depthwise.hpp"
+
+#include <memory>
namespace arm_compute
{
class ITensor;
-/** Interface for the kernel to run a 3x3 depthwise convolution on a tensor.
- */
+/** Interface for the kernel to run a 3x3 depthwise convolution on a tensor. */
class NEDepthwiseConvolutionLayer3x3Kernel : public INEKernel
{
public:
@@ -51,24 +53,47 @@ public:
NEDepthwiseConvolutionLayer3x3Kernel &operator=(NEDepthwiseConvolutionLayer3x3Kernel &&) = default;
/** Initialize the function's source, destination, conv and border_size.
*
- * @param[in] input Source tensor. DataType supported: QASYMM8, F32.
- * @param[in] weights Weights tensor. This is a 3D tensor with dimensions [3, 3, IFM]. Data type supported: Same as @p input.
- * @param[out] output Destination tensor. Data type supported: Same as @p input.
- * @param[in] conv_info Padding and stride information to use for the convolution.
+ * @param[in] input Source tensor. DataType supported: QASYMM8, F32.
+ * @param[in] weights Weights tensor. This is a 3D tensor with dimensions [3, 3, IFM]. Data type supported: Same as @p input.
+ * @param[out] output Destination tensor. Data type supported: Same as @p input.
+ * @param[in] conv_info Padding and stride information to use for the convolution.
+ * @param[in] data_layout (Optional) Data layout of the input and weights tensor
*/
- void configure(const ITensor *input, const ITensor *weights, ITensor *output, const PadStrideInfo &conv_info);
+ void configure(const ITensor *input, const ITensor *weights, ITensor *output, const PadStrideInfo &conv_info, DataLayout data_layout = DataLayout::NCHW);
+ /** Static method that checks if optimized execution is supported for the given parameters
+ *
+ * @param[in] input_shape Input shape
+ * @param[in] conv_info Padding and stride information to use for the convolution.
+ * @param[in] dt Data type of the input and weights
+ * @param[in] data_layout (Optional) Data layout of the input and weights tensor
+ *
+ * @return True if the optimized kernels can be executed else false
+ */
+ static bool is_optimized_execution_possible(TensorShape input_shape, PadStrideInfo conv_info, DataType dt, DataLayout data_layout = DataLayout::NCHW);
+ /** Generates the convolver object */
+ void generate_convolver();
// Inherited methods overridden:
void run(const Window &window, const ThreadInfo &info) override;
BorderSize border_size() const override;
private:
- BorderSize _border_size;
- const ITensor *_input;
- ITensor *_output;
- const ITensor *_weights;
- PadStrideInfo _conv_info;
- unsigned int _num_elems_written_per_iteration;
+ void configure_generic();
+ void configure_optimized();
+ void run_generic(const Window &window, const ThreadInfo &info);
+ void run_optimized(const Window &window, const ThreadInfo &info);
+ std::unique_ptr<depthwise::IDepthwiseConvolution> create_convolver_object(TensorShape shape, PadStrideInfo conv_info,
+ const uint8_t *w_ptr, uint8_t *in_ptr, uint8_t *out_ptr);
+
+private:
+ BorderSize _border_size;
+ const ITensor *_input;
+ ITensor *_output;
+ const ITensor *_weights;
+ PadStrideInfo _conv_info;
+ std::unique_ptr<depthwise::IDepthwiseConvolution> _convolver;
+ unsigned int _num_elems_written_per_iteration;
+ bool _run_optimized;
};
} // namespace arm_compute
#endif /* __ARM_COMPUTE_NEDEPTHWISECONVOLUTIONKERNEL3x3_H__ */
diff --git a/arm_compute/core/NEON/kernels/NEWinogradLayerKernel.h b/arm_compute/core/NEON/kernels/NEWinogradLayerKernel.h
index 97532f3574..a8645dc07e 100644
--- a/arm_compute/core/NEON/kernels/NEWinogradLayerKernel.h
+++ b/arm_compute/core/NEON/kernels/NEWinogradLayerKernel.h
@@ -25,10 +25,10 @@
#define __ARM_COMPUTE_NEGEMMWINOGRADLAYERKERNEL_H__
#include "arm_compute/core/NEON/INEKernel.h"
-#include "arm_compute/core/NEON/kernels/winograd/batched_blocked_gemm.hpp"
-#include "arm_compute/core/NEON/kernels/winograd/convolution.hpp"
-#include "arm_compute/core/NEON/kernels/winograd/tensor.hpp"
-#include "arm_compute/core/NEON/kernels/winograd/winograd_gemm.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/common/convolution.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/common/tensor.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/winograd/batched_blocked_gemm.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp"
namespace arm_compute
{
diff --git a/arm_compute/core/NEON/kernels/winograd/alloc.hpp b/arm_compute/core/NEON/kernels/convolution/common/alloc.hpp
index 799e95d3e6..799e95d3e6 100644
--- a/arm_compute/core/NEON/kernels/winograd/alloc.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/common/alloc.hpp
diff --git a/arm_compute/core/NEON/kernels/winograd/arm.hpp b/arm_compute/core/NEON/kernels/convolution/common/arm.hpp
index 90e7828553..90e7828553 100644
--- a/arm_compute/core/NEON/kernels/winograd/arm.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/common/arm.hpp
diff --git a/arm_compute/core/NEON/kernels/winograd/convolution.hpp b/arm_compute/core/NEON/kernels/convolution/common/convolution.hpp
index 2ab2597785..2ab2597785 100644
--- a/arm_compute/core/NEON/kernels/winograd/convolution.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/common/convolution.hpp
diff --git a/arm_compute/core/NEON/kernels/winograd/perf.h b/arm_compute/core/NEON/kernels/convolution/common/perf.h
index 3c0d36646d..3c0d36646d 100644
--- a/arm_compute/core/NEON/kernels/winograd/perf.h
+++ b/arm_compute/core/NEON/kernels/convolution/common/perf.h
diff --git a/arm_compute/core/NEON/kernels/winograd/profiler.hpp b/arm_compute/core/NEON/kernels/convolution/common/profiler.hpp
index 01fafa9604..01fafa9604 100644
--- a/arm_compute/core/NEON/kernels/winograd/profiler.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/common/profiler.hpp
diff --git a/arm_compute/core/NEON/kernels/winograd/shims.hpp b/arm_compute/core/NEON/kernels/convolution/common/shims.hpp
index 09e14577ff..09e14577ff 100644
--- a/arm_compute/core/NEON/kernels/winograd/shims.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/common/shims.hpp
diff --git a/arm_compute/core/NEON/kernels/winograd/tensor.hpp b/arm_compute/core/NEON/kernels/convolution/common/tensor.hpp
index 6567eeb23d..6567eeb23d 100644
--- a/arm_compute/core/NEON/kernels/winograd/tensor.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/common/tensor.hpp
diff --git a/arm_compute/core/NEON/kernels/winograd/tensor_utils.hpp b/arm_compute/core/NEON/kernels/convolution/common/tensor_utils.hpp
index 68a5c6a178..68a5c6a178 100644
--- a/arm_compute/core/NEON/kernels/winograd/tensor_utils.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/common/tensor_utils.hpp
diff --git a/arm_compute/core/NEON/kernels/winograd/utils.hpp b/arm_compute/core/NEON/kernels/convolution/common/utils.hpp
index d8b9c3b7d3..d8b9c3b7d3 100644
--- a/arm_compute/core/NEON/kernels/winograd/utils.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/common/utils.hpp
diff --git a/arm_compute/core/NEON/kernels/convolution/depthwise/depthwise.hpp b/arm_compute/core/NEON/kernels/convolution/depthwise/depthwise.hpp
new file mode 100644
index 0000000000..80b0614015
--- /dev/null
+++ b/arm_compute/core/NEON/kernels/convolution/depthwise/depthwise.hpp
@@ -0,0 +1,209 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+namespace depthwise
+{
+
+class IDepthwiseConvolution
+{
+public:
+ virtual ~IDepthwiseConvolution() = default;
+ virtual int output_size(const int dim_size, const bool padding_same) const = 0;
+ virtual unsigned int get_window(void) const = 0;
+ virtual void run(const unsigned int start, const unsigned int stop) = 0;
+};
+
+template <
+ int OutputTileRows,
+ int OutputTileCols,
+ int KernelRows,
+ int KernelCols,
+ int StrideRows,
+ int StrideCols,
+ typename TIn,
+ typename TOut
+>
+class DepthwiseConvolution : public IDepthwiseConvolution
+{
+ public:
+ typedef TIn InputType;
+ typedef TOut OutputType;
+
+ // Information about the specific convolution instance
+ static constexpr int output_tile_rows = OutputTileRows;
+ static constexpr int output_tile_cols = OutputTileCols;
+ static constexpr int kernel_rows = KernelRows;
+ static constexpr int kernel_cols = KernelCols;
+ static constexpr int stride_rows = StrideRows;
+ static constexpr int stride_cols = StrideCols;
+ static constexpr int inner_tile_rows = stride_rows * output_tile_rows + kernel_rows - 1;
+ static constexpr int inner_tile_cols = stride_cols * output_tile_cols + kernel_cols - 1;
+
+ /** Create a new depthwise convolution engine.
+ *
+ * @param[in] n_batches Number of batches tensors.
+ * @param[in] n_input_rows Number of rows in input tensor.
+ * @param[in] n_input_cols Number of columns in input tensor.
+ * @param[in] n_channels Number of channels in input and output tensors.
+ * @param[in] padding_same True if padding is SAME, else VALID.
+ * @param[in] weights Pointer to Height x Width x Channel ordered weights.
+ * @param[in] input Pointer to NHWC ordered input tensor.
+ * @param[output] output Pointer to NHWC ordered output tensor.
+ */
+ DepthwiseConvolution(
+ const int n_batches, const int n_input_rows, const int n_input_cols,
+ const int n_channels, const bool padding_same,
+ const TIn* const weights,
+ const TIn* const input,
+ TOut* const output
+ );
+
+ // Cannot copy or move a DepthwiseConvolution.
+ DepthwiseConvolution(DepthwiseConvolution&) = delete;
+ DepthwiseConvolution operator=(DepthwiseConvolution&) = delete;
+
+ /** Get the number of output rows/columns.
+ *
+ * @param[in] dim_size Number of elements in the dimension (rows/columns)
+ * @param[in] same_padding True if the padding is SAME, otherwise false.
+ */
+ static int get_output_size(const int dim_size, const bool padding_same);
+
+ /** Get the number of output rows/columns.
+ *
+ * @param[in] dim_size Number of elements in the dimension (rows/columns)
+ * @param[in] same_padding True if the padding is SAME, otherwise false.
+ */
+ int output_size(const int dim_size, const bool padding_same) const override
+ {
+ return DepthwiseConvolution<OutputTileRows,
+ OutputTileCols,
+ KernelRows,
+ KernelCols,
+ StrideRows,
+ StrideCols,
+ TIn,
+ TOut>::get_output_size(dim_size, padding_same);
+ }
+
+ /** Get the window of work to be performed by an instance of the operator.
+ */
+ unsigned int get_window(void) const override;
+
+ /** Perform a portion of the work associated with the operator.
+ *
+ * Will perform the window of work described by $[start, stop)$.
+ *
+ * @param[in] start Start of the window of work to perform.
+ * @param[in] stop End of the work to perform.
+ */
+ void run(const unsigned int start, const unsigned int stop) override;
+
+ protected:
+ /** Process a tile-row of the tensors.
+ */
+ static void process_tile_row(
+ const int n_channels,
+ const TIn* const weights,
+ const TIn* const inptr,
+ const int in_row_stride,
+ const int in_col_stride,
+ TOut* const outptr,
+ const int out_row_stride,
+ const int out_col_stride,
+ const int row_pad_in_top,
+ const int row_pad_in_left,
+ const int row_pad_in_bottom,
+ const int row_pad_out_bottom,
+ const int n_tiles,
+ const int n_input_cols,
+ const int n_output_cols
+ );
+
+ /** Process a single tile of the tensors.
+ *
+ * @param[in] n_channels Number of channels.
+ * @param[in] weights Pointer to Height x Width x Channels ordered weights.
+ * @param[in] inptr Pointer to the top-left unpadded value of the tile.
+ * @param[in] in_row_stride Stride between rows of the input tensor.
+ * @param[in] in_col_stride Stride between columns of the input tensor.
+ * @param[out] outptr Pointer to the top-left output value for the tile.
+ * @param[in] out_row_stride Stride between rows of the output tensor.
+ * @param[in] out_col_stride Stride between columns of the output tensor.
+ */
+ template <
+ int in_pad_top, int in_pad_left, int in_pad_bottom, int in_pad_right,
+ int out_pad_bottom, int out_pad_right
+ >
+ static void process_tile(
+ const int n_channels,
+ const TIn* const weights,
+ const TIn* const inptr,
+ const int in_row_stride,
+ const int in_col_stride,
+ TOut* const outptr,
+ const int out_row_stride,
+ const int out_col_stride
+ );
+
+ // Type of a pointer to a `process_tile` instance
+ typedef void (*TileFn)(
+ const int,
+ const TIn* const,
+ const TIn* const, const int, const int,
+ TOut* const, const int, const int
+ );
+
+ // Determine the maximum padding values which can be applied to tiles of
+ // the tensors involved in this class of convolution.
+ static constexpr int max_in_pad_top = 2;
+ static constexpr int max_in_pad_left = 2;
+ static constexpr int max_in_pad_bottom = inner_tile_rows - 1;
+ static constexpr int max_in_pad_right = inner_tile_cols - 1;
+ static constexpr int max_out_pad_bottom = output_tile_rows;
+ static constexpr int max_out_pad_right = output_tile_cols;
+
+ /** Array of methods to process tensor tiles.
+ *
+ * Allows dynamic dispatch to specialized implementations based on
+ * different padding configurations.
+ */
+ static const TileFn 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
+ ];
+
+ private:
+ // Member variables of instances of a convolution engine.
+ const TIn* const _weights;
+ const TIn* const _input;
+ TOut* const _output;
+ const int _n_batches, _n_input_rows, _n_input_cols, _n_channels,
+ _n_output_rows, _n_output_cols, _n_tile_rows, _n_tile_cols;
+ const bool _padding_same;
+};
+
+} // namespace depthwise
diff --git a/arm_compute/core/NEON/kernels/convolution/depthwise/impl_base.hpp b/arm_compute/core/NEON/kernels/convolution/depthwise/impl_base.hpp
new file mode 100644
index 0000000000..f9671fc426
--- /dev/null
+++ b/arm_compute/core/NEON/kernels/convolution/depthwise/impl_base.hpp
@@ -0,0 +1,348 @@
+/*
+ * 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.
+ */
+
+/*
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ *
+ * NOTE: Header to be included by implementation files only.
+ *
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ */
+
+#include <algorithm>
+#include "arm_compute/core/NEON/kernels/convolution/depthwise/depthwise.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/common/utils.hpp"
+
+#pragma once
+
+namespace depthwise
+{
+
+template <int OTR, int OTC, int KR, int KC, int SR, int SC, typename TIn, typename TOut>
+int DepthwiseConvolution<OTR, OTC, KR, KC, SR, SC, TIn, TOut>::get_output_size(
+ const int dim_size, const bool same_padding
+)
+{
+ return iceildiv(dim_size - (same_padding ? 0 : (KC - 1)), SR);
+}
+
+
+template <int OTR, int OTC, int KR, int KC, int SR, int SC, typename TIn, typename TOut>
+DepthwiseConvolution<OTR, OTC, KR, KC, SR, SC, TIn, TOut>::DepthwiseConvolution(
+ const int n_batches, const int n_input_rows, const int n_input_cols,
+ const int n_channels, const bool padding_same,
+ const TIn* const weights,
+ const TIn* const input,
+ TOut* const output
+) : _weights(weights), _input(input), _output(output),
+ _n_batches(n_batches),
+ _n_input_rows(n_input_rows),
+ _n_input_cols(n_input_cols),
+ _n_channels(n_channels),
+ _n_output_rows(get_output_size(n_input_rows, padding_same)),
+ _n_output_cols(get_output_size(n_input_cols, padding_same)),
+ _n_tile_rows(iceildiv(_n_output_rows, output_tile_rows)),
+ _n_tile_cols(iceildiv(_n_output_cols, output_tile_cols)),
+ _padding_same(padding_same)
+{
+}
+
+
+template <int OTR, int OTC, int KR, int KC, int SR, int SC, typename TIn, typename TOut>
+unsigned int DepthwiseConvolution<OTR, OTC, KR, KC, SR, SC, TIn, TOut>::get_window() const
+{
+ // TODO Later support parallelisation over tile rows.
+ return 1; // _n_tile_rows;
+}
+
+
+template <int OTR, int OTC, int KR, int KC, int SR, int SC, typename TIn, typename TOut>
+void DepthwiseConvolution<OTR, OTC, KR, KC, SR, SC, TIn, TOut>::run(
+ const unsigned int start,
+ const unsigned int stop
+)
+{
+ // TODO Later support parallelisation over tile rows.
+ (void) start;
+ (void) stop;
+
+ // Compute input striding
+ const int input_col_stride = _n_channels;
+ const int input_row_stride = _n_input_cols * input_col_stride;
+ const int input_batch_stride = _n_input_rows * input_row_stride;
+
+ // Compute output striding
+ const int output_col_stride = _n_channels;
+ const int output_row_stride = _n_output_cols * output_col_stride;
+ const int output_batch_stride = _n_output_rows * output_row_stride;
+
+ // Compute top and bottom padding for input and output
+ const int input_pad_top = _padding_same ?
+ ((_n_output_rows - 1)*stride_rows + kernel_rows - _n_input_rows) / 2 : 0;
+ const int input_pad_left = _padding_same ?
+ ((_n_output_cols - 1)*stride_cols + kernel_cols - _n_input_cols) / 2 : 0;
+ constexpr int tile_overlap = kernel_rows - 1;
+
+ // Perform the convolution by calling `process_tile_row` for each tile row in
+ // each batch.
+ for (int batch = 0; batch < _n_batches; batch++)
+ {
+ const TIn* const inptr_batch = _input + batch*input_batch_stride;
+ TOut* const outptr_batch = _output + batch*output_batch_stride;
+
+ // Loop over rows of tiles
+ for (int tile_i = 0; tile_i < _n_tile_rows; tile_i++)
+ {
+ // Pointer to the row
+ const int input_row_offset = (tile_i == 0) ? 0 : input_pad_top;
+ const TIn* const inptr_row = (inptr_batch + ((inner_tile_rows - tile_overlap)*tile_i - input_row_offset)*input_row_stride);
+ TOut* const outptr_row = outptr_batch + output_tile_rows * tile_i * output_row_stride;
+
+ // Input padding (top + bottom) for the row
+ const int input_row_top = tile_i*(inner_tile_rows - tile_overlap) - input_pad_top;
+ const int input_row_bottom = input_row_top + inner_tile_rows;
+ const int input_row_pad_top = (tile_i == 0) ? input_pad_top : 0;
+ const int input_row_pad_bottom = std::max(0, input_row_bottom - _n_input_rows);
+
+ // Output padding (bottom) for the row
+ const int output_row_bottom = (tile_i + 1)*output_tile_rows;
+ const int output_row_pad_bottom = std::max(0, output_row_bottom - _n_output_rows);
+
+ // Process the row
+ process_tile_row(
+ _n_channels, _weights,
+ inptr_row, input_row_stride, input_col_stride,
+ outptr_row, output_row_stride, output_col_stride,
+ input_row_pad_top, input_pad_left, input_row_pad_bottom,
+ output_row_pad_bottom,
+ _n_tile_cols, _n_input_cols, _n_output_cols
+ );
+ }
+ }
+}
+
+
+template <int OTR, int OTC, int KR, int KC, int SR, int SC, typename TIn, typename TOut>
+void DepthwiseConvolution<OTR, OTC, KR, KC, SR, SC, TIn, TOut>::process_tile_row(
+ const int n_channels,
+ const TIn* const weights,
+ const TIn* const inptr,
+ const int in_row_stride,
+ const int in_col_stride,
+ TOut* const outptr,
+ const int out_row_stride,
+ const int out_col_stride,
+ const int row_pad_in_top,
+ const int row_pad_in_left,
+ const int row_pad_in_bottom,
+ const int row_pad_out_bottom,
+ const int n_tiles,
+ const int n_input_cols,
+ const int n_output_cols
+)
+{
+ constexpr int tile_overlap = kernel_cols - 1;
+
+ // Loop over columns of tiles
+ for (int tile_j = 0; tile_j < n_tiles; tile_j++)
+ {
+ // Input padding (left + right) for the tile
+ const int t_pad_in_left = (tile_j == 0) ? row_pad_in_left : 0;
+ const int t_in_start = tile_j*(inner_tile_cols - tile_overlap) - row_pad_in_left;
+ const int t_in_end = t_in_start + inner_tile_cols;
+ const int t_pad_in_right = std::max(0, t_in_end - n_input_cols);
+
+ // Output padding (right) for the tile
+ const int t_out_end = (tile_j + 1) * output_tile_cols;
+ const int t_pad_out_right = std::max(0, t_out_end - n_output_cols);
+
+ // Get pointers into the inputs and outputs
+ const int col_offset = (tile_j == 0) ? 0 : row_pad_in_left;
+ const TIn* const inptr_col = (inptr + ((inner_tile_cols - tile_overlap)*tile_j - col_offset)*in_col_stride);
+ TOut* const outptr_col = outptr + tile_j * output_tile_cols * out_col_stride;
+
+ // Apply the specific tile processing function
+ tile_fns[row_pad_in_top][t_pad_in_left][row_pad_in_bottom][t_pad_in_right][row_pad_out_bottom][t_pad_out_right](
+ n_channels, weights,
+ inptr_col, in_row_stride, in_col_stride,
+ outptr_col, out_row_stride, out_col_stride
+ );
+ }
+}
+
+
+template <int OTR, int OTC, int KR, int KC, int SR, int SC, typename TIn, typename TOut>
+template <
+ int in_pad_top, int in_pad_left, int in_pad_bottom, int in_pad_right,
+ int out_pad_bottom, int out_pad_right
+>
+void DepthwiseConvolution<OTR, OTC, KR, KC, SR, SC, TIn, TOut>::process_tile(
+ const int n_channels,
+ const TIn* const weights,
+ const TIn* const inptr,
+ const int in_row_stride,
+ const int in_col_stride,
+ TOut* const outptr,
+ const int out_row_stride,
+ const int out_col_stride
+)
+{
+ // Compute valid ranges of the tile
+ constexpr int in_cells_i = inner_tile_rows - in_pad_bottom;
+ constexpr int in_cells_j = inner_tile_cols - in_pad_right;
+ constexpr int out_cells_i = output_tile_rows - out_pad_bottom;
+ constexpr int out_cells_j = output_tile_cols - out_pad_right;
+
+ // Instantiate pointers
+ const TIn* inptr_base = inptr;
+ const TIn* wptr_base = weights;
+ TOut* outptr_base = outptr;
+
+ const int weight_col_stride = n_channels;
+ const int weight_row_stride = kernel_cols * n_channels;
+
+ // Perform the depthwise convolution
+ int channels_remaining = n_channels;
+ for (; channels_remaining; channels_remaining--)
+ {
+ // Load input tile
+ TIn u[inner_tile_rows][inner_tile_cols];
+ for (int i = 0; i < inner_tile_rows; i++)
+ {
+ const TIn* const inptr_row = inptr_base + (i - in_pad_top)*in_row_stride;
+ for (int j = 0; j < inner_tile_cols; j++)
+ {
+ if (i < in_pad_top || in_cells_i <= i ||
+ j < in_pad_left || in_cells_j <= j)
+ {
+ u[i][j] = static_cast<TIn>(0);
+ }
+ else
+ {
+ u[i][j] = *(inptr_row + (j - in_pad_left)*in_col_stride);
+ }
+ }
+ }
+ inptr_base++;
+
+ // Load weights tile
+ TIn w[kernel_rows][kernel_cols];
+ for (int i = 0; i < kernel_rows; i++)
+ {
+ const TIn* const wptr_row = wptr_base + i*weight_row_stride;
+ for (int j = 0; j < kernel_cols; j++)
+ {
+ w[i][j] = *(wptr_row + j*weight_col_stride);
+ }
+ }
+ wptr_base++;
+
+ // Perform the convolution
+ TOut v[out_cells_i][out_cells_j];
+ for (int out_i = 0; out_i < out_cells_i; out_i++)
+ {
+ for (int out_j = 0; out_j < out_cells_j; out_j++)
+ {
+ // Clear the accumulator
+ v[out_i][out_j] = static_cast<TOut>(0);
+
+ // Base co-ordinate
+ const int base_i = out_i * stride_rows;
+ const int base_j = out_j * stride_cols;
+
+ // Fill the accumulator
+ for (int in_i = 0; in_i < kernel_rows; in_i++)
+ {
+ const int i = base_i + in_i;
+ for (int in_j = 0; in_j < kernel_cols; in_j++)
+ {
+ const int j = base_j + in_j;
+ v[out_i][out_j] += w[in_i][in_j] * u[i][j];
+ }
+ }
+ }
+ }
+
+ // Store the output tile
+ for (int i = 0; i < out_cells_i; i++)
+ {
+ TOut* const outptr_row = outptr_base + i*out_row_stride;
+ for (int j = 0; j < out_cells_j; j++)
+ {
+ *(outptr_row + j*out_col_stride) = v[i][j];
+ }
+ }
+ outptr_base++;
+ }
+}
+
+
+// New templated struct used solely as a way to provide tile processing
+// specialisations.
+template <int OutputTileRows, int OutputTileCols,
+ int KernelRows, int KernelCols,
+ int StrideRows, int StrideCols,
+ typename TIn, typename TOut>
+struct DepthwiseConvolutionImpl : public DepthwiseConvolution<
+ OutputTileRows, OutputTileCols,
+ KernelRows, KernelCols,
+ StrideRows, StrideCols, TIn, TOut
+>
+{
+ template <
+ int in_pad_top, int in_pad_left, int in_pad_bottom, int in_pad_right,
+ int out_pad_bottom, int out_pad_right
+ >
+ static void process_tile(
+ const int n_channels,
+ const TIn* const weights,
+ const TIn* const inptr,
+ const int in_row_stride,
+ const int in_col_stride,
+ TOut* const outptr,
+ const int out_row_stride,
+ const int out_col_stride
+ )
+ {
+ // By default, redirect to parent. Specialised implementations can be added
+ // by overriding this method.
+ DepthwiseConvolution<OutputTileRows, OutputTileCols,
+ KernelRows, KernelCols,
+ StrideRows, StrideCols,
+ TIn, TOut>::
+ template process_tile<in_pad_top, in_pad_left, in_pad_bottom, in_pad_right,
+ out_pad_bottom, out_pad_right>(
+ n_channels,
+ weights,
+ inptr,
+ in_row_stride,
+ in_col_stride,
+ outptr,
+ out_row_stride,
+ out_col_stride
+ );
+ }
+};
+
+} // namespace depthwise
diff --git a/arm_compute/core/NEON/kernels/convolution/depthwise/impl_fp32_fp32.hpp b/arm_compute/core/NEON/kernels/convolution/depthwise/impl_fp32_fp32.hpp
new file mode 100644
index 0000000000..e7f0609b0c
--- /dev/null
+++ b/arm_compute/core/NEON/kernels/convolution/depthwise/impl_fp32_fp32.hpp
@@ -0,0 +1,263 @@
+/*
+ * 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.
+ */
+
+/*
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ *
+ * NOTE: Header to be included by implementation files only.
+ *
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ */
+
+#include "arm_compute/core/NEON/kernels/convolution/common/arm.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/depthwise/impl_base.hpp"
+
+#pragma once
+
+namespace depthwise
+{
+// Partial specialisation for FP32 to FP32
+template <int OutputTileRows, int OutputTileCols,
+ int KernelRows, int KernelCols,
+ int StrideRows, int StrideCols>
+struct DepthwiseConvolutionImpl<OutputTileRows, OutputTileCols, KernelRows, KernelCols, StrideRows, StrideCols, float, float>
+{
+ typedef DepthwiseConvolution<
+ OutputTileRows, OutputTileCols,
+ KernelRows, KernelCols,
+ StrideRows, StrideCols,
+ float, float
+ > DWC;
+
+ template <
+ int in_pad_top, int in_pad_left, int in_pad_bottom, int in_pad_right,
+ int out_pad_bottom, int out_pad_right
+ >
+ static void process_tile(
+ const int n_channels,
+ const float* const weights,
+ const float* const inptr,
+ const int in_row_stride,
+ const int in_col_stride,
+ float* const outptr,
+ const int out_row_stride,
+ const int out_col_stride
+ );
+};
+
+
+template <int OTR, int OTC, int KR, int KC, int SR, int SC>
+template <
+ int in_pad_top, int in_pad_left, int in_pad_bottom, int in_pad_right,
+ int out_pad_bottom, int out_pad_right
+>
+void DepthwiseConvolutionImpl<OTR, OTC, KR, KC, SR, SC, float, float>::process_tile(
+ const int n_channels,
+ const float* const weights,
+ const float* const inptr,
+ const int in_row_stride,
+ const int in_col_stride,
+ float* const outptr,
+ const int out_row_stride,
+ const int out_col_stride
+)
+{
+ constexpr auto inner_tile_rows = DWC::inner_tile_rows;
+ constexpr auto inner_tile_cols = DWC::inner_tile_cols;
+ constexpr auto kernel_rows = DWC::kernel_rows;
+ constexpr auto kernel_cols = DWC::kernel_cols;
+ constexpr auto output_tile_rows = DWC::output_tile_rows;
+ constexpr auto output_tile_cols = DWC::output_tile_cols;
+ constexpr auto stride_rows = DWC::stride_rows;
+ constexpr auto stride_cols = DWC::stride_cols;
+
+ // Compute valid ranges of the tile
+ constexpr int in_cells_i = inner_tile_rows - in_pad_bottom;
+ constexpr int in_cells_j = inner_tile_cols - in_pad_right;
+ constexpr int out_cells_i = output_tile_rows - out_pad_bottom;
+ constexpr int out_cells_j = output_tile_cols - out_pad_right;
+
+ // Instantiate pointers
+ const float* inptr_base = inptr;
+ const float* wptr_base = weights;
+ float* outptr_base = outptr;
+
+ const int weight_col_stride = n_channels;
+ const int weight_row_stride = kernel_cols * n_channels;
+
+ // Perform the depthwise convolution
+ int channels_remaining = n_channels;
+#ifdef __aarch64__
+ for (; channels_remaining >= 4; channels_remaining -= 4)
+ {
+ // Load input tile
+ float32x4_t u[inner_tile_rows][inner_tile_cols];
+ for (int i = 0; i < inner_tile_rows; i++)
+ {
+ const float* const inptr_row = inptr_base + (i - in_pad_top)*in_row_stride;
+ for (int j = 0; j < inner_tile_cols; j++)
+ {
+ if (i < in_pad_top || in_cells_i <= i ||
+ j < in_pad_left || in_cells_j <= j)
+ {
+ u[i][j] = vdupq_n_f32(0.0f);
+ }
+ else
+ {
+ u[i][j] = vld1q_f32(inptr_row + (j - in_pad_left)*in_col_stride);
+ }
+ }
+ }
+ inptr_base += 4;
+
+ // Load weights tile
+ float32x4_t w[kernel_rows][kernel_cols];
+ for (int i = 0; i < kernel_rows; i++)
+ {
+ const float* const wptr_row = wptr_base + i*weight_row_stride;
+ for (int j = 0; j < kernel_cols; j++)
+ {
+ w[i][j] = vld1q_f32(wptr_row + j*weight_col_stride);
+ }
+ }
+ wptr_base += 4;
+
+ // Perform the convolution
+ float32x4_t v[out_cells_i][out_cells_j];
+ for (int out_i = 0; out_i < out_cells_i; out_i++)
+ {
+ for (int out_j = 0; out_j < out_cells_j; out_j++)
+ {
+ // Base co-ordinate
+ const int base_i = out_i * stride_rows;
+ const int base_j = out_j * stride_cols;
+
+ // Fill the accumulator
+ for (int in_i = 0; in_i < kernel_rows; in_i++)
+ {
+ const int i = base_i + in_i;
+ for (int in_j = 0; in_j < kernel_cols; in_j++)
+ {
+ const int j = base_j + in_j;
+ if (in_i == 0 && in_j == 0)
+ {
+ // v[out_i][out_j] = w[in_i][in_j] * u[i][j];
+ v[out_i][out_j] = vmulq_f32(w[in_i][in_j], u[i][j]);
+ }
+ else
+ {
+ // v[out_i][out_j] += w[in_i][in_j] * u[i][j];
+ v[out_i][out_j] = vmlaq_f32(v[out_i][out_j], w[in_i][in_j], u[i][j]);
+ }
+ }
+ }
+ }
+ }
+
+ // Store the output tile
+ for (int i = 0; i < out_cells_i; i++)
+ {
+ float* const outptr_row = outptr_base + i*out_row_stride;
+ for (int j = 0; j < out_cells_j; j++)
+ {
+ vst1q_f32(outptr_row + j*out_col_stride, v[i][j]);
+ }
+ }
+ outptr_base += 4;
+ }
+#endif // __aarch64__
+ for (; channels_remaining; channels_remaining--)
+ {
+ // Load input tile
+ float u[inner_tile_rows][inner_tile_cols];
+ for (int i = 0; i < inner_tile_rows; i++)
+ {
+ const float* const inptr_row = inptr_base + (i - in_pad_top)*in_row_stride;
+ for (int j = 0; j < inner_tile_cols; j++)
+ {
+ if (i < in_pad_top || in_cells_i <= i ||
+ j < in_pad_left || in_cells_j <= j)
+ {
+ u[i][j] = static_cast<float>(0);
+ }
+ else
+ {
+ u[i][j] = *(inptr_row + (j - in_pad_left)*in_col_stride);
+ }
+ }
+ }
+ inptr_base++;
+
+ // Load weights tile
+ float w[kernel_rows][kernel_cols];
+ for (int i = 0; i < kernel_rows; i++)
+ {
+ const float* const wptr_row = wptr_base + i*weight_row_stride;
+ for (int j = 0; j < kernel_cols; j++)
+ {
+ w[i][j] = *(wptr_row + j*weight_col_stride);
+ }
+ }
+ wptr_base++;
+
+ // Perform the convolution
+ float v[out_cells_i][out_cells_j];
+ for (int out_i = 0; out_i < out_cells_i; out_i++)
+ {
+ for (int out_j = 0; out_j < out_cells_j; out_j++)
+ {
+ // Clear the accumulator
+ v[out_i][out_j] = static_cast<float>(0);
+
+ // Base co-ordinate
+ const int base_i = out_i * stride_rows;
+ const int base_j = out_j * stride_cols;
+
+ // Fill the accumulator
+ for (int in_i = 0; in_i < kernel_rows; in_i++)
+ {
+ const int i = base_i + in_i;
+ for (int in_j = 0; in_j < kernel_cols; in_j++)
+ {
+ const int j = base_j + in_j;
+ v[out_i][out_j] += w[in_i][in_j] * u[i][j];
+ }
+ }
+ }
+ }
+
+ // Store the output tile
+ for (int i = 0; i < out_cells_i; i++)
+ {
+ float* const outptr_row = outptr_base + i*out_row_stride;
+ for (int j = 0; j < out_cells_j; j++)
+ {
+ *(outptr_row + j*out_col_stride) = v[i][j];
+ }
+ }
+ outptr_base++;
+ }
+}
+
+} // namespace depthwise
diff --git a/arm_compute/core/NEON/kernels/winograd/batched_blocked_gemm.hpp b/arm_compute/core/NEON/kernels/convolution/winograd/batched_blocked_gemm.hpp
index 663b3c414f..663b3c414f 100644
--- a/arm_compute/core/NEON/kernels/winograd/batched_blocked_gemm.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/winograd/batched_blocked_gemm.hpp
diff --git a/arm_compute/core/NEON/kernels/winograd/gemm.hpp b/arm_compute/core/NEON/kernels/convolution/winograd/gemm.hpp
index e48d31b4e6..62a20c9eea 100644
--- a/arm_compute/core/NEON/kernels/winograd/gemm.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/winograd/gemm.hpp
@@ -23,7 +23,7 @@
*/
#pragma once
-#include "utils.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/common/utils.hpp"
template <typename TIn, typename TOut>
inline void Gemm(const TIn* const a, const TIn* const b, TOut *c,
diff --git a/arm_compute/core/NEON/kernels/winograd/gemm/a64_sgemm.hpp b/arm_compute/core/NEON/kernels/convolution/winograd/gemm/a64_sgemm.hpp
index caeb48f65a..8073cb1896 100644
--- a/arm_compute/core/NEON/kernels/winograd/gemm/a64_sgemm.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/winograd/gemm/a64_sgemm.hpp
@@ -24,7 +24,7 @@
#pragma once
#include <cassert>
-#include "../utils.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/common/utils.hpp"
#ifdef __aarch64__
diff --git a/arm_compute/core/NEON/kernels/winograd/gemm/a64_sgemm_4x16.hpp b/arm_compute/core/NEON/kernels/convolution/winograd/gemm/a64_sgemm_4x16.hpp
index 5cd37de7a0..5cd37de7a0 100644
--- a/arm_compute/core/NEON/kernels/winograd/gemm/a64_sgemm_4x16.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/winograd/gemm/a64_sgemm_4x16.hpp
diff --git a/arm_compute/core/NEON/kernels/winograd/transforms/input.hpp b/arm_compute/core/NEON/kernels/convolution/winograd/transforms/input.hpp
index 075765a513..6dd8f5460a 100644
--- a/arm_compute/core/NEON/kernels/winograd/transforms/input.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/winograd/transforms/input.hpp
@@ -23,7 +23,7 @@
*/
#pragma once
-#include "../winograd_gemm.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp"
namespace winograd
{
diff --git a/arm_compute/core/NEON/kernels/winograd/transforms/kernel.hpp b/arm_compute/core/NEON/kernels/convolution/winograd/transforms/kernel.hpp
index 4b54dfdf08..bad3ef2249 100644
--- a/arm_compute/core/NEON/kernels/winograd/transforms/kernel.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/winograd/transforms/kernel.hpp
@@ -22,7 +22,7 @@
* SOFTWARE.
*/
-#include "winograd_gemm.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp"
using namespace winograd;
diff --git a/arm_compute/core/NEON/kernels/winograd/transforms/output.hpp b/arm_compute/core/NEON/kernels/convolution/winograd/transforms/output.hpp
index 0dd719751b..401b2816be 100644
--- a/arm_compute/core/NEON/kernels/winograd/transforms/output.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/winograd/transforms/output.hpp
@@ -23,7 +23,7 @@
*/
#pragma once
-#include "../winograd_gemm.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp"
namespace winograd
{
diff --git a/arm_compute/core/NEON/kernels/winograd/winograd_gemm.hpp b/arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp
index 2ea70f182b..f3b2bb10ed 100644
--- a/arm_compute/core/NEON/kernels/winograd/winograd_gemm.hpp
+++ b/arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp
@@ -24,13 +24,13 @@
#pragma once
-#include "alloc.hpp"
-#include "convolution.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/common/alloc.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/common/convolution.hpp"
#include "gemm.hpp"
-#include "profiler.hpp"
-#include "shims.hpp"
-#include "tensor.hpp"
-#include "utils.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/common/profiler.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/common/shims.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/common/tensor.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/common/utils.hpp"
#include <thread>
#include <utility>
diff --git a/arm_compute/core/NEON/kernels/convolution/NEDirectConvolution3x3.h b/arm_compute/core/NEON/kernels/detail/NEDirectConvolution3x3.h
index 7f39e5ee8d..fee206638b 100644
--- a/arm_compute/core/NEON/kernels/convolution/NEDirectConvolution3x3.h
+++ b/arm_compute/core/NEON/kernels/detail/NEDirectConvolution3x3.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
*
* SPDX-License-Identifier: MIT
*
diff --git a/arm_compute/core/NEON/kernels/convolution/NEDirectConvolutionDetail.h b/arm_compute/core/NEON/kernels/detail/NEDirectConvolutionDetail.h
index 908fa13876..908fa13876 100644
--- a/arm_compute/core/NEON/kernels/convolution/NEDirectConvolutionDetail.h
+++ b/arm_compute/core/NEON/kernels/detail/NEDirectConvolutionDetail.h
diff --git a/arm_compute/core/NEON/kernels/winograd/direct_convolution.hpp b/arm_compute/core/NEON/kernels/winograd/direct_convolution.hpp
deleted file mode 100644
index 6a9984a24a..0000000000
--- a/arm_compute/core/NEON/kernels/winograd/direct_convolution.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2017 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.
- */
-
-#pragma once
-#include "convolution.hpp"
-#include "tensor.hpp"
-
-void direct_convolution(
- const Tensor4D<Tensor4DShape, float>& input,
- const Tensor4D<KernelShape, float>& kernel,
- const Tensor4D<Tensor4DShape, float>& biases,
- Tensor4D<Tensor4DShape, float>& output,
- const PaddingType padding
-);
diff --git a/arm_compute/core/Types.h b/arm_compute/core/Types.h
index 72be5cba2b..5a08ac9153 100644
--- a/arm_compute/core/Types.h
+++ b/arm_compute/core/Types.h
@@ -106,6 +106,13 @@ constexpr float SCALE_PYRAMID_HALF = 0.5f;
/* Constant value used to indicate a ORB scaled pyramid */
constexpr float SCALE_PYRAMID_ORB = 8.408964152537146130583778358414e-01;
+/** Supported tensor data layouts */
+enum class DataLayout
+{
+ NCHW,
+ NHWC
+};
+
/** Quantization settings (used for QASYMM8 data type) */
struct QuantizationInfo
{
diff --git a/arm_compute/core/Utils.h b/arm_compute/core/Utils.h
index fc89d97073..111eac0e57 100644
--- a/arm_compute/core/Utils.h
+++ b/arm_compute/core/Utils.h
@@ -602,6 +602,16 @@ inline DataType data_type_for_convolution_matrix(const int16_t *conv, size_t siz
}
}
+/** Calculate padding requirements in case of SAME padding
+ *
+ * @param[in] input_shape Input shape
+ * @param[in] weights_shape Weights shape
+ * @param[in] conv_info Convolution information (containing strides)
+ *
+ * @return PadStrideInfo for SAME padding
+ */
+PadStrideInfo calculate_same_pad(TensorShape input_shape, TensorShape weights_shape, PadStrideInfo conv_info);
+
/** Returns expected shape for the deconvolution output tensor.
*
* @param[in] out_dims widht and height of the output tensor, these values can be obtained with the function deconvolution_output_dimensions.
diff --git a/arm_compute/runtime/NEON/functions/NEDepthwiseConvolutionLayer.h b/arm_compute/runtime/NEON/functions/NEDepthwiseConvolutionLayer.h
index e89ef88562..682effe84b 100644
--- a/arm_compute/runtime/NEON/functions/NEDepthwiseConvolutionLayer.h
+++ b/arm_compute/runtime/NEON/functions/NEDepthwiseConvolutionLayer.h
@@ -32,6 +32,7 @@
#include "arm_compute/core/NEON/kernels/NEFillBorderKernel.h"
#include "arm_compute/core/NEON/kernels/NEGEMMMatrixVectorMultiplyKernel.h"
#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/CPP/functions/CPPPermute.h"
#include "arm_compute/runtime/IFunction.h"
#include "arm_compute/runtime/IMemoryManager.h"
#include "arm_compute/runtime/MemoryGroup.h"
@@ -67,12 +68,20 @@ public:
void run() override;
private:
- NEDepthwiseConvolutionLayer3x3Kernel _kernel;
+ NEDepthwiseConvolutionLayer3x3Kernel _dwc_kernel;
NEDirectConvolutionLayerOutputStageKernel _output_stage_kernel;
NEFillBorderKernel _border_handler;
+ CPPPermute _permute_input;
+ CPPPermute _permute_weights;
+ CPPPermute _permute_output;
Tensor _accumulator;
+ Tensor _input_nhwc;
+ Tensor _weights_hwio;
+ Tensor _output_nhwc;
bool _has_bias;
bool _is_quantized;
+ bool _is_optimized;
+ bool _are_weights_reshaped;
};
/** Basic function to execute a generic depthwise convolution. This function calls the following NEON kernels:
diff --git a/docs/Doxyfile b/docs/Doxyfile
index 59aa780fd3..4046b373bc 100644
--- a/docs/Doxyfile
+++ b/docs/Doxyfile
@@ -856,7 +856,7 @@ RECURSIVE = YES
# run.
EXCLUDE = ./arm_compute/core/NEON/kernels/assembly/ \
- ./arm_compute/core/NEON/kernels/winograd/
+ ./arm_compute/core/NEON/kernels/convolution/
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
diff --git a/examples/graph_mobilenet.cpp b/examples/graph_mobilenet.cpp
index 83d1db9f0f..6d3a88e540 100644
--- a/examples/graph_mobilenet.cpp
+++ b/examples/graph_mobilenet.cpp
@@ -126,18 +126,18 @@ public:
<< ActivationLayer(ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 6.f))
<< get_dwsc_node(data_path, "Conv2d_1", 64 * depth_scale, PadStrideInfo(1, 1, 1, 1), PadStrideInfo(1, 1, 0, 0))
- << get_dwsc_node(data_path, "Conv2d_2", 128 * depth_scale, PadStrideInfo(2, 2, 0, 1, 0, 1, DimensionRoundingType::FLOOR), PadStrideInfo(1, 1, 0, 0))
- << get_dwsc_node(data_path, "Conv2d_3", 128 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::FLOOR), PadStrideInfo(1, 1, 0, 0))
- << get_dwsc_node(data_path, "Conv2d_4", 256 * depth_scale, PadStrideInfo(2, 2, 0, 1, 0, 1, DimensionRoundingType::FLOOR), PadStrideInfo(1, 1, 0, 0))
- << get_dwsc_node(data_path, "Conv2d_5", 256 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::FLOOR), PadStrideInfo(1, 1, 0, 0))
- << get_dwsc_node(data_path, "Conv2d_6", 512 * depth_scale, PadStrideInfo(2, 2, 0, 1, 0, 1, DimensionRoundingType::FLOOR), PadStrideInfo(1, 1, 0, 0))
- << get_dwsc_node(data_path, "Conv2d_7", 512 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::FLOOR), PadStrideInfo(1, 1, 0, 0))
- << get_dwsc_node(data_path, "Conv2d_8", 512 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::FLOOR), PadStrideInfo(1, 1, 0, 0))
- << get_dwsc_node(data_path, "Conv2d_9", 512 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::FLOOR), PadStrideInfo(1, 1, 0, 0))
- << get_dwsc_node(data_path, "Conv2d_10", 512 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::FLOOR), PadStrideInfo(1, 1, 0, 0))
- << get_dwsc_node(data_path, "Conv2d_11", 512 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::FLOOR), PadStrideInfo(1, 1, 0, 0))
- << get_dwsc_node(data_path, "Conv2d_12", 1024 * depth_scale, PadStrideInfo(2, 2, 0, 1, 0, 1, DimensionRoundingType::FLOOR), PadStrideInfo(1, 1, 0, 0))
- << get_dwsc_node(data_path, "Conv2d_13", 1024 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::FLOOR), PadStrideInfo(1, 1, 0, 0))
+ << get_dwsc_node(data_path, "Conv2d_2", 128 * depth_scale, PadStrideInfo(2, 2, 0, 1, 0, 1, DimensionRoundingType::CEIL), PadStrideInfo(1, 1, 0, 0))
+ << get_dwsc_node(data_path, "Conv2d_3", 128 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::CEIL), PadStrideInfo(1, 1, 0, 0))
+ << get_dwsc_node(data_path, "Conv2d_4", 256 * depth_scale, PadStrideInfo(2, 2, 0, 1, 0, 1, DimensionRoundingType::CEIL), PadStrideInfo(1, 1, 0, 0))
+ << get_dwsc_node(data_path, "Conv2d_5", 256 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::CEIL), PadStrideInfo(1, 1, 0, 0))
+ << get_dwsc_node(data_path, "Conv2d_6", 512 * depth_scale, PadStrideInfo(2, 2, 0, 1, 0, 1, DimensionRoundingType::CEIL), PadStrideInfo(1, 1, 0, 0))
+ << get_dwsc_node(data_path, "Conv2d_7", 512 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::CEIL), PadStrideInfo(1, 1, 0, 0))
+ << get_dwsc_node(data_path, "Conv2d_8", 512 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::CEIL), PadStrideInfo(1, 1, 0, 0))
+ << get_dwsc_node(data_path, "Conv2d_9", 512 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::CEIL), PadStrideInfo(1, 1, 0, 0))
+ << get_dwsc_node(data_path, "Conv2d_10", 512 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::CEIL), PadStrideInfo(1, 1, 0, 0))
+ << get_dwsc_node(data_path, "Conv2d_11", 512 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::CEIL), PadStrideInfo(1, 1, 0, 0))
+ << get_dwsc_node(data_path, "Conv2d_12", 1024 * depth_scale, PadStrideInfo(2, 2, 0, 1, 0, 1, DimensionRoundingType::CEIL), PadStrideInfo(1, 1, 0, 0))
+ << get_dwsc_node(data_path, "Conv2d_13", 1024 * depth_scale, PadStrideInfo(1, 1, 1, 1, 1, 1, DimensionRoundingType::CEIL), PadStrideInfo(1, 1, 0, 0))
<< PoolingLayer(PoolingLayerInfo(PoolingType::AVG))
<< ConvolutionLayer(
1U, 1U, 1001U,
diff --git a/scripts/check_bad_style.sh b/scripts/check_bad_style.sh
index 4cd69757d6..c9fa57f8eb 100755
--- a/scripts/check_bad_style.sh
+++ b/scripts/check_bad_style.sh
@@ -5,7 +5,7 @@ set -e
DIRECTORIES="./arm_compute ./src ./examples ./tests ./utils ./support"
-grep -HrnP --exclude-dir=assembly --exclude-dir=winograd "/\*\*$" $DIRECTORIES | tee bad_style.log
+grep -HrnP --exclude-dir=assembly --exclude-dir=convolution "/\*\*$" $DIRECTORIES | tee bad_style.log
if (( `cat bad_style.log | wc -l` > 0 ))
then
echo ""
@@ -13,7 +13,7 @@ then
exit -1
fi
-grep -Hnr --exclude-dir=assembly --exclude-dir=winograd --exclude=Doxyfile "@brief" $DIRECTORIES | tee bad_style.log
+grep -Hnr --exclude-dir=assembly --exclude-dir=convolution --exclude=Doxyfile "@brief" $DIRECTORIES | tee bad_style.log
if (( `cat bad_style.log | wc -l` > 0 ))
then
echo ""
@@ -21,7 +21,7 @@ then
exit -1
fi
-grep -HnRE --exclude-dir=assembly --exclude-dir=winograd "\buint " --exclude-dir=cl_kernels --exclude-dir=cs_shaders $DIRECTORIES | tee bad_style.log
+grep -HnRE --exclude-dir=assembly --exclude-dir=convolution "\buint " --exclude-dir=cl_kernels --exclude-dir=cs_shaders $DIRECTORIES | tee bad_style.log
if [[ $(cat bad_style.log | wc -l) > 0 ]]
then
echo ""
@@ -29,7 +29,7 @@ then
exit -1
fi
-grep -HnR --exclude-dir=assembly --exclude-dir=winograd "float32_t" $DIRECTORIES | tee bad_style.log
+grep -HnR --exclude-dir=assembly --exclude-dir=convolution "float32_t" $DIRECTORIES | tee bad_style.log
if [[ $(cat bad_style.log | wc -l) > 0 ]]
then
echo ""
@@ -37,7 +37,7 @@ then
exit -1
fi
-grep -Hnir --exclude-dir=assembly --exclude-dir=winograd "arm[_ ]\?cv" $DIRECTORIES | tee bad_style.log
+grep -Hnir --exclude-dir=assembly --exclude-dir=convolution "arm[_ ]\?cv" $DIRECTORIES | tee bad_style.log
if [[ $(cat bad_style.log | wc -l) > 0 ]]
then
echo ""
@@ -45,7 +45,7 @@ then
exit -1
fi
-grep -Hnir --exclude-dir=assembly --exclude-dir=winograd "#.*if.*defined[^(]" $DIRECTORIES | tee bad_style.log
+grep -Hnir --exclude-dir=assembly --exclude-dir=convolution "#.*if.*defined[^(]" $DIRECTORIES | tee bad_style.log
if [[ $(cat bad_style.log | wc -l) > 0 ]]
then
echo ""
@@ -53,7 +53,7 @@ then
exit -1
fi
-grep -Hnir --exclude-dir=assembly --exclude-dir=winograd "#else$\|#endif$" $DIRECTORIES | tee bad_style.log
+grep -Hnir --exclude-dir=assembly --exclude-dir=convolution "#else$\|#endif$" $DIRECTORIES | tee bad_style.log
if [[ $(cat bad_style.log | wc -l) > 0 ]]
then
echo ""
@@ -61,7 +61,7 @@ then
exit -1
fi
-grep -Hnir --exclude-dir=assembly --exclude-dir=winograd "ARM_COMPUTE_AARCH64_V8_2" ./tests/validation/CL | tee bad_style.log
+grep -Hnir --exclude-dir=assembly --exclude-dir=convolution "ARM_COMPUTE_AARCH64_V8_2" ./tests/validation/CL | tee bad_style.log
if [[ $(cat bad_style.log | wc -l) > 0 ]]
then
echo ""
diff --git a/scripts/clang_tidy_rules.py b/scripts/clang_tidy_rules.py
index a250b519b9..fce84b0b9c 100755
--- a/scripts/clang_tidy_rules.py
+++ b/scripts/clang_tidy_rules.py
@@ -42,7 +42,7 @@ def filter_clang_tidy_lines( lines ):
if "/assembly/" in line:
continue
- if "/winograd/" in line:
+ if "/convolution/" in line:
continue
if "error:" in line:
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. */
diff --git a/src/core/Utils.cpp b/src/core/Utils.cpp
index 83a843de58..f4b45532cf 100644
--- a/src/core/Utils.cpp
+++ b/src/core/Utils.cpp
@@ -250,6 +250,21 @@ std::string arm_compute::lower_string(const std::string &val)
return res;
}
+PadStrideInfo arm_compute::calculate_same_pad(TensorShape input_shape, TensorShape weights_shape, PadStrideInfo conv_info)
+{
+ const auto &strides = conv_info.stride();
+ const int out_width = std::ceil(float(input_shape.x()) / float(strides.first));
+ const int out_height = std::ceil(float(input_shape.y()) / float(strides.second));
+ const int pad_width = ((out_width - 1) * strides.first + weights_shape.x() - input_shape.x());
+ const int pad_height = ((out_height - 1) * strides.second + weights_shape.y() - input_shape.y());
+ const int same_pad_left = pad_width / 2;
+ const int same_pad_top = pad_height / 2;
+ const int same_pad_right = pad_width - same_pad_left;
+ const int same_pad_bottom = pad_height - same_pad_top;
+
+ return PadStrideInfo(strides.first, strides.second, same_pad_left, same_pad_right, same_pad_top, same_pad_bottom, DimensionRoundingType::CEIL);
+}
+
TensorShape arm_compute::deconvolution_output_shape(const std::pair<unsigned int, unsigned int> &out_dims, TensorShape input, TensorShape weights)
{
TensorShape out_shape(input);
diff --git a/src/graph/operations/NESimpleOperations.cpp b/src/graph/operations/NESimpleOperations.cpp
index 88bf3ec0a0..5a00e230ea 100644
--- a/src/graph/operations/NESimpleOperations.cpp
+++ b/src/graph/operations/NESimpleOperations.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -149,13 +149,23 @@ REGISTER_SIMPLE_OPERATION(NEDepthwiseConvolutionOperation, NEON, OperationType::
auto *biases = ctx.num_inputs() == 3 ? dynamic_cast<arm_compute::ITensor *>(ctx.input(2)) : nullptr;
auto *out = dynamic_cast<arm_compute::ITensor *>(ctx.output(0));
const auto conv_info = ctx.parameter<PadStrideInfo>("ConvolutionInfo");
+ const auto opt3x3 = ctx.parameter<bool>("Optimized3x3");
// Create and configure function
std::unique_ptr<arm_compute::IFunction> func;
- // TODO (COMPMID-769): Add support for asymmetric padding in NEDepthwiseConvolutionLayer3x3 to enable opt3x3 support
- auto depwthwise_conv = arm_compute::support::cpp14::make_unique<arm_compute::NEDepthwiseConvolutionLayer>();
- depwthwise_conv->configure(in, weights, biases, out, conv_info);
- func = std::move(depwthwise_conv);
+ bool run_3x3_opt = opt3x3 && weights->info()->dimension(0) == 3;
+ if(run_3x3_opt)
+ {
+ auto depwthwise_conv = arm_compute::support::cpp14::make_unique<arm_compute::NEDepthwiseConvolutionLayer3x3>();
+ depwthwise_conv->configure(in, weights, biases, out, conv_info);
+ func = std::move(depwthwise_conv);
+ }
+ else
+ {
+ auto depwthwise_conv = arm_compute::support::cpp14::make_unique<arm_compute::NEDepthwiseConvolutionLayer>();
+ depwthwise_conv->configure(in, weights, biases, out, conv_info);
+ func = std::move(depwthwise_conv);
+ }
// Log info
ARM_COMPUTE_LOG_GRAPH_INFO("Instantiating NEDepthwiseConvolutionLayer"
diff --git a/src/runtime/NEON/functions/NEDepthwiseConvolutionLayer.cpp b/src/runtime/NEON/functions/NEDepthwiseConvolutionLayer.cpp
index 1f3e5d1192..d35e3e6026 100644
--- a/src/runtime/NEON/functions/NEDepthwiseConvolutionLayer.cpp
+++ b/src/runtime/NEON/functions/NEDepthwiseConvolutionLayer.cpp
@@ -33,9 +33,11 @@
using namespace arm_compute;
using namespace arm_compute::misc;
+using namespace arm_compute::misc::shape_calculator;
NEDepthwiseConvolutionLayer3x3::NEDepthwiseConvolutionLayer3x3()
- : _kernel(), _output_stage_kernel(), _border_handler(), _accumulator(), _has_bias(false), _is_quantized(false)
+ : _dwc_kernel(), _output_stage_kernel(), _border_handler(), _permute_input(), _permute_weights(), _permute_output(), _accumulator(), _input_nhwc(), _weights_hwio(), _output_nhwc(), _has_bias(false),
+ _is_quantized(false), _is_optimized(false), _are_weights_reshaped(false)
{
}
@@ -48,20 +50,49 @@ void NEDepthwiseConvolutionLayer3x3::configure(ITensor *input, const ITensor *we
_is_quantized = is_data_type_quantized_asymmetric(input->info()->data_type());
_has_bias = biases != nullptr;
+ _is_optimized = NEDepthwiseConvolutionLayer3x3Kernel::is_optimized_execution_possible(input->info()->tensor_shape(),
+ conv_info,
+ input->info()->data_type());
+ _are_weights_reshaped = false;
- // Allocate the intermediate accumulator tensor in case of fixed point input
- if(_is_quantized)
+ if(_is_optimized)
{
- _accumulator.allocator()->init(TensorInfo(output->info()->tensor_shape(), 1, DataType::S32));
- _accumulator.info()->set_quantization_info(input->info()->quantization_info());
- zero_value = PixelValue(static_cast<uint32_t>(input->info()->quantization_info().offset));
+ // Configure the function to transform the input tensor from NCHW -> NHWC
+ _permute_input.configure(input, &_input_nhwc, PermutationVector(2U, 0U, 1U));
+
+ // Configure the function to transform the weights tensor from IHW -> HWI
+ _permute_weights.configure(weights, &_weights_hwio, PermutationVector(2U, 0U, 1U));
+
+ // Configure optimized depthwise
+ _dwc_kernel.configure(&_input_nhwc, &_weights_hwio, &_output_nhwc, conv_info, DataLayout::NHWC);
+
+ // Configure the function to transform the convoluted output to ACL's native ordering format NCHW
+ _permute_output.configure(&_output_nhwc, output, PermutationVector(1U, 2U, 0U));
+
+ // Allocate tensors
+ _input_nhwc.allocator()->allocate();
+ _weights_hwio.allocator()->allocate();
+ _output_nhwc.allocator()->allocate();
+
+ // Create convolver (deferred)
+ _dwc_kernel.generate_convolver();
}
+ else
+ {
+ // Allocate the intermediate accumulator tensor in case of fixed point input
+ if(_is_quantized)
+ {
+ _accumulator.allocator()->init(TensorInfo(output->info()->tensor_shape(), 1, DataType::S32));
+ _accumulator.info()->set_quantization_info(input->info()->quantization_info());
+ zero_value = PixelValue(static_cast<uint32_t>(input->info()->quantization_info().offset));
+ }
- // Configure depthwise convolution kernel
- _kernel.configure(input, weights, (_is_quantized) ? &_accumulator : output, conv_info);
+ // Configure depthwise convolution kernel
+ _dwc_kernel.configure(input, weights, (_is_quantized) ? &_accumulator : output, conv_info);
- // Configure border handler
- _border_handler.configure(input, _kernel.border_size(), BorderMode::CONSTANT, zero_value);
+ // Configure border handler
+ _border_handler.configure(input, _dwc_kernel.border_size(), BorderMode::CONSTANT, zero_value);
+ }
// Configure biases accumulation
if(_has_bias || _is_quantized)
@@ -83,8 +114,35 @@ void NEDepthwiseConvolutionLayer3x3::configure(ITensor *input, const ITensor *we
void NEDepthwiseConvolutionLayer3x3::run()
{
- NEScheduler::get().schedule(&_border_handler, Window::DimX);
- NEScheduler::get().schedule(&_kernel, Window::DimX);
+ // Permute weights in HWIO format if the optimized kernel will be executedd
+ if(!_are_weights_reshaped && _is_optimized)
+ {
+ _are_weights_reshaped = true;
+ _permute_weights.run();
+ }
+
+ // Handle input
+ if(_is_optimized)
+ {
+ // Permute input to NHWC format execution
+ _permute_input.run();
+ }
+ else
+ {
+ // Fill border in NCHW format execution
+ NEScheduler::get().schedule(&_border_handler, Window::DimX);
+ }
+
+ // Execute depthwise convolution
+ NEScheduler::get().schedule(&_dwc_kernel, Window::DimX);
+
+ // Permute output to ACL's native NCHW format in case of NHWC execution
+ if(_is_optimized)
+ {
+ _permute_output.run();
+ }
+
+ // Add biases
if(_has_bias || _is_quantized)
{
NEScheduler::get().schedule(&_output_stage_kernel, Window::DimX);
diff --git a/src/runtime/NEON/functions/NEWinogradLayer.cpp b/src/runtime/NEON/functions/NEWinogradLayer.cpp
index dd878ab18a..d2d40dfcb0 100644
--- a/src/runtime/NEON/functions/NEWinogradLayer.cpp
+++ b/src/runtime/NEON/functions/NEWinogradLayer.cpp
@@ -28,7 +28,7 @@
#include "arm_compute/runtime/NEON/NEScheduler.h"
#include "support/ToolchainSupport.h"
-#include "arm_compute/core/NEON/kernels/winograd/winograd_gemm.hpp"
+#include "arm_compute/core/NEON/kernels/convolution/winograd/winograd_gemm.hpp"
namespace
{
diff --git a/tests/datasets/DepthwiseConvolutionLayerDataset.h b/tests/datasets/DepthwiseConvolutionLayerDataset.h
index d3eb2c5d9e..f1dfb981aa 100644
--- a/tests/datasets/DepthwiseConvolutionLayerDataset.h
+++ b/tests/datasets/DepthwiseConvolutionLayerDataset.h
@@ -174,6 +174,23 @@ public:
add_config(TensorShape(177U, 311U, 22U), TensorShape(3U, 3U, 22U), TensorShape(89U, 311U, 22U), PadStrideInfo(2, 1, 1, 1));
}
};
+class OptimizedDepthwiseConvolutionLayerDataset3x3 final : public DepthwiseConvolutionLayerDataset
+{
+public:
+ OptimizedDepthwiseConvolutionLayerDataset3x3()
+ {
+ // Stride 1
+ add_config(TensorShape(7U, 7U, 16U), TensorShape(3U, 3U, 16U), TensorShape(5U, 5U, 16U), PadStrideInfo(1, 1, 0, 0, DimensionRoundingType::CEIL));
+ add_config(TensorShape(7U, 7U, 16U), TensorShape(3U, 3U, 16U), TensorShape(7U, 7U, 16U), PadStrideInfo(1, 1, 1, 1, DimensionRoundingType::CEIL));
+ add_config(TensorShape(28U, 28U, 16U), TensorShape(3U, 3U, 16U), TensorShape(26U, 26U, 16U), PadStrideInfo(1, 1, 0, 0, DimensionRoundingType::CEIL));
+ add_config(TensorShape(28U, 28U, 16U), TensorShape(3U, 3U, 16U), TensorShape(28U, 28U, 16U), PadStrideInfo(1, 1, 1, 1, DimensionRoundingType::CEIL));
+ // Stride 2
+ add_config(TensorShape(7U, 7U, 32U), TensorShape(3U, 3U, 32U), TensorShape(3U, 3U, 32U), PadStrideInfo(2, 2, 0, 0, DimensionRoundingType::CEIL));
+ add_config(TensorShape(7U, 7U, 32U), TensorShape(3U, 3U, 32U), TensorShape(4U, 4U, 32U), PadStrideInfo(2, 2, 1, 1, 1, 1, DimensionRoundingType::CEIL));
+ add_config(TensorShape(8U, 8U, 32U), TensorShape(3U, 3U, 32U), TensorShape(3U, 3U, 32U), PadStrideInfo(2, 2, 0, 0, DimensionRoundingType::CEIL));
+ add_config(TensorShape(8U, 8U, 32U), TensorShape(3U, 3U, 32U), TensorShape(4U, 4U, 32U), PadStrideInfo(2, 2, 0, 1, 0, 1, DimensionRoundingType::CEIL));
+ }
+};
} // namespace datasets
} // namespace test
} // namespace arm_compute
diff --git a/tests/validation/NEON/DepthwiseConvolutionLayer.cpp b/tests/validation/NEON/DepthwiseConvolutionLayer.cpp
index f8c04dab3e..47e8896fd6 100644
--- a/tests/validation/NEON/DepthwiseConvolutionLayer.cpp
+++ b/tests/validation/NEON/DepthwiseConvolutionLayer.cpp
@@ -121,6 +121,12 @@ FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthwiseConvolutionLayerFixture3x3<float>, f
{
validate(Accessor(_target), _reference, tolerance_f32);
}
+FIXTURE_DATA_TEST_CASE(RunOptimized, NEDepthwiseConvolutionLayerFixture3x3<float>, framework::DatasetMode::ALL, combine(datasets::OptimizedDepthwiseConvolutionLayerDataset3x3(),
+ framework::dataset::make("DataType",
+ DataType::F32)))
+{
+ validate(Accessor(_target), _reference, tolerance_f32);
+}
TEST_SUITE_END()
TEST_SUITE_END()
diff --git a/tests/validation/reference/DepthwiseConvolutionLayer.cpp b/tests/validation/reference/DepthwiseConvolutionLayer.cpp
index 66e3a4b783..ffea1bcf89 100644
--- a/tests/validation/reference/DepthwiseConvolutionLayer.cpp
+++ b/tests/validation/reference/DepthwiseConvolutionLayer.cpp
@@ -67,10 +67,10 @@ SimpleTensor<T> depthwise_convolution(const SimpleTensor<T> &src, const SimpleTe
const int filter_half_width = filter_width / 2;
const int filter_half_height = filter_height / 2;
- const int pad_left = std::min(static_cast<int>(conv_info.pad_left()), filter_half_width);
- const int pad_top = std::min(static_cast<int>(conv_info.pad_top()), filter_half_height);
- const int pad_right = std::min(static_cast<int>(conv_info.pad_right()), filter_half_width);
- const int pad_bottom = std::min(static_cast<int>(conv_info.pad_bottom()), filter_half_height);
+ const int pad_left = conv_info.pad_left();
+ const int pad_top = conv_info.pad_top();
+ const int pad_right = conv_info.pad_right();
+ const int pad_bottom = conv_info.pad_bottom();
const int minimum_x = -pad_left + filter_half_width;
const int minimum_y = -pad_top + filter_half_height;