| // Copyright 2019 Google LLC |
| // |
| // This source code is licensed under the BSD-style license found in the |
| // LICENSE file in the root directory of this source tree. |
| |
| #include <assert.h> |
| |
| #include <xnnpack/unpool.h> |
| |
| |
| void xnn_x32_unpool_ukernel__scalar( |
| size_t kernel_elements, |
| size_t channels, |
| uint32_t fill, |
| const uint32_t* input, |
| const uint32_t* index, |
| uint32_t** output) |
| { |
| // Pre-initialize outputs with constant. |
| uint32_t** os = output; |
| do { |
| uint32_t* o = *os++; |
| size_t c = channels; |
| do { |
| *o++ = fill; |
| } while (--c != 0); |
| } while (--kernel_elements != 0); |
| |
| // Copy indexed elements to output. |
| size_t offset = 0; |
| do { |
| const uint32_t i = *index++; |
| *((uint32_t*) ((uintptr_t) output[i] + offset)) = *input++; |
| offset += sizeof(uint32_t); |
| } while (--channels != 0); |
| } |