COMPMID-1005: Update Depthwise Convolution form RSH

Change-Id: I3033ddb8de183661010d6c71a83f71132037b139
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/124338
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Pablo Tello <pablo.tello@arm.com>
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
index 0ec5a77..dba2330 100644
--- 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
@@ -29,1067 +29,70 @@
 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
+const Conv::TileFn Conv::tilefn_unpadded = ConvImpl::template process_tile<true, 0, 0, 0, 0, 0, 0>;
+
+template <>
+const Conv::TileFn Conv::tilefn_top[n_in_pad_top_fns] = {
+  ConvImpl::template process_tile<true, 0, 0, 0, 0, 0, 0>,
+  ConvImpl::template process_tile<true, 1, 0, 0, 0, 0, 0>,
 };
 
+template <>
+const Conv::TileFn Conv::tilefn_left[n_in_pad_left_fns] = {
+  ConvImpl::template process_tile<true, 0, 0, 0, 0, 0, 0>,
+  ConvImpl::template process_tile<true, 0, 1, 0, 0, 0, 0>,
+};
+
+template <>
+const Conv::TileFn Conv::tilefn_bottom[n_in_pad_bottom_fns][n_out_pad_bottom_fns] = {
+  {
+    ConvImpl::template process_tile<true, 0, 0, 0, 0, 0, 0>,
+    ConvImpl::template process_tile<true, 0, 0, 0, 0, 1, 0>,
+  },
+  {
+    ConvImpl::template process_tile<true, 0, 0, 1, 0, 0, 0>,
+    ConvImpl::template process_tile<true, 0, 0, 1, 0, 1, 0>,
+  },
+  {
+    ConvImpl::template process_tile<true, 0, 0, 2, 0, 0, 0>,
+    ConvImpl::template process_tile<true, 0, 0, 2, 0, 1, 0>,
+  },
+  {
+    ConvImpl::template process_tile<true, 0, 0, 3, 0, 0, 0>,
+    ConvImpl::template process_tile<true, 0, 0, 3, 0, 1, 0>,
+  },
+  {
+    ConvImpl::template process_tile<true, 0, 0, 4, 0, 0, 0>,
+    ConvImpl::template process_tile<true, 0, 0, 4, 0, 1, 0>,
+  },
+};
+
+template <>
+const Conv::TileFn Conv::tilefn_right[n_in_pad_right_fns][n_out_pad_right_fns] = {
+  {
+    ConvImpl::template process_tile<true, 0, 0, 0, 0, 0, 0>,
+    ConvImpl::template process_tile<true, 0, 0, 0, 0, 0, 1>,
+  },
+  {
+    ConvImpl::template process_tile<true, 0, 0, 0, 1, 0, 0>,
+    ConvImpl::template process_tile<true, 0, 0, 0, 1, 0, 1>,
+  },
+  {
+    ConvImpl::template process_tile<true, 0, 0, 0, 2, 0, 0>,
+    ConvImpl::template process_tile<true, 0, 0, 0, 2, 0, 1>,
+  },
+  {
+    ConvImpl::template process_tile<true, 0, 0, 0, 3, 0, 0>,
+    ConvImpl::template process_tile<true, 0, 0, 0, 3, 0, 1>,
+  },
+  {
+    ConvImpl::template process_tile<true, 0, 0, 0, 4, 0, 0>,
+    ConvImpl::template process_tile<true, 0, 0, 0, 4, 0, 1>,
+  },
+};
+
+template <>
+const Conv::TileFn Conv::tilefn_generic = ConvImpl::template process_tile<false>;
 
 template class DepthwiseConvolution<2, 2, 3, 3, 2, 2, float, float>;
 }  // namespace depthwise