xref: /aosp_15_r20/external/XNNPACK/src/xnnpack/microparams-init.h (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1 // Copyright 2021 Google LLC
2 //
3 // This source code is licensed under the BSD-style license found in the
4 // LICENSE file in the root directory of this source tree.
5 
6 #pragma once
7 
8 #include <stdint.h>
9 #include <stddef.h>
10 
11 #include <xnnpack/common.h>
12 #include <xnnpack/microparams.h>
13 
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
19 
20 #define DECLARE_INIT_QC8_CONV_MINMAX_PARAMS_FUNCTION(fn_name)     \
21   XNN_INTERNAL size_t fn_name(                                    \
22     union xnn_qc8_conv_minmax_params params[XNN_MIN_ELEMENTS(1)], \
23     int8_t output_zero_point,                                     \
24     int8_t output_min,                                            \
25     int8_t output_max);
26 
27 DECLARE_INIT_QC8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qc8_conv_minmax_fp32_scalar_fmagic_params)
28 DECLARE_INIT_QC8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qc8_conv_minmax_fp32_scalar_imagic_params)
29 DECLARE_INIT_QC8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qc8_conv_minmax_fp32_scalar_lrintf_params)
30 #if XNN_ARCH_ARM
31   DECLARE_INIT_QC8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qc8_conv_minmax_fp32_armsimd32_params)
32 #endif  // XNN_ARCH_ARM
33 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
34   DECLARE_INIT_QC8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qc8_conv_minmax_fp32_neon_params)
35   DECLARE_INIT_QC8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qc8_conv_minmax_fp32_neonv8_params)
36 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
37 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
38   DECLARE_INIT_QC8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qc8_conv_minmax_fp32_sse2_params)
39   DECLARE_INIT_QC8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qc8_conv_minmax_fp32_sse4_params)
40   DECLARE_INIT_QC8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qc8_conv_minmax_fp32_avx2_params)
41   DECLARE_INIT_QC8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qc8_conv_minmax_fp32_avx512_params)
42 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
43 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
44   DECLARE_INIT_QC8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qc8_conv_minmax_fp32_wasmsimd_params)
45 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
46 
47 
48 #define DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(fn_name)     \
49   XNN_INTERNAL size_t fn_name(                                    \
50     union xnn_qs8_conv_minmax_params params[XNN_MIN_ELEMENTS(1)], \
51     float scale,                                                  \
52     int8_t output_zero_point,                                     \
53     int8_t output_min,                                            \
54     int8_t output_max);
55 
56 DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_scalar_fmagic_params)
57 DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_scalar_imagic_params)
58 DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_scalar_lrintf_params)
59 #if XNN_ARCH_ARM
60   DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_armsimd32_params)
61 #endif  // XNN_ARCH_ARM
62 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
63   DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_neon_params)
64   DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_neonv8_params)
65   DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_rndnu_neon_params)
66 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
67 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
68   DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_sse2_params)
69   DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_sse4_params)
70   DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_avx2_params)
71   DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_avx512_params)
72 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
73 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
74   DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_wasmsimd_params)
75 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
76 
77 
78 #define DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(fn_name)     \
79   XNN_INTERNAL size_t fn_name(                                    \
80     union xnn_qu8_conv_minmax_params params[XNN_MIN_ELEMENTS(1)], \
81     uint8_t kernel_zero_point,                                    \
82     float scale,                                                  \
83     uint8_t output_zero_point,                                    \
84     uint8_t output_min,                                           \
85     uint8_t output_max);
86 
87 DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params)
88 DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params)
89 DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params)
90 #if XNN_ARCH_ARM
91   DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_armsimd32_params)
92 #endif  // XNN_ARCH_ARM
93 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
94   DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_neon_params)
95   DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_neonv8_params)
96   DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_rndnu_neon_params)
97 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
98 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
99   DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_sse2_params)
100   DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_avx2_params)
101   DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_avx512_params)
102 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
103 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
104   DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_wasmsimd_params)
105 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
106 
107 
108 XNN_INTERNAL void xnn_init_qc8_scale_fp32_params(
109   size_t channels,
110   size_t channels_tile,
111   size_t stride,
112   const float scale[XNN_MIN_ELEMENTS(1)],
113   void* packed_w);
114 
115 
116 #define DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(fn_name)            \
117   XNN_INTERNAL size_t fn_name(                                       \
118     union xnn_qs8_avgpool_minmax_params params[XNN_MIN_ELEMENTS(1)], \
119     int32_t bias,                                                    \
120     float scale,                                                     \
121     int8_t output_zero_point,                                        \
122     int8_t output_min,                                               \
123     int8_t output_max);
124 
125 DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_fp32_scalar_fmagic_params)
126 DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_fp32_scalar_imagic_params)
127 DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_fp32_scalar_lrintf_params)
128 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
129   DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_fp32_neon_params)
130   DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_fp32_neonv8_params)
131   DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_rndnu_neon_params)
132 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
133 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
134   DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_fp32_sse2_params)
135   DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_fp32_sse4_params)
136 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
137 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
138   DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_fp32_wasmsimd_params)
139 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
140 
141 
142 #define DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(fn_name)          \
143   XNN_INTERNAL void fn_name(                                         \
144     union xnn_qs8_avgpool_minmax_params params[XNN_MIN_ELEMENTS(1)], \
145     int32_t bias,                                                    \
146     float scale);
147 
148 DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_scalar_fmagic_params)
149 DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_scalar_imagic_params)
150 DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_scalar_lrintf_params)
151 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
152   DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_neon_params)
153   DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_neonv8_params)
154   DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_rndnu_neon_params)
155 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
156 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
157   DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_sse2_params)
158   DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_sse4_params)
159 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
160 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
161   DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_wasmsimd_params)
162 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
163 
164 
165 #define DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(fn_name)            \
166   XNN_INTERNAL size_t fn_name(                                       \
167     union xnn_qu8_avgpool_minmax_params params[XNN_MIN_ELEMENTS(1)], \
168     int32_t bias,                                                    \
169     float scale,                                                     \
170     uint8_t output_zero_point,                                       \
171     uint8_t output_min,                                              \
172     uint8_t output_max);
173 
174 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params)
175 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params)
176 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params)
177 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
178   DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_neon_params)
179   DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_neonv8_params)
180   DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_rndnu_neon_params)
181 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
182 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
183   DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_sse2_params)
184   DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_sse4_params)
185 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
186 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
187   DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params)
188 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
189 
190 
191 // TODO: refactor to new FP32/RNDNU-requantization functions
192 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_scalar_params)
193 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
194   DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_neon_params)
195 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
196 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
197   DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_sse2_params)
198 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
199 
200 
201 #define DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(fn_name)          \
202   XNN_INTERNAL void fn_name(                                         \
203     union xnn_qu8_avgpool_minmax_params params[XNN_MIN_ELEMENTS(1)], \
204     int32_t bias,                                                    \
205     float scale);
206 
207 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_scalar_fmagic_params)
208 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_scalar_imagic_params)
209 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_scalar_lrintf_params)
210 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
211   DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_neon_params)
212   DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_neonv8_params)
213   DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_rndnu_neon_params)
214 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
215 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
216   DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_sse2_params)
217   DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_sse4_params)
218 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
219 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
220   DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_wasmsimd_params)
221 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
222 
223 // TODO: refactor to new FP32/RNDNU-requantization functions
224 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_scalar_params)
225 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
226   DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_neon_params)
227 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
228 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
229   DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_sse2_params)
230 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
231 
232 
233 #define DECLARE_INIT_F16_SCALEMINMAX_PARAMS_FUNCTION(fn_name)     \
234   XNN_INTERNAL size_t fn_name(                                    \
235     union xnn_f16_scaleminmax_params params[XNN_MIN_ELEMENTS(1)], \
236     uint16_t scale,                                               \
237     uint16_t min,                                                 \
238     uint16_t max);
239 
240 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
241   DECLARE_INIT_F16_SCALEMINMAX_PARAMS_FUNCTION(xnn_init_f16_scaleminmax_neon_params)
242 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
243 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
244   DECLARE_INIT_F16_SCALEMINMAX_PARAMS_FUNCTION(xnn_init_f16_scaleminmax_avx_params)
245 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
246 
247 
248 #define DECLARE_UPDATE_F16_SCALEMINMAX_PARAMS_FUNCTION(fn_name)   \
249   XNN_INTERNAL void fn_name(                                      \
250     union xnn_f16_scaleminmax_params params[XNN_MIN_ELEMENTS(1)], \
251     uint16_t scale);
252 
253 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
254   DECLARE_UPDATE_F16_SCALEMINMAX_PARAMS_FUNCTION(xnn_update_f16_scaleminmax_neon_params)
255 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
256 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
257   DECLARE_UPDATE_F16_SCALEMINMAX_PARAMS_FUNCTION(xnn_update_f16_scaleminmax_avx_params)
258 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
259 
260 
261 #define DECLARE_INIT_F32_SCALEMINMAX_PARAMS_FUNCTION(fn_name)     \
262   XNN_INTERNAL size_t fn_name(                                    \
263     union xnn_f32_scaleminmax_params params[XNN_MIN_ELEMENTS(1)], \
264     float scale,                                                  \
265     float min,                                                    \
266     float max);
267 
268 DECLARE_INIT_F32_SCALEMINMAX_PARAMS_FUNCTION(xnn_init_f32_scaleminmax_scalar_params)
269 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
270   DECLARE_INIT_F32_SCALEMINMAX_PARAMS_FUNCTION(xnn_init_f32_scaleminmax_sse_params)
271 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
272 
273 
274 #define DECLARE_UPDATE_F32_SCALEMINMAX_PARAMS_FUNCTION(fn_name)   \
275   XNN_INTERNAL void fn_name(                                      \
276     union xnn_f32_scaleminmax_params params[XNN_MIN_ELEMENTS(1)], \
277     float scale);
278 
279 DECLARE_UPDATE_F32_SCALEMINMAX_PARAMS_FUNCTION(xnn_update_f32_scaleminmax_scalar_params)
280 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
281   DECLARE_UPDATE_F32_SCALEMINMAX_PARAMS_FUNCTION(xnn_update_f32_scaleminmax_sse_params)
282 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
283 
284 
285 XNN_INTERNAL size_t xnn_init_f16_gavgpool_neonfp16arith_x4_params(
286   union xnn_f16_gavgpool_params params[XNN_MIN_ELEMENTS(1)],
287   uint16_t multiplier,
288   uint16_t output_min,
289   uint16_t output_max,
290   uint32_t width);
291 
292 XNN_INTERNAL size_t xnn_init_f16_gavgpool_neonfp16arith_x8_params(
293   union xnn_f16_gavgpool_params params[XNN_MIN_ELEMENTS(1)],
294   uint16_t multiplier,
295   uint16_t output_min,
296   uint16_t output_max,
297   uint32_t width);
298 
299 XNN_INTERNAL size_t xnn_init_f32_gavgpool_params(
300   union xnn_f32_gavgpool_params params[XNN_MIN_ELEMENTS(1)],
301   float multiplier,
302   float output_min,
303   float output_max,
304   uint32_t width);
305 
306 XNN_INTERNAL void xnn_update_f32_gavgpool_params(
307   union xnn_f32_gavgpool_params* params,
308   float multiplier,
309   uint32_t width);
310 
311 XNN_INTERNAL size_t xnn_init_scalar_f32_gavgpool_params(
312   union xnn_f32_gavgpool_params params[XNN_MIN_ELEMENTS(1)],
313   float multiplier,
314   float output_min,
315   float output_max,
316   uint32_t width);
317 
318 
319 #define DECLARE_INIT_F32_DEFAULT_PARAMS_FUNCTION(fn_name)      \
320   XNN_INTERNAL size_t fn_name(                                 \
321     union xnn_f32_default_params params[XNN_MIN_ELEMENTS(1)]);
322 
323 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
324   DECLARE_INIT_F32_DEFAULT_PARAMS_FUNCTION(xnn_init_f32_default_avx_params)
325 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
326 
327 
328 #define DECLARE_INIT_BF16_MINMAX_PARAMS_FUNCTION(fn_name)     \
329   XNN_INTERNAL size_t fn_name(                                \
330     union xnn_bf16_minmax_params params[XNN_MIN_ELEMENTS(1)], \
331     uint16_t output_min,                                      \
332     uint16_t output_max);
333 
334 DECLARE_INIT_BF16_MINMAX_PARAMS_FUNCTION(xnn_init_bf16_minmax_scalar_params)
335 
336 
337 #define DECLARE_INIT_F16_MINMAX_PARAMS_FUNCTION(fn_name)     \
338   XNN_INTERNAL size_t fn_name(                               \
339     union xnn_f16_minmax_params params[XNN_MIN_ELEMENTS(1)], \
340     uint16_t output_min,                                     \
341     uint16_t output_max);
342 
343 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
344   DECLARE_INIT_F16_MINMAX_PARAMS_FUNCTION(xnn_init_f16_minmax_neon_params)
345 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
346 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
347   DECLARE_INIT_F16_MINMAX_PARAMS_FUNCTION(xnn_init_f16_minmax_avx_params)
348 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
349 
350 
351 #define DECLARE_INIT_F32_MINMAX_PARAMS_FUNCTION(fn_name)     \
352   XNN_INTERNAL size_t fn_name(                               \
353     union xnn_f32_minmax_params params[XNN_MIN_ELEMENTS(1)], \
354     float output_min,                                        \
355     float output_max);
356 
357 // TODO: refactor to use ISA-specific initialization function
358 DECLARE_INIT_F32_MINMAX_PARAMS_FUNCTION(xnn_init_f32_minmax_params)
359 
360 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
361   DECLARE_INIT_F32_MINMAX_PARAMS_FUNCTION(xnn_init_f32_minmax_sse_params)
362   DECLARE_INIT_F32_MINMAX_PARAMS_FUNCTION(xnn_init_f32_minmax_avx_params)
363 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
364 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
365   DECLARE_INIT_F32_MINMAX_PARAMS_FUNCTION(xnn_init_f32_minmax_wasmsimd_params)
366 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
367 DECLARE_INIT_F32_MINMAX_PARAMS_FUNCTION(xnn_init_f32_minmax_scalar_params)
368 
369 
370 #define DECLARE_INIT_F16_HSWISH_PARAMS_FUNCTION(fn_name) \
371   XNN_INTERNAL size_t fn_name(                           \
372     union xnn_f16_hswish_params params[XNN_MIN_ELEMENTS(1)]);
373 
374 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
375   DECLARE_INIT_F16_HSWISH_PARAMS_FUNCTION(xnn_init_f16_hswish_neon_params)
376 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
377 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
378   DECLARE_INIT_F16_HSWISH_PARAMS_FUNCTION(xnn_init_f16_hswish_avx_params)
379 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
380 
381 
382 #define DECLARE_INIT_F32_HSWISH_PARAMS_FUNCTION(fn_name) \
383   XNN_INTERNAL size_t fn_name(                           \
384     union xnn_f32_hswish_params params[XNN_MIN_ELEMENTS(1)]);
385 
386 DECLARE_INIT_F32_HSWISH_PARAMS_FUNCTION(xnn_init_f32_hswish_scalar_params)
387 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
388   DECLARE_INIT_F32_HSWISH_PARAMS_FUNCTION(xnn_init_f32_hswish_sse_params)
389   DECLARE_INIT_F32_HSWISH_PARAMS_FUNCTION(xnn_init_f32_hswish_avx_params)
390   DECLARE_INIT_F32_HSWISH_PARAMS_FUNCTION(xnn_init_f32_hswish_avx512_params)
391 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
392 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
393   DECLARE_INIT_F32_HSWISH_PARAMS_FUNCTION(xnn_init_f32_hswish_wasmsimd_params)
394 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
395 
396 
397 #define DECLARE_INIT_F16_SIGMOID_PARAMS_FUNCTION(fn_name)      \
398   XNN_INTERNAL size_t fn_name(                                 \
399     union xnn_f16_sigmoid_params params[XNN_MIN_ELEMENTS(1)]);
400 
401 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
402   DECLARE_INIT_F16_SIGMOID_PARAMS_FUNCTION(xnn_init_f16_sigmoid_neonfp16arith_rr2_p2_params)
403 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
404 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
405   DECLARE_INIT_F16_SIGMOID_PARAMS_FUNCTION(xnn_init_f16_sigmoid_avx2_rr1_p2_params)
406 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
407 
408 
409 #define DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(fn_name)      \
410   XNN_INTERNAL size_t fn_name(                                 \
411     union xnn_f32_sigmoid_params params[XNN_MIN_ELEMENTS(1)]);
412 
413 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_scalar_rr2_lut64_p2_params)
414 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_scalar_rr2_lut2048_p1_params)
415 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_scalar_rr2_p5_params)
416 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
417   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_neon_rr2_lut2048_p1_params)
418   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_neon_rr2_lut64_p2_params)
419   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_neon_rr2_p5_params)
420   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_neonfma_rr1_lut2048_p1_params)
421   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_neonfma_rr1_lut64_p2_params)
422   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_neonfma_rr1_p5_params)
423 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
424 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
425   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_sse2_rr2_lut64_p2_params)
426   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_sse2_rr2_p5_params)
427   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_avx_rr2_p5_params)
428   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_avx2_rr1_p5_params)
429   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_avx512_rr1_lut16_p3_params)
430   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_avx512_rr2_lut32_p2_params)
431   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_avx512_rr1_p5_params)
432 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
433 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
434   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_wasmsimd_rr2_lut64_p2_params)
435   DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_wasmsimd_rr2_p5_params)
436 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
437 
438 
439 #define DECLARE_INIT_F32_ABS_PARAMS_FUNCTION(fn_name)      \
440   XNN_INTERNAL size_t fn_name(                             \
441     union xnn_f32_abs_params params[XNN_MIN_ELEMENTS(1)]);
442 
443 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
444   DECLARE_INIT_F32_ABS_PARAMS_FUNCTION(xnn_init_f32_abs_sse_params)
445   DECLARE_INIT_F32_ABS_PARAMS_FUNCTION(xnn_init_f32_abs_avx_params)
446   DECLARE_INIT_F32_ABS_PARAMS_FUNCTION(xnn_init_f32_abs_avx512_params)
447 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
448 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
449   DECLARE_INIT_F32_ABS_PARAMS_FUNCTION(xnn_init_f32_abs_wasmsimd_params)
450 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
451 
452 
453 #define DECLARE_INIT_F32_NEG_PARAMS_FUNCTION(fn_name)      \
454   XNN_INTERNAL size_t fn_name(                             \
455     union xnn_f32_neg_params params[XNN_MIN_ELEMENTS(1)]);
456 
457 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
458   DECLARE_INIT_F32_NEG_PARAMS_FUNCTION(xnn_init_f32_neg_sse_params)
459   DECLARE_INIT_F32_NEG_PARAMS_FUNCTION(xnn_init_f32_neg_avx_params)
460   DECLARE_INIT_F32_NEG_PARAMS_FUNCTION(xnn_init_f32_neg_avx512_params)
461 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
462 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
463   DECLARE_INIT_F32_NEG_PARAMS_FUNCTION(xnn_init_f32_neg_wasmsimd_params)
464 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
465 
466 
467 #define DECLARE_INIT_F16_ABS_PARAMS_FUNCTION(fn_name)      \
468   XNN_INTERNAL size_t fn_name(                             \
469     union xnn_f16_abs_params params[XNN_MIN_ELEMENTS(1)]);
470 
471 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
472   DECLARE_INIT_F16_ABS_PARAMS_FUNCTION(xnn_init_f16_abs_sse_params)
473 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
474 
475 
476 #define DECLARE_INIT_F16_NEG_PARAMS_FUNCTION(fn_name)      \
477   XNN_INTERNAL size_t fn_name(                             \
478     union xnn_f16_neg_params params[XNN_MIN_ELEMENTS(1)]);
479 
480 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
481   DECLARE_INIT_F16_NEG_PARAMS_FUNCTION(xnn_init_f16_neg_sse_params)
482 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
483 
484 
485 #define DECLARE_INIT_F32_RND_PARAMS_FUNCTION(fn_name)      \
486   XNN_INTERNAL size_t fn_name(                             \
487     union xnn_f32_rnd_params params[XNN_MIN_ELEMENTS(1)]);
488 
489 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
490   DECLARE_INIT_F32_RND_PARAMS_FUNCTION(xnn_init_f32_rnd_sse2_params)
491   DECLARE_INIT_F32_RND_PARAMS_FUNCTION(xnn_init_f32_rnd_avx_params)
492 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
493 
494 
495 #define DECLARE_INIT_F16_ELU_PARAMS_FUNCTION(fn_name)     \
496   XNN_INTERNAL size_t fn_name(                            \
497     union xnn_f16_elu_params params[XNN_MIN_ELEMENTS(1)], \
498     uint16_t prescale,                                    \
499     uint16_t alpha,                                       \
500     uint16_t beta);
501 
502 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
503   DECLARE_INIT_F16_ELU_PARAMS_FUNCTION(xnn_init_f16_elu_neonfp16arith_rr1_p3_params)
504 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
505 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
506   DECLARE_INIT_F16_ELU_PARAMS_FUNCTION(xnn_init_f16_elu_avx2_rr1_p3_params)
507 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
508 
509 
510 #define DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(fn_name)     \
511   XNN_INTERNAL size_t fn_name(                            \
512     union xnn_f32_elu_params params[XNN_MIN_ELEMENTS(1)], \
513     float prescale,                                       \
514     float alpha,                                          \
515     float beta);
516 
517 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_scalar_rr2_lut16_p3_params)
518 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_scalar_rr2_p6_params)
519 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
520   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_neon_rr2_lut16_p3_params)
521   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_neon_rr2_p6_params)
522   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_neonfma_rr1_lut16_p3_params)
523   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_neonfma_rr1_p6_params)
524 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
525 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
526   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_sse2_rr2_lut16_p3_params)
527   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_sse2_rr2_p6_params)
528   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx_rr2_lut16_p3_params)
529   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx_rr2_lut4_p4_params)
530   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx_rr2_p6_params)
531   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx2_rr1_lut16_p3_params)
532   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx2_rr1_lut8_p4_params)
533   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx2_rr1_lut4_p4_params)
534   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx2_rr1_p6_params)
535   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx512_rr1_lut16_p3_params)
536   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx512_rr1_p6_params)
537 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
538 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
539   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_wasmsimd_rr2_lut16_p3_params)
540   DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_wasmsimd_rr2_p6_params)
541 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
542 
543 
544 #define DECLARE_INIT_F16_EXPMINUS_PARAMS_FUNCTION(fn_name)      \
545   XNN_INTERNAL size_t fn_name(                                  \
546     union xnn_f16_expminus_params params[XNN_MIN_ELEMENTS(1)]);
547 
548 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
549   DECLARE_INIT_F16_EXPMINUS_PARAMS_FUNCTION(xnn_init_f16_expminus_neonfp16arith_rr2_p2_params)
550 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
551 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
552   DECLARE_INIT_F16_EXPMINUS_PARAMS_FUNCTION(xnn_init_f16_expminus_avx2_rr1_p2_params)
553 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
554 
555 
556 #define DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(fn_name)      \
557   XNN_INTERNAL size_t fn_name(                                 \
558     union xnn_f32_expminus_params params[XNN_MIN_ELEMENTS(1)]);
559 
560 DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_scalar_rr2_lut64_p2_params)
561 DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_scalar_rr2_p5_params)
562 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
563   DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_neon_rr2_lut64_p2_params)
564   DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_neon_rr2_p5_params)
565   DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_neonfma_rr1_lut64_p2_params)
566   DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_neonfma_rr1_p5_params)
567 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
568 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
569   DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_sse2_rr2_p5_params)
570   DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_avx2_rr1_p5_params)
571   DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_avx512_rr1_p5_params)
572 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
573 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
574   DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_wasmsimd_rr2_p5_params)
575 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
576 
577 
578 #define DECLARE_INIT_F16_LRELU_PARAMS_FUNCTION(fn_name)     \
579   XNN_INTERNAL size_t fn_name(                              \
580     union xnn_f16_lrelu_params params[XNN_MIN_ELEMENTS(1)], \
581     uint16_t slope);
582 
583 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
584   DECLARE_INIT_F16_LRELU_PARAMS_FUNCTION(xnn_init_f16_lrelu_neon_params)
585 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
586 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
587   DECLARE_INIT_F16_LRELU_PARAMS_FUNCTION(xnn_init_f16_lrelu_avx_params)
588 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
589 
590 
591 #define DECLARE_INIT_F32_LRELU_PARAMS_FUNCTION(fn_name)     \
592   XNN_INTERNAL size_t fn_name(                              \
593     union xnn_f32_lrelu_params params[XNN_MIN_ELEMENTS(1)], \
594     float slope);
595 
596 DECLARE_INIT_F32_LRELU_PARAMS_FUNCTION(xnn_init_f32_lrelu_scalar_params)
597 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
598   DECLARE_INIT_F32_LRELU_PARAMS_FUNCTION(xnn_init_f32_lrelu_sse_params)
599   DECLARE_INIT_F32_LRELU_PARAMS_FUNCTION(xnn_init_f32_lrelu_avx_params)
600 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
601 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
602   DECLARE_INIT_F32_LRELU_PARAMS_FUNCTION(xnn_init_f32_lrelu_wasmsimd_params)
603 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
604 
605 
606 #define DECLARE_INIT_QS8_LRELU_PARAMS_FUNCTION(fn_name)     \
607   XNN_INTERNAL size_t fn_name(                              \
608     union xnn_qs8_lrelu_params params[XNN_MIN_ELEMENTS(1)], \
609     float positive_scale,                                   \
610     float negative_scale,                                   \
611     int8_t input_zero_point,                                \
612     int8_t output_zero_point);
613 
614 DECLARE_INIT_QS8_LRELU_PARAMS_FUNCTION(xnn_init_qs8_lrelu_scalar_andxor_params)
615 DECLARE_INIT_QS8_LRELU_PARAMS_FUNCTION(xnn_init_qs8_lrelu_scalar_select_params)
616 #if XNN_ARCH_ARM
617   DECLARE_INIT_QS8_LRELU_PARAMS_FUNCTION(xnn_init_qs8_lrelu_armsimd32_params)
618 #endif  // XNN_ARCH_ARM
619 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
620   DECLARE_INIT_QS8_LRELU_PARAMS_FUNCTION(xnn_init_qs8_lrelu_neon_params)
621 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
622 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
623   DECLARE_INIT_QS8_LRELU_PARAMS_FUNCTION(xnn_init_qs8_lrelu_sse2_params)
624   DECLARE_INIT_QS8_LRELU_PARAMS_FUNCTION(xnn_init_qs8_lrelu_avx_params)
625   DECLARE_INIT_QS8_LRELU_PARAMS_FUNCTION(xnn_init_qs8_lrelu_avx2_params)
626 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
627 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
628   DECLARE_INIT_QS8_LRELU_PARAMS_FUNCTION(xnn_init_qs8_lrelu_wasmsimd_arm_params)
629   DECLARE_INIT_QS8_LRELU_PARAMS_FUNCTION(xnn_init_qs8_lrelu_wasmsimd_x86_params)
630 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
631 
632 
633 #define DECLARE_INIT_QU8_LRELU_PARAMS_FUNCTION(fn_name)     \
634   XNN_INTERNAL size_t fn_name(                              \
635     union xnn_qu8_lrelu_params params[XNN_MIN_ELEMENTS(1)], \
636     float positive_scale,                                   \
637     float negative_scale,                                   \
638     uint8_t input_zero_point,                               \
639     uint8_t output_zero_point);
640 
641 DECLARE_INIT_QU8_LRELU_PARAMS_FUNCTION(xnn_init_qu8_lrelu_scalar_andxor_params)
642 DECLARE_INIT_QU8_LRELU_PARAMS_FUNCTION(xnn_init_qu8_lrelu_scalar_select_params)
643 #if XNN_ARCH_ARM
644   DECLARE_INIT_QU8_LRELU_PARAMS_FUNCTION(xnn_init_qu8_lrelu_armsimd32_params)
645 #endif  // XNN_ARCH_ARM
646 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
647   DECLARE_INIT_QU8_LRELU_PARAMS_FUNCTION(xnn_init_qu8_lrelu_neon_params)
648 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
649 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
650   DECLARE_INIT_QU8_LRELU_PARAMS_FUNCTION(xnn_init_qu8_lrelu_sse2_params)
651   DECLARE_INIT_QU8_LRELU_PARAMS_FUNCTION(xnn_init_qu8_lrelu_avx_params)
652   DECLARE_INIT_QU8_LRELU_PARAMS_FUNCTION(xnn_init_qu8_lrelu_avx2_params)
653 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
654 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
655   DECLARE_INIT_QU8_LRELU_PARAMS_FUNCTION(xnn_init_qu8_lrelu_wasmsimd_arm_params)
656   DECLARE_INIT_QU8_LRELU_PARAMS_FUNCTION(xnn_init_qu8_lrelu_wasmsimd_x86_params)
657 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
658 
659 
660 #define DECLARE_INIT_F32_SQRT_PARAMS_FUNCTION(fn_name)      \
661   XNN_INTERNAL size_t fn_name(                              \
662     union xnn_f32_sqrt_params params[XNN_MIN_ELEMENTS(1)]);
663 
664 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
665   DECLARE_INIT_F32_SQRT_PARAMS_FUNCTION(xnn_init_f32_sqrt_avx_params)
666   DECLARE_INIT_F32_SQRT_PARAMS_FUNCTION(xnn_init_f32_sqrt_fma_params)
667   DECLARE_INIT_F32_SQRT_PARAMS_FUNCTION(xnn_init_f32_sqrt_avx512_params)
668 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
669 
670 
671 XNN_INTERNAL size_t xnn_init_f16_chw_params(
672   union xnn_f16_chw_params params[XNN_MIN_ELEMENTS(1)],
673   uint32_t width,
674   uint16_t output_min,
675   uint16_t output_max);
676 
677 XNN_INTERNAL size_t xnn_init_f32_chw_params(
678   union xnn_f32_chw_params params[XNN_MIN_ELEMENTS(1)],
679   uint32_t width,
680   float output_min,
681   float output_max);
682 
683 XNN_INTERNAL void xnn_update_f32_chw_params(
684   union xnn_f32_chw_params* params,
685   uint32_t width);
686 
687 XNN_INTERNAL size_t xnn_init_scalar_f32_chw_params(
688   union xnn_f32_chw_params params[XNN_MIN_ELEMENTS(1)],
689   uint32_t width,
690   float output_min,
691   float output_max);
692 
693 
694 #define DECLARE_INIT_S8_MINMAX_PARAMS_FUNCTION(fn_name)     \
695   XNN_INTERNAL size_t fn_name(                              \
696     union xnn_s8_minmax_params params[XNN_MIN_ELEMENTS(1)], \
697     int8_t output_min,                                      \
698     int8_t output_max);
699 
700 DECLARE_INIT_S8_MINMAX_PARAMS_FUNCTION(xnn_init_s8_minmax_scalar_params)
701 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
702   DECLARE_INIT_S8_MINMAX_PARAMS_FUNCTION(xnn_init_s8_minmax_neon_params)
703 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
704 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
705   DECLARE_INIT_S8_MINMAX_PARAMS_FUNCTION(xnn_init_s8_minmax_sse2_params)
706   DECLARE_INIT_S8_MINMAX_PARAMS_FUNCTION(xnn_init_s8_minmax_sse4_params)
707 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
708 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
709   DECLARE_INIT_S8_MINMAX_PARAMS_FUNCTION(xnn_init_s8_minmax_wasmsimd_params)
710 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
711 
712 
713 #define DECLARE_INIT_U8_MINMAX_PARAMS_FUNCTION(fn_name)      \
714   XNN_INTERNAL size_t fn_name(                               \
715     union xnn_u8_minmax_params params[XNN_MIN_ELEMENTS(1)],  \
716     uint8_t output_min,                                      \
717     uint8_t output_max);
718 
719 DECLARE_INIT_U8_MINMAX_PARAMS_FUNCTION(xnn_init_u8_minmax_params)
720 DECLARE_INIT_U8_MINMAX_PARAMS_FUNCTION(xnn_init_u8_minmax_scalar_params)
721 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
722   DECLARE_INIT_U8_MINMAX_PARAMS_FUNCTION(xnn_init_u8_minmax_neon_params)
723 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
724 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
725   DECLARE_INIT_U8_MINMAX_PARAMS_FUNCTION(xnn_init_u8_minmax_sse2_params)
726 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
727 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
728   DECLARE_INIT_U8_MINMAX_PARAMS_FUNCTION(xnn_init_u8_minmax_wasmsimd_params)
729 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
730 
731 
732 #define DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(fn_name)        \
733   XNN_INTERNAL size_t fn_name(                                      \
734     union xnn_qs8_add_minmax_params params[XNN_MIN_ELEMENTS(1)], \
735     int8_t x_zero_point,                                            \
736     int8_t y_zero_point,                                            \
737     int8_t output_zero_point,                                       \
738     float x_output_scale,                                           \
739     float y_output_scale,                                           \
740     int8_t output_min,                                              \
741     int8_t output_max);
742 
743 DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_scalar_params)
744 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
745   DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_neon_params)
746 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
747 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
748   DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_sse2_params)
749   DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_sse4_mul16_params)
750   DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_sse4_mul32_params)
751   DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_avx2_params)
752   DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_avx512_params)
753 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
754 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
755   DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_wasmsimd_params)
756 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
757 
758 
759 #define DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(fn_name)        \
760   XNN_INTERNAL size_t fn_name(                                      \
761     union xnn_qu8_add_minmax_params params[XNN_MIN_ELEMENTS(1)], \
762     uint8_t x_zero_point,                                           \
763     uint8_t y_zero_point,                                           \
764     uint8_t output_zero_point,                                      \
765     float x_output_scale,                                           \
766     float y_output_scale,                                           \
767     uint8_t output_min,                                             \
768     uint8_t output_max);
769 
770 DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_scalar_params)
771 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
772   DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_neon_params)
773 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
774 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
775   DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_sse2_params)
776   DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_sse4_params)
777   DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_avx2_params)
778   DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_avx512_params)
779 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
780 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
781   DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_wasmsimd_params)
782 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
783 
784 
785 #define DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(fn_name)     \
786   XNN_INTERNAL size_t fn_name(                                   \
787     union xnn_qs8_mul_minmax_params params[XNN_MIN_ELEMENTS(1)], \
788     int8_t a_zero_point,                                         \
789     int8_t b_zero_point,                                         \
790     int8_t output_zero_point,                                    \
791     float product_output_scale,                                  \
792     int8_t output_min,                                           \
793     int8_t output_max);
794 
795 DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_fp32_scalar_params)
796 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
797   DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_fp32_neon_params)
798   DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_fp32_neonv8_params)
799   DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_rndnu_neon_params)
800 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
801 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
802   DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_fp32_sse2_params)
803   DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_fp32_sse4_params)
804 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
805 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
806   DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_fp32_wasmsimd_params)
807 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
808 
809 
810 #define DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(fn_name)     \
811   XNN_INTERNAL size_t fn_name(                                   \
812     union xnn_qu8_mul_minmax_params params[XNN_MIN_ELEMENTS(1)], \
813     uint8_t a_zero_point,                                        \
814     uint8_t b_zero_point,                                        \
815     uint8_t output_zero_point,                                   \
816     float product_output_scale,                                  \
817     uint8_t output_min,                                          \
818     uint8_t output_max);
819 
820 DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_mul_minmax_fp32_scalar_params)
821 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
822   DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_mul_minmax_fp32_neon_params)
823   DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_mul_minmax_fp32_neonv8_params)
824   DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_mul_minmax_rndnu_neon_params)
825 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
826 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
827   DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_mul_minmax_fp32_sse2_params)
828 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
829 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
830   DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_mul_minmax_fp32_wasmsimd_params)
831 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
832 
833 
834 #define DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(fn_name)      \
835   XNN_INTERNAL size_t fn_name(                                 \
836     union xnn_f16_f32_cvt_params params[XNN_MIN_ELEMENTS(1)]);
837 
838 DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(xnn_init_f16_f32_cvt_scalar_params)
839 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
840   DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(xnn_init_f16_f32_cvt_neon_params)
841 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
842 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
843   DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(xnn_init_f16_f32_cvt_sse_int16_params)
844   DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(xnn_init_f16_f32_cvt_sse_int32_params)
845 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
846 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
847   DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(xnn_init_f16_f32_cvt_wasmsimd_int16_params)
848   DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(xnn_init_f16_f32_cvt_wasmsimd_int32_params)
849 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
850 
851 
852 #define DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(fn_name)      \
853   XNN_INTERNAL size_t fn_name(                                 \
854     union xnn_f32_f16_cvt_params params[XNN_MIN_ELEMENTS(1)]);
855 
856 DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(xnn_init_f32_f16_cvt_scalar_bitcast_params)
857 DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(xnn_init_f32_f16_cvt_scalar_fabsf_params)
858 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
859   DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(xnn_init_f32_f16_cvt_neon_params)
860 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
861 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
862   DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(xnn_init_f32_f16_cvt_sse2_params)
863   DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(xnn_init_f32_f16_cvt_f16c_params)
864 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
865 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
866   DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(xnn_init_f32_f16_cvt_wasmsimd_params)
867 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
868 
869 
870 #define DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(fn_name)     \
871   XNN_INTERNAL size_t fn_name(                                \
872     union xnn_f32_qs8_cvt_params params[XNN_MIN_ELEMENTS(1)], \
873     float scale,                                              \
874     int8_t zero_point,                                        \
875     int8_t output_min,                                        \
876     int8_t output_max);
877 
878 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_scalar_fmagic_params)
879 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_scalar_imagic_params)
880 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_scalar_lrintf_params)
881 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
882   DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_neon_params)
883   DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_neonv8_params)
884 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
885 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
886   DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_sse2_params)
887   DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_sse4_params)
888   DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_avx_params)
889   DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_avx2_params)
890   DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_avx512_params)
891 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
892 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
893   DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_wasmsimd_cvt_params)
894   DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_wasmsimd_magic_params)
895 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
896 
897 
898 #define DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(fn_name)     \
899   XNN_INTERNAL size_t fn_name(                                \
900     union xnn_f32_qu8_cvt_params params[XNN_MIN_ELEMENTS(1)], \
901     float scale,                                              \
902     uint8_t zero_point,                                       \
903     uint8_t output_min,                                       \
904     uint8_t output_max);
905 
906 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_scalar_fmagic_params)
907 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_scalar_imagic_params)
908 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_scalar_lrintf_params)
909 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
910   DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_neon_params)
911   DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_neonv8_params)
912 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
913 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
914   DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_sse2_params)
915   DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_avx_params)
916   DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_avx2_params)
917   DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_avx512_params)
918 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
919 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
920   DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_wasmsimd_cvt_params)
921   DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_wasmsimd_magic_params)
922 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
923 
924 
925 #define DECLARE_INIT_QS8_CVT_PARAMS_FUNCTION(fn_name)     \
926   XNN_INTERNAL size_t fn_name(                            \
927     union xnn_qs8_cvt_params params[XNN_MIN_ELEMENTS(1)], \
928     float input_output_scale,                             \
929     int8_t input_zero_point,                              \
930     int8_t output_zero_point);
931 
932 DECLARE_INIT_QS8_CVT_PARAMS_FUNCTION(xnn_init_qs8_cvt_scalar_params)
933 #if XNN_ARCH_ARM
934   DECLARE_INIT_QS8_CVT_PARAMS_FUNCTION(xnn_init_qs8_cvt_armsimd32_params)
935 #endif  // XNN_ARCH_ARM
936 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
937   DECLARE_INIT_QS8_CVT_PARAMS_FUNCTION(xnn_init_qs8_cvt_neon_params)
938 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
939 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
940   DECLARE_INIT_QS8_CVT_PARAMS_FUNCTION(xnn_init_qs8_cvt_sse2_params)
941   DECLARE_INIT_QS8_CVT_PARAMS_FUNCTION(xnn_init_qs8_cvt_ssse3_params)
942   DECLARE_INIT_QS8_CVT_PARAMS_FUNCTION(xnn_init_qs8_cvt_avx2_params)
943 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
944 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
945   DECLARE_INIT_QS8_CVT_PARAMS_FUNCTION(xnn_init_qs8_cvt_wasmsimd_params)
946 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
947 
948 
949 #define DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(fn_name)     \
950   XNN_INTERNAL size_t fn_name(                                \
951     union xnn_qs8_f32_cvt_params params[XNN_MIN_ELEMENTS(1)], \
952     float scale,                                              \
953     int8_t zero_point);
954 
955 DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_scalar_params)
956 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
957   DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_neon_params)
958 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
959 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
960   DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_sse2_params)
961   DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_sse4_params)
962   DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_avx_params)
963   DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_avx512_params)
964 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
965 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
966   DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_wasmsimd_params)
967 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
968 
969 
970 #define DECLARE_INIT_QU8_CVT_PARAMS_FUNCTION(fn_name)     \
971   XNN_INTERNAL size_t fn_name(                            \
972     union xnn_qu8_cvt_params params[XNN_MIN_ELEMENTS(1)], \
973     float input_output_scale,                             \
974     uint8_t input_zero_point,                             \
975     uint8_t output_zero_point);
976 
977 DECLARE_INIT_QU8_CVT_PARAMS_FUNCTION(xnn_init_qu8_cvt_scalar_params)
978 #if XNN_ARCH_ARM
979   DECLARE_INIT_QU8_CVT_PARAMS_FUNCTION(xnn_init_qu8_cvt_armsimd32_params)
980 #endif  // XNN_ARCH_ARM
981 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
982   DECLARE_INIT_QU8_CVT_PARAMS_FUNCTION(xnn_init_qu8_cvt_neon_params)
983 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
984 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
985   DECLARE_INIT_QU8_CVT_PARAMS_FUNCTION(xnn_init_qu8_cvt_sse2_params)
986   DECLARE_INIT_QU8_CVT_PARAMS_FUNCTION(xnn_init_qu8_cvt_ssse3_params)
987   DECLARE_INIT_QU8_CVT_PARAMS_FUNCTION(xnn_init_qu8_cvt_avx2_params)
988 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
989 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
990   DECLARE_INIT_QU8_CVT_PARAMS_FUNCTION(xnn_init_qu8_cvt_wasmsimd_params)
991 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
992 
993 
994 #define DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(fn_name)     \
995   XNN_INTERNAL size_t fn_name(                                \
996     union xnn_qu8_f32_cvt_params params[XNN_MIN_ELEMENTS(1)], \
997     float scale,                                              \
998     uint8_t zero_point);
999 
1000 DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_scalar_params)
1001 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
1002   DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_neon_params)
1003 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
1004 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
1005   DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_sse2_params)
1006   DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_sse4_params)
1007   DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_avx_params)
1008   DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_avx512_params)
1009 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
1010 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1011   DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_wasmsimd_params)
1012 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1013 
1014 
1015 #ifdef __cplusplus
1016 }  // extern "C"
1017 #endif
1018