blob: 21b4b80805400a22ee6f33cb37e3e80d1e73f320 [file] [log] [blame]
XNNPACK Teamb455b122019-09-27 18:10:33 -07001// 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/params.h>
15#include <xnnpack/common.h>
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21
Marat Dukhan99936602020-04-11 16:47:01 -070022#define DECLARE_F32_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(fn_name) \
23 XNN_INTERNAL void fn_name( \
24 size_t rows, \
25 size_t channels, \
26 const float* input, \
27 size_t input_stride, \
28 const float* zero, \
29 float* buffer, \
30 float* output, \
Marat Dukhan8452ff52020-04-08 20:44:58 -070031 const union xnn_f32_scaleminmax_params* params);
XNNPACK Teamb455b122019-09-27 18:10:33 -070032
Marat Dukhan99936602020-04-11 16:47:01 -070033DECLARE_F32_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f32_gavgpool_minmax_ukernel_7p7x__neon_c4)
34DECLARE_F32_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f32_gavgpool_minmax_ukernel_7p7x__sse_c4)
Marat Dukhanc6016802020-07-16 18:51:28 -070035DECLARE_F32_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f32_gavgpool_minmax_ukernel_7p7x__wasmsimd_arm_c4)
36DECLARE_F32_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f32_gavgpool_minmax_ukernel_7p7x__wasmsimd_x86_c4)
Marat Dukhan99936602020-04-11 16:47:01 -070037DECLARE_F32_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f32_gavgpool_minmax_ukernel_7p7x__wasm_c1)
38DECLARE_F32_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f32_gavgpool_minmax_ukernel_7p7x__scalar_c1)
XNNPACK Teamb455b122019-09-27 18:10:33 -070039
40
Marat Dukhan99936602020-04-11 16:47:01 -070041#define DECLARE_F32_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(fn_name) \
42 XNN_INTERNAL void fn_name( \
43 size_t rows, \
44 size_t channels, \
45 const float* input, \
46 size_t input_stride, \
47 const float* zero, \
48 float* output, \
Marat Dukhan8452ff52020-04-08 20:44:58 -070049 const union xnn_f32_scaleminmax_params* params);
XNNPACK Teamb455b122019-09-27 18:10:33 -070050
Marat Dukhan99936602020-04-11 16:47:01 -070051DECLARE_F32_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f32_gavgpool_minmax_ukernel_7x__neon_c4)
52DECLARE_F32_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f32_gavgpool_minmax_ukernel_7x__sse_c4)
Marat Dukhanc6016802020-07-16 18:51:28 -070053DECLARE_F32_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f32_gavgpool_minmax_ukernel_7x__wasmsimd_arm_c4)
54DECLARE_F32_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f32_gavgpool_minmax_ukernel_7x__wasmsimd_x86_c4)
Marat Dukhan99936602020-04-11 16:47:01 -070055DECLARE_F32_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f32_gavgpool_minmax_ukernel_7x__wasm_c1)
56DECLARE_F32_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f32_gavgpool_minmax_ukernel_7x__scalar_c1)
XNNPACK Teamb455b122019-09-27 18:10:33 -070057
Frank Barchard0bb49a72020-06-04 11:35:11 -070058#define DECLARE_F16_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(fn_name) \
59 XNN_INTERNAL void fn_name( \
60 size_t rows, \
61 size_t channels, \
62 const void* input, \
63 size_t input_stride, \
64 const void* zero, \
65 void* buffer, \
66 void* output, \
67 const struct xnn_f16_scaleminmax_params* params);
68
69DECLARE_F16_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8)
70
71
72#define DECLARE_F16_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(fn_name) \
73 XNN_INTERNAL void fn_name( \
74 size_t rows, \
75 size_t channels, \
76 const void* input, \
77 size_t input_stride, \
78 const void* zero, \
79 void* output, \
80 const struct xnn_f16_scaleminmax_params* params);
81
82DECLARE_F16_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8)
83
Marat Dukhan159688f2020-08-06 10:34:29 -070084
Marat Dukhan08b7a972020-07-14 18:17:29 -070085#define DECLARE_QU8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(fn_name) \
86 XNN_INTERNAL void fn_name( \
87 size_t rows, \
88 size_t channels, \
89 const uint8_t* input, \
90 size_t input_stride, \
91 const uint8_t* zero, \
92 int32_t* buffer, \
93 uint8_t* output, \
94 const union xnn_qu8_avgpool_params* params);
XNNPACK Teamb455b122019-09-27 18:10:33 -070095
Marat Dukhan08b7a972020-07-14 18:17:29 -070096DECLARE_QU8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qu8_gavgpool_minmax_ukernel_7p7x__neon_c8)
97DECLARE_QU8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qu8_gavgpool_minmax_ukernel_7p7x__sse2_c8)
98DECLARE_QU8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qu8_gavgpool_minmax_ukernel_7p7x__scalar_c1)
XNNPACK Teamb455b122019-09-27 18:10:33 -070099
100
Marat Dukhan08b7a972020-07-14 18:17:29 -0700101#define DECLARE_QU8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(fn_name) \
102 XNN_INTERNAL void fn_name( \
103 size_t rows, \
104 size_t channels, \
105 const uint8_t* input, \
106 size_t input_stride, \
107 const uint8_t* zero, \
108 uint8_t* output, \
109 const union xnn_qu8_avgpool_params* params);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700110
Marat Dukhan08b7a972020-07-14 18:17:29 -0700111DECLARE_QU8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qu8_gavgpool_minmax_ukernel_7x__neon_c8)
112DECLARE_QU8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qu8_gavgpool_minmax_ukernel_7x__sse2_c8)
113DECLARE_QU8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qu8_gavgpool_minmax_ukernel_7x__scalar_c1)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700114
115
Marat Dukhan159688f2020-08-06 10:34:29 -0700116#define DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(fn_name) \
117 XNN_INTERNAL void fn_name( \
118 size_t rows, \
119 size_t channels, \
120 const int8_t* input, \
121 size_t input_stride, \
122 const int8_t* zero, \
123 int32_t* buffer, \
124 int8_t* output, \
125 const union xnn_qs8_avgpool_params* params);
126
Marat Dukhan281262d2020-08-10 13:23:21 -0700127DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2)
128DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2)
129DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2)
130DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2)
131
Marat Dukhan159688f2020-08-06 10:34:29 -0700132DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2)
133DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2)
134DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2)
135
136DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2)
137DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2)
138DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2)
139
140DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2)
141DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2)
142DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2)
143
Marat Dukhanef451802020-08-06 11:53:47 -0700144DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2)
145DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2)
146DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2)
147
Marat Dukhan047b6202021-05-11 20:32:25 -0700148DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__scalar_c1)
149DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__scalar_c2)
150DECLARE_QS8_GAVGPOOL_MINMAX_MULTIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7p7x__scalar_c4)
151
Marat Dukhan159688f2020-08-06 10:34:29 -0700152
Marat Dukhan4ed53f42020-08-06 01:12:55 -0700153#define DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(fn_name) \
154 XNN_INTERNAL void fn_name( \
155 size_t rows, \
156 size_t channels, \
157 const int8_t* input, \
158 size_t input_stride, \
159 const int8_t* zero, \
160 int8_t* output, \
161 const union xnn_qs8_avgpool_params* params);
162
Marat Dukhan281262d2020-08-10 13:23:21 -0700163DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2)
164DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2)
165DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2)
166DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2)
167
Marat Dukhan4ed53f42020-08-06 01:12:55 -0700168DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2)
169DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2)
170DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2)
171
172DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2)
173DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2)
174DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2)
175
176DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2)
177DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2)
178DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2)
179
Marat Dukhanef451802020-08-06 11:53:47 -0700180DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2)
181DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2)
182DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2)
183
Marat Dukhan047b6202021-05-11 20:32:25 -0700184DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__scalar_c1)
185DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__scalar_c2)
186DECLARE_QS8_GAVGPOOL_MINMAX_UNIPASS_UKERNEL_FUNCTION(xnn_qs8_gavgpool_minmax_ukernel_7x__scalar_c4)
187
Marat Dukhan4ed53f42020-08-06 01:12:55 -0700188
Marat Dukhan1f29b802020-05-15 23:46:39 -0700189#define DECLARE_F32_GAVGPOOL_CW_UKERNEL_FUNCTION(fn_name) \
190 XNN_INTERNAL void fn_name( \
191 size_t elements, \
192 size_t channels, \
193 const float* input, \
194 float* output, \
XNNPACK Teamb455b122019-09-27 18:10:33 -0700195 const union xnn_f32_gavgpool_params* params);
196
Marat Dukhan1f29b802020-05-15 23:46:39 -0700197DECLARE_F32_GAVGPOOL_CW_UKERNEL_FUNCTION(xnn_f32_gavgpool_cw_ukernel__neon_x4)
198DECLARE_F32_GAVGPOOL_CW_UKERNEL_FUNCTION(xnn_f32_gavgpool_cw_ukernel__sse_x4)
Marat Dukhan18493512020-07-24 14:13:48 -0700199DECLARE_F32_GAVGPOOL_CW_UKERNEL_FUNCTION(xnn_f32_gavgpool_cw_ukernel__wasmsimd_arm_x4)
200DECLARE_F32_GAVGPOOL_CW_UKERNEL_FUNCTION(xnn_f32_gavgpool_cw_ukernel__wasmsimd_x86_x4)
Marat Dukhan1f29b802020-05-15 23:46:39 -0700201DECLARE_F32_GAVGPOOL_CW_UKERNEL_FUNCTION(xnn_f32_gavgpool_cw_ukernel__scalar_x1)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700202
203
204#ifdef __cplusplus
Marat Dukhan80fc9322019-09-29 21:06:36 -0700205} // extern "C"
XNNPACK Teamb455b122019-09-27 18:10:33 -0700206#endif