1 // Copyright (c) Facebook, Inc. and its affiliates. 2 // All rights reserved. 3 // 4 // Copyright 2019 Google LLC 5 // 6 // This source code is licensed under the BSD-style license found in the 7 // LICENSE file in the root directory of this source tree. 8 9 #pragma once 10 11 #include <stddef.h> 12 #include <stdint.h> 13 14 #include <xnnpack/common.h> 15 #include <xnnpack/microparams.h> 16 17 #ifdef __cplusplus 18 extern "C" { 19 #endif 20 21 22 #define DECLARE_F16_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(fn_name) \ 23 XNN_INTERNAL void fn_name( \ 24 size_t output_pixels, \ 25 size_t kernel_elements, \ 26 size_t channels, \ 27 const void** input, \ 28 size_t input_offset, \ 29 const void* zero, \ 30 void* buffer, \ 31 void* output, \ 32 size_t input_increment, \ 33 size_t output_increment, \ 34 const union xnn_f16_scaleminmax_params* params); 35 36 DECLARE_F16_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f16_avgpool_minmax_ukernel_9p8x__f16c_c8) 37 DECLARE_F16_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f16_avgpool_minmax_ukernel_9p8x__neonfp16arith_c8) 38 39 40 #define DECLARE_F16_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(fn_name) \ 41 XNN_INTERNAL void fn_name( \ 42 size_t output_pixels, \ 43 size_t kernel_elements, \ 44 size_t channels, \ 45 const void** input, \ 46 size_t input_offset, \ 47 const void* zero, \ 48 void* output, \ 49 size_t input_increment, \ 50 size_t output_increment, \ 51 const union xnn_f16_scaleminmax_params* params); 52 53 DECLARE_F16_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f16_avgpool_minmax_ukernel_9x__f16c_c8) 54 DECLARE_F16_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f16_avgpool_minmax_ukernel_9x__neonfp16arith_c8) 55 56 57 #define DECLARE_F32_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(fn_name) \ 58 XNN_INTERNAL void fn_name( \ 59 size_t output_pixels, \ 60 size_t kernel_elements, \ 61 size_t channels, \ 62 const float** input, \ 63 size_t input_offset, \ 64 const float* zero, \ 65 float* buffer, \ 66 float* output, \ 67 size_t input_increment, \ 68 size_t output_increment, \ 69 const union xnn_f32_scaleminmax_params* params); 70 71 DECLARE_F32_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f32_avgpool_minmax_ukernel_9p8x__neon_c4) 72 DECLARE_F32_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f32_avgpool_minmax_ukernel_9p8x__scalar_c1) 73 DECLARE_F32_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f32_avgpool_minmax_ukernel_9p8x__sse_c4) 74 DECLARE_F32_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f32_avgpool_minmax_ukernel_9p8x__wasm_c1) 75 DECLARE_F32_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f32_avgpool_minmax_ukernel_9p8x__wasmsimd_arm_c4) 76 DECLARE_F32_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f32_avgpool_minmax_ukernel_9p8x__wasmsimd_x86_c4) 77 78 79 #define DECLARE_F32_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(fn_name) \ 80 XNN_INTERNAL void fn_name( \ 81 size_t output_pixels, \ 82 size_t kernel_elements, \ 83 size_t channels, \ 84 const float** input, \ 85 size_t input_offset, \ 86 const float* zero, \ 87 float* output, \ 88 size_t input_increment, \ 89 size_t output_increment, \ 90 const union xnn_f32_scaleminmax_params* params); 91 92 DECLARE_F32_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f32_avgpool_minmax_ukernel_9x__neon_c4) 93 DECLARE_F32_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f32_avgpool_minmax_ukernel_9x__scalar_c1) 94 DECLARE_F32_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f32_avgpool_minmax_ukernel_9x__sse_c4) 95 DECLARE_F32_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f32_avgpool_minmax_ukernel_9x__wasm_c1) 96 DECLARE_F32_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f32_avgpool_minmax_ukernel_9x__wasmsimd_arm_c4) 97 DECLARE_F32_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f32_avgpool_minmax_ukernel_9x__wasmsimd_x86_c4) 98 99 100 #define DECLARE_QU8_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(fn_name) \ 101 XNN_INTERNAL void fn_name( \ 102 size_t output_pixels, \ 103 size_t kernel_elements, \ 104 size_t channels, \ 105 const uint8_t** input, \ 106 size_t input_offset, \ 107 const uint8_t* zero, \ 108 int32_t* buffer, \ 109 uint8_t* output, \ 110 size_t input_increment, \ 111 size_t output_increment, \ 112 const union xnn_qu8_avgpool_minmax_params* params); 113 114 DECLARE_QU8_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qu8_avgpool_minmax_ukernel_9p8x__neon_c8) 115 DECLARE_QU8_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qu8_avgpool_minmax_ukernel_9p8x__scalar_c1) 116 DECLARE_QU8_AVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qu8_avgpool_minmax_ukernel_9p8x__sse2_c8) 117 118 119 #define DECLARE_QU8_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(fn_name) \ 120 XNN_INTERNAL void fn_name( \ 121 size_t output_pixels, \ 122 size_t kernel_elements, \ 123 size_t channels, \ 124 const uint8_t** input, \ 125 size_t input_offset, \ 126 const uint8_t* zero, \ 127 uint8_t* output, \ 128 size_t input_increment, \ 129 size_t output_increment, \ 130 const union xnn_qu8_avgpool_minmax_params* params); 131 132 DECLARE_QU8_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qu8_avgpool_minmax_ukernel_9x__neon_c8) 133 DECLARE_QU8_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qu8_avgpool_minmax_ukernel_9x__scalar_c1) 134 DECLARE_QU8_AVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qu8_avgpool_minmax_ukernel_9x__sse2_c8) 135 136 137 #ifdef __cplusplus 138 } // extern "C" 139 #endif 140