1*4bdc9457SAndroid Build Coastguard Worker // Copyright 2022 Google LLC 2*4bdc9457SAndroid Build Coastguard Worker // 3*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the 4*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree. 5*4bdc9457SAndroid Build Coastguard Worker 6*4bdc9457SAndroid Build Coastguard Worker #pragma once 7*4bdc9457SAndroid Build Coastguard Worker 8*4bdc9457SAndroid Build Coastguard Worker #include <stddef.h> 9*4bdc9457SAndroid Build Coastguard Worker #include <stdint.h> 10*4bdc9457SAndroid Build Coastguard Worker 11*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h> 12*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/microparams.h> 13*4bdc9457SAndroid Build Coastguard Worker 14*4bdc9457SAndroid Build Coastguard Worker 15*4bdc9457SAndroid Build Coastguard Worker /****************** Microkernel pointers for dense inference *****************/ 16*4bdc9457SAndroid Build Coastguard Worker 17*4bdc9457SAndroid Build Coastguard Worker // CONV-HWC: direct CONVolution in HWC layout 18*4bdc9457SAndroid Build Coastguard Worker 19*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_conv_hwc_ukernel_function)( 20*4bdc9457SAndroid Build Coastguard Worker size_t input_height, 21*4bdc9457SAndroid Build Coastguard Worker size_t input_width, 22*4bdc9457SAndroid Build Coastguard Worker size_t output_y_start, 23*4bdc9457SAndroid Build Coastguard Worker size_t output_y_end, 24*4bdc9457SAndroid Build Coastguard Worker const void* input, 25*4bdc9457SAndroid Build Coastguard Worker const void* zero, 26*4bdc9457SAndroid Build Coastguard Worker const void* weights, 27*4bdc9457SAndroid Build Coastguard Worker void* output, 28*4bdc9457SAndroid Build Coastguard Worker size_t input_padding_top, 29*4bdc9457SAndroid Build Coastguard Worker size_t output_channels, 30*4bdc9457SAndroid Build Coastguard Worker size_t output_height_stride, 31*4bdc9457SAndroid Build Coastguard Worker size_t output_width_stride, 32*4bdc9457SAndroid Build Coastguard Worker const void* params); 33*4bdc9457SAndroid Build Coastguard Worker 34*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_conv_hwc_ukernel_function)( 35*4bdc9457SAndroid Build Coastguard Worker size_t input_height, 36*4bdc9457SAndroid Build Coastguard Worker size_t input_width, 37*4bdc9457SAndroid Build Coastguard Worker size_t output_y_start, 38*4bdc9457SAndroid Build Coastguard Worker size_t output_y_end, 39*4bdc9457SAndroid Build Coastguard Worker const float* input, 40*4bdc9457SAndroid Build Coastguard Worker const float* zero, 41*4bdc9457SAndroid Build Coastguard Worker const float* weights, 42*4bdc9457SAndroid Build Coastguard Worker float* output, 43*4bdc9457SAndroid Build Coastguard Worker size_t input_padding_top, 44*4bdc9457SAndroid Build Coastguard Worker size_t output_channels, 45*4bdc9457SAndroid Build Coastguard Worker size_t output_height_stride, 46*4bdc9457SAndroid Build Coastguard Worker size_t output_width_stride, 47*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 48*4bdc9457SAndroid Build Coastguard Worker 49*4bdc9457SAndroid Build Coastguard Worker // GEMM: GEneral Matrix Multiplication without activations 50*4bdc9457SAndroid Build Coastguard Worker 51*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_gemm_ukernel_function)( 52*4bdc9457SAndroid Build Coastguard Worker size_t mr, 53*4bdc9457SAndroid Build Coastguard Worker size_t nr, 54*4bdc9457SAndroid Build Coastguard Worker size_t k, 55*4bdc9457SAndroid Build Coastguard Worker const void* a, 56*4bdc9457SAndroid Build Coastguard Worker size_t a_stride, 57*4bdc9457SAndroid Build Coastguard Worker const void* w, 58*4bdc9457SAndroid Build Coastguard Worker void* c, 59*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 60*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 61*4bdc9457SAndroid Build Coastguard Worker const void* params); 62*4bdc9457SAndroid Build Coastguard Worker 63*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_gemm_ukernel_function)( 64*4bdc9457SAndroid Build Coastguard Worker size_t mr, 65*4bdc9457SAndroid Build Coastguard Worker size_t nr, 66*4bdc9457SAndroid Build Coastguard Worker size_t k, 67*4bdc9457SAndroid Build Coastguard Worker const float* a, 68*4bdc9457SAndroid Build Coastguard Worker size_t a_stride, 69*4bdc9457SAndroid Build Coastguard Worker const float* w, 70*4bdc9457SAndroid Build Coastguard Worker float* c, 71*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 72*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 73*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_default_params* params); 74*4bdc9457SAndroid Build Coastguard Worker 75*4bdc9457SAndroid Build Coastguard Worker // GEMM: GEneral Matrix Multiplication with ReLU activation 76*4bdc9457SAndroid Build Coastguard Worker 77*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_gemm_relu_ukernel_function)( 78*4bdc9457SAndroid Build Coastguard Worker size_t mr, 79*4bdc9457SAndroid Build Coastguard Worker size_t nr, 80*4bdc9457SAndroid Build Coastguard Worker size_t k, 81*4bdc9457SAndroid Build Coastguard Worker const float* a, 82*4bdc9457SAndroid Build Coastguard Worker size_t a_stride, 83*4bdc9457SAndroid Build Coastguard Worker const float* w, 84*4bdc9457SAndroid Build Coastguard Worker float* c, 85*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 86*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 87*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_relu_params* params); 88*4bdc9457SAndroid Build Coastguard Worker 89*4bdc9457SAndroid Build Coastguard Worker // GEMM: GEneral Matrix Multiplication with Min+Max activation 90*4bdc9457SAndroid Build Coastguard Worker 91*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_bf16_gemm_minmax_ukernel_function)( 92*4bdc9457SAndroid Build Coastguard Worker size_t mr, 93*4bdc9457SAndroid Build Coastguard Worker size_t nr, 94*4bdc9457SAndroid Build Coastguard Worker size_t k, 95*4bdc9457SAndroid Build Coastguard Worker const void* a, 96*4bdc9457SAndroid Build Coastguard Worker size_t a_stride, 97*4bdc9457SAndroid Build Coastguard Worker const void* w, 98*4bdc9457SAndroid Build Coastguard Worker void* c, 99*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 100*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 101*4bdc9457SAndroid Build Coastguard Worker const union xnn_bf16_minmax_params* params); 102*4bdc9457SAndroid Build Coastguard Worker 103*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_gemm_minmax_ukernel_function)( 104*4bdc9457SAndroid Build Coastguard Worker size_t mr, 105*4bdc9457SAndroid Build Coastguard Worker size_t nr, 106*4bdc9457SAndroid Build Coastguard Worker size_t k, 107*4bdc9457SAndroid Build Coastguard Worker const void* a, 108*4bdc9457SAndroid Build Coastguard Worker size_t a_stride, 109*4bdc9457SAndroid Build Coastguard Worker const void* w, 110*4bdc9457SAndroid Build Coastguard Worker void* c, 111*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 112*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 113*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_minmax_params* params); 114*4bdc9457SAndroid Build Coastguard Worker 115*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_gemm_minmax_ukernel_function)( 116*4bdc9457SAndroid Build Coastguard Worker size_t mr, 117*4bdc9457SAndroid Build Coastguard Worker size_t nr, 118*4bdc9457SAndroid Build Coastguard Worker size_t k, 119*4bdc9457SAndroid Build Coastguard Worker const float* a, 120*4bdc9457SAndroid Build Coastguard Worker size_t a_stride, 121*4bdc9457SAndroid Build Coastguard Worker const float* w, 122*4bdc9457SAndroid Build Coastguard Worker float* c, 123*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 124*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 125*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 126*4bdc9457SAndroid Build Coastguard Worker 127*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qc8_gemm_minmax_ukernel_function)( 128*4bdc9457SAndroid Build Coastguard Worker size_t mr, 129*4bdc9457SAndroid Build Coastguard Worker size_t nr, 130*4bdc9457SAndroid Build Coastguard Worker size_t k, 131*4bdc9457SAndroid Build Coastguard Worker const int8_t* a, 132*4bdc9457SAndroid Build Coastguard Worker size_t a_stride, 133*4bdc9457SAndroid Build Coastguard Worker const void* w, 134*4bdc9457SAndroid Build Coastguard Worker int8_t* c, 135*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 136*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 137*4bdc9457SAndroid Build Coastguard Worker const union xnn_qc8_conv_minmax_params* params); 138*4bdc9457SAndroid Build Coastguard Worker 139*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qs8_gemm_minmax_ukernel_function)( 140*4bdc9457SAndroid Build Coastguard Worker size_t mr, 141*4bdc9457SAndroid Build Coastguard Worker size_t nr, 142*4bdc9457SAndroid Build Coastguard Worker size_t k, 143*4bdc9457SAndroid Build Coastguard Worker const int8_t* a, 144*4bdc9457SAndroid Build Coastguard Worker size_t a_stride, 145*4bdc9457SAndroid Build Coastguard Worker const void* w, 146*4bdc9457SAndroid Build Coastguard Worker int8_t* c, 147*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 148*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 149*4bdc9457SAndroid Build Coastguard Worker const union xnn_qs8_conv_minmax_params* params); 150*4bdc9457SAndroid Build Coastguard Worker 151*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qu8_gemm_minmax_ukernel_function)( 152*4bdc9457SAndroid Build Coastguard Worker size_t mr, 153*4bdc9457SAndroid Build Coastguard Worker size_t nr, 154*4bdc9457SAndroid Build Coastguard Worker size_t k, 155*4bdc9457SAndroid Build Coastguard Worker const uint8_t* a, 156*4bdc9457SAndroid Build Coastguard Worker size_t a_stride, 157*4bdc9457SAndroid Build Coastguard Worker const void* w, 158*4bdc9457SAndroid Build Coastguard Worker uint8_t* c, 159*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 160*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 161*4bdc9457SAndroid Build Coastguard Worker const union xnn_qu8_conv_minmax_params* params); 162*4bdc9457SAndroid Build Coastguard Worker 163*4bdc9457SAndroid Build Coastguard Worker // GEMMINC: GEMM INCremental with Min+Max activation 164*4bdc9457SAndroid Build Coastguard Worker 165*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_gemminc_minmax_ukernel_function)( 166*4bdc9457SAndroid Build Coastguard Worker size_t mr, 167*4bdc9457SAndroid Build Coastguard Worker size_t nr, 168*4bdc9457SAndroid Build Coastguard Worker size_t k, 169*4bdc9457SAndroid Build Coastguard Worker const float* a, 170*4bdc9457SAndroid Build Coastguard Worker size_t a_stride, 171*4bdc9457SAndroid Build Coastguard Worker const float* w, 172*4bdc9457SAndroid Build Coastguard Worker float* c, 173*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 174*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 175*4bdc9457SAndroid Build Coastguard Worker const float* acc, 176*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 177*4bdc9457SAndroid Build Coastguard Worker 178*4bdc9457SAndroid Build Coastguard Worker // IGEMM: Indirect GEMM without activation 179*4bdc9457SAndroid Build Coastguard Worker 180*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_igemm_ukernel_function)( 181*4bdc9457SAndroid Build Coastguard Worker size_t mr, 182*4bdc9457SAndroid Build Coastguard Worker size_t nr, 183*4bdc9457SAndroid Build Coastguard Worker size_t kc, 184*4bdc9457SAndroid Build Coastguard Worker size_t ks, 185*4bdc9457SAndroid Build Coastguard Worker const void** a, 186*4bdc9457SAndroid Build Coastguard Worker const void* w, 187*4bdc9457SAndroid Build Coastguard Worker void* c, 188*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 189*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 190*4bdc9457SAndroid Build Coastguard Worker size_t a_offset, 191*4bdc9457SAndroid Build Coastguard Worker const void* zero, 192*4bdc9457SAndroid Build Coastguard Worker const void* params); 193*4bdc9457SAndroid Build Coastguard Worker 194*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_igemm_ukernel_function)( 195*4bdc9457SAndroid Build Coastguard Worker size_t mr, 196*4bdc9457SAndroid Build Coastguard Worker size_t nr, 197*4bdc9457SAndroid Build Coastguard Worker size_t kc, 198*4bdc9457SAndroid Build Coastguard Worker size_t ks, 199*4bdc9457SAndroid Build Coastguard Worker const float** a, 200*4bdc9457SAndroid Build Coastguard Worker const float* w, 201*4bdc9457SAndroid Build Coastguard Worker float* c, 202*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 203*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 204*4bdc9457SAndroid Build Coastguard Worker size_t a_offset, 205*4bdc9457SAndroid Build Coastguard Worker const float* zero, 206*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_default_params* params); 207*4bdc9457SAndroid Build Coastguard Worker 208*4bdc9457SAndroid Build Coastguard Worker // IGEMM: Indirect GEMM with ReLU activation 209*4bdc9457SAndroid Build Coastguard Worker 210*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_igemm_relu_ukernel_function)( 211*4bdc9457SAndroid Build Coastguard Worker size_t mr, 212*4bdc9457SAndroid Build Coastguard Worker size_t nr, 213*4bdc9457SAndroid Build Coastguard Worker size_t kc, 214*4bdc9457SAndroid Build Coastguard Worker size_t ks, 215*4bdc9457SAndroid Build Coastguard Worker const float** a, 216*4bdc9457SAndroid Build Coastguard Worker const float* w, 217*4bdc9457SAndroid Build Coastguard Worker float* c, 218*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 219*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 220*4bdc9457SAndroid Build Coastguard Worker size_t a_offset, 221*4bdc9457SAndroid Build Coastguard Worker const float* zero, 222*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_relu_params* params); 223*4bdc9457SAndroid Build Coastguard Worker 224*4bdc9457SAndroid Build Coastguard Worker // IGEMM: Indirect GEMM with Min+Max activation 225*4bdc9457SAndroid Build Coastguard Worker 226*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_igemm_minmax_ukernel_function)( 227*4bdc9457SAndroid Build Coastguard Worker size_t mr, 228*4bdc9457SAndroid Build Coastguard Worker size_t nr, 229*4bdc9457SAndroid Build Coastguard Worker size_t kc, 230*4bdc9457SAndroid Build Coastguard Worker size_t ks, 231*4bdc9457SAndroid Build Coastguard Worker const void** a, 232*4bdc9457SAndroid Build Coastguard Worker const void* w, 233*4bdc9457SAndroid Build Coastguard Worker void* c, 234*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 235*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 236*4bdc9457SAndroid Build Coastguard Worker size_t a_offset, 237*4bdc9457SAndroid Build Coastguard Worker const void* zero, 238*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_minmax_params* params); 239*4bdc9457SAndroid Build Coastguard Worker 240*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_igemm_minmax_ukernel_function)( 241*4bdc9457SAndroid Build Coastguard Worker size_t mr, 242*4bdc9457SAndroid Build Coastguard Worker size_t nr, 243*4bdc9457SAndroid Build Coastguard Worker size_t kc, 244*4bdc9457SAndroid Build Coastguard Worker size_t ks, 245*4bdc9457SAndroid Build Coastguard Worker const float** a, 246*4bdc9457SAndroid Build Coastguard Worker const float* w, 247*4bdc9457SAndroid Build Coastguard Worker float* c, 248*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 249*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 250*4bdc9457SAndroid Build Coastguard Worker size_t a_offset, 251*4bdc9457SAndroid Build Coastguard Worker const float* zero, 252*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 253*4bdc9457SAndroid Build Coastguard Worker 254*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qc8_igemm_minmax_ukernel_function)( 255*4bdc9457SAndroid Build Coastguard Worker size_t mr, 256*4bdc9457SAndroid Build Coastguard Worker size_t nr, 257*4bdc9457SAndroid Build Coastguard Worker size_t kc, 258*4bdc9457SAndroid Build Coastguard Worker size_t ks, 259*4bdc9457SAndroid Build Coastguard Worker const int8_t** a, 260*4bdc9457SAndroid Build Coastguard Worker const void* w, 261*4bdc9457SAndroid Build Coastguard Worker int8_t* c, 262*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 263*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 264*4bdc9457SAndroid Build Coastguard Worker size_t a_offset, 265*4bdc9457SAndroid Build Coastguard Worker const int8_t* zero, 266*4bdc9457SAndroid Build Coastguard Worker const union xnn_qc8_conv_minmax_params* params); 267*4bdc9457SAndroid Build Coastguard Worker 268*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qs8_igemm_minmax_ukernel_function)( 269*4bdc9457SAndroid Build Coastguard Worker size_t mr, 270*4bdc9457SAndroid Build Coastguard Worker size_t nr, 271*4bdc9457SAndroid Build Coastguard Worker size_t kc, 272*4bdc9457SAndroid Build Coastguard Worker size_t ks, 273*4bdc9457SAndroid Build Coastguard Worker const int8_t** a, 274*4bdc9457SAndroid Build Coastguard Worker const void* w, 275*4bdc9457SAndroid Build Coastguard Worker int8_t* c, 276*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 277*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 278*4bdc9457SAndroid Build Coastguard Worker size_t a_offset, 279*4bdc9457SAndroid Build Coastguard Worker const int8_t* zero, 280*4bdc9457SAndroid Build Coastguard Worker const union xnn_qs8_conv_minmax_params* params); 281*4bdc9457SAndroid Build Coastguard Worker 282*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qu8_igemm_minmax_ukernel_function)( 283*4bdc9457SAndroid Build Coastguard Worker size_t mr, 284*4bdc9457SAndroid Build Coastguard Worker size_t nr, 285*4bdc9457SAndroid Build Coastguard Worker size_t kc, 286*4bdc9457SAndroid Build Coastguard Worker size_t ks, 287*4bdc9457SAndroid Build Coastguard Worker const uint8_t** a, 288*4bdc9457SAndroid Build Coastguard Worker const void* w, 289*4bdc9457SAndroid Build Coastguard Worker uint8_t* c, 290*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 291*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 292*4bdc9457SAndroid Build Coastguard Worker size_t a_offset, 293*4bdc9457SAndroid Build Coastguard Worker const uint8_t* zero, 294*4bdc9457SAndroid Build Coastguard Worker const union xnn_qu8_conv_minmax_params* params); 295*4bdc9457SAndroid Build Coastguard Worker 296*4bdc9457SAndroid Build Coastguard Worker // PPMM: Pre-Packed Matrix Multiplication) 297*4bdc9457SAndroid Build Coastguard Worker 298*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_ppmm_ukernel_function)( 299*4bdc9457SAndroid Build Coastguard Worker size_t mr, 300*4bdc9457SAndroid Build Coastguard Worker size_t nc, 301*4bdc9457SAndroid Build Coastguard Worker size_t kc, 302*4bdc9457SAndroid Build Coastguard Worker const void* a, 303*4bdc9457SAndroid Build Coastguard Worker const void* w, 304*4bdc9457SAndroid Build Coastguard Worker void* c, 305*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 306*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 307*4bdc9457SAndroid Build Coastguard Worker const void* params); 308*4bdc9457SAndroid Build Coastguard Worker 309*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_ppmm_ukernel_function)( 310*4bdc9457SAndroid Build Coastguard Worker size_t mr, 311*4bdc9457SAndroid Build Coastguard Worker size_t nc, 312*4bdc9457SAndroid Build Coastguard Worker size_t kc, 313*4bdc9457SAndroid Build Coastguard Worker const void* a, 314*4bdc9457SAndroid Build Coastguard Worker const void* w, 315*4bdc9457SAndroid Build Coastguard Worker void* c, 316*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 317*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 318*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_minmax_params* params); 319*4bdc9457SAndroid Build Coastguard Worker 320*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_ppmm_minmax_ukernel_function)( 321*4bdc9457SAndroid Build Coastguard Worker size_t mr, 322*4bdc9457SAndroid Build Coastguard Worker size_t nc, 323*4bdc9457SAndroid Build Coastguard Worker size_t kc, 324*4bdc9457SAndroid Build Coastguard Worker const float* a, 325*4bdc9457SAndroid Build Coastguard Worker const float* w, 326*4bdc9457SAndroid Build Coastguard Worker float* c, 327*4bdc9457SAndroid Build Coastguard Worker size_t cm_stride, 328*4bdc9457SAndroid Build Coastguard Worker size_t cn_stride, 329*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 330*4bdc9457SAndroid Build Coastguard Worker 331*4bdc9457SAndroid Build Coastguard Worker // DWCONV: DepthWise CONVolution single-pass without activation 332*4bdc9457SAndroid Build Coastguard Worker 333*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_dwconv_unipass_ukernel_function)( 334*4bdc9457SAndroid Build Coastguard Worker size_t channels, 335*4bdc9457SAndroid Build Coastguard Worker size_t output_width, 336*4bdc9457SAndroid Build Coastguard Worker const void** input, 337*4bdc9457SAndroid Build Coastguard Worker const void* weights, 338*4bdc9457SAndroid Build Coastguard Worker void* output, 339*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 340*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 341*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 342*4bdc9457SAndroid Build Coastguard Worker const void* zero, 343*4bdc9457SAndroid Build Coastguard Worker const void* params); 344*4bdc9457SAndroid Build Coastguard Worker 345*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_dwconv_unipass_ukernel_function)( 346*4bdc9457SAndroid Build Coastguard Worker size_t channels, 347*4bdc9457SAndroid Build Coastguard Worker size_t output_width, 348*4bdc9457SAndroid Build Coastguard Worker const float** input, 349*4bdc9457SAndroid Build Coastguard Worker const float* weights, 350*4bdc9457SAndroid Build Coastguard Worker float* output, 351*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 352*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 353*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 354*4bdc9457SAndroid Build Coastguard Worker const float* zero, 355*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_default_params* params); 356*4bdc9457SAndroid Build Coastguard Worker 357*4bdc9457SAndroid Build Coastguard Worker // DWCONV: DepthWise CONVolution single-pass with Min+Max activation 358*4bdc9457SAndroid Build Coastguard Worker 359*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_dwconv_minmax_unipass_ukernel_function)( 360*4bdc9457SAndroid Build Coastguard Worker size_t channels, 361*4bdc9457SAndroid Build Coastguard Worker size_t output_width, 362*4bdc9457SAndroid Build Coastguard Worker const void** input, 363*4bdc9457SAndroid Build Coastguard Worker const void* weights, 364*4bdc9457SAndroid Build Coastguard Worker void* output, 365*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 366*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 367*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 368*4bdc9457SAndroid Build Coastguard Worker const void* zero, 369*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_minmax_params* params); 370*4bdc9457SAndroid Build Coastguard Worker 371*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_dwconv_minmax_unipass_ukernel_function)( 372*4bdc9457SAndroid Build Coastguard Worker size_t channels, 373*4bdc9457SAndroid Build Coastguard Worker size_t output_width, 374*4bdc9457SAndroid Build Coastguard Worker const float** input, 375*4bdc9457SAndroid Build Coastguard Worker const float* weights, 376*4bdc9457SAndroid Build Coastguard Worker float* output, 377*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 378*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 379*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 380*4bdc9457SAndroid Build Coastguard Worker const float* zero, 381*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 382*4bdc9457SAndroid Build Coastguard Worker 383*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qc8_dwconv_minmax_unipass_ukernel_function)( 384*4bdc9457SAndroid Build Coastguard Worker size_t channels, 385*4bdc9457SAndroid Build Coastguard Worker size_t output_width, 386*4bdc9457SAndroid Build Coastguard Worker const int8_t** input, 387*4bdc9457SAndroid Build Coastguard Worker const void* weights, 388*4bdc9457SAndroid Build Coastguard Worker int8_t* output, 389*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 390*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 391*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 392*4bdc9457SAndroid Build Coastguard Worker const int8_t* zero, 393*4bdc9457SAndroid Build Coastguard Worker const union xnn_qc8_conv_minmax_params* params); 394*4bdc9457SAndroid Build Coastguard Worker 395*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qs8_dwconv_minmax_unipass_ukernel_function)( 396*4bdc9457SAndroid Build Coastguard Worker size_t channels, 397*4bdc9457SAndroid Build Coastguard Worker size_t output_width, 398*4bdc9457SAndroid Build Coastguard Worker const int8_t** input, 399*4bdc9457SAndroid Build Coastguard Worker const void* weights, 400*4bdc9457SAndroid Build Coastguard Worker int8_t* output, 401*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 402*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 403*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 404*4bdc9457SAndroid Build Coastguard Worker const int8_t* zero, 405*4bdc9457SAndroid Build Coastguard Worker const union xnn_qs8_conv_minmax_params* params); 406*4bdc9457SAndroid Build Coastguard Worker 407*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qu8_dwconv_minmax_unipass_ukernel_function)( 408*4bdc9457SAndroid Build Coastguard Worker size_t channels, 409*4bdc9457SAndroid Build Coastguard Worker size_t output_width, 410*4bdc9457SAndroid Build Coastguard Worker const uint8_t** input, 411*4bdc9457SAndroid Build Coastguard Worker const void* weights, 412*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 413*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 414*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 415*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 416*4bdc9457SAndroid Build Coastguard Worker const uint8_t* zero, 417*4bdc9457SAndroid Build Coastguard Worker const union xnn_qu8_conv_minmax_params* params); 418*4bdc9457SAndroid Build Coastguard Worker 419*4bdc9457SAndroid Build Coastguard Worker // DWCONV: DepthWise CONVolution multi-pass without activation 420*4bdc9457SAndroid Build Coastguard Worker 421*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_dwconv_multipass_ukernel_function)( 422*4bdc9457SAndroid Build Coastguard Worker size_t channels, 423*4bdc9457SAndroid Build Coastguard Worker size_t output_width, 424*4bdc9457SAndroid Build Coastguard Worker const void** input, 425*4bdc9457SAndroid Build Coastguard Worker const void* weights, 426*4bdc9457SAndroid Build Coastguard Worker void* buffer, 427*4bdc9457SAndroid Build Coastguard Worker void* output, 428*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 429*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 430*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 431*4bdc9457SAndroid Build Coastguard Worker const void* zero, 432*4bdc9457SAndroid Build Coastguard Worker const void* params); 433*4bdc9457SAndroid Build Coastguard Worker 434*4bdc9457SAndroid Build Coastguard Worker // VMULCADDC: Vector MULtiply-by-Constant, ADD-Constant 435*4bdc9457SAndroid Build Coastguard Worker 436*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_vmulcaddc_ukernel_function)( 437*4bdc9457SAndroid Build Coastguard Worker size_t batch, 438*4bdc9457SAndroid Build Coastguard Worker size_t channels, 439*4bdc9457SAndroid Build Coastguard Worker const void* input, 440*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 441*4bdc9457SAndroid Build Coastguard Worker const void* weights, 442*4bdc9457SAndroid Build Coastguard Worker void* output, 443*4bdc9457SAndroid Build Coastguard Worker size_t output_stride, 444*4bdc9457SAndroid Build Coastguard Worker const void* params); 445*4bdc9457SAndroid Build Coastguard Worker 446*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_vmulcaddc_ukernel_function)( 447*4bdc9457SAndroid Build Coastguard Worker size_t batch, 448*4bdc9457SAndroid Build Coastguard Worker size_t channels, 449*4bdc9457SAndroid Build Coastguard Worker const void* input, 450*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 451*4bdc9457SAndroid Build Coastguard Worker const void* weights, 452*4bdc9457SAndroid Build Coastguard Worker void* output, 453*4bdc9457SAndroid Build Coastguard Worker size_t output_stride, 454*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_minmax_params* params); 455*4bdc9457SAndroid Build Coastguard Worker 456*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vmulcaddc_ukernel_function)( 457*4bdc9457SAndroid Build Coastguard Worker size_t batch, 458*4bdc9457SAndroid Build Coastguard Worker size_t channels, 459*4bdc9457SAndroid Build Coastguard Worker const float* input, 460*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 461*4bdc9457SAndroid Build Coastguard Worker const float* weights, 462*4bdc9457SAndroid Build Coastguard Worker float* output, 463*4bdc9457SAndroid Build Coastguard Worker size_t output_stride, 464*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 465*4bdc9457SAndroid Build Coastguard Worker 466*4bdc9457SAndroid Build Coastguard Worker // PRELU: Parametric RELU 467*4bdc9457SAndroid Build Coastguard Worker 468*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_prelu_ukernel_function)( 469*4bdc9457SAndroid Build Coastguard Worker size_t batch, 470*4bdc9457SAndroid Build Coastguard Worker size_t channels, 471*4bdc9457SAndroid Build Coastguard Worker const void* input, 472*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 473*4bdc9457SAndroid Build Coastguard Worker const void* weights, 474*4bdc9457SAndroid Build Coastguard Worker void* output, 475*4bdc9457SAndroid Build Coastguard Worker size_t output_stride); 476*4bdc9457SAndroid Build Coastguard Worker 477*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_prelu_ukernel_function)( 478*4bdc9457SAndroid Build Coastguard Worker size_t batch, 479*4bdc9457SAndroid Build Coastguard Worker size_t channels, 480*4bdc9457SAndroid Build Coastguard Worker const void* input, 481*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 482*4bdc9457SAndroid Build Coastguard Worker const void* weights, 483*4bdc9457SAndroid Build Coastguard Worker void* output, 484*4bdc9457SAndroid Build Coastguard Worker size_t output_stride); 485*4bdc9457SAndroid Build Coastguard Worker 486*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_prelu_ukernel_function)( 487*4bdc9457SAndroid Build Coastguard Worker size_t batch, 488*4bdc9457SAndroid Build Coastguard Worker size_t channels, 489*4bdc9457SAndroid Build Coastguard Worker const float* input, 490*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 491*4bdc9457SAndroid Build Coastguard Worker const float* weights, 492*4bdc9457SAndroid Build Coastguard Worker float* output, 493*4bdc9457SAndroid Build Coastguard Worker size_t output_stride); 494*4bdc9457SAndroid Build Coastguard Worker 495*4bdc9457SAndroid Build Coastguard Worker // IBILINEAR: Indirect BILINEAR interpolation 496*4bdc9457SAndroid Build Coastguard Worker 497*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_ibilinear_ukernel_function)( 498*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 499*4bdc9457SAndroid Build Coastguard Worker size_t channels, 500*4bdc9457SAndroid Build Coastguard Worker const void** input, 501*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 502*4bdc9457SAndroid Build Coastguard Worker const void* weights, 503*4bdc9457SAndroid Build Coastguard Worker void* output, 504*4bdc9457SAndroid Build Coastguard Worker size_t output_increment); 505*4bdc9457SAndroid Build Coastguard Worker 506*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_ibilinear_ukernel_function)( 507*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 508*4bdc9457SAndroid Build Coastguard Worker size_t channels, 509*4bdc9457SAndroid Build Coastguard Worker const void** input, 510*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 511*4bdc9457SAndroid Build Coastguard Worker const void* weights, 512*4bdc9457SAndroid Build Coastguard Worker void* output, 513*4bdc9457SAndroid Build Coastguard Worker size_t output_increment); 514*4bdc9457SAndroid Build Coastguard Worker 515*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_ibilinear_ukernel_function)( 516*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 517*4bdc9457SAndroid Build Coastguard Worker size_t channels, 518*4bdc9457SAndroid Build Coastguard Worker const float** input, 519*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 520*4bdc9457SAndroid Build Coastguard Worker const float* weights, 521*4bdc9457SAndroid Build Coastguard Worker float* output, 522*4bdc9457SAndroid Build Coastguard Worker size_t output_increment); 523*4bdc9457SAndroid Build Coastguard Worker 524*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_s8_ibilinear_ukernel_function)( 525*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 526*4bdc9457SAndroid Build Coastguard Worker size_t channels, 527*4bdc9457SAndroid Build Coastguard Worker const int8_t** input, 528*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 529*4bdc9457SAndroid Build Coastguard Worker const int16_t* weights, 530*4bdc9457SAndroid Build Coastguard Worker int8_t* output, 531*4bdc9457SAndroid Build Coastguard Worker size_t output_increment); 532*4bdc9457SAndroid Build Coastguard Worker 533*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_u8_ibilinear_ukernel_function)( 534*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 535*4bdc9457SAndroid Build Coastguard Worker size_t channels, 536*4bdc9457SAndroid Build Coastguard Worker const uint8_t** input, 537*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 538*4bdc9457SAndroid Build Coastguard Worker const int16_t* weights, 539*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 540*4bdc9457SAndroid Build Coastguard Worker size_t output_increment); 541*4bdc9457SAndroid Build Coastguard Worker 542*4bdc9457SAndroid Build Coastguard Worker // GAVGPOOL: Global AVeraGe POOLing single-pass 543*4bdc9457SAndroid Build Coastguard Worker 544*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_gavgpool_unipass_ukernel_function)( 545*4bdc9457SAndroid Build Coastguard Worker size_t rows, 546*4bdc9457SAndroid Build Coastguard Worker size_t channels, 547*4bdc9457SAndroid Build Coastguard Worker const void* input, 548*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 549*4bdc9457SAndroid Build Coastguard Worker const void* zero, 550*4bdc9457SAndroid Build Coastguard Worker void* output, 551*4bdc9457SAndroid Build Coastguard Worker const void* params); 552*4bdc9457SAndroid Build Coastguard Worker 553*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_gavgpool_minmax_unipass_ukernel_function)( 554*4bdc9457SAndroid Build Coastguard Worker size_t rows, 555*4bdc9457SAndroid Build Coastguard Worker size_t channels, 556*4bdc9457SAndroid Build Coastguard Worker const void* input, 557*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 558*4bdc9457SAndroid Build Coastguard Worker const void* zero, 559*4bdc9457SAndroid Build Coastguard Worker void* output, 560*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_scaleminmax_params* params); 561*4bdc9457SAndroid Build Coastguard Worker 562*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_gavgpool_minmax_unipass_ukernel_function)( 563*4bdc9457SAndroid Build Coastguard Worker size_t rows, 564*4bdc9457SAndroid Build Coastguard Worker size_t channels, 565*4bdc9457SAndroid Build Coastguard Worker const float* input, 566*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 567*4bdc9457SAndroid Build Coastguard Worker const float* zero, 568*4bdc9457SAndroid Build Coastguard Worker float* output, 569*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_scaleminmax_params* params); 570*4bdc9457SAndroid Build Coastguard Worker 571*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qs8_gavgpool_minmax_unipass_ukernel_function)( 572*4bdc9457SAndroid Build Coastguard Worker size_t rows, 573*4bdc9457SAndroid Build Coastguard Worker size_t channels, 574*4bdc9457SAndroid Build Coastguard Worker const int8_t* input, 575*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 576*4bdc9457SAndroid Build Coastguard Worker const int8_t* zero, 577*4bdc9457SAndroid Build Coastguard Worker int8_t* output, 578*4bdc9457SAndroid Build Coastguard Worker const union xnn_qs8_avgpool_minmax_params* params); 579*4bdc9457SAndroid Build Coastguard Worker 580*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qu8_gavgpool_minmax_unipass_ukernel_function)( 581*4bdc9457SAndroid Build Coastguard Worker size_t rows, 582*4bdc9457SAndroid Build Coastguard Worker size_t channels, 583*4bdc9457SAndroid Build Coastguard Worker const uint8_t* input, 584*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 585*4bdc9457SAndroid Build Coastguard Worker const uint8_t* zero, 586*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 587*4bdc9457SAndroid Build Coastguard Worker const union xnn_qu8_avgpool_minmax_params* params); 588*4bdc9457SAndroid Build Coastguard Worker 589*4bdc9457SAndroid Build Coastguard Worker // GAVGPOOL: Global AVeraGe POOLing multi-pass 590*4bdc9457SAndroid Build Coastguard Worker 591*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_gavgpool_multipass_ukernel_function)( 592*4bdc9457SAndroid Build Coastguard Worker size_t rows, 593*4bdc9457SAndroid Build Coastguard Worker size_t channels, 594*4bdc9457SAndroid Build Coastguard Worker const void* input, 595*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 596*4bdc9457SAndroid Build Coastguard Worker const void* zero, 597*4bdc9457SAndroid Build Coastguard Worker void* buffer, 598*4bdc9457SAndroid Build Coastguard Worker void* output, 599*4bdc9457SAndroid Build Coastguard Worker const void* params); 600*4bdc9457SAndroid Build Coastguard Worker 601*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_gavgpool_minmax_multipass_ukernel_function)( 602*4bdc9457SAndroid Build Coastguard Worker size_t rows, 603*4bdc9457SAndroid Build Coastguard Worker size_t channels, 604*4bdc9457SAndroid Build Coastguard Worker const void* input, 605*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 606*4bdc9457SAndroid Build Coastguard Worker const void* zero, 607*4bdc9457SAndroid Build Coastguard Worker void* buffer, 608*4bdc9457SAndroid Build Coastguard Worker void* output, 609*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_scaleminmax_params* params); 610*4bdc9457SAndroid Build Coastguard Worker 611*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_gavgpool_minmax_multipass_ukernel_function)( 612*4bdc9457SAndroid Build Coastguard Worker size_t rows, 613*4bdc9457SAndroid Build Coastguard Worker size_t channels, 614*4bdc9457SAndroid Build Coastguard Worker const float* input, 615*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 616*4bdc9457SAndroid Build Coastguard Worker const float* zero, 617*4bdc9457SAndroid Build Coastguard Worker float* buffer, 618*4bdc9457SAndroid Build Coastguard Worker float* output, 619*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_scaleminmax_params* params); 620*4bdc9457SAndroid Build Coastguard Worker 621*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qs8_gavgpool_minmax_multipass_ukernel_function)( 622*4bdc9457SAndroid Build Coastguard Worker size_t rows, 623*4bdc9457SAndroid Build Coastguard Worker size_t channels, 624*4bdc9457SAndroid Build Coastguard Worker const int8_t* input, 625*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 626*4bdc9457SAndroid Build Coastguard Worker const int8_t* zero, 627*4bdc9457SAndroid Build Coastguard Worker int32_t* buffer, 628*4bdc9457SAndroid Build Coastguard Worker int8_t* output, 629*4bdc9457SAndroid Build Coastguard Worker const union xnn_qs8_avgpool_minmax_params* params); 630*4bdc9457SAndroid Build Coastguard Worker 631*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qu8_gavgpool_minmax_multipass_ukernel_function)( 632*4bdc9457SAndroid Build Coastguard Worker size_t rows, 633*4bdc9457SAndroid Build Coastguard Worker size_t channels, 634*4bdc9457SAndroid Build Coastguard Worker const uint8_t* input, 635*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 636*4bdc9457SAndroid Build Coastguard Worker const uint8_t* zero, 637*4bdc9457SAndroid Build Coastguard Worker int32_t* buffer, 638*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 639*4bdc9457SAndroid Build Coastguard Worker const union xnn_qu8_avgpool_minmax_params* params); 640*4bdc9457SAndroid Build Coastguard Worker 641*4bdc9457SAndroid Build Coastguard Worker // AVGPOOL: AVeraGe POOLing single-pass 642*4bdc9457SAndroid Build Coastguard Worker 643*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_avgpool_unipass_ukernel_function)( 644*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 645*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 646*4bdc9457SAndroid Build Coastguard Worker size_t channels, 647*4bdc9457SAndroid Build Coastguard Worker const void** input, 648*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 649*4bdc9457SAndroid Build Coastguard Worker const void* zero, 650*4bdc9457SAndroid Build Coastguard Worker void* output, 651*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 652*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 653*4bdc9457SAndroid Build Coastguard Worker const void* params); 654*4bdc9457SAndroid Build Coastguard Worker 655*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_avgpool_minmax_unipass_ukernel_function)( 656*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 657*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 658*4bdc9457SAndroid Build Coastguard Worker size_t channels, 659*4bdc9457SAndroid Build Coastguard Worker const void** input, 660*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 661*4bdc9457SAndroid Build Coastguard Worker const void* zero, 662*4bdc9457SAndroid Build Coastguard Worker void* output, 663*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 664*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 665*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_scaleminmax_params* params); 666*4bdc9457SAndroid Build Coastguard Worker 667*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_avgpool_minmax_unipass_ukernel_function)( 668*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 669*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 670*4bdc9457SAndroid Build Coastguard Worker size_t channels, 671*4bdc9457SAndroid Build Coastguard Worker const float** input, 672*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 673*4bdc9457SAndroid Build Coastguard Worker const float* zero, 674*4bdc9457SAndroid Build Coastguard Worker float* output, 675*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 676*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 677*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_scaleminmax_params* params); 678*4bdc9457SAndroid Build Coastguard Worker 679*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qu8_avgpool_minmax_unipass_ukernel_function)( 680*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 681*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 682*4bdc9457SAndroid Build Coastguard Worker size_t channels, 683*4bdc9457SAndroid Build Coastguard Worker const uint8_t** input, 684*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 685*4bdc9457SAndroid Build Coastguard Worker const uint8_t* zero, 686*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 687*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 688*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 689*4bdc9457SAndroid Build Coastguard Worker const union xnn_qu8_avgpool_minmax_params* params); 690*4bdc9457SAndroid Build Coastguard Worker 691*4bdc9457SAndroid Build Coastguard Worker // AVGPOOL: AVeraGe POOLing multi-pass 692*4bdc9457SAndroid Build Coastguard Worker 693*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_avgpool_multipass_ukernel_function)( 694*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 695*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 696*4bdc9457SAndroid Build Coastguard Worker size_t channels, 697*4bdc9457SAndroid Build Coastguard Worker const void** input, 698*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 699*4bdc9457SAndroid Build Coastguard Worker const void* zero, 700*4bdc9457SAndroid Build Coastguard Worker void* buffer, 701*4bdc9457SAndroid Build Coastguard Worker void* output, 702*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 703*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 704*4bdc9457SAndroid Build Coastguard Worker const void* params); 705*4bdc9457SAndroid Build Coastguard Worker 706*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_avgpool_minmax_multipass_ukernel_function)( 707*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 708*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 709*4bdc9457SAndroid Build Coastguard Worker size_t channels, 710*4bdc9457SAndroid Build Coastguard Worker const void** input, 711*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 712*4bdc9457SAndroid Build Coastguard Worker const void* zero, 713*4bdc9457SAndroid Build Coastguard Worker void* buffer, 714*4bdc9457SAndroid Build Coastguard Worker void* output, 715*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 716*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 717*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_scaleminmax_params* params); 718*4bdc9457SAndroid Build Coastguard Worker 719*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_avgpool_minmax_multipass_ukernel_function)( 720*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 721*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 722*4bdc9457SAndroid Build Coastguard Worker size_t channels, 723*4bdc9457SAndroid Build Coastguard Worker const float** input, 724*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 725*4bdc9457SAndroid Build Coastguard Worker const float* zero, 726*4bdc9457SAndroid Build Coastguard Worker float* buffer, 727*4bdc9457SAndroid Build Coastguard Worker float* output, 728*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 729*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 730*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_scaleminmax_params* params); 731*4bdc9457SAndroid Build Coastguard Worker 732*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qu8_avgpool_minmax_multipass_ukernel_function)( 733*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 734*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 735*4bdc9457SAndroid Build Coastguard Worker size_t channels, 736*4bdc9457SAndroid Build Coastguard Worker const uint8_t** input, 737*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 738*4bdc9457SAndroid Build Coastguard Worker const uint8_t* zero, 739*4bdc9457SAndroid Build Coastguard Worker int32_t* buffer, 740*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 741*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 742*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 743*4bdc9457SAndroid Build Coastguard Worker const union xnn_qu8_avgpool_minmax_params* params); 744*4bdc9457SAndroid Build Coastguard Worker 745*4bdc9457SAndroid Build Coastguard Worker // PAVGPOOL: Pixelwise AVeraGe POOLing single-pass 746*4bdc9457SAndroid Build Coastguard Worker 747*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_pavgpool_unipass_ukernel_function)( 748*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 749*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 750*4bdc9457SAndroid Build Coastguard Worker size_t channels, 751*4bdc9457SAndroid Build Coastguard Worker const void** input, 752*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 753*4bdc9457SAndroid Build Coastguard Worker const void* zero, 754*4bdc9457SAndroid Build Coastguard Worker const void* multiplier, 755*4bdc9457SAndroid Build Coastguard Worker void* output, 756*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 757*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 758*4bdc9457SAndroid Build Coastguard Worker const void* params); 759*4bdc9457SAndroid Build Coastguard Worker 760*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_pavgpool_minmax_unipass_ukernel_function)( 761*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 762*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 763*4bdc9457SAndroid Build Coastguard Worker size_t channels, 764*4bdc9457SAndroid Build Coastguard Worker const void** input, 765*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 766*4bdc9457SAndroid Build Coastguard Worker const void* zero, 767*4bdc9457SAndroid Build Coastguard Worker const void* multiplier, 768*4bdc9457SAndroid Build Coastguard Worker void* output, 769*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 770*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 771*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_minmax_params* params); 772*4bdc9457SAndroid Build Coastguard Worker 773*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_pavgpool_minmax_unipass_ukernel_function)( 774*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 775*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 776*4bdc9457SAndroid Build Coastguard Worker size_t channels, 777*4bdc9457SAndroid Build Coastguard Worker const float** input, 778*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 779*4bdc9457SAndroid Build Coastguard Worker const float* zero, 780*4bdc9457SAndroid Build Coastguard Worker const float* multiplier, 781*4bdc9457SAndroid Build Coastguard Worker float* output, 782*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 783*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 784*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 785*4bdc9457SAndroid Build Coastguard Worker 786*4bdc9457SAndroid Build Coastguard Worker // PAVGPOOL: Pixelwise AVeraGe POOLing multi-pass 787*4bdc9457SAndroid Build Coastguard Worker 788*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_pavgpool_multipass_ukernel_function)( 789*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 790*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 791*4bdc9457SAndroid Build Coastguard Worker size_t channels, 792*4bdc9457SAndroid Build Coastguard Worker const void** input, 793*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 794*4bdc9457SAndroid Build Coastguard Worker const void* zero, 795*4bdc9457SAndroid Build Coastguard Worker const void* multiplier, 796*4bdc9457SAndroid Build Coastguard Worker void* buffer, 797*4bdc9457SAndroid Build Coastguard Worker void* output, 798*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 799*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 800*4bdc9457SAndroid Build Coastguard Worker const void* params); 801*4bdc9457SAndroid Build Coastguard Worker 802*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_pavgpool_minmax_multipass_ukernel_function)( 803*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 804*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 805*4bdc9457SAndroid Build Coastguard Worker size_t channels, 806*4bdc9457SAndroid Build Coastguard Worker const void** input, 807*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 808*4bdc9457SAndroid Build Coastguard Worker const void* zero, 809*4bdc9457SAndroid Build Coastguard Worker const void* multiplier, 810*4bdc9457SAndroid Build Coastguard Worker void* buffer, 811*4bdc9457SAndroid Build Coastguard Worker void* output, 812*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 813*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 814*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_minmax_params* params); 815*4bdc9457SAndroid Build Coastguard Worker 816*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_pavgpool_minmax_multipass_ukernel_function)( 817*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 818*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 819*4bdc9457SAndroid Build Coastguard Worker size_t channels, 820*4bdc9457SAndroid Build Coastguard Worker const float** input, 821*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 822*4bdc9457SAndroid Build Coastguard Worker const float* zero, 823*4bdc9457SAndroid Build Coastguard Worker const float* multiplier, 824*4bdc9457SAndroid Build Coastguard Worker float* buffer, 825*4bdc9457SAndroid Build Coastguard Worker float* output, 826*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 827*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 828*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 829*4bdc9457SAndroid Build Coastguard Worker 830*4bdc9457SAndroid Build Coastguard Worker // MAXPOOL: MAX POOLing 831*4bdc9457SAndroid Build Coastguard Worker 832*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_maxpool_ukernel_function)( 833*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 834*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 835*4bdc9457SAndroid Build Coastguard Worker size_t channels, 836*4bdc9457SAndroid Build Coastguard Worker const void** input, 837*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 838*4bdc9457SAndroid Build Coastguard Worker void* output, 839*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 840*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 841*4bdc9457SAndroid Build Coastguard Worker const void* params); 842*4bdc9457SAndroid Build Coastguard Worker 843*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_maxpool_ukernel_function)( 844*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 845*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 846*4bdc9457SAndroid Build Coastguard Worker size_t channels, 847*4bdc9457SAndroid Build Coastguard Worker const void** input, 848*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 849*4bdc9457SAndroid Build Coastguard Worker void* output, 850*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 851*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 852*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_minmax_params* params); 853*4bdc9457SAndroid Build Coastguard Worker 854*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_maxpool_ukernel_function)( 855*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 856*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 857*4bdc9457SAndroid Build Coastguard Worker size_t channels, 858*4bdc9457SAndroid Build Coastguard Worker const float** input, 859*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 860*4bdc9457SAndroid Build Coastguard Worker float* output, 861*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 862*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 863*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 864*4bdc9457SAndroid Build Coastguard Worker 865*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_s8_maxpool_ukernel_function)( 866*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 867*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 868*4bdc9457SAndroid Build Coastguard Worker size_t channels, 869*4bdc9457SAndroid Build Coastguard Worker const int8_t** input, 870*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 871*4bdc9457SAndroid Build Coastguard Worker int8_t* output, 872*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 873*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 874*4bdc9457SAndroid Build Coastguard Worker const union xnn_s8_minmax_params* params); 875*4bdc9457SAndroid Build Coastguard Worker 876*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_u8_maxpool_ukernel_function)( 877*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 878*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 879*4bdc9457SAndroid Build Coastguard Worker size_t channels, 880*4bdc9457SAndroid Build Coastguard Worker const uint8_t** input, 881*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 882*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 883*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 884*4bdc9457SAndroid Build Coastguard Worker size_t output_increment, 885*4bdc9457SAndroid Build Coastguard Worker const union xnn_u8_minmax_params* params); 886*4bdc9457SAndroid Build Coastguard Worker 887*4bdc9457SAndroid Build Coastguard Worker // ARGMAXPOOL: ARG MAX POOLing single-pass 888*4bdc9457SAndroid Build Coastguard Worker 889*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_argmaxpool_unipass_ukernel_function)( 890*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 891*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 892*4bdc9457SAndroid Build Coastguard Worker size_t channels, 893*4bdc9457SAndroid Build Coastguard Worker const void** input, 894*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 895*4bdc9457SAndroid Build Coastguard Worker void* output, 896*4bdc9457SAndroid Build Coastguard Worker uint32_t* index, 897*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 898*4bdc9457SAndroid Build Coastguard Worker size_t output_increment); 899*4bdc9457SAndroid Build Coastguard Worker 900*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_argmaxpool_unipass_ukernel_function)( 901*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 902*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 903*4bdc9457SAndroid Build Coastguard Worker size_t channels, 904*4bdc9457SAndroid Build Coastguard Worker const float** input, 905*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 906*4bdc9457SAndroid Build Coastguard Worker float* output, 907*4bdc9457SAndroid Build Coastguard Worker uint32_t* index, 908*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 909*4bdc9457SAndroid Build Coastguard Worker size_t output_increment); 910*4bdc9457SAndroid Build Coastguard Worker 911*4bdc9457SAndroid Build Coastguard Worker // ARGMAXPOOL: ARG MAX POOLing multi-pass 912*4bdc9457SAndroid Build Coastguard Worker 913*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_argmaxpool_multipass_ukernel_function)( 914*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 915*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 916*4bdc9457SAndroid Build Coastguard Worker size_t channels, 917*4bdc9457SAndroid Build Coastguard Worker const void** input, 918*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 919*4bdc9457SAndroid Build Coastguard Worker void* accumulation_buffer, 920*4bdc9457SAndroid Build Coastguard Worker uint32_t* index_buffer, 921*4bdc9457SAndroid Build Coastguard Worker void* output, 922*4bdc9457SAndroid Build Coastguard Worker uint32_t* index, 923*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 924*4bdc9457SAndroid Build Coastguard Worker size_t output_increment); 925*4bdc9457SAndroid Build Coastguard Worker 926*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_argmaxpool_multipass_ukernel_function)( 927*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 928*4bdc9457SAndroid Build Coastguard Worker size_t kernel_elements, 929*4bdc9457SAndroid Build Coastguard Worker size_t channels, 930*4bdc9457SAndroid Build Coastguard Worker const float** input, 931*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 932*4bdc9457SAndroid Build Coastguard Worker float* accumulation_buffer, 933*4bdc9457SAndroid Build Coastguard Worker uint32_t* index_buffer, 934*4bdc9457SAndroid Build Coastguard Worker float* output, 935*4bdc9457SAndroid Build Coastguard Worker uint32_t* index, 936*4bdc9457SAndroid Build Coastguard Worker size_t input_increment, 937*4bdc9457SAndroid Build Coastguard Worker size_t output_increment); 938*4bdc9457SAndroid Build Coastguard Worker 939*4bdc9457SAndroid Build Coastguard Worker // UNPOOL: UNPOOLing 940*4bdc9457SAndroid Build Coastguard Worker 941*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_unpool_ukernel_function)( 942*4bdc9457SAndroid Build Coastguard Worker size_t p, 943*4bdc9457SAndroid Build Coastguard Worker size_t c, 944*4bdc9457SAndroid Build Coastguard Worker uint32_t f, 945*4bdc9457SAndroid Build Coastguard Worker const void* input, 946*4bdc9457SAndroid Build Coastguard Worker const uint32_t* index, 947*4bdc9457SAndroid Build Coastguard Worker void** output); 948*4bdc9457SAndroid Build Coastguard Worker 949*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_x32_unpool_ukernel_function)( 950*4bdc9457SAndroid Build Coastguard Worker size_t p, 951*4bdc9457SAndroid Build Coastguard Worker size_t c, 952*4bdc9457SAndroid Build Coastguard Worker uint32_t f, 953*4bdc9457SAndroid Build Coastguard Worker const uint32_t* input, 954*4bdc9457SAndroid Build Coastguard Worker const uint32_t* index, 955*4bdc9457SAndroid Build Coastguard Worker uint32_t** output); 956*4bdc9457SAndroid Build Coastguard Worker 957*4bdc9457SAndroid Build Coastguard Worker // TRANSPOSEC: TRANSPOSE Constant-size elements 958*4bdc9457SAndroid Build Coastguard Worker 959*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_x8_transposec_ukernel_function)( 960*4bdc9457SAndroid Build Coastguard Worker const uint8_t* a, 961*4bdc9457SAndroid Build Coastguard Worker uint8_t* b, 962*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 963*4bdc9457SAndroid Build Coastguard Worker size_t output_stride, 964*4bdc9457SAndroid Build Coastguard Worker size_t block_width, 965*4bdc9457SAndroid Build Coastguard Worker size_t block_height); 966*4bdc9457SAndroid Build Coastguard Worker 967*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_x16_transposec_ukernel_function)( 968*4bdc9457SAndroid Build Coastguard Worker const uint16_t* a, 969*4bdc9457SAndroid Build Coastguard Worker uint16_t* b, 970*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 971*4bdc9457SAndroid Build Coastguard Worker size_t output_stride, 972*4bdc9457SAndroid Build Coastguard Worker size_t block_width, 973*4bdc9457SAndroid Build Coastguard Worker size_t block_height); 974*4bdc9457SAndroid Build Coastguard Worker 975*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_x24_transposec_ukernel_function)( 976*4bdc9457SAndroid Build Coastguard Worker const void* a, 977*4bdc9457SAndroid Build Coastguard Worker void* b, 978*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 979*4bdc9457SAndroid Build Coastguard Worker size_t output_stride, 980*4bdc9457SAndroid Build Coastguard Worker size_t block_width, 981*4bdc9457SAndroid Build Coastguard Worker size_t block_height); 982*4bdc9457SAndroid Build Coastguard Worker 983*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_x32_transposec_ukernel_function)( 984*4bdc9457SAndroid Build Coastguard Worker const uint32_t* a, 985*4bdc9457SAndroid Build Coastguard Worker uint32_t* b, 986*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 987*4bdc9457SAndroid Build Coastguard Worker size_t output_stride, 988*4bdc9457SAndroid Build Coastguard Worker size_t block_width, 989*4bdc9457SAndroid Build Coastguard Worker size_t block_height); 990*4bdc9457SAndroid Build Coastguard Worker 991*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_x64_transposec_ukernel_function)( 992*4bdc9457SAndroid Build Coastguard Worker const uint64_t* a, 993*4bdc9457SAndroid Build Coastguard Worker uint64_t* b, 994*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 995*4bdc9457SAndroid Build Coastguard Worker size_t output_stride, 996*4bdc9457SAndroid Build Coastguard Worker size_t block_width, 997*4bdc9457SAndroid Build Coastguard Worker size_t block_height); 998*4bdc9457SAndroid Build Coastguard Worker 999*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_transposec_ukernel_function)( 1000*4bdc9457SAndroid Build Coastguard Worker const void* input, 1001*4bdc9457SAndroid Build Coastguard Worker void* output, 1002*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 1003*4bdc9457SAndroid Build Coastguard Worker size_t output_size, 1004*4bdc9457SAndroid Build Coastguard Worker size_t block_width, 1005*4bdc9457SAndroid Build Coastguard Worker size_t block_height); 1006*4bdc9457SAndroid Build Coastguard Worker 1007*4bdc9457SAndroid Build Coastguard Worker // TRANSPOSEV: TRANSPOSE Variable-size elements 1008*4bdc9457SAndroid Build Coastguard Worker 1009*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_transposev_ukernel_function)( 1010*4bdc9457SAndroid Build Coastguard Worker const void* input, 1011*4bdc9457SAndroid Build Coastguard Worker void* output, 1012*4bdc9457SAndroid Build Coastguard Worker size_t input_row_stride, 1013*4bdc9457SAndroid Build Coastguard Worker size_t output_row_stride, 1014*4bdc9457SAndroid Build Coastguard Worker size_t input_element_stride, 1015*4bdc9457SAndroid Build Coastguard Worker size_t output_element_stride, 1016*4bdc9457SAndroid Build Coastguard Worker size_t element_size, 1017*4bdc9457SAndroid Build Coastguard Worker size_t block_width, 1018*4bdc9457SAndroid Build Coastguard Worker size_t block_height); 1019*4bdc9457SAndroid Build Coastguard Worker 1020*4bdc9457SAndroid Build Coastguard Worker // PACKX: PACK X (input) tensor for pre-packed matrix multiplication 1021*4bdc9457SAndroid Build Coastguard Worker 1022*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_packx_ukernel_function)( 1023*4bdc9457SAndroid Build Coastguard Worker size_t m, 1024*4bdc9457SAndroid Build Coastguard Worker size_t k, 1025*4bdc9457SAndroid Build Coastguard Worker const void* x, 1026*4bdc9457SAndroid Build Coastguard Worker size_t x_stride, 1027*4bdc9457SAndroid Build Coastguard Worker void* y); 1028*4bdc9457SAndroid Build Coastguard Worker 1029*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_x32_packx_ukernel_function)( 1030*4bdc9457SAndroid Build Coastguard Worker size_t m, 1031*4bdc9457SAndroid Build Coastguard Worker size_t k, 1032*4bdc9457SAndroid Build Coastguard Worker const uint32_t* x, 1033*4bdc9457SAndroid Build Coastguard Worker size_t x_stride, 1034*4bdc9457SAndroid Build Coastguard Worker uint32_t* y); 1035*4bdc9457SAndroid Build Coastguard Worker 1036*4bdc9457SAndroid Build Coastguard Worker // FILL: FILL array with value 1037*4bdc9457SAndroid Build Coastguard Worker 1038*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_fill_ukernel_function)( 1039*4bdc9457SAndroid Build Coastguard Worker size_t rows, 1040*4bdc9457SAndroid Build Coastguard Worker size_t channels, 1041*4bdc9457SAndroid Build Coastguard Worker void* output, 1042*4bdc9457SAndroid Build Coastguard Worker size_t output_stride, 1043*4bdc9457SAndroid Build Coastguard Worker const uint32_t fill_pattern); 1044*4bdc9457SAndroid Build Coastguard Worker 1045*4bdc9457SAndroid Build Coastguard Worker // PAD: PAD array with values (fill before, copy array, fill after) 1046*4bdc9457SAndroid Build Coastguard Worker 1047*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_pad_ukernel_function)( 1048*4bdc9457SAndroid Build Coastguard Worker size_t rows, 1049*4bdc9457SAndroid Build Coastguard Worker size_t channels, 1050*4bdc9457SAndroid Build Coastguard Worker size_t pre_padding, 1051*4bdc9457SAndroid Build Coastguard Worker size_t post_padding, 1052*4bdc9457SAndroid Build Coastguard Worker const void* input, 1053*4bdc9457SAndroid Build Coastguard Worker size_t input_stride, 1054*4bdc9457SAndroid Build Coastguard Worker void* output, 1055*4bdc9457SAndroid Build Coastguard Worker size_t output_stride, 1056*4bdc9457SAndroid Build Coastguard Worker const uint32_t fill_value); 1057*4bdc9457SAndroid Build Coastguard Worker 1058*4bdc9457SAndroid Build Coastguard Worker // RMAX: Reduce-MAX 1059*4bdc9457SAndroid Build Coastguard Worker 1060*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_rmax_ukernel_function)( 1061*4bdc9457SAndroid Build Coastguard Worker size_t n, 1062*4bdc9457SAndroid Build Coastguard Worker const void* x, 1063*4bdc9457SAndroid Build Coastguard Worker void* y); 1064*4bdc9457SAndroid Build Coastguard Worker 1065*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_rmax_ukernel_function)( 1066*4bdc9457SAndroid Build Coastguard Worker size_t n, 1067*4bdc9457SAndroid Build Coastguard Worker const void* x, 1068*4bdc9457SAndroid Build Coastguard Worker void* y); 1069*4bdc9457SAndroid Build Coastguard Worker 1070*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_rmax_ukernel_function)( 1071*4bdc9457SAndroid Build Coastguard Worker size_t n, 1072*4bdc9457SAndroid Build Coastguard Worker const float* x, 1073*4bdc9457SAndroid Build Coastguard Worker float* y); 1074*4bdc9457SAndroid Build Coastguard Worker 1075*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_u8_rmax_ukernel_function)( 1076*4bdc9457SAndroid Build Coastguard Worker size_t n, 1077*4bdc9457SAndroid Build Coastguard Worker const uint8_t* x, 1078*4bdc9457SAndroid Build Coastguard Worker uint8_t* y); 1079*4bdc9457SAndroid Build Coastguard Worker 1080*4bdc9457SAndroid Build Coastguard Worker // RADDSTOREEXPMINUSMAX: Reduce-ADD & STORE EXP(x_i MINUS MAX[x_i]) 1081*4bdc9457SAndroid Build Coastguard Worker 1082*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_raddstoreexpminusmax_ukernel_function)( 1083*4bdc9457SAndroid Build Coastguard Worker size_t n, 1084*4bdc9457SAndroid Build Coastguard Worker const void* input, 1085*4bdc9457SAndroid Build Coastguard Worker const void* max, 1086*4bdc9457SAndroid Build Coastguard Worker void* output, 1087*4bdc9457SAndroid Build Coastguard Worker void* sum, 1088*4bdc9457SAndroid Build Coastguard Worker const void* params); 1089*4bdc9457SAndroid Build Coastguard Worker 1090*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_raddstoreexpminusmax_ukernel_function)( 1091*4bdc9457SAndroid Build Coastguard Worker size_t n, 1092*4bdc9457SAndroid Build Coastguard Worker const void* input, 1093*4bdc9457SAndroid Build Coastguard Worker const void* max, 1094*4bdc9457SAndroid Build Coastguard Worker void* output, 1095*4bdc9457SAndroid Build Coastguard Worker void* sum, 1096*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_expminus_params* params); 1097*4bdc9457SAndroid Build Coastguard Worker 1098*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_raddstoreexpminusmax_ukernel_function)( 1099*4bdc9457SAndroid Build Coastguard Worker size_t n, 1100*4bdc9457SAndroid Build Coastguard Worker const float* input, 1101*4bdc9457SAndroid Build Coastguard Worker const float* max, 1102*4bdc9457SAndroid Build Coastguard Worker float* output, 1103*4bdc9457SAndroid Build Coastguard Worker float* sum, 1104*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_expminus_params* params); 1105*4bdc9457SAndroid Build Coastguard Worker 1106*4bdc9457SAndroid Build Coastguard Worker // VUNARY: Vector UNARY elementwise 1107*4bdc9457SAndroid Build Coastguard Worker 1108*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_vunary_ukernel_function)( 1109*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1110*4bdc9457SAndroid Build Coastguard Worker const void* input, 1111*4bdc9457SAndroid Build Coastguard Worker void* output, 1112*4bdc9457SAndroid Build Coastguard Worker const void* params); 1113*4bdc9457SAndroid Build Coastguard Worker 1114*4bdc9457SAndroid Build Coastguard Worker // VABS: Vector ABSolute value elementwise 1115*4bdc9457SAndroid Build Coastguard Worker 1116*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_vabs_ukernel_function)( 1117*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1118*4bdc9457SAndroid Build Coastguard Worker const void* input, 1119*4bdc9457SAndroid Build Coastguard Worker void* output, 1120*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_abs_params* params); 1121*4bdc9457SAndroid Build Coastguard Worker 1122*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vabs_ukernel_function)( 1123*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1124*4bdc9457SAndroid Build Coastguard Worker const float* input, 1125*4bdc9457SAndroid Build Coastguard Worker float* output, 1126*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_abs_params* params); 1127*4bdc9457SAndroid Build Coastguard Worker 1128*4bdc9457SAndroid Build Coastguard Worker // VCLAMP: Vector CLAMP elementwise 1129*4bdc9457SAndroid Build Coastguard Worker 1130*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_vclamp_ukernel_function)( 1131*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1132*4bdc9457SAndroid Build Coastguard Worker const void* input, 1133*4bdc9457SAndroid Build Coastguard Worker void* output, 1134*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_minmax_params* params); 1135*4bdc9457SAndroid Build Coastguard Worker 1136*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vclamp_ukernel_function)( 1137*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1138*4bdc9457SAndroid Build Coastguard Worker const float* input, 1139*4bdc9457SAndroid Build Coastguard Worker float* output, 1140*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 1141*4bdc9457SAndroid Build Coastguard Worker 1142*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_s8_vclamp_ukernel_function)( 1143*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1144*4bdc9457SAndroid Build Coastguard Worker const int8_t* input, 1145*4bdc9457SAndroid Build Coastguard Worker int8_t* output, 1146*4bdc9457SAndroid Build Coastguard Worker const union xnn_s8_minmax_params* params); 1147*4bdc9457SAndroid Build Coastguard Worker 1148*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_u8_vclamp_ukernel_function)( 1149*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1150*4bdc9457SAndroid Build Coastguard Worker const uint8_t* input, 1151*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 1152*4bdc9457SAndroid Build Coastguard Worker const union xnn_u8_minmax_params* params); 1153*4bdc9457SAndroid Build Coastguard Worker 1154*4bdc9457SAndroid Build Coastguard Worker // VCVT: Vector ConVerT elementwise 1155*4bdc9457SAndroid Build Coastguard Worker 1156*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_f32_vcvt_ukernel_function)( 1157*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1158*4bdc9457SAndroid Build Coastguard Worker const void* input, 1159*4bdc9457SAndroid Build Coastguard Worker float* output, 1160*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_f32_cvt_params* params); 1161*4bdc9457SAndroid Build Coastguard Worker 1162*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_f16_vcvt_ukernel_function)( 1163*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1164*4bdc9457SAndroid Build Coastguard Worker const float* input, 1165*4bdc9457SAndroid Build Coastguard Worker void* output, 1166*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_f16_cvt_params* params); 1167*4bdc9457SAndroid Build Coastguard Worker 1168*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_qs8_vcvt_ukernel_function)( 1169*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1170*4bdc9457SAndroid Build Coastguard Worker const float* input, 1171*4bdc9457SAndroid Build Coastguard Worker int8_t* output, 1172*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_qs8_cvt_params* params); 1173*4bdc9457SAndroid Build Coastguard Worker 1174*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_qu8_vcvt_ukernel_function)( 1175*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1176*4bdc9457SAndroid Build Coastguard Worker const float* input, 1177*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 1178*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_qu8_cvt_params* params); 1179*4bdc9457SAndroid Build Coastguard Worker 1180*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qs8_vcvt_ukernel_function)( 1181*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1182*4bdc9457SAndroid Build Coastguard Worker const int8_t* input, 1183*4bdc9457SAndroid Build Coastguard Worker int8_t* output, 1184*4bdc9457SAndroid Build Coastguard Worker const union xnn_qs8_cvt_params* params); 1185*4bdc9457SAndroid Build Coastguard Worker 1186*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qs8_f32_vcvt_ukernel_function)( 1187*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1188*4bdc9457SAndroid Build Coastguard Worker const int8_t* input, 1189*4bdc9457SAndroid Build Coastguard Worker float* output, 1190*4bdc9457SAndroid Build Coastguard Worker const union xnn_qs8_f32_cvt_params* params); 1191*4bdc9457SAndroid Build Coastguard Worker 1192*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qu8_vcvt_ukernel_function)( 1193*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1194*4bdc9457SAndroid Build Coastguard Worker const uint8_t* input, 1195*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 1196*4bdc9457SAndroid Build Coastguard Worker const union xnn_qu8_cvt_params* params); 1197*4bdc9457SAndroid Build Coastguard Worker 1198*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qu8_f32_vcvt_ukernel_function)( 1199*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1200*4bdc9457SAndroid Build Coastguard Worker const uint8_t* input, 1201*4bdc9457SAndroid Build Coastguard Worker float* output, 1202*4bdc9457SAndroid Build Coastguard Worker const union xnn_qu8_f32_cvt_params* params); 1203*4bdc9457SAndroid Build Coastguard Worker 1204*4bdc9457SAndroid Build Coastguard Worker // VELU: Vector Exponential Linear Unit elementwise 1205*4bdc9457SAndroid Build Coastguard Worker 1206*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_velu_ukernel_function)( 1207*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1208*4bdc9457SAndroid Build Coastguard Worker const void* input, 1209*4bdc9457SAndroid Build Coastguard Worker void* output, 1210*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_elu_params* params); 1211*4bdc9457SAndroid Build Coastguard Worker 1212*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_velu_ukernel_function)( 1213*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1214*4bdc9457SAndroid Build Coastguard Worker const float* input, 1215*4bdc9457SAndroid Build Coastguard Worker float* output, 1216*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_elu_params* params); 1217*4bdc9457SAndroid Build Coastguard Worker 1218*4bdc9457SAndroid Build Coastguard Worker // VHSWISH: Vector Hard SWISH elementwise 1219*4bdc9457SAndroid Build Coastguard Worker 1220*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_vhswish_ukernel_function)( 1221*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1222*4bdc9457SAndroid Build Coastguard Worker const void* input, 1223*4bdc9457SAndroid Build Coastguard Worker void* output, 1224*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_hswish_params* params); 1225*4bdc9457SAndroid Build Coastguard Worker 1226*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vhswish_ukernel_function)( 1227*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1228*4bdc9457SAndroid Build Coastguard Worker const float* input, 1229*4bdc9457SAndroid Build Coastguard Worker float* output, 1230*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_hswish_params* params); 1231*4bdc9457SAndroid Build Coastguard Worker 1232*4bdc9457SAndroid Build Coastguard Worker // VLRELU: Vector Leaky REctified Linear Unit elementwise 1233*4bdc9457SAndroid Build Coastguard Worker 1234*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_vlrelu_ukernel_function)( 1235*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1236*4bdc9457SAndroid Build Coastguard Worker const void* input, 1237*4bdc9457SAndroid Build Coastguard Worker void* output, 1238*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_lrelu_params* params); 1239*4bdc9457SAndroid Build Coastguard Worker 1240*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vlrelu_ukernel_function)( 1241*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1242*4bdc9457SAndroid Build Coastguard Worker const float* input, 1243*4bdc9457SAndroid Build Coastguard Worker float* output, 1244*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_lrelu_params* params); 1245*4bdc9457SAndroid Build Coastguard Worker 1246*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qs8_vlrelu_ukernel_function)( 1247*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1248*4bdc9457SAndroid Build Coastguard Worker const int8_t* input, 1249*4bdc9457SAndroid Build Coastguard Worker int8_t* output, 1250*4bdc9457SAndroid Build Coastguard Worker const union xnn_qs8_lrelu_params* params); 1251*4bdc9457SAndroid Build Coastguard Worker 1252*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qu8_vlrelu_ukernel_function)( 1253*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1254*4bdc9457SAndroid Build Coastguard Worker const uint8_t* input, 1255*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 1256*4bdc9457SAndroid Build Coastguard Worker const union xnn_qu8_lrelu_params* params); 1257*4bdc9457SAndroid Build Coastguard Worker 1258*4bdc9457SAndroid Build Coastguard Worker // VNEG: Vector NEGate elementwise 1259*4bdc9457SAndroid Build Coastguard Worker 1260*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_vneg_ukernel_function)( 1261*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1262*4bdc9457SAndroid Build Coastguard Worker const void* input, 1263*4bdc9457SAndroid Build Coastguard Worker void* output, 1264*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_neg_params* params); 1265*4bdc9457SAndroid Build Coastguard Worker 1266*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vneg_ukernel_function)( 1267*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1268*4bdc9457SAndroid Build Coastguard Worker const float* input, 1269*4bdc9457SAndroid Build Coastguard Worker float* output, 1270*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_neg_params* params); 1271*4bdc9457SAndroid Build Coastguard Worker 1272*4bdc9457SAndroid Build Coastguard Worker // VRELU: Vector REctified Linear Unit elementwise 1273*4bdc9457SAndroid Build Coastguard Worker 1274*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vrelu_ukernel_function)( 1275*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1276*4bdc9457SAndroid Build Coastguard Worker const float* input, 1277*4bdc9457SAndroid Build Coastguard Worker float* output, 1278*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_relu_params* params); 1279*4bdc9457SAndroid Build Coastguard Worker 1280*4bdc9457SAndroid Build Coastguard Worker // VROUND: Vector ROUNDing elementwise 1281*4bdc9457SAndroid Build Coastguard Worker 1282*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_vround_ukernel_function)( 1283*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1284*4bdc9457SAndroid Build Coastguard Worker const void* input, 1285*4bdc9457SAndroid Build Coastguard Worker void* output, 1286*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_rnd_params* params); 1287*4bdc9457SAndroid Build Coastguard Worker 1288*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vround_ukernel_function)( 1289*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1290*4bdc9457SAndroid Build Coastguard Worker const float* input, 1291*4bdc9457SAndroid Build Coastguard Worker float* output, 1292*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_rnd_params* params); 1293*4bdc9457SAndroid Build Coastguard Worker 1294*4bdc9457SAndroid Build Coastguard Worker // VSIGMOID: Vector SIGMOID elementwise 1295*4bdc9457SAndroid Build Coastguard Worker 1296*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_vsigmoid_ukernel_function)( 1297*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1298*4bdc9457SAndroid Build Coastguard Worker const void* input, 1299*4bdc9457SAndroid Build Coastguard Worker void* output, 1300*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_sigmoid_params* params); 1301*4bdc9457SAndroid Build Coastguard Worker 1302*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vsigmoid_ukernel_function)( 1303*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1304*4bdc9457SAndroid Build Coastguard Worker const float* input, 1305*4bdc9457SAndroid Build Coastguard Worker float* output, 1306*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_sigmoid_params* params); 1307*4bdc9457SAndroid Build Coastguard Worker 1308*4bdc9457SAndroid Build Coastguard Worker // VSQR: Vector SQuaRe elementwise 1309*4bdc9457SAndroid Build Coastguard Worker 1310*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_vsqr_ukernel_function)( 1311*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1312*4bdc9457SAndroid Build Coastguard Worker const void* input, 1313*4bdc9457SAndroid Build Coastguard Worker void* output, 1314*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_default_params* params); 1315*4bdc9457SAndroid Build Coastguard Worker 1316*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vsqr_ukernel_function)( 1317*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1318*4bdc9457SAndroid Build Coastguard Worker const float* input, 1319*4bdc9457SAndroid Build Coastguard Worker float* output, 1320*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_default_params* params); 1321*4bdc9457SAndroid Build Coastguard Worker 1322*4bdc9457SAndroid Build Coastguard Worker // VSQRT: Vector SQuare RooT elementwise 1323*4bdc9457SAndroid Build Coastguard Worker 1324*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_vsqrt_ukernel_function)( 1325*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1326*4bdc9457SAndroid Build Coastguard Worker const void* input, 1327*4bdc9457SAndroid Build Coastguard Worker void* output, 1328*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_sqrt_params* params); 1329*4bdc9457SAndroid Build Coastguard Worker 1330*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vsqrt_ukernel_function)( 1331*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1332*4bdc9457SAndroid Build Coastguard Worker const float* input, 1333*4bdc9457SAndroid Build Coastguard Worker float* output, 1334*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_sqrt_params* params); 1335*4bdc9457SAndroid Build Coastguard Worker 1336*4bdc9457SAndroid Build Coastguard Worker // VSQRTSHIFT: Vector SQuare RooT and SHIFT elementwise 1337*4bdc9457SAndroid Build Coastguard Worker 1338*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_u64_u32_vsqrtshift_ukernel_function)( 1339*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1340*4bdc9457SAndroid Build Coastguard Worker const uint64_t* input, 1341*4bdc9457SAndroid Build Coastguard Worker uint32_t* output, 1342*4bdc9457SAndroid Build Coastguard Worker uint32_t shift); 1343*4bdc9457SAndroid Build Coastguard Worker 1344*4bdc9457SAndroid Build Coastguard Worker // LUT: vector LookUp Table elementwise 1345*4bdc9457SAndroid Build Coastguard Worker 1346*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_x8_lut_ukernel_function)( 1347*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1348*4bdc9457SAndroid Build Coastguard Worker const uint8_t* input, 1349*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 1350*4bdc9457SAndroid Build Coastguard Worker const uint8_t* table); 1351*4bdc9457SAndroid Build Coastguard Worker 1352*4bdc9457SAndroid Build Coastguard Worker // LUT32NORM: vector LookUp Table of 32-bit elements and NORMalize elementwise 1353*4bdc9457SAndroid Build Coastguard Worker 1354*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_u8_lut32norm_ukernel_function)( 1355*4bdc9457SAndroid Build Coastguard Worker size_t n, 1356*4bdc9457SAndroid Build Coastguard Worker const uint8_t* x, 1357*4bdc9457SAndroid Build Coastguard Worker const uint32_t* t, 1358*4bdc9457SAndroid Build Coastguard Worker uint8_t* y); 1359*4bdc9457SAndroid Build Coastguard Worker 1360*4bdc9457SAndroid Build Coastguard Worker // VBINARY: Vector BINARY elementwise 1361*4bdc9457SAndroid Build Coastguard Worker 1362*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_vbinary_ukernel_function)( 1363*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1364*4bdc9457SAndroid Build Coastguard Worker const void* input_x, 1365*4bdc9457SAndroid Build Coastguard Worker const void* input_y, 1366*4bdc9457SAndroid Build Coastguard Worker void* output, 1367*4bdc9457SAndroid Build Coastguard Worker const void* params); 1368*4bdc9457SAndroid Build Coastguard Worker 1369*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_vbinary_ukernel_function)( 1370*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1371*4bdc9457SAndroid Build Coastguard Worker const void* input_x, 1372*4bdc9457SAndroid Build Coastguard Worker const void* input_y, 1373*4bdc9457SAndroid Build Coastguard Worker void* output, 1374*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_default_params* params); 1375*4bdc9457SAndroid Build Coastguard Worker 1376*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vbinary_ukernel_function)( 1377*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1378*4bdc9457SAndroid Build Coastguard Worker const float* input_x, 1379*4bdc9457SAndroid Build Coastguard Worker const float* input_y, 1380*4bdc9457SAndroid Build Coastguard Worker float* output, 1381*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_default_params* params); 1382*4bdc9457SAndroid Build Coastguard Worker 1383*4bdc9457SAndroid Build Coastguard Worker // VBINARY: Vector BINARY elementwise with ReLU activation 1384*4bdc9457SAndroid Build Coastguard Worker 1385*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vbinary_relu_ukernel_function)( 1386*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1387*4bdc9457SAndroid Build Coastguard Worker const float* input_x, 1388*4bdc9457SAndroid Build Coastguard Worker const float* input_y, 1389*4bdc9457SAndroid Build Coastguard Worker float* output, 1390*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_relu_params* params); 1391*4bdc9457SAndroid Build Coastguard Worker 1392*4bdc9457SAndroid Build Coastguard Worker // VBINARY: Vector BINARY elementwise with Min+Max activation 1393*4bdc9457SAndroid Build Coastguard Worker 1394*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_vbinary_minmax_ukernel_function)( 1395*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1396*4bdc9457SAndroid Build Coastguard Worker const void* input_x, 1397*4bdc9457SAndroid Build Coastguard Worker const void* input_y, 1398*4bdc9457SAndroid Build Coastguard Worker void* output, 1399*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_minmax_params* params); 1400*4bdc9457SAndroid Build Coastguard Worker 1401*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vbinary_minmax_ukernel_function)( 1402*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1403*4bdc9457SAndroid Build Coastguard Worker const float* input_x, 1404*4bdc9457SAndroid Build Coastguard Worker const float* input_y, 1405*4bdc9457SAndroid Build Coastguard Worker float* output, 1406*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 1407*4bdc9457SAndroid Build Coastguard Worker 1408*4bdc9457SAndroid Build Coastguard Worker // VADD: Vector ADD elementwise with Min+Max activation 1409*4bdc9457SAndroid Build Coastguard Worker 1410*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qs8_vadd_minmax_ukernel_function)( 1411*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1412*4bdc9457SAndroid Build Coastguard Worker const int8_t* input_x, 1413*4bdc9457SAndroid Build Coastguard Worker const int8_t* input_y, 1414*4bdc9457SAndroid Build Coastguard Worker int8_t* output, 1415*4bdc9457SAndroid Build Coastguard Worker const union xnn_qs8_add_minmax_params* params); 1416*4bdc9457SAndroid Build Coastguard Worker 1417*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qu8_vadd_minmax_ukernel_function)( 1418*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1419*4bdc9457SAndroid Build Coastguard Worker const uint8_t* input_x, 1420*4bdc9457SAndroid Build Coastguard Worker const uint8_t* input_y, 1421*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 1422*4bdc9457SAndroid Build Coastguard Worker const union xnn_qu8_add_minmax_params* params); 1423*4bdc9457SAndroid Build Coastguard Worker 1424*4bdc9457SAndroid Build Coastguard Worker // VMUL: Vector MUL elementwise with Min+Max activation 1425*4bdc9457SAndroid Build Coastguard Worker 1426*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qs8_vmul_minmax_ukernel_function)( 1427*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1428*4bdc9457SAndroid Build Coastguard Worker const int8_t* input_x, 1429*4bdc9457SAndroid Build Coastguard Worker const int8_t* input_y, 1430*4bdc9457SAndroid Build Coastguard Worker int8_t* output, 1431*4bdc9457SAndroid Build Coastguard Worker const union xnn_qs8_mul_minmax_params* params); 1432*4bdc9457SAndroid Build Coastguard Worker 1433*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_qu8_vmul_minmax_ukernel_function)( 1434*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1435*4bdc9457SAndroid Build Coastguard Worker const uint8_t* input_x, 1436*4bdc9457SAndroid Build Coastguard Worker const uint8_t* input_y, 1437*4bdc9457SAndroid Build Coastguard Worker uint8_t* output, 1438*4bdc9457SAndroid Build Coastguard Worker const union xnn_qu8_mul_minmax_params* params); 1439*4bdc9457SAndroid Build Coastguard Worker 1440*4bdc9457SAndroid Build Coastguard Worker 1441*4bdc9457SAndroid Build Coastguard Worker /***************** Microkernel pointers for sparse inference *****************/ 1442*4bdc9457SAndroid Build Coastguard Worker 1443*4bdc9457SAndroid Build Coastguard Worker // SpMM: Sparse Matrix-Matrix multiplication 1444*4bdc9457SAndroid Build Coastguard Worker 1445*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_spmm_ukernel_function)( 1446*4bdc9457SAndroid Build Coastguard Worker size_t batch_size, 1447*4bdc9457SAndroid Build Coastguard Worker size_t output_channels, 1448*4bdc9457SAndroid Build Coastguard Worker const void* input, 1449*4bdc9457SAndroid Build Coastguard Worker const void* weights, 1450*4bdc9457SAndroid Build Coastguard Worker const int32_t* widx_dmap, 1451*4bdc9457SAndroid Build Coastguard Worker const uint32_t* nidx_nnzmap, 1452*4bdc9457SAndroid Build Coastguard Worker void* output, 1453*4bdc9457SAndroid Build Coastguard Worker size_t output_stride, 1454*4bdc9457SAndroid Build Coastguard Worker const void* params); 1455*4bdc9457SAndroid Build Coastguard Worker 1456*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_spmm_minmax_ukernel_function)( 1457*4bdc9457SAndroid Build Coastguard Worker size_t batch_size, 1458*4bdc9457SAndroid Build Coastguard Worker size_t output_channels, 1459*4bdc9457SAndroid Build Coastguard Worker const void* input, 1460*4bdc9457SAndroid Build Coastguard Worker const void* weights, 1461*4bdc9457SAndroid Build Coastguard Worker const int32_t* widx_dmap, 1462*4bdc9457SAndroid Build Coastguard Worker const uint32_t* nidx_nnzmap, 1463*4bdc9457SAndroid Build Coastguard Worker void* output, 1464*4bdc9457SAndroid Build Coastguard Worker size_t output_stride, 1465*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_minmax_params* params); 1466*4bdc9457SAndroid Build Coastguard Worker 1467*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_spmm_minmax_ukernel_function)( 1468*4bdc9457SAndroid Build Coastguard Worker size_t batch_size, 1469*4bdc9457SAndroid Build Coastguard Worker size_t output_channels, 1470*4bdc9457SAndroid Build Coastguard Worker const float* input, 1471*4bdc9457SAndroid Build Coastguard Worker const float* weights, 1472*4bdc9457SAndroid Build Coastguard Worker const int32_t* widx_dmap, 1473*4bdc9457SAndroid Build Coastguard Worker const uint32_t* nidx_nnzmap, 1474*4bdc9457SAndroid Build Coastguard Worker float* output, 1475*4bdc9457SAndroid Build Coastguard Worker size_t output_stride, 1476*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 1477*4bdc9457SAndroid Build Coastguard Worker 1478*4bdc9457SAndroid Build Coastguard Worker // CONV-HWC2CHW: direct CONVolution from HWC-layout tensor to CHW-layout tensor 1479*4bdc9457SAndroid Build Coastguard Worker 1480*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_conv_hwc2chw_ukernel_function)( 1481*4bdc9457SAndroid Build Coastguard Worker size_t input_height, 1482*4bdc9457SAndroid Build Coastguard Worker size_t input_width, 1483*4bdc9457SAndroid Build Coastguard Worker size_t output_y_start, 1484*4bdc9457SAndroid Build Coastguard Worker size_t output_y_end, 1485*4bdc9457SAndroid Build Coastguard Worker const void* input, 1486*4bdc9457SAndroid Build Coastguard Worker const void* zero, 1487*4bdc9457SAndroid Build Coastguard Worker const void* weights, 1488*4bdc9457SAndroid Build Coastguard Worker void* output, 1489*4bdc9457SAndroid Build Coastguard Worker size_t input_padding_top, 1490*4bdc9457SAndroid Build Coastguard Worker size_t output_channels, 1491*4bdc9457SAndroid Build Coastguard Worker size_t output_height_stride, 1492*4bdc9457SAndroid Build Coastguard Worker size_t output_channel_stride, 1493*4bdc9457SAndroid Build Coastguard Worker const void* params); 1494*4bdc9457SAndroid Build Coastguard Worker 1495*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_conv_hwc2chw_ukernel_function)( 1496*4bdc9457SAndroid Build Coastguard Worker size_t input_height, 1497*4bdc9457SAndroid Build Coastguard Worker size_t input_width, 1498*4bdc9457SAndroid Build Coastguard Worker size_t output_y_start, 1499*4bdc9457SAndroid Build Coastguard Worker size_t output_y_end, 1500*4bdc9457SAndroid Build Coastguard Worker const void* input, 1501*4bdc9457SAndroid Build Coastguard Worker const void* zero, 1502*4bdc9457SAndroid Build Coastguard Worker const void* weights, 1503*4bdc9457SAndroid Build Coastguard Worker void* output, 1504*4bdc9457SAndroid Build Coastguard Worker size_t input_padding_top, 1505*4bdc9457SAndroid Build Coastguard Worker size_t output_channels, 1506*4bdc9457SAndroid Build Coastguard Worker size_t output_height_stride, 1507*4bdc9457SAndroid Build Coastguard Worker size_t output_channel_stride, 1508*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_minmax_params* params); 1509*4bdc9457SAndroid Build Coastguard Worker 1510*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_conv_hwc2chw_ukernel_function)( 1511*4bdc9457SAndroid Build Coastguard Worker size_t input_height, 1512*4bdc9457SAndroid Build Coastguard Worker size_t input_width, 1513*4bdc9457SAndroid Build Coastguard Worker size_t output_y_start, 1514*4bdc9457SAndroid Build Coastguard Worker size_t output_y_end, 1515*4bdc9457SAndroid Build Coastguard Worker const float* input, 1516*4bdc9457SAndroid Build Coastguard Worker const float* zero, 1517*4bdc9457SAndroid Build Coastguard Worker const float* weights, 1518*4bdc9457SAndroid Build Coastguard Worker float* output, 1519*4bdc9457SAndroid Build Coastguard Worker size_t input_padding_top, 1520*4bdc9457SAndroid Build Coastguard Worker size_t output_channels, 1521*4bdc9457SAndroid Build Coastguard Worker size_t output_height_stride, 1522*4bdc9457SAndroid Build Coastguard Worker size_t output_channel_stride, 1523*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_minmax_params* params); 1524*4bdc9457SAndroid Build Coastguard Worker 1525*4bdc9457SAndroid Build Coastguard Worker // DWCONV2D-CHW: direct 2D DepthWise CONVolution in CHW layout 1526*4bdc9457SAndroid Build Coastguard Worker 1527*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_dwconv2d_chw_ukernel_function)( 1528*4bdc9457SAndroid Build Coastguard Worker size_t input_height, 1529*4bdc9457SAndroid Build Coastguard Worker size_t input_width, 1530*4bdc9457SAndroid Build Coastguard Worker const void* input, 1531*4bdc9457SAndroid Build Coastguard Worker const void* weights, 1532*4bdc9457SAndroid Build Coastguard Worker const void* zero, 1533*4bdc9457SAndroid Build Coastguard Worker void* output, 1534*4bdc9457SAndroid Build Coastguard Worker uint32_t padding_top, 1535*4bdc9457SAndroid Build Coastguard Worker const void* params); 1536*4bdc9457SAndroid Build Coastguard Worker 1537*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_dwconv2d_chw_ukernel_function)( 1538*4bdc9457SAndroid Build Coastguard Worker size_t input_height, 1539*4bdc9457SAndroid Build Coastguard Worker size_t input_width, 1540*4bdc9457SAndroid Build Coastguard Worker const void* input, 1541*4bdc9457SAndroid Build Coastguard Worker const void* weights, 1542*4bdc9457SAndroid Build Coastguard Worker const void* zero, 1543*4bdc9457SAndroid Build Coastguard Worker void* output, 1544*4bdc9457SAndroid Build Coastguard Worker uint32_t padding_top, 1545*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_chw_params* params); 1546*4bdc9457SAndroid Build Coastguard Worker 1547*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_dwconv2d_chw_ukernel_function)( 1548*4bdc9457SAndroid Build Coastguard Worker size_t input_height, 1549*4bdc9457SAndroid Build Coastguard Worker size_t input_width, 1550*4bdc9457SAndroid Build Coastguard Worker const float* input, 1551*4bdc9457SAndroid Build Coastguard Worker const float* weights, 1552*4bdc9457SAndroid Build Coastguard Worker const float* zero, 1553*4bdc9457SAndroid Build Coastguard Worker float* output, 1554*4bdc9457SAndroid Build Coastguard Worker uint32_t padding_top, 1555*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_chw_params* params); 1556*4bdc9457SAndroid Build Coastguard Worker 1557*4bdc9457SAndroid Build Coastguard Worker // IBILINEAR-CHW: Indirect BILINEAR interpolation in CHW layout 1558*4bdc9457SAndroid Build Coastguard Worker 1559*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_ibilinear_chw_ukernel_function)( 1560*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 1561*4bdc9457SAndroid Build Coastguard Worker size_t channels, 1562*4bdc9457SAndroid Build Coastguard Worker const void** input, 1563*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 1564*4bdc9457SAndroid Build Coastguard Worker const void* weights, 1565*4bdc9457SAndroid Build Coastguard Worker void* output, 1566*4bdc9457SAndroid Build Coastguard Worker size_t input_increment); 1567*4bdc9457SAndroid Build Coastguard Worker 1568*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_ibilinear_chw_ukernel_function)( 1569*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 1570*4bdc9457SAndroid Build Coastguard Worker size_t channels, 1571*4bdc9457SAndroid Build Coastguard Worker const void** input, 1572*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 1573*4bdc9457SAndroid Build Coastguard Worker const void* weights, 1574*4bdc9457SAndroid Build Coastguard Worker void* output, 1575*4bdc9457SAndroid Build Coastguard Worker size_t input_increment); 1576*4bdc9457SAndroid Build Coastguard Worker 1577*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_ibilinear_chw_ukernel_function)( 1578*4bdc9457SAndroid Build Coastguard Worker size_t output_pixels, 1579*4bdc9457SAndroid Build Coastguard Worker size_t channels, 1580*4bdc9457SAndroid Build Coastguard Worker const float** input, 1581*4bdc9457SAndroid Build Coastguard Worker size_t input_offset, 1582*4bdc9457SAndroid Build Coastguard Worker const float* weights, 1583*4bdc9457SAndroid Build Coastguard Worker float* output, 1584*4bdc9457SAndroid Build Coastguard Worker size_t input_increment); 1585*4bdc9457SAndroid Build Coastguard Worker 1586*4bdc9457SAndroid Build Coastguard Worker // GAVGPOOL-CW: Global AVeraGe POOLing in CW layout. 1587*4bdc9457SAndroid Build Coastguard Worker 1588*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_gavgpool_cw_ukernel_function)( 1589*4bdc9457SAndroid Build Coastguard Worker size_t elements, 1590*4bdc9457SAndroid Build Coastguard Worker size_t channels, 1591*4bdc9457SAndroid Build Coastguard Worker const float* input, 1592*4bdc9457SAndroid Build Coastguard Worker float* output, 1593*4bdc9457SAndroid Build Coastguard Worker const void* params); 1594*4bdc9457SAndroid Build Coastguard Worker 1595*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f16_gavgpool_cw_ukernel_function)( 1596*4bdc9457SAndroid Build Coastguard Worker size_t elements, 1597*4bdc9457SAndroid Build Coastguard Worker size_t channels, 1598*4bdc9457SAndroid Build Coastguard Worker const void* input, 1599*4bdc9457SAndroid Build Coastguard Worker void* output, 1600*4bdc9457SAndroid Build Coastguard Worker const union xnn_f16_gavgpool_params* params); 1601*4bdc9457SAndroid Build Coastguard Worker 1602*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_gavgpool_cw_ukernel_function)( 1603*4bdc9457SAndroid Build Coastguard Worker size_t elements, 1604*4bdc9457SAndroid Build Coastguard Worker size_t channels, 1605*4bdc9457SAndroid Build Coastguard Worker const float* input, 1606*4bdc9457SAndroid Build Coastguard Worker float* output, 1607*4bdc9457SAndroid Build Coastguard Worker const union xnn_f32_gavgpool_params* params); 1608*4bdc9457SAndroid Build Coastguard Worker 1609*4bdc9457SAndroid Build Coastguard Worker 1610*4bdc9457SAndroid Build Coastguard Worker /********************* JIT microkernel generator pointers ********************/ 1611*4bdc9457SAndroid Build Coastguard Worker 1612*4bdc9457SAndroid Build Coastguard Worker // JIT GEMM: used by GEMM/IGEMM microkernel generators. 1613*4bdc9457SAndroid Build Coastguard Worker 1614*4bdc9457SAndroid Build Coastguard Worker struct jit_gemm_params { 1615*4bdc9457SAndroid Build Coastguard Worker struct { 1616*4bdc9457SAndroid Build Coastguard Worker float min; 1617*4bdc9457SAndroid Build Coastguard Worker float max; 1618*4bdc9457SAndroid Build Coastguard Worker } f32_minmax; 1619*4bdc9457SAndroid Build Coastguard Worker size_t num_post_operations; 1620*4bdc9457SAndroid Build Coastguard Worker struct xnn_post_operation* post_operations; 1621*4bdc9457SAndroid Build Coastguard Worker }; 1622*4bdc9457SAndroid Build Coastguard Worker 1623*4bdc9457SAndroid Build Coastguard Worker typedef xnn_status_t (*xnn_jit_gemm_code_generator_function)( 1624*4bdc9457SAndroid Build Coastguard Worker struct xnn_code_buffer *code, size_t max_mr, size_t nc_mod_nr, size_t kc, const void *params); 1625*4bdc9457SAndroid Build Coastguard Worker typedef xnn_status_t (*xnn_jit_igemm_code_generator_function)( 1626*4bdc9457SAndroid Build Coastguard Worker struct xnn_code_buffer *code, size_t max_mr, size_t nc_mod_nr, size_t kc, size_t ks, const void *params); 1627*4bdc9457SAndroid Build Coastguard Worker 1628*4bdc9457SAndroid Build Coastguard Worker 1629*4bdc9457SAndroid Build Coastguard Worker /***************** Audio pre-processing microkernel pointers *****************/ 1630*4bdc9457SAndroid Build Coastguard Worker 1631*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_s16_rmaxabs_ukernel_function)( 1632*4bdc9457SAndroid Build Coastguard Worker size_t batch_size, 1633*4bdc9457SAndroid Build Coastguard Worker const int16_t* x, 1634*4bdc9457SAndroid Build Coastguard Worker uint16_t* y); 1635*4bdc9457SAndroid Build Coastguard Worker 1636*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_s16_window_ukernel_function)( 1637*4bdc9457SAndroid Build Coastguard Worker size_t rows, 1638*4bdc9457SAndroid Build Coastguard Worker size_t batch_size, 1639*4bdc9457SAndroid Build Coastguard Worker const int16_t* input, 1640*4bdc9457SAndroid Build Coastguard Worker const int16_t* weights, 1641*4bdc9457SAndroid Build Coastguard Worker int16_t* output, 1642*4bdc9457SAndroid Build Coastguard Worker uint32_t shift); 1643*4bdc9457SAndroid Build Coastguard Worker 1644*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_u32_filterbank_accumulate_ukernel_function)( 1645*4bdc9457SAndroid Build Coastguard Worker size_t rows, 1646*4bdc9457SAndroid Build Coastguard Worker const uint32_t* input, 1647*4bdc9457SAndroid Build Coastguard Worker const uint8_t* weight_widths, 1648*4bdc9457SAndroid Build Coastguard Worker const uint16_t* weights, 1649*4bdc9457SAndroid Build Coastguard Worker uint64_t* output); 1650*4bdc9457SAndroid Build Coastguard Worker 1651*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_u32_filterbank_subtract_ukernel_function)( 1652*4bdc9457SAndroid Build Coastguard Worker size_t batch_size, 1653*4bdc9457SAndroid Build Coastguard Worker const uint32_t* input, 1654*4bdc9457SAndroid Build Coastguard Worker uint32_t smoothing, 1655*4bdc9457SAndroid Build Coastguard Worker uint32_t alternate_smoothing, 1656*4bdc9457SAndroid Build Coastguard Worker uint32_t one_minus_smoothing, 1657*4bdc9457SAndroid Build Coastguard Worker uint32_t alternate_one_minus_smoothing, 1658*4bdc9457SAndroid Build Coastguard Worker uint32_t min_signal_remaining, 1659*4bdc9457SAndroid Build Coastguard Worker uint32_t smoothing_bits, 1660*4bdc9457SAndroid Build Coastguard Worker uint32_t spectral_subtraction_bits, 1661*4bdc9457SAndroid Build Coastguard Worker uint32_t* noise_estimate, 1662*4bdc9457SAndroid Build Coastguard Worker uint32_t* output); 1663*4bdc9457SAndroid Build Coastguard Worker 1664*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_s16_vlshift_ukernel_function)( 1665*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1666*4bdc9457SAndroid Build Coastguard Worker const int16_t* input, 1667*4bdc9457SAndroid Build Coastguard Worker int16_t* output, 1668*4bdc9457SAndroid Build Coastguard Worker uint32_t shift); 1669*4bdc9457SAndroid Build Coastguard Worker 1670*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_cs16_vsquareabs_ukernel_function)( 1671*4bdc9457SAndroid Build Coastguard Worker size_t batch_size, 1672*4bdc9457SAndroid Build Coastguard Worker const int16_t* input, 1673*4bdc9457SAndroid Build Coastguard Worker uint32_t* output); 1674*4bdc9457SAndroid Build Coastguard Worker 1675*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_u32_vlog_ukernel_function)( 1676*4bdc9457SAndroid Build Coastguard Worker size_t batch_size, 1677*4bdc9457SAndroid Build Coastguard Worker const uint32_t* input, 1678*4bdc9457SAndroid Build Coastguard Worker uint32_t input_lshift, 1679*4bdc9457SAndroid Build Coastguard Worker uint32_t output_scale, 1680*4bdc9457SAndroid Build Coastguard Worker uint16_t* output); 1681*4bdc9457SAndroid Build Coastguard Worker 1682*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_cs16_bfly4_ukernel_function)( 1683*4bdc9457SAndroid Build Coastguard Worker size_t samples, 1684*4bdc9457SAndroid Build Coastguard Worker int16_t* data, 1685*4bdc9457SAndroid Build Coastguard Worker size_t stride, 1686*4bdc9457SAndroid Build Coastguard Worker const int16_t* twiddle); 1687*4bdc9457SAndroid Build Coastguard Worker 1688*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_cs16_fftr_ukernel_function)( 1689*4bdc9457SAndroid Build Coastguard Worker size_t samples, 1690*4bdc9457SAndroid Build Coastguard Worker int16_t* data, 1691*4bdc9457SAndroid Build Coastguard Worker const int16_t* twiddle); 1692*4bdc9457SAndroid Build Coastguard Worker 1693*4bdc9457SAndroid Build Coastguard Worker 1694*4bdc9457SAndroid Build Coastguard Worker /********************* Experimental microkernel pointers *********************/ 1695*4bdc9457SAndroid Build Coastguard Worker 1696*4bdc9457SAndroid Build Coastguard Worker // ZIPC: ZIP Constant number of arrays 1697*4bdc9457SAndroid Build Coastguard Worker 1698*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_zipc_ukernel_function)( 1699*4bdc9457SAndroid Build Coastguard Worker size_t n, 1700*4bdc9457SAndroid Build Coastguard Worker const void* x, 1701*4bdc9457SAndroid Build Coastguard Worker void* y); 1702*4bdc9457SAndroid Build Coastguard Worker 1703*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_x8_zipc_ukernel_function)( 1704*4bdc9457SAndroid Build Coastguard Worker size_t n, 1705*4bdc9457SAndroid Build Coastguard Worker const uint8_t* x, 1706*4bdc9457SAndroid Build Coastguard Worker uint8_t* y); 1707*4bdc9457SAndroid Build Coastguard Worker 1708*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_x32_zipc_ukernel_function)( 1709*4bdc9457SAndroid Build Coastguard Worker size_t n, 1710*4bdc9457SAndroid Build Coastguard Worker const uint32_t* x, 1711*4bdc9457SAndroid Build Coastguard Worker uint32_t* y); 1712*4bdc9457SAndroid Build Coastguard Worker 1713*4bdc9457SAndroid Build Coastguard Worker // ZIPV: ZIP Variable number of arrays 1714*4bdc9457SAndroid Build Coastguard Worker 1715*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_zipv_ukernel_function)( 1716*4bdc9457SAndroid Build Coastguard Worker size_t n, 1717*4bdc9457SAndroid Build Coastguard Worker size_t m, 1718*4bdc9457SAndroid Build Coastguard Worker const void* x, 1719*4bdc9457SAndroid Build Coastguard Worker void* y); 1720*4bdc9457SAndroid Build Coastguard Worker 1721*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_x8_zipv_ukernel_function)( 1722*4bdc9457SAndroid Build Coastguard Worker size_t n, 1723*4bdc9457SAndroid Build Coastguard Worker size_t m, 1724*4bdc9457SAndroid Build Coastguard Worker const uint8_t* x, 1725*4bdc9457SAndroid Build Coastguard Worker uint8_t* y); 1726*4bdc9457SAndroid Build Coastguard Worker 1727*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_x32_zipv_ukernel_function)( 1728*4bdc9457SAndroid Build Coastguard Worker size_t n, 1729*4bdc9457SAndroid Build Coastguard Worker size_t m, 1730*4bdc9457SAndroid Build Coastguard Worker const uint32_t* x, 1731*4bdc9457SAndroid Build Coastguard Worker uint32_t* y); 1732*4bdc9457SAndroid Build Coastguard Worker 1733*4bdc9457SAndroid Build Coastguard Worker // RADDEXPMINUSMAX: Reduce-ADD EXP(x_i MINUS MAX[x_i]) 1734*4bdc9457SAndroid Build Coastguard Worker 1735*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_raddexpminusmax_ukernel_function)( 1736*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1737*4bdc9457SAndroid Build Coastguard Worker const float* input, 1738*4bdc9457SAndroid Build Coastguard Worker float* sum, 1739*4bdc9457SAndroid Build Coastguard Worker float max); 1740*4bdc9457SAndroid Build Coastguard Worker 1741*4bdc9457SAndroid Build Coastguard Worker // VSCALEEXPMINUSMAX: Vector SCALE EXP(x_i MINUS MAX[x_i]) 1742*4bdc9457SAndroid Build Coastguard Worker 1743*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vscaleexpminusmax_ukernel_function)( 1744*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1745*4bdc9457SAndroid Build Coastguard Worker const float* input, 1746*4bdc9457SAndroid Build Coastguard Worker float* output, 1747*4bdc9457SAndroid Build Coastguard Worker float max, 1748*4bdc9457SAndroid Build Coastguard Worker float scale); 1749*4bdc9457SAndroid Build Coastguard Worker 1750*4bdc9457SAndroid Build Coastguard Worker // RADDEXTEXP: Reduce-ADD EXTended ("mantissa" + "exponent") EXPonentials 1751*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_raddextexp_ukernel_function)( 1752*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1753*4bdc9457SAndroid Build Coastguard Worker const float* input, 1754*4bdc9457SAndroid Build Coastguard Worker float* sum); 1755*4bdc9457SAndroid Build Coastguard Worker 1756*4bdc9457SAndroid Build Coastguard Worker // VSCALEEXTEXP: Vector SCALE EXTended ("mantissa" + "exponent") EXPonentials 1757*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_f32_vscaleextexp_ukernel_function)( 1758*4bdc9457SAndroid Build Coastguard Worker size_t batch, 1759*4bdc9457SAndroid Build Coastguard Worker const float* input, 1760*4bdc9457SAndroid Build Coastguard Worker float* output, 1761*4bdc9457SAndroid Build Coastguard Worker float scale_mantissa, 1762*4bdc9457SAndroid Build Coastguard Worker float scale_exponent); 1763*4bdc9457SAndroid Build Coastguard Worker 1764*4bdc9457SAndroid Build Coastguard Worker 1765*4bdc9457SAndroid Build Coastguard Worker /***************** Microkernel parameter initializer pointers ****************/ 1766*4bdc9457SAndroid Build Coastguard Worker 1767*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_f32_cvt_params_fn)( 1768*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_f32_cvt_params params[XNN_MIN_ELEMENTS(1)]); 1769*4bdc9457SAndroid Build Coastguard Worker 1770*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_f16_cvt_params_fn)( 1771*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_f16_cvt_params params[XNN_MIN_ELEMENTS(1)]); 1772*4bdc9457SAndroid Build Coastguard Worker 1773*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_qs8_cvt_params_fn)( 1774*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_qs8_cvt_params params[XNN_MIN_ELEMENTS(1)], 1775*4bdc9457SAndroid Build Coastguard Worker float scale, 1776*4bdc9457SAndroid Build Coastguard Worker int8_t output_zero_point, 1777*4bdc9457SAndroid Build Coastguard Worker int8_t output_min, 1778*4bdc9457SAndroid Build Coastguard Worker int8_t output_max); 1779*4bdc9457SAndroid Build Coastguard Worker 1780*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_qu8_cvt_params_fn)( 1781*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_qu8_cvt_params params[XNN_MIN_ELEMENTS(1)], 1782*4bdc9457SAndroid Build Coastguard Worker float scale, 1783*4bdc9457SAndroid Build Coastguard Worker uint8_t output_zero_point, 1784*4bdc9457SAndroid Build Coastguard Worker uint8_t output_min, 1785*4bdc9457SAndroid Build Coastguard Worker uint8_t output_max); 1786*4bdc9457SAndroid Build Coastguard Worker 1787*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qs8_cvt_params_fn)( 1788*4bdc9457SAndroid Build Coastguard Worker union xnn_qs8_cvt_params params[XNN_MIN_ELEMENTS(1)], 1789*4bdc9457SAndroid Build Coastguard Worker float input_output_scale, 1790*4bdc9457SAndroid Build Coastguard Worker int8_t input_zero_point, 1791*4bdc9457SAndroid Build Coastguard Worker int8_t output_zero_point); 1792*4bdc9457SAndroid Build Coastguard Worker 1793*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qs8_f32_cvt_params_fn)( 1794*4bdc9457SAndroid Build Coastguard Worker union xnn_qs8_f32_cvt_params params[XNN_MIN_ELEMENTS(1)], 1795*4bdc9457SAndroid Build Coastguard Worker float scale, 1796*4bdc9457SAndroid Build Coastguard Worker int8_t zero_point); 1797*4bdc9457SAndroid Build Coastguard Worker 1798*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qu8_cvt_params_fn)( 1799*4bdc9457SAndroid Build Coastguard Worker union xnn_qu8_cvt_params params[XNN_MIN_ELEMENTS(1)], 1800*4bdc9457SAndroid Build Coastguard Worker float input_output_scale, 1801*4bdc9457SAndroid Build Coastguard Worker uint8_t input_zero_point, 1802*4bdc9457SAndroid Build Coastguard Worker uint8_t output_zero_point); 1803*4bdc9457SAndroid Build Coastguard Worker 1804*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qu8_f32_cvt_params_fn)( 1805*4bdc9457SAndroid Build Coastguard Worker union xnn_qu8_f32_cvt_params params[XNN_MIN_ELEMENTS(1)], 1806*4bdc9457SAndroid Build Coastguard Worker float scale, 1807*4bdc9457SAndroid Build Coastguard Worker uint8_t zero_point); 1808*4bdc9457SAndroid Build Coastguard Worker 1809*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qc8_conv_minmax_params_fn)( 1810*4bdc9457SAndroid Build Coastguard Worker union xnn_qc8_conv_minmax_params params[XNN_MIN_ELEMENTS(1)], 1811*4bdc9457SAndroid Build Coastguard Worker int8_t output_zero_point, 1812*4bdc9457SAndroid Build Coastguard Worker int8_t output_min, 1813*4bdc9457SAndroid Build Coastguard Worker int8_t output_max); 1814*4bdc9457SAndroid Build Coastguard Worker 1815*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qs8_conv_minmax_params_fn)( 1816*4bdc9457SAndroid Build Coastguard Worker union xnn_qs8_conv_minmax_params params[XNN_MIN_ELEMENTS(1)], 1817*4bdc9457SAndroid Build Coastguard Worker float scale, 1818*4bdc9457SAndroid Build Coastguard Worker int8_t output_zero_point, 1819*4bdc9457SAndroid Build Coastguard Worker int8_t output_min, 1820*4bdc9457SAndroid Build Coastguard Worker int8_t output_max); 1821*4bdc9457SAndroid Build Coastguard Worker 1822*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qu8_conv_minmax_params_fn)( 1823*4bdc9457SAndroid Build Coastguard Worker union xnn_qu8_conv_minmax_params params[XNN_MIN_ELEMENTS(1)], 1824*4bdc9457SAndroid Build Coastguard Worker uint8_t kernel_zero_point, 1825*4bdc9457SAndroid Build Coastguard Worker float scale, 1826*4bdc9457SAndroid Build Coastguard Worker uint8_t output_zero_point, 1827*4bdc9457SAndroid Build Coastguard Worker uint8_t output_min, 1828*4bdc9457SAndroid Build Coastguard Worker uint8_t output_max); 1829*4bdc9457SAndroid Build Coastguard Worker 1830*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qs8_avgpool_minmax_params_fn)( 1831*4bdc9457SAndroid Build Coastguard Worker union xnn_qs8_avgpool_minmax_params params[XNN_MIN_ELEMENTS(1)], 1832*4bdc9457SAndroid Build Coastguard Worker int32_t bias, 1833*4bdc9457SAndroid Build Coastguard Worker float scale, 1834*4bdc9457SAndroid Build Coastguard Worker int8_t output_zero_point, 1835*4bdc9457SAndroid Build Coastguard Worker int8_t output_min, 1836*4bdc9457SAndroid Build Coastguard Worker int8_t output_max); 1837*4bdc9457SAndroid Build Coastguard Worker 1838*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qu8_avgpool_minmax_params_fn)( 1839*4bdc9457SAndroid Build Coastguard Worker union xnn_qu8_avgpool_minmax_params params[XNN_MIN_ELEMENTS(1)], 1840*4bdc9457SAndroid Build Coastguard Worker int32_t bias, 1841*4bdc9457SAndroid Build Coastguard Worker float scale, 1842*4bdc9457SAndroid Build Coastguard Worker uint8_t output_zero_point, 1843*4bdc9457SAndroid Build Coastguard Worker uint8_t output_min, 1844*4bdc9457SAndroid Build Coastguard Worker uint8_t output_max); 1845*4bdc9457SAndroid Build Coastguard Worker 1846*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_update_qs8_avgpool_minmax_params_fn)( 1847*4bdc9457SAndroid Build Coastguard Worker union xnn_qs8_avgpool_minmax_params params[XNN_MIN_ELEMENTS(1)], 1848*4bdc9457SAndroid Build Coastguard Worker int32_t bias, 1849*4bdc9457SAndroid Build Coastguard Worker float scale); 1850*4bdc9457SAndroid Build Coastguard Worker 1851*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_update_qu8_avgpool_minmax_params_fn)( 1852*4bdc9457SAndroid Build Coastguard Worker union xnn_qu8_avgpool_minmax_params params[XNN_MIN_ELEMENTS(1)], 1853*4bdc9457SAndroid Build Coastguard Worker int32_t bias, 1854*4bdc9457SAndroid Build Coastguard Worker float scale); 1855*4bdc9457SAndroid Build Coastguard Worker 1856*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qs8_add_minmax_params_fn)( 1857*4bdc9457SAndroid Build Coastguard Worker union xnn_qs8_add_minmax_params params[XNN_MIN_ELEMENTS(1)], 1858*4bdc9457SAndroid Build Coastguard Worker int8_t input_x_zero_point, 1859*4bdc9457SAndroid Build Coastguard Worker int8_t input_y_zero_point, 1860*4bdc9457SAndroid Build Coastguard Worker int8_t output_zero_point, 1861*4bdc9457SAndroid Build Coastguard Worker float input_x_output_scale, 1862*4bdc9457SAndroid Build Coastguard Worker float input_y_output_scale, 1863*4bdc9457SAndroid Build Coastguard Worker int8_t output_min, 1864*4bdc9457SAndroid Build Coastguard Worker int8_t output_max); 1865*4bdc9457SAndroid Build Coastguard Worker 1866*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qu8_add_minmax_params_fn)( 1867*4bdc9457SAndroid Build Coastguard Worker union xnn_qu8_add_minmax_params params[XNN_MIN_ELEMENTS(1)], 1868*4bdc9457SAndroid Build Coastguard Worker uint8_t input_x_zero_point, 1869*4bdc9457SAndroid Build Coastguard Worker uint8_t input_y_zero_point, 1870*4bdc9457SAndroid Build Coastguard Worker uint8_t output_zero_point, 1871*4bdc9457SAndroid Build Coastguard Worker float input_x_output_scale, 1872*4bdc9457SAndroid Build Coastguard Worker float input_y_output_scale, 1873*4bdc9457SAndroid Build Coastguard Worker uint8_t output_min, 1874*4bdc9457SAndroid Build Coastguard Worker uint8_t output_max); 1875*4bdc9457SAndroid Build Coastguard Worker 1876*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qs8_mul_minmax_params_fn)( 1877*4bdc9457SAndroid Build Coastguard Worker union xnn_qs8_mul_minmax_params params[XNN_MIN_ELEMENTS(1)], 1878*4bdc9457SAndroid Build Coastguard Worker int8_t input_x_zero_point, 1879*4bdc9457SAndroid Build Coastguard Worker int8_t input_y_zero_point, 1880*4bdc9457SAndroid Build Coastguard Worker int8_t output_zero_point, 1881*4bdc9457SAndroid Build Coastguard Worker float product_output_scale, 1882*4bdc9457SAndroid Build Coastguard Worker int8_t output_min, 1883*4bdc9457SAndroid Build Coastguard Worker int8_t output_max); 1884*4bdc9457SAndroid Build Coastguard Worker 1885*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qu8_mul_minmax_params_fn)( 1886*4bdc9457SAndroid Build Coastguard Worker union xnn_qu8_mul_minmax_params params[XNN_MIN_ELEMENTS(1)], 1887*4bdc9457SAndroid Build Coastguard Worker uint8_t input_x_zero_point, 1888*4bdc9457SAndroid Build Coastguard Worker uint8_t input_y_zero_point, 1889*4bdc9457SAndroid Build Coastguard Worker uint8_t output_zero_point, 1890*4bdc9457SAndroid Build Coastguard Worker float product_output_scale, 1891*4bdc9457SAndroid Build Coastguard Worker uint8_t output_min, 1892*4bdc9457SAndroid Build Coastguard Worker uint8_t output_max); 1893*4bdc9457SAndroid Build Coastguard Worker 1894*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_abs_params_fn)( 1895*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_abs_params params[XNN_MIN_ELEMENTS(1)]); 1896*4bdc9457SAndroid Build Coastguard Worker 1897*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_abs_params_fn)( 1898*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_abs_params params[XNN_MIN_ELEMENTS(1)]); 1899*4bdc9457SAndroid Build Coastguard Worker 1900*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_default_params_fn)( 1901*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_default_params params[XNN_MIN_ELEMENTS(1)]); 1902*4bdc9457SAndroid Build Coastguard Worker 1903*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_default_params_fn)( 1904*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_default_params params[XNN_MIN_ELEMENTS(1)]); 1905*4bdc9457SAndroid Build Coastguard Worker 1906*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_expminus_params_fn)( 1907*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_expminus_params params[XNN_MIN_ELEMENTS(1)]); 1908*4bdc9457SAndroid Build Coastguard Worker 1909*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_expminus_params_fn)( 1910*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_expminus_params params[XNN_MIN_ELEMENTS(1)]); 1911*4bdc9457SAndroid Build Coastguard Worker 1912*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_elu_params_fn)( 1913*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_elu_params params[XNN_MIN_ELEMENTS(1)], 1914*4bdc9457SAndroid Build Coastguard Worker uint16_t prescale, 1915*4bdc9457SAndroid Build Coastguard Worker uint16_t alpha, 1916*4bdc9457SAndroid Build Coastguard Worker uint16_t beta); 1917*4bdc9457SAndroid Build Coastguard Worker 1918*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_elu_params_fn)( 1919*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_elu_params params[XNN_MIN_ELEMENTS(1)], 1920*4bdc9457SAndroid Build Coastguard Worker float prescale, 1921*4bdc9457SAndroid Build Coastguard Worker float alpha, 1922*4bdc9457SAndroid Build Coastguard Worker float beta); 1923*4bdc9457SAndroid Build Coastguard Worker 1924*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_hswish_params_fn)( 1925*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_hswish_params params[XNN_MIN_ELEMENTS(1)]); 1926*4bdc9457SAndroid Build Coastguard Worker 1927*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_hswish_params_fn)( 1928*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_hswish_params params[XNN_MIN_ELEMENTS(1)]); 1929*4bdc9457SAndroid Build Coastguard Worker 1930*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_lrelu_params_fn)( 1931*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_lrelu_params params[XNN_MIN_ELEMENTS(1)], 1932*4bdc9457SAndroid Build Coastguard Worker uint16_t slope); 1933*4bdc9457SAndroid Build Coastguard Worker 1934*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_lrelu_params_fn)( 1935*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_lrelu_params params[XNN_MIN_ELEMENTS(1)], 1936*4bdc9457SAndroid Build Coastguard Worker float slope); 1937*4bdc9457SAndroid Build Coastguard Worker 1938*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qs8_lrelu_params_fn)( 1939*4bdc9457SAndroid Build Coastguard Worker union xnn_qs8_lrelu_params params[XNN_MIN_ELEMENTS(1)], 1940*4bdc9457SAndroid Build Coastguard Worker float positive_slope, 1941*4bdc9457SAndroid Build Coastguard Worker float negative_slope, 1942*4bdc9457SAndroid Build Coastguard Worker int8_t input_zero_point, 1943*4bdc9457SAndroid Build Coastguard Worker int8_t output_zero_point); 1944*4bdc9457SAndroid Build Coastguard Worker 1945*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_qu8_lrelu_params_fn)( 1946*4bdc9457SAndroid Build Coastguard Worker union xnn_qu8_lrelu_params params[XNN_MIN_ELEMENTS(1)], 1947*4bdc9457SAndroid Build Coastguard Worker float positive_slope, 1948*4bdc9457SAndroid Build Coastguard Worker float negative_slope, 1949*4bdc9457SAndroid Build Coastguard Worker uint8_t input_zero_point, 1950*4bdc9457SAndroid Build Coastguard Worker uint8_t output_zero_point); 1951*4bdc9457SAndroid Build Coastguard Worker 1952*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_bf16_minmax_params_fn)( 1953*4bdc9457SAndroid Build Coastguard Worker union xnn_bf16_minmax_params params[XNN_MIN_ELEMENTS(1)], 1954*4bdc9457SAndroid Build Coastguard Worker uint16_t min, 1955*4bdc9457SAndroid Build Coastguard Worker uint16_t max); 1956*4bdc9457SAndroid Build Coastguard Worker 1957*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_minmax_params_fn)( 1958*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_minmax_params params[XNN_MIN_ELEMENTS(1)], 1959*4bdc9457SAndroid Build Coastguard Worker uint16_t min, 1960*4bdc9457SAndroid Build Coastguard Worker uint16_t max); 1961*4bdc9457SAndroid Build Coastguard Worker 1962*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_minmax_params_fn)( 1963*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_minmax_params params[XNN_MIN_ELEMENTS(1)], 1964*4bdc9457SAndroid Build Coastguard Worker float min, 1965*4bdc9457SAndroid Build Coastguard Worker float max); 1966*4bdc9457SAndroid Build Coastguard Worker 1967*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_s8_minmax_params_fn)( 1968*4bdc9457SAndroid Build Coastguard Worker union xnn_s8_minmax_params params[XNN_MIN_ELEMENTS(1)], 1969*4bdc9457SAndroid Build Coastguard Worker int8_t min, 1970*4bdc9457SAndroid Build Coastguard Worker int8_t max); 1971*4bdc9457SAndroid Build Coastguard Worker 1972*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_u8_minmax_params_fn)( 1973*4bdc9457SAndroid Build Coastguard Worker union xnn_u8_minmax_params params[XNN_MIN_ELEMENTS(1)], 1974*4bdc9457SAndroid Build Coastguard Worker uint8_t min, 1975*4bdc9457SAndroid Build Coastguard Worker uint8_t max); 1976*4bdc9457SAndroid Build Coastguard Worker 1977*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_neg_params_fn)( 1978*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_neg_params params[XNN_MIN_ELEMENTS(1)]); 1979*4bdc9457SAndroid Build Coastguard Worker 1980*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_neg_params_fn)( 1981*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_neg_params params[XNN_MIN_ELEMENTS(1)]); 1982*4bdc9457SAndroid Build Coastguard Worker 1983*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_rnd_params_fn)( 1984*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_rnd_params params[XNN_MIN_ELEMENTS(1)]); 1985*4bdc9457SAndroid Build Coastguard Worker 1986*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_rnd_params_fn)( 1987*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_rnd_params params[XNN_MIN_ELEMENTS(1)]); 1988*4bdc9457SAndroid Build Coastguard Worker 1989*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_scaleminmax_params_fn)( 1990*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_scaleminmax_params params[XNN_MIN_ELEMENTS(1)], 1991*4bdc9457SAndroid Build Coastguard Worker uint16_t scale, 1992*4bdc9457SAndroid Build Coastguard Worker uint16_t min, 1993*4bdc9457SAndroid Build Coastguard Worker uint16_t max); 1994*4bdc9457SAndroid Build Coastguard Worker 1995*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_update_f16_scaleminmax_params_fn)( 1996*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_scaleminmax_params params[XNN_MIN_ELEMENTS(1)], 1997*4bdc9457SAndroid Build Coastguard Worker uint16_t scale); 1998*4bdc9457SAndroid Build Coastguard Worker 1999*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_scaleminmax_params_fn)( 2000*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_scaleminmax_params params[XNN_MIN_ELEMENTS(1)], 2001*4bdc9457SAndroid Build Coastguard Worker float scale, 2002*4bdc9457SAndroid Build Coastguard Worker float min, 2003*4bdc9457SAndroid Build Coastguard Worker float max); 2004*4bdc9457SAndroid Build Coastguard Worker 2005*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_update_f32_scaleminmax_params_fn)( 2006*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_scaleminmax_params params[XNN_MIN_ELEMENTS(1)], 2007*4bdc9457SAndroid Build Coastguard Worker float scale); 2008*4bdc9457SAndroid Build Coastguard Worker 2009*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_sigmoid_params_fn)( 2010*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_sigmoid_params params[XNN_MIN_ELEMENTS(1)]); 2011*4bdc9457SAndroid Build Coastguard Worker 2012*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_sigmoid_params_fn)( 2013*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_sigmoid_params params[XNN_MIN_ELEMENTS(1)]); 2014*4bdc9457SAndroid Build Coastguard Worker 2015*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_sqrt_params_fn)( 2016*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_sqrt_params params[XNN_MIN_ELEMENTS(1)]); 2017*4bdc9457SAndroid Build Coastguard Worker 2018*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f32_sqrt_params_fn)( 2019*4bdc9457SAndroid Build Coastguard Worker union xnn_f32_sqrt_params params[XNN_MIN_ELEMENTS(1)]); 2020*4bdc9457SAndroid Build Coastguard Worker 2021*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_init_qc8_scale_params_fn)( 2022*4bdc9457SAndroid Build Coastguard Worker size_t channels, 2023*4bdc9457SAndroid Build Coastguard Worker size_t channels_tile, 2024*4bdc9457SAndroid Build Coastguard Worker size_t stride, 2025*4bdc9457SAndroid Build Coastguard Worker const float scale[XNN_MIN_ELEMENTS(1)], 2026*4bdc9457SAndroid Build Coastguard Worker void* packed_w); 2027*4bdc9457SAndroid Build Coastguard Worker 2028*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_gavgpool_neonfp16arith_params_fn)( 2029*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_gavgpool_params params[XNN_MIN_ELEMENTS(1)], 2030*4bdc9457SAndroid Build Coastguard Worker uint16_t multiplier, 2031*4bdc9457SAndroid Build Coastguard Worker uint16_t output_min, 2032*4bdc9457SAndroid Build Coastguard Worker uint16_t output_max, 2033*4bdc9457SAndroid Build Coastguard Worker uint32_t width); 2034*4bdc9457SAndroid Build Coastguard Worker 2035*4bdc9457SAndroid Build Coastguard Worker typedef size_t (*xnn_init_f16_chw_params_fn)( 2036*4bdc9457SAndroid Build Coastguard Worker union xnn_f16_chw_params params[XNN_MIN_ELEMENTS(1)], 2037*4bdc9457SAndroid Build Coastguard Worker uint32_t width, 2038*4bdc9457SAndroid Build Coastguard Worker uint16_t output_min, 2039*4bdc9457SAndroid Build Coastguard Worker uint16_t output_max); 2040