1 // Copyright 2020 Google LLC
2 //
3 // This source code is licensed under the BSD-style license found in the
4 // LICENSE file in the root directory of this source tree.
5 
6 #include <assert.h>
7 
8 #include <xnnpack/depthtospace.h>
9 
10 
xnn_x32_depthtospace2d_chw2hwc_ukernel__scalar(size_t output_channels,size_t input_height,size_t input_width,size_t block_size,const uint32_t * restrict input,uint32_t * restrict output,size_t output_channel_stride)11 void xnn_x32_depthtospace2d_chw2hwc_ukernel__scalar(
12     size_t output_channels,
13     size_t input_height,
14     size_t input_width,
15     size_t block_size,
16     const uint32_t*restrict input,
17     uint32_t*restrict output,
18     size_t output_channel_stride)
19 {
20   assert(output_channels != 0);
21   assert(input_height != 0);
22   assert(input_width != 0);
23   assert(block_size != 0);
24 
25   for (size_t iy = 0; iy < input_height; iy++) {
26     for (size_t by = 0; by < block_size; by++) {
27       for (size_t ix = 0; ix < input_width; ix++) {
28         for (size_t bx = 0; bx < block_size; bx++) {
29           for (size_t oc = 0; oc < output_channels; oc++) {
30             output[(((iy * block_size + by) * input_width + ix) * block_size + bx) * output_channel_stride + oc] =
31               input[(((by * block_size + bx) * output_channels + oc) * input_height + iy) * input_width + ix];
32           }
33         }
34       }
35     }
36   }
37 }
38