// 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 #include void xnn_x32_unpool_ukernel__scalar( size_t p, size_t c, uint32_t f, 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 k = c; do { *o++ = f; } while (--k != 0); } while (--p != 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 (--c != 0); }