xref: /aosp_15_r20/external/XNNPACK/src/xnnpack/avgpool.h (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
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