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/params.h> 13 14 15 #ifdef __cplusplus 16 extern "C" { 17 #endif 18 19 20 #define DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(fn_name) \ 21 XNN_INTERNAL void fn_name( \ 22 union xnn_qu8_conv_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 23 uint8_t kernel_zero_point, \ 24 float scale, \ 25 uint8_t output_zero_point, \ 26 uint8_t output_min, \ 27 uint8_t output_max); 28 29 DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params) 30 DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params) 31 DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params) 32 33 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 34 DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_neon_params) 35 DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_neonv8_params) 36 DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_rndnu_neon_params) 37 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 38 39 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 40 DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_sse2_params) 41 DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_avx2_params) 42 DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_avx512_params) 43 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 44 45 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 46 DECLARE_INIT_QU8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_conv_minmax_fp32_wasmsimd_params) 47 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 48 49 50 #define DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(fn_name) \ 51 XNN_INTERNAL void fn_name( \ 52 union xnn_qs8_conv_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 53 float scale, \ 54 int8_t output_zero_point, \ 55 int8_t output_min, \ 56 int8_t output_max); 57 58 DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_scalar_fmagic_params) 59 DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_scalar_imagic_params) 60 DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_scalar_lrintf_params) 61 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 68 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 69 DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_sse2_params) 70 DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_sse4_params) 71 DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_avx2_params) 72 DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_avx512_params) 73 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 74 75 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 76 DECLARE_INIT_QS8_CONV_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_conv_minmax_fp32_wasmsimd_params) 77 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 78 79 80 XNN_INTERNAL void xnn_init_qc8_scale_fp32_params( 81 size_t channels, 82 size_t channels_tile, 83 size_t stride, 84 const float scale[XNN_MIN_ELEMENTS(1)], 85 void* packed_w); 86 87 88 #define DECLARE_INIT_QS8_MINMAX_PARAMS_FUNCTION(fn_name) \ 89 XNN_INTERNAL void fn_name( \ 90 union xnn_qs8_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 91 int8_t output_zero_point, \ 92 int8_t output_min, \ 93 int8_t output_max); 94 95 DECLARE_INIT_QS8_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_minmax_scalar_fmagic_params) 96 DECLARE_INIT_QS8_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_minmax_scalar_imagic_params) 97 DECLARE_INIT_QS8_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_minmax_scalar_lrintf_params) 98 99 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 100 DECLARE_INIT_QS8_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_minmax_neon_params) 101 DECLARE_INIT_QS8_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_minmax_neonv8_params) 102 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 103 104 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 105 DECLARE_INIT_QS8_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_minmax_sse2_params) 106 DECLARE_INIT_QS8_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_minmax_sse4_params) 107 DECLARE_INIT_QS8_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_minmax_avx2_params) 108 DECLARE_INIT_QS8_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_minmax_avx512_params) 109 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 110 111 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 112 DECLARE_INIT_QS8_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_minmax_wasmsimd_params) 113 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 114 115 116 #define DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(fn_name) \ 117 XNN_INTERNAL void 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 129 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 130 DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_fp32_neon_params) 131 DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_fp32_neonv8_params) 132 DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_rndnu_neon_params) 133 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 134 135 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 136 DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_fp32_sse2_params) 137 DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_fp32_sse4_params) 138 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 139 140 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 141 DECLARE_INIT_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qs8_avgpool_minmax_fp32_wasmsimd_params) 142 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 143 144 145 #define DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(fn_name) \ 146 XNN_INTERNAL void fn_name( \ 147 union xnn_qs8_avgpool_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 148 int32_t bias, \ 149 float scale); 150 151 DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_scalar_fmagic_params) 152 DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_scalar_imagic_params) 153 DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_scalar_lrintf_params) 154 155 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 156 DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_neon_params) 157 DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_neonv8_params) 158 DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_rndnu_neon_params) 159 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 160 161 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 162 DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_sse2_params) 163 DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_sse4_params) 164 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 165 166 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 167 DECLARE_UPDATE_QS8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qs8_avgpool_minmax_fp32_wasmsimd_params) 168 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 169 170 171 #define DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(fn_name) \ 172 XNN_INTERNAL void fn_name( \ 173 union xnn_qu8_avgpool_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 174 int32_t bias, \ 175 float scale, \ 176 uint8_t output_zero_point, \ 177 uint8_t output_min, \ 178 uint8_t output_max); 179 180 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params) 181 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params) 182 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params) 183 184 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 185 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_neon_params) 186 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_neonv8_params) 187 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_rndnu_neon_params) 188 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 189 190 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 191 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_sse2_params) 192 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_sse4_params) 193 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 194 195 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 196 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params) 197 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 198 199 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_scalar_params) 200 201 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 202 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_neon_params) 203 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 204 205 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 206 DECLARE_INIT_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_init_qu8_avgpool_minmax_sse2_params) 207 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 208 209 210 #define DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(fn_name) \ 211 XNN_INTERNAL void fn_name( \ 212 union xnn_qu8_avgpool_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 213 int32_t bias, \ 214 float scale); 215 216 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_scalar_fmagic_params) 217 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_scalar_imagic_params) 218 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_scalar_lrintf_params) 219 220 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 221 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_neon_params) 222 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_neonv8_params) 223 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_rndnu_neon_params) 224 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 225 226 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 227 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_sse2_params) 228 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_sse4_params) 229 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 230 231 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 232 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_fp32_wasmsimd_params) 233 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 234 235 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_scalar_params) 236 237 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 238 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_neon_params) 239 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 240 241 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 242 DECLARE_UPDATE_QU8_AVGPOOL_PARAMS_FUNCTION(xnn_update_qu8_avgpool_minmax_sse2_params) 243 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 244 245 246 #define DECLARE_INIT_F16_SCALEMINMAX_PARAMS_FUNCTION(fn_name) \ 247 XNN_INTERNAL void fn_name( \ 248 union xnn_f16_scaleminmax_params params[XNN_MIN_ELEMENTS(1)], \ 249 uint16_t scale, \ 250 uint16_t min, \ 251 uint16_t max); 252 253 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 254 DECLARE_INIT_F16_SCALEMINMAX_PARAMS_FUNCTION(xnn_init_f16_scaleminmax_neon_params) 255 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 256 257 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 258 DECLARE_INIT_F16_SCALEMINMAX_PARAMS_FUNCTION(xnn_init_f16_scaleminmax_avx_params) 259 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 260 261 262 #define DECLARE_UPDATE_F16_SCALEMINMAX_PARAMS_FUNCTION(fn_name) \ 263 XNN_INTERNAL void fn_name( \ 264 union xnn_f16_scaleminmax_params params[XNN_MIN_ELEMENTS(1)], \ 265 uint16_t scale); 266 267 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 268 DECLARE_UPDATE_F16_SCALEMINMAX_PARAMS_FUNCTION(xnn_update_f16_scaleminmax_neon_params) 269 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 270 271 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 272 DECLARE_UPDATE_F16_SCALEMINMAX_PARAMS_FUNCTION(xnn_update_f16_scaleminmax_avx_params) 273 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 274 275 276 #define DECLARE_INIT_F32_SCALEMINMAX_PARAMS_FUNCTION(fn_name) \ 277 XNN_INTERNAL void fn_name( \ 278 union xnn_f32_scaleminmax_params params[XNN_MIN_ELEMENTS(1)], \ 279 float scale, \ 280 float min, \ 281 float max); 282 283 DECLARE_INIT_F32_SCALEMINMAX_PARAMS_FUNCTION(xnn_init_f32_scaleminmax_scalar_params) 284 285 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 286 DECLARE_INIT_F32_SCALEMINMAX_PARAMS_FUNCTION(xnn_init_f32_scaleminmax_sse_params) 287 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 288 289 290 #define DECLARE_UPDATE_F32_SCALEMINMAX_PARAMS_FUNCTION(fn_name) \ 291 XNN_INTERNAL void fn_name( \ 292 union xnn_f32_scaleminmax_params params[XNN_MIN_ELEMENTS(1)], \ 293 float scale); 294 295 DECLARE_UPDATE_F32_SCALEMINMAX_PARAMS_FUNCTION(xnn_update_f32_scaleminmax_scalar_params) 296 297 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 298 DECLARE_UPDATE_F32_SCALEMINMAX_PARAMS_FUNCTION(xnn_update_f32_scaleminmax_sse_params) 299 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 300 301 302 XNN_INTERNAL void xnn_init_f32_gavgpool_params( 303 union xnn_f32_gavgpool_params params[XNN_MIN_ELEMENTS(1)], 304 float multiplier, 305 float output_min, 306 float output_max, 307 uint32_t width); 308 309 XNN_INTERNAL void xnn_update_f32_gavgpool_params( 310 union xnn_f32_gavgpool_params* params, 311 float multiplier, 312 uint32_t width); 313 314 XNN_INTERNAL void xnn_init_scalar_f32_gavgpool_params( 315 union xnn_f32_gavgpool_params params[XNN_MIN_ELEMENTS(1)], 316 float multiplier, 317 float output_min, 318 float output_max, 319 uint32_t width); 320 321 322 #define DECLARE_INIT_F32_DEFAULT_PARAMS_FUNCTION(fn_name) \ 323 XNN_INTERNAL void fn_name( \ 324 union xnn_f32_default_params params[XNN_MIN_ELEMENTS(1)]); 325 326 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 327 DECLARE_INIT_F32_DEFAULT_PARAMS_FUNCTION(xnn_init_f32_default_avx_params) 328 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 329 330 331 #define DECLARE_INIT_F16_MINMAX_PARAMS_FUNCTION(fn_name) \ 332 XNN_INTERNAL void fn_name( \ 333 union xnn_f16_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 334 uint16_t output_min, \ 335 uint16_t output_max); 336 337 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 338 DECLARE_INIT_F16_MINMAX_PARAMS_FUNCTION(xnn_init_f16_minmax_neon_params) 339 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 340 341 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 342 DECLARE_INIT_F16_MINMAX_PARAMS_FUNCTION(xnn_init_f16_minmax_avx_params) 343 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 344 345 346 #define DECLARE_INIT_F32_MINMAX_PARAMS_FUNCTION(fn_name) \ 347 XNN_INTERNAL void fn_name( \ 348 union xnn_f32_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 349 float output_min, \ 350 float output_max); 351 352 DECLARE_INIT_F32_MINMAX_PARAMS_FUNCTION(xnn_init_f32_minmax_params) 353 354 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 355 DECLARE_INIT_F32_MINMAX_PARAMS_FUNCTION(xnn_init_f32_minmax_sse_params) 356 DECLARE_INIT_F32_MINMAX_PARAMS_FUNCTION(xnn_init_f32_minmax_avx_params) 357 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 358 359 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 360 DECLARE_INIT_F32_MINMAX_PARAMS_FUNCTION(xnn_init_f32_minmax_wasmsimd_params) 361 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 362 363 DECLARE_INIT_F32_MINMAX_PARAMS_FUNCTION(xnn_init_f32_minmax_scalar_params) 364 365 366 #define DECLARE_INIT_F16_HSWISH_PARAMS_FUNCTION(fn_name) \ 367 XNN_INTERNAL void fn_name( \ 368 union xnn_f16_hswish_params params[XNN_MIN_ELEMENTS(1)]); 369 370 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 371 DECLARE_INIT_F16_HSWISH_PARAMS_FUNCTION(xnn_init_f16_hswish_neon_params) 372 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 373 374 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 375 DECLARE_INIT_F16_HSWISH_PARAMS_FUNCTION(xnn_init_f16_hswish_avx_params) 376 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 377 378 379 #define DECLARE_INIT_F32_HSWISH_PARAMS_FUNCTION(fn_name) \ 380 XNN_INTERNAL void fn_name( \ 381 union xnn_f32_hswish_params params[XNN_MIN_ELEMENTS(1)]); 382 383 DECLARE_INIT_F32_HSWISH_PARAMS_FUNCTION(xnn_init_f32_hswish_scalar_params) 384 385 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 386 DECLARE_INIT_F32_HSWISH_PARAMS_FUNCTION(xnn_init_f32_hswish_sse_params) 387 DECLARE_INIT_F32_HSWISH_PARAMS_FUNCTION(xnn_init_f32_hswish_avx_params) 388 DECLARE_INIT_F32_HSWISH_PARAMS_FUNCTION(xnn_init_f32_hswish_avx512_params) 389 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 390 391 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 392 DECLARE_INIT_F32_HSWISH_PARAMS_FUNCTION(xnn_init_f32_hswish_wasmsimd_params) 393 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 394 395 396 #define DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(fn_name) \ 397 XNN_INTERNAL void fn_name( \ 398 union xnn_f32_sigmoid_params params[XNN_MIN_ELEMENTS(1)]); 399 400 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_scalar_rr2_lut2048_p1_params) 401 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_scalar_rr2_lut64_p2_params) 402 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_scalar_rr2_p5_params) 403 404 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 405 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_neon_rr2_lut2048_p1_params) 406 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_neon_rr2_lut64_p2_params) 407 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_neon_rr2_p5_params) 408 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_neonfma_rr1_lut2048_p1_params) 409 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_neonfma_rr1_lut64_p2_params) 410 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_neonfma_rr1_p5_params) 411 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 412 413 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 414 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_sse2_rr2_lut64_p2_params) 415 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_sse2_rr2_p5_params) 416 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_avx_rr2_p5_params) 417 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_avx2_rr1_p5_params) 418 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_avx512_rr1_lut16_p3_params) 419 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_avx512_rr2_lut32_p2_params) 420 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_avx512_rr1_p5_params) 421 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 422 423 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 424 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_wasmsimd_rr2_lut64_p2_params) 425 DECLARE_INIT_F32_SIGMOID_PARAMS_FUNCTION(xnn_init_f32_sigmoid_wasmsimd_rr2_p5_params) 426 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 427 428 429 #define DECLARE_INIT_F32_ABS_PARAMS_FUNCTION(fn_name) \ 430 XNN_INTERNAL void fn_name( \ 431 union xnn_f32_abs_params params[XNN_MIN_ELEMENTS(1)]); 432 433 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 434 DECLARE_INIT_F32_ABS_PARAMS_FUNCTION(xnn_init_f32_abs_sse_params) 435 DECLARE_INIT_F32_ABS_PARAMS_FUNCTION(xnn_init_f32_abs_avx_params) 436 DECLARE_INIT_F32_ABS_PARAMS_FUNCTION(xnn_init_f32_abs_avx512_params) 437 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 438 439 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 440 DECLARE_INIT_F32_ABS_PARAMS_FUNCTION(xnn_init_f32_abs_wasmsimd_params) 441 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 442 443 444 #define DECLARE_INIT_F32_NEG_PARAMS_FUNCTION(fn_name) \ 445 XNN_INTERNAL void fn_name( \ 446 union xnn_f32_neg_params params[XNN_MIN_ELEMENTS(1)]); 447 448 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 449 DECLARE_INIT_F32_NEG_PARAMS_FUNCTION(xnn_init_f32_neg_sse_params) 450 DECLARE_INIT_F32_NEG_PARAMS_FUNCTION(xnn_init_f32_neg_avx_params) 451 DECLARE_INIT_F32_NEG_PARAMS_FUNCTION(xnn_init_f32_neg_avx512_params) 452 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 453 454 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 455 DECLARE_INIT_F32_NEG_PARAMS_FUNCTION(xnn_init_f32_neg_wasmsimd_params) 456 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 457 458 459 #define DECLARE_INIT_F32_RND_PARAMS_FUNCTION(fn_name) \ 460 XNN_INTERNAL void fn_name( \ 461 union xnn_f32_rnd_params params[XNN_MIN_ELEMENTS(1)]); 462 463 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 464 DECLARE_INIT_F32_RND_PARAMS_FUNCTION(xnn_init_f32_rnd_sse2_params) 465 DECLARE_INIT_F32_RND_PARAMS_FUNCTION(xnn_init_f32_rnd_avx_params) 466 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 467 468 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 469 DECLARE_INIT_F32_RND_PARAMS_FUNCTION(xnn_init_f32_rnd_wasmsimd_params) 470 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 471 472 473 #define DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(fn_name) \ 474 XNN_INTERNAL void fn_name( \ 475 union xnn_f32_elu_params params[XNN_MIN_ELEMENTS(1)], \ 476 float prescale, \ 477 float alpha, \ 478 float beta); 479 480 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_scalar_rr2_lut16_p3_params) 481 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_scalar_rr2_p6_params) 482 483 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 484 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_neon_rr2_lut16_p3_params) 485 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_neon_rr2_p6_params) 486 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_neonfma_rr1_lut16_p3_params) 487 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_neonfma_rr1_p6_params) 488 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 489 490 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 491 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_sse2_rr2_lut16_p3_params) 492 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_sse2_rr2_p6_params) 493 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx_rr2_lut16_p3_params) 494 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx_rr2_lut4_p4_params) 495 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx_rr2_p6_params) 496 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx2_rr1_lut16_p3_params) 497 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx2_rr1_lut8_p4_params) 498 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx2_rr1_lut4_p4_params) 499 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx2_rr1_p6_params) 500 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx512_rr1_lut16_p3_params) 501 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_avx512_rr1_p6_params) 502 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 503 504 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 505 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_wasmsimd_rr2_lut16_p3_params) 506 DECLARE_INIT_F32_ELU_PARAMS_FUNCTION(xnn_init_f32_elu_wasmsimd_rr2_p6_params) 507 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 508 509 510 #define DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(fn_name) \ 511 XNN_INTERNAL void fn_name( \ 512 union xnn_f32_expminus_params params[XNN_MIN_ELEMENTS(1)]); 513 514 DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_scalar_rr2_lut64_p2_params) 515 DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_scalar_rr2_p5_params) 516 517 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 518 DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_neon_rr2_lut64_p2_params) 519 DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_neon_rr2_p5_params) 520 DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_neonfma_rr1_lut64_p2_params) 521 DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_neonfma_rr1_p5_params) 522 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 523 524 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 525 DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_sse2_rr2_p5_params) 526 DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_avx2_rr1_p5_params) 527 DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_avx512_rr1_p5_params) 528 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 529 530 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 531 DECLARE_INIT_F32_EXPMINUS_PARAMS_FUNCTION(xnn_init_f32_expminus_wasmsimd_rr2_p5_params) 532 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 533 534 535 #define DECLARE_INIT_F32_LRELU_PARAMS_FUNCTION(fn_name) \ 536 XNN_INTERNAL void fn_name( \ 537 union xnn_f32_lrelu_params params[XNN_MIN_ELEMENTS(1)], \ 538 float slope); 539 540 DECLARE_INIT_F32_LRELU_PARAMS_FUNCTION(xnn_init_f32_lrelu_scalar_params) 541 542 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 543 DECLARE_INIT_F32_LRELU_PARAMS_FUNCTION(xnn_init_f32_lrelu_sse_params) 544 DECLARE_INIT_F32_LRELU_PARAMS_FUNCTION(xnn_init_f32_lrelu_avx_params) 545 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 546 547 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 548 DECLARE_INIT_F32_LRELU_PARAMS_FUNCTION(xnn_init_f32_lrelu_wasmsimd_params) 549 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 550 551 552 #define DECLARE_INIT_F32_SQRT_PARAMS_FUNCTION(fn_name) \ 553 XNN_INTERNAL void fn_name( \ 554 union xnn_f32_sqrt_params params[XNN_MIN_ELEMENTS(1)]); 555 556 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 557 DECLARE_INIT_F32_SQRT_PARAMS_FUNCTION(xnn_init_f32_sqrt_avx_params) 558 DECLARE_INIT_F32_SQRT_PARAMS_FUNCTION(xnn_init_f32_sqrt_fma_params) 559 DECLARE_INIT_F32_SQRT_PARAMS_FUNCTION(xnn_init_f32_sqrt_avx512_params) 560 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 561 562 563 XNN_INTERNAL void xnn_init_f32_chw_params( 564 union xnn_f32_chw_params params[XNN_MIN_ELEMENTS(1)], 565 uint32_t width, 566 float output_min, 567 float output_max); 568 569 XNN_INTERNAL void xnn_update_f32_chw_params( 570 union xnn_f32_chw_params* params, 571 uint32_t width); 572 573 XNN_INTERNAL void xnn_init_scalar_f32_chw_params( 574 union xnn_f32_chw_params params[XNN_MIN_ELEMENTS(1)], 575 uint32_t width, 576 float output_min, 577 float output_max); 578 579 580 #define DECLARE_INIT_S8_MINMAX_PARAMS_FUNCTION(fn_name) \ 581 XNN_INTERNAL void fn_name( \ 582 union xnn_s8_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 583 int8_t output_min, \ 584 int8_t output_max); 585 586 DECLARE_INIT_S8_MINMAX_PARAMS_FUNCTION(xnn_init_s8_minmax_scalar_params) 587 588 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 589 DECLARE_INIT_S8_MINMAX_PARAMS_FUNCTION(xnn_init_s8_minmax_neon_params) 590 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 591 592 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 593 DECLARE_INIT_S8_MINMAX_PARAMS_FUNCTION(xnn_init_s8_minmax_sse2_params) 594 DECLARE_INIT_S8_MINMAX_PARAMS_FUNCTION(xnn_init_s8_minmax_sse4_params) 595 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 596 597 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 598 DECLARE_INIT_S8_MINMAX_PARAMS_FUNCTION(xnn_init_s8_minmax_wasmsimd_params) 599 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 600 601 602 #define DECLARE_INIT_U8_MINMAX_PARAMS_FUNCTION(fn_name) \ 603 XNN_INTERNAL void fn_name( \ 604 union xnn_u8_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 605 uint8_t output_min, \ 606 uint8_t output_max); 607 608 DECLARE_INIT_U8_MINMAX_PARAMS_FUNCTION(xnn_init_u8_minmax_params) 609 DECLARE_INIT_U8_MINMAX_PARAMS_FUNCTION(xnn_init_u8_minmax_scalar_params) 610 611 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 612 DECLARE_INIT_U8_MINMAX_PARAMS_FUNCTION(xnn_init_u8_minmax_neon_params) 613 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 614 615 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 616 DECLARE_INIT_U8_MINMAX_PARAMS_FUNCTION(xnn_init_u8_minmax_sse2_params) 617 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 618 619 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 620 DECLARE_INIT_U8_MINMAX_PARAMS_FUNCTION(xnn_init_u8_minmax_wasmsimd_params) 621 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 622 623 624 #define DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(fn_name) \ 625 XNN_INTERNAL void fn_name( \ 626 union xnn_qu8_addsub_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 627 uint8_t x_zero_point, \ 628 uint8_t y_zero_point, \ 629 uint8_t output_zero_point, \ 630 float x_output_scale, \ 631 float y_output_scale, \ 632 uint8_t output_min, \ 633 uint8_t output_max); 634 635 DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_scalar_params) 636 637 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 638 DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_neon_params) 639 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 640 641 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 642 DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_sse2_params) 643 DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_sse4_params) 644 DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_avx2_params) 645 DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_avx512_params) 646 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 647 648 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 649 DECLARE_INIT_QU8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_add_minmax_wasmsimd_params) 650 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 651 652 653 #define DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(fn_name) \ 654 XNN_INTERNAL void fn_name( \ 655 union xnn_qs8_addsub_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 656 int8_t x_zero_point, \ 657 int8_t y_zero_point, \ 658 int8_t output_zero_point, \ 659 float x_output_scale, \ 660 float y_output_scale, \ 661 int8_t output_min, \ 662 int8_t output_max); 663 664 DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_scalar_params) 665 666 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 667 DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_neon_params) 668 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 669 670 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 671 DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_sse2_params) 672 DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_sse4_mul16_params) 673 DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_sse4_mul32_params) 674 DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_avx2_params) 675 DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_avx512_params) 676 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 677 678 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 679 DECLARE_INIT_QS8_ADD_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_add_minmax_wasmsimd_params) 680 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 681 682 683 #define DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(fn_name) \ 684 XNN_INTERNAL void fn_name( \ 685 union xnn_qu8_mul_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 686 uint8_t a_zero_point, \ 687 uint8_t b_zero_point, \ 688 uint8_t output_zero_point, \ 689 float product_output_scale, \ 690 uint8_t output_min, \ 691 uint8_t output_max); 692 693 DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_mul_minmax_fp32_scalar_params) 694 695 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 696 DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_mul_minmax_fp32_neon_params) 697 DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_mul_minmax_fp32_neonv8_params) 698 DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_mul_minmax_rndnu_neon_params) 699 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 700 701 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 702 DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_mul_minmax_fp32_sse2_params) 703 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 704 705 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 706 DECLARE_INIT_QU8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qu8_mul_minmax_fp32_wasmsimd_params) 707 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 708 709 710 #define DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(fn_name) \ 711 XNN_INTERNAL void fn_name( \ 712 union xnn_qs8_mul_minmax_params params[XNN_MIN_ELEMENTS(1)], \ 713 int8_t a_zero_point, \ 714 int8_t b_zero_point, \ 715 int8_t output_zero_point, \ 716 float product_output_scale, \ 717 int8_t output_min, \ 718 int8_t output_max); 719 720 DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_fp32_scalar_params) 721 722 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 723 DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_fp32_neon_params) 724 DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_fp32_neonv8_params) 725 DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_rndnu_neon_params) 726 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 727 728 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 729 DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_fp32_sse2_params) 730 DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_fp32_sse4_params) 731 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 732 733 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 734 DECLARE_INIT_QS8_MUL_MINMAX_PARAMS_FUNCTION(xnn_init_qs8_mul_minmax_fp32_wasmsimd_params) 735 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 736 737 738 #define DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(fn_name) \ 739 XNN_INTERNAL void fn_name( \ 740 union xnn_f16_f32_cvt_params params[XNN_MIN_ELEMENTS(1)]); 741 742 DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(xnn_init_f16_f32_cvt_scalar_params) 743 744 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 745 DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(xnn_init_f16_f32_cvt_neon_params) 746 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 747 748 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 749 DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(xnn_init_f16_f32_cvt_sse_int16_params) 750 DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(xnn_init_f16_f32_cvt_sse_int32_params) 751 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 752 753 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 754 DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(xnn_init_f16_f32_cvt_wasmsimd_int16_params) 755 DECLARE_INIT_F16_F32_CVT_PARAMS_FUNCTION(xnn_init_f16_f32_cvt_wasmsimd_int32_params) 756 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 757 758 759 #define DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(fn_name) \ 760 XNN_INTERNAL void fn_name( \ 761 union xnn_f32_f16_cvt_params params[XNN_MIN_ELEMENTS(1)]); 762 763 DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(xnn_init_f32_f16_cvt_scalar_bitcast_params) 764 DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(xnn_init_f32_f16_cvt_scalar_fabsf_params) 765 766 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 767 DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(xnn_init_f32_f16_cvt_neon_params) 768 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 769 770 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 771 DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(xnn_init_f32_f16_cvt_sse2_params) 772 DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(xnn_init_f32_f16_cvt_f16c_params) 773 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 774 775 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 776 DECLARE_INIT_F32_F16_CVT_PARAMS_FUNCTION(xnn_init_f32_f16_cvt_wasmsimd_params) 777 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 778 779 780 #define DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(fn_name) \ 781 XNN_INTERNAL void fn_name( \ 782 union xnn_f32_qs8_cvt_params params[XNN_MIN_ELEMENTS(1)], \ 783 float scale, \ 784 int8_t zero_point, \ 785 int8_t output_min, \ 786 int8_t output_max); 787 788 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_scalar_fmagic_params) 789 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_scalar_imagic_params) 790 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_scalar_lrintf_params) 791 792 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 793 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_neon_params) 794 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_neonv8_params) 795 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 796 797 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 798 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_sse2_params) 799 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_sse4_params) 800 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_avx_params) 801 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_avx2_params) 802 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_avx512_params) 803 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 804 805 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 806 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_wasmsimd_cvt_params) 807 DECLARE_INIT_F32_QS8_CVT_PARAMS_FUNCTION(xnn_init_f32_qs8_cvt_wasmsimd_magic_params) 808 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 809 810 811 #define DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(fn_name) \ 812 XNN_INTERNAL void fn_name( \ 813 union xnn_f32_qu8_cvt_params params[XNN_MIN_ELEMENTS(1)], \ 814 float scale, \ 815 uint8_t zero_point, \ 816 uint8_t output_min, \ 817 uint8_t output_max); 818 819 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_scalar_fmagic_params) 820 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_scalar_imagic_params) 821 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_scalar_lrintf_params) 822 823 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 824 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_neon_params) 825 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_neonv8_params) 826 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 827 828 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 829 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_sse2_params) 830 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_avx_params) 831 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_avx2_params) 832 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_avx512_params) 833 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 834 835 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 836 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_wasmsimd_cvt_params) 837 DECLARE_INIT_F32_QU8_CVT_PARAMS_FUNCTION(xnn_init_f32_qu8_cvt_wasmsimd_magic_params) 838 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 839 840 841 #define DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(fn_name) \ 842 XNN_INTERNAL void fn_name( \ 843 union xnn_qs8_f32_cvt_params params[XNN_MIN_ELEMENTS(1)], \ 844 float scale, \ 845 int8_t zero_point); 846 847 DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_scalar_params) 848 849 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 850 DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_neon_params) 851 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 852 853 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 854 DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_sse2_params) 855 DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_sse4_params) 856 DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_avx_params) 857 DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_avx512_params) 858 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 859 860 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 861 DECLARE_INIT_QS8_F32_CVT_PARAMS_FUNCTION(xnn_init_qs8_f32_cvt_wasmsimd_params) 862 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 863 864 865 #define DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(fn_name) \ 866 XNN_INTERNAL void fn_name( \ 867 union xnn_qu8_f32_cvt_params params[XNN_MIN_ELEMENTS(1)], \ 868 float scale, \ 869 uint8_t zero_point); 870 871 DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_scalar_params) 872 873 #if XNN_ARCH_ARM || XNN_ARCH_ARM64 874 DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_neon_params) 875 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64 876 877 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 878 DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_sse2_params) 879 DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_sse4_params) 880 DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_avx_params) 881 DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_avx512_params) 882 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 883 884 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 885 DECLARE_INIT_QU8_F32_CVT_PARAMS_FUNCTION(xnn_init_qu8_f32_cvt_wasmsimd_params) 886 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD 887 888 #ifdef __cplusplus 889 } // extern "C" 890 #endif 891