xref: /aosp_15_r20/external/XNNPACK/src/xnnpack/pack.h (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1*4bdc9457SAndroid Build Coastguard Worker // Copyright (c) Facebook, Inc. and its affiliates.
2*4bdc9457SAndroid Build Coastguard Worker // All rights reserved.
3*4bdc9457SAndroid Build Coastguard Worker //
4*4bdc9457SAndroid Build Coastguard Worker // Copyright 2019 Google LLC
5*4bdc9457SAndroid Build Coastguard Worker //
6*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the
7*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree.
8*4bdc9457SAndroid Build Coastguard Worker 
9*4bdc9457SAndroid Build Coastguard Worker #pragma once
10*4bdc9457SAndroid Build Coastguard Worker 
11*4bdc9457SAndroid Build Coastguard Worker #include <stdint.h>
12*4bdc9457SAndroid Build Coastguard Worker #include <stddef.h>
13*4bdc9457SAndroid Build Coastguard Worker 
14*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h>
15*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/operator.h>
16*4bdc9457SAndroid Build Coastguard Worker 
17*4bdc9457SAndroid Build Coastguard Worker 
18*4bdc9457SAndroid Build Coastguard Worker #ifdef __cplusplus
19*4bdc9457SAndroid Build Coastguard Worker extern "C" {
20*4bdc9457SAndroid Build Coastguard Worker #endif
21*4bdc9457SAndroid Build Coastguard Worker 
22*4bdc9457SAndroid Build Coastguard Worker 
23*4bdc9457SAndroid Build Coastguard Worker struct xnn_qu8_packing_params {
24*4bdc9457SAndroid Build Coastguard Worker   uint8_t input_zero_point;
25*4bdc9457SAndroid Build Coastguard Worker   uint8_t kernel_zero_point;
26*4bdc9457SAndroid Build Coastguard Worker };
27*4bdc9457SAndroid Build Coastguard Worker 
28*4bdc9457SAndroid Build Coastguard Worker struct xnn_qs8_packing_params {
29*4bdc9457SAndroid Build Coastguard Worker   int8_t input_zero_point;
30*4bdc9457SAndroid Build Coastguard Worker };
31*4bdc9457SAndroid Build Coastguard Worker 
32*4bdc9457SAndroid Build Coastguard Worker 
33*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_pack_gemm_goi_w_function)(
34*4bdc9457SAndroid Build Coastguard Worker   size_t g,
35*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
36*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
37*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
38*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
39*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
40*4bdc9457SAndroid Build Coastguard Worker   const void* k,
41*4bdc9457SAndroid Build Coastguard Worker   const void* b,
42*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
43*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
44*4bdc9457SAndroid Build Coastguard Worker   const void* params);
45*4bdc9457SAndroid Build Coastguard Worker 
46*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_gemm_goi_w(
47*4bdc9457SAndroid Build Coastguard Worker   size_t g,
48*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
49*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
50*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
51*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
52*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
53*4bdc9457SAndroid Build Coastguard Worker   const float* k,
54*4bdc9457SAndroid Build Coastguard Worker   const float* b,
55*4bdc9457SAndroid Build Coastguard Worker   float* packed_w,
56*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
57*4bdc9457SAndroid Build Coastguard Worker   const void* params);
58*4bdc9457SAndroid Build Coastguard Worker 
59*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f16_gemm_goi_w(
60*4bdc9457SAndroid Build Coastguard Worker   size_t g,
61*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
62*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
63*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
64*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
65*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
66*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* k,
67*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* b,
68*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
69*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
70*4bdc9457SAndroid Build Coastguard Worker   const void* params);
71*4bdc9457SAndroid Build Coastguard Worker 
72*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_to_f16_gemm_goi_w(
73*4bdc9457SAndroid Build Coastguard Worker   size_t g,
74*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
75*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
76*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
77*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
78*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
79*4bdc9457SAndroid Build Coastguard Worker   const float* k,
80*4bdc9457SAndroid Build Coastguard Worker   const float* b,
81*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
82*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
83*4bdc9457SAndroid Build Coastguard Worker   const void* params);
84*4bdc9457SAndroid Build Coastguard Worker 
85*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qu8_gemm_goi_w(
86*4bdc9457SAndroid Build Coastguard Worker   size_t g,
87*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
88*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
89*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
90*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
91*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
92*4bdc9457SAndroid Build Coastguard Worker   const uint8_t* k,
93*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
94*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
95*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
96*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qu8_packing_params* params);
97*4bdc9457SAndroid Build Coastguard Worker 
98*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qs8_gemm_goi_w(
99*4bdc9457SAndroid Build Coastguard Worker   size_t g,
100*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
101*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
102*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
103*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
104*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
105*4bdc9457SAndroid Build Coastguard Worker   const int8_t* k,
106*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
107*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
108*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
109*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qs8_packing_params* params);
110*4bdc9457SAndroid Build Coastguard Worker 
111*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qs8_gemm_xw_goi_w(
112*4bdc9457SAndroid Build Coastguard Worker   size_t g,
113*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
114*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
115*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
116*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
117*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
118*4bdc9457SAndroid Build Coastguard Worker   const int8_t* k,
119*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
120*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
121*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
122*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qs8_packing_params* params);
123*4bdc9457SAndroid Build Coastguard Worker 
124*4bdc9457SAndroid Build Coastguard Worker 
125*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_pack_gemm_io_w_function)(
126*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
127*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
128*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
129*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
130*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
131*4bdc9457SAndroid Build Coastguard Worker   const void* k,
132*4bdc9457SAndroid Build Coastguard Worker   const void* b,
133*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
134*4bdc9457SAndroid Build Coastguard Worker   const void* params);
135*4bdc9457SAndroid Build Coastguard Worker 
136*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_gemm_io_w(
137*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
138*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
139*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
140*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
141*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
142*4bdc9457SAndroid Build Coastguard Worker   const float* k,
143*4bdc9457SAndroid Build Coastguard Worker   const float* b,
144*4bdc9457SAndroid Build Coastguard Worker   float* packed_w,
145*4bdc9457SAndroid Build Coastguard Worker   const void* params);
146*4bdc9457SAndroid Build Coastguard Worker 
147*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f16_gemm_io_w(
148*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
149*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
150*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
151*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
152*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
153*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* k,
154*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* b,
155*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
156*4bdc9457SAndroid Build Coastguard Worker   const void* params);
157*4bdc9457SAndroid Build Coastguard Worker 
158*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_to_f16_gemm_io_w(
159*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
160*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
161*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
162*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
163*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
164*4bdc9457SAndroid Build Coastguard Worker   const float* k,
165*4bdc9457SAndroid Build Coastguard Worker   const float* b,
166*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
167*4bdc9457SAndroid Build Coastguard Worker   const void* params);
168*4bdc9457SAndroid Build Coastguard Worker 
169*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qu8_gemm_io_w(
170*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
171*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
172*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
173*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
174*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
175*4bdc9457SAndroid Build Coastguard Worker   const uint8_t* k,
176*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
177*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
178*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qu8_packing_params* params);
179*4bdc9457SAndroid Build Coastguard Worker 
180*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qs8_gemm_io_w(
181*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
182*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
183*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
184*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
185*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
186*4bdc9457SAndroid Build Coastguard Worker   const int8_t* k,
187*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
188*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
189*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qs8_packing_params* params);
190*4bdc9457SAndroid Build Coastguard Worker 
191*4bdc9457SAndroid Build Coastguard Worker 
192*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_pack_conv_goki_w_function)(
193*4bdc9457SAndroid Build Coastguard Worker   size_t g,
194*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
195*4bdc9457SAndroid Build Coastguard Worker   size_t ks,
196*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
197*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
198*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
199*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
200*4bdc9457SAndroid Build Coastguard Worker   const void* k,
201*4bdc9457SAndroid Build Coastguard Worker   const void* b,
202*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
203*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
204*4bdc9457SAndroid Build Coastguard Worker   const void* params);
205*4bdc9457SAndroid Build Coastguard Worker 
206*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_conv_goki_w(
207*4bdc9457SAndroid Build Coastguard Worker   size_t g,
208*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
209*4bdc9457SAndroid Build Coastguard Worker   size_t ks,
210*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
211*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
212*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
213*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
214*4bdc9457SAndroid Build Coastguard Worker   const float* k,
215*4bdc9457SAndroid Build Coastguard Worker   const float* b,
216*4bdc9457SAndroid Build Coastguard Worker   float* packed_w,
217*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
218*4bdc9457SAndroid Build Coastguard Worker   const void* params);
219*4bdc9457SAndroid Build Coastguard Worker 
220*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f16_conv_goki_w(
221*4bdc9457SAndroid Build Coastguard Worker   size_t g,
222*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
223*4bdc9457SAndroid Build Coastguard Worker   size_t ks,
224*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
225*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
226*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
227*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
228*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* k,
229*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* b,
230*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
231*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
232*4bdc9457SAndroid Build Coastguard Worker   const void* params);
233*4bdc9457SAndroid Build Coastguard Worker 
234*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_to_f16_conv_goki_w(
235*4bdc9457SAndroid Build Coastguard Worker   size_t g,
236*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
237*4bdc9457SAndroid Build Coastguard Worker   size_t ks,
238*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
239*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
240*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
241*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
242*4bdc9457SAndroid Build Coastguard Worker   const float* k,
243*4bdc9457SAndroid Build Coastguard Worker   const float* b,
244*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
245*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
246*4bdc9457SAndroid Build Coastguard Worker   const void* params);
247*4bdc9457SAndroid Build Coastguard Worker 
248*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qu8_conv_goki_w(
249*4bdc9457SAndroid Build Coastguard Worker   size_t g,
250*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
251*4bdc9457SAndroid Build Coastguard Worker   size_t ks,
252*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
253*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
254*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
255*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
256*4bdc9457SAndroid Build Coastguard Worker   const uint8_t* k,
257*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
258*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
259*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
260*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qu8_packing_params* params);
261*4bdc9457SAndroid Build Coastguard Worker 
262*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qs8_conv_goki_w(
263*4bdc9457SAndroid Build Coastguard Worker   size_t g,
264*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
265*4bdc9457SAndroid Build Coastguard Worker   size_t ks,
266*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
267*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
268*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
269*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
270*4bdc9457SAndroid Build Coastguard Worker   const int8_t* k,
271*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
272*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
273*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
274*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qs8_packing_params* params);
275*4bdc9457SAndroid Build Coastguard Worker 
276*4bdc9457SAndroid Build Coastguard Worker 
277*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_pack_conv_kgo_w_function)(
278*4bdc9457SAndroid Build Coastguard Worker   size_t g,
279*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
280*4bdc9457SAndroid Build Coastguard Worker   size_t ks,
281*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
282*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
283*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
284*4bdc9457SAndroid Build Coastguard Worker   const void* k,
285*4bdc9457SAndroid Build Coastguard Worker   const void* b,
286*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
287*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
288*4bdc9457SAndroid Build Coastguard Worker   const void* params);
289*4bdc9457SAndroid Build Coastguard Worker 
290*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_conv_kgo_w(
291*4bdc9457SAndroid Build Coastguard Worker   size_t g,
292*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
293*4bdc9457SAndroid Build Coastguard Worker   size_t ks,
294*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
295*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
296*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
297*4bdc9457SAndroid Build Coastguard Worker   const float* k,
298*4bdc9457SAndroid Build Coastguard Worker   const float* b,
299*4bdc9457SAndroid Build Coastguard Worker   float* packed_w,
300*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
301*4bdc9457SAndroid Build Coastguard Worker   const void* params);
302*4bdc9457SAndroid Build Coastguard Worker 
303*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f16_conv_kgo_w(
304*4bdc9457SAndroid Build Coastguard Worker   size_t g,
305*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
306*4bdc9457SAndroid Build Coastguard Worker   size_t ks,
307*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
308*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
309*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
310*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* k,
311*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* b,
312*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
313*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
314*4bdc9457SAndroid Build Coastguard Worker   const void* params);
315*4bdc9457SAndroid Build Coastguard Worker 
316*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_to_f16_conv_kgo_w(
317*4bdc9457SAndroid Build Coastguard Worker   size_t g,
318*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
319*4bdc9457SAndroid Build Coastguard Worker   size_t ks,
320*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
321*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
322*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
323*4bdc9457SAndroid Build Coastguard Worker   const float* k,
324*4bdc9457SAndroid Build Coastguard Worker   const float* b,
325*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
326*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
327*4bdc9457SAndroid Build Coastguard Worker   const void* params);
328*4bdc9457SAndroid Build Coastguard Worker 
329*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qu8_conv_kgo_w(
330*4bdc9457SAndroid Build Coastguard Worker   size_t g,
331*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
332*4bdc9457SAndroid Build Coastguard Worker   size_t ks,
333*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
334*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
335*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
336*4bdc9457SAndroid Build Coastguard Worker   const uint8_t* k,
337*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
338*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
339*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
340*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qu8_packing_params* params);
341*4bdc9457SAndroid Build Coastguard Worker 
342*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qs8_conv_kgo_w(
343*4bdc9457SAndroid Build Coastguard Worker   size_t g,
344*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
345*4bdc9457SAndroid Build Coastguard Worker   size_t ks,
346*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
347*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
348*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
349*4bdc9457SAndroid Build Coastguard Worker   const int8_t* k,
350*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
351*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
352*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
353*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qs8_packing_params* params);
354*4bdc9457SAndroid Build Coastguard Worker 
355*4bdc9457SAndroid Build Coastguard Worker 
356*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_pack_deconv_goki_w_function)(
357*4bdc9457SAndroid Build Coastguard Worker   size_t g,
358*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
359*4bdc9457SAndroid Build Coastguard Worker   size_t kh,
360*4bdc9457SAndroid Build Coastguard Worker   size_t kw,
361*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
362*4bdc9457SAndroid Build Coastguard Worker   size_t sh,
363*4bdc9457SAndroid Build Coastguard Worker   size_t sw,
364*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
365*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
366*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
367*4bdc9457SAndroid Build Coastguard Worker   const void* k,
368*4bdc9457SAndroid Build Coastguard Worker   const void* b,
369*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
370*4bdc9457SAndroid Build Coastguard Worker   struct subconvolution_params* subconv_params,
371*4bdc9457SAndroid Build Coastguard Worker   const void* params);
372*4bdc9457SAndroid Build Coastguard Worker 
373*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_deconv_goki_w(
374*4bdc9457SAndroid Build Coastguard Worker   size_t g,
375*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
376*4bdc9457SAndroid Build Coastguard Worker   size_t kh,
377*4bdc9457SAndroid Build Coastguard Worker   size_t kw,
378*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
379*4bdc9457SAndroid Build Coastguard Worker   size_t sh,
380*4bdc9457SAndroid Build Coastguard Worker   size_t sw,
381*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
382*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
383*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
384*4bdc9457SAndroid Build Coastguard Worker   const float* k,
385*4bdc9457SAndroid Build Coastguard Worker   const float* b,
386*4bdc9457SAndroid Build Coastguard Worker   float* packed_w,
387*4bdc9457SAndroid Build Coastguard Worker   struct subconvolution_params* subconv_params,
388*4bdc9457SAndroid Build Coastguard Worker   const void* params);
389*4bdc9457SAndroid Build Coastguard Worker 
390*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f16_deconv_goki_w(
391*4bdc9457SAndroid Build Coastguard Worker   size_t g,
392*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
393*4bdc9457SAndroid Build Coastguard Worker   size_t kh,
394*4bdc9457SAndroid Build Coastguard Worker   size_t kw,
395*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
396*4bdc9457SAndroid Build Coastguard Worker   size_t sh,
397*4bdc9457SAndroid Build Coastguard Worker   size_t sw,
398*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
399*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
400*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
401*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* k,
402*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* b,
403*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
404*4bdc9457SAndroid Build Coastguard Worker   struct subconvolution_params* subconv_params,
405*4bdc9457SAndroid Build Coastguard Worker   const void* params);
406*4bdc9457SAndroid Build Coastguard Worker 
407*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_to_f16_deconv_goki_w(
408*4bdc9457SAndroid Build Coastguard Worker   size_t g,
409*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
410*4bdc9457SAndroid Build Coastguard Worker   size_t kh,
411*4bdc9457SAndroid Build Coastguard Worker   size_t kw,
412*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
413*4bdc9457SAndroid Build Coastguard Worker   size_t sh,
414*4bdc9457SAndroid Build Coastguard Worker   size_t sw,
415*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
416*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
417*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
418*4bdc9457SAndroid Build Coastguard Worker   const float* k,
419*4bdc9457SAndroid Build Coastguard Worker   const float* b,
420*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
421*4bdc9457SAndroid Build Coastguard Worker   struct subconvolution_params* subconv_params,
422*4bdc9457SAndroid Build Coastguard Worker   const void* params);
423*4bdc9457SAndroid Build Coastguard Worker 
424*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qs8_deconv_goki_w(
425*4bdc9457SAndroid Build Coastguard Worker   size_t g,
426*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
427*4bdc9457SAndroid Build Coastguard Worker   size_t kh,
428*4bdc9457SAndroid Build Coastguard Worker   size_t kw,
429*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
430*4bdc9457SAndroid Build Coastguard Worker   size_t sh,
431*4bdc9457SAndroid Build Coastguard Worker   size_t sw,
432*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
433*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
434*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
435*4bdc9457SAndroid Build Coastguard Worker   const int8_t* k,
436*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
437*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
438*4bdc9457SAndroid Build Coastguard Worker   struct subconvolution_params* subconv_params,
439*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qs8_packing_params* params);
440*4bdc9457SAndroid Build Coastguard Worker 
441*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qu8_deconv_goki_w(
442*4bdc9457SAndroid Build Coastguard Worker   size_t g,
443*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
444*4bdc9457SAndroid Build Coastguard Worker   size_t kh,
445*4bdc9457SAndroid Build Coastguard Worker   size_t kw,
446*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
447*4bdc9457SAndroid Build Coastguard Worker   size_t sh,
448*4bdc9457SAndroid Build Coastguard Worker   size_t sw,
449*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
450*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
451*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
452*4bdc9457SAndroid Build Coastguard Worker   const uint8_t* k,
453*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
454*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
455*4bdc9457SAndroid Build Coastguard Worker   struct subconvolution_params* subconv_params,
456*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qu8_packing_params* params);
457*4bdc9457SAndroid Build Coastguard Worker 
458*4bdc9457SAndroid Build Coastguard Worker 
459*4bdc9457SAndroid Build Coastguard Worker // Pack weights and bias such that:
460*4bdc9457SAndroid Build Coastguard Worker // 1. Each block contains `cr` bias and `cr * h * w` weights.
461*4bdc9457SAndroid Build Coastguard Worker // 2. Within each "cr block", `cr` biases are at the beginning of the block.
462*4bdc9457SAndroid Build Coastguard Worker // 3. Weights are written such that the channel values at the same x-y is are adjacent in memory.
463*4bdc9457SAndroid Build Coastguard Worker // 4. The weights are then written column major (WHC layout).
464*4bdc9457SAndroid Build Coastguard Worker // "ghw" in the function name is the layout of the weights, (g)roups, (h)eight, (w)idth.
465*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_pack_dwconv_ghw_w_function)(
466*4bdc9457SAndroid Build Coastguard Worker   size_t primary_tile,
467*4bdc9457SAndroid Build Coastguard Worker   size_t h,
468*4bdc9457SAndroid Build Coastguard Worker   size_t w,
469*4bdc9457SAndroid Build Coastguard Worker   size_t c,
470*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
471*4bdc9457SAndroid Build Coastguard Worker   const void* k,
472*4bdc9457SAndroid Build Coastguard Worker   const void* b,
473*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
474*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
475*4bdc9457SAndroid Build Coastguard Worker   const void* params);
476*4bdc9457SAndroid Build Coastguard Worker 
477*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_dwconv_ghw_w(
478*4bdc9457SAndroid Build Coastguard Worker   size_t primary_tile,
479*4bdc9457SAndroid Build Coastguard Worker   size_t h,
480*4bdc9457SAndroid Build Coastguard Worker   size_t w,
481*4bdc9457SAndroid Build Coastguard Worker   size_t c,
482*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
483*4bdc9457SAndroid Build Coastguard Worker   const float* k,
484*4bdc9457SAndroid Build Coastguard Worker   const float* b,
485*4bdc9457SAndroid Build Coastguard Worker   float* packed_w,
486*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
487*4bdc9457SAndroid Build Coastguard Worker   const void* params);
488*4bdc9457SAndroid Build Coastguard Worker 
489*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f16_dwconv_ghw_w(
490*4bdc9457SAndroid Build Coastguard Worker   size_t primary_tile,
491*4bdc9457SAndroid Build Coastguard Worker   size_t h,
492*4bdc9457SAndroid Build Coastguard Worker   size_t w,
493*4bdc9457SAndroid Build Coastguard Worker   size_t c,
494*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
495*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* k,
496*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* b,
497*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
498*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
499*4bdc9457SAndroid Build Coastguard Worker   const void* params);
500*4bdc9457SAndroid Build Coastguard Worker 
501*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_to_f16_dwconv_ghw_w(
502*4bdc9457SAndroid Build Coastguard Worker   size_t primary_tile,
503*4bdc9457SAndroid Build Coastguard Worker   size_t h,
504*4bdc9457SAndroid Build Coastguard Worker   size_t w,
505*4bdc9457SAndroid Build Coastguard Worker   size_t c,
506*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
507*4bdc9457SAndroid Build Coastguard Worker   const float* k,
508*4bdc9457SAndroid Build Coastguard Worker   const float* b,
509*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
510*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
511*4bdc9457SAndroid Build Coastguard Worker   const void* params);
512*4bdc9457SAndroid Build Coastguard Worker 
513*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qu8_dwconv_ghw_w(
514*4bdc9457SAndroid Build Coastguard Worker   size_t primary_tile,
515*4bdc9457SAndroid Build Coastguard Worker   size_t h,
516*4bdc9457SAndroid Build Coastguard Worker   size_t w,
517*4bdc9457SAndroid Build Coastguard Worker   size_t c,
518*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
519*4bdc9457SAndroid Build Coastguard Worker   const uint8_t* k,
520*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
521*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
522*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
523*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qu8_packing_params* params);
524*4bdc9457SAndroid Build Coastguard Worker 
525*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qs8_dwconv_ghw_w(
526*4bdc9457SAndroid Build Coastguard Worker   size_t primary_tile,
527*4bdc9457SAndroid Build Coastguard Worker   size_t h,
528*4bdc9457SAndroid Build Coastguard Worker   size_t w,
529*4bdc9457SAndroid Build Coastguard Worker   size_t c,
530*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
531*4bdc9457SAndroid Build Coastguard Worker   const int8_t* k,
532*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
533*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
534*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
535*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qs8_packing_params* params);
536*4bdc9457SAndroid Build Coastguard Worker 
537*4bdc9457SAndroid Build Coastguard Worker 
538*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_pack_dwconv_hwg_w_function)(
539*4bdc9457SAndroid Build Coastguard Worker   size_t primary_tile,
540*4bdc9457SAndroid Build Coastguard Worker   size_t h,
541*4bdc9457SAndroid Build Coastguard Worker   size_t w,
542*4bdc9457SAndroid Build Coastguard Worker   size_t c,
543*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
544*4bdc9457SAndroid Build Coastguard Worker   const void* k,
545*4bdc9457SAndroid Build Coastguard Worker   const void* b,
546*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
547*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
548*4bdc9457SAndroid Build Coastguard Worker   const void* params);
549*4bdc9457SAndroid Build Coastguard Worker 
550*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_dwconv_hwg_w(
551*4bdc9457SAndroid Build Coastguard Worker   size_t primary_tile,
552*4bdc9457SAndroid Build Coastguard Worker   size_t h,
553*4bdc9457SAndroid Build Coastguard Worker   size_t w,
554*4bdc9457SAndroid Build Coastguard Worker   size_t c,
555*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
556*4bdc9457SAndroid Build Coastguard Worker   const float* k,
557*4bdc9457SAndroid Build Coastguard Worker   const float* b,
558*4bdc9457SAndroid Build Coastguard Worker   float* packed_w,
559*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
560*4bdc9457SAndroid Build Coastguard Worker   const void* params);
561*4bdc9457SAndroid Build Coastguard Worker 
562*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f16_dwconv_hwg_w(
563*4bdc9457SAndroid Build Coastguard Worker   size_t primary_tile,
564*4bdc9457SAndroid Build Coastguard Worker   size_t h,
565*4bdc9457SAndroid Build Coastguard Worker   size_t w,
566*4bdc9457SAndroid Build Coastguard Worker   size_t c,
567*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
568*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* k,
569*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* b,
570*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
571*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
572*4bdc9457SAndroid Build Coastguard Worker   const void* params);
573*4bdc9457SAndroid Build Coastguard Worker 
574*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_to_f16_dwconv_hwg_w(
575*4bdc9457SAndroid Build Coastguard Worker   size_t primary_tile,
576*4bdc9457SAndroid Build Coastguard Worker   size_t h,
577*4bdc9457SAndroid Build Coastguard Worker   size_t w,
578*4bdc9457SAndroid Build Coastguard Worker   size_t c,
579*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
580*4bdc9457SAndroid Build Coastguard Worker   const float* k,
581*4bdc9457SAndroid Build Coastguard Worker   const float* b,
582*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
583*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
584*4bdc9457SAndroid Build Coastguard Worker   const void* params);
585*4bdc9457SAndroid Build Coastguard Worker 
586*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qu8_dwconv_hwg_w(
587*4bdc9457SAndroid Build Coastguard Worker   size_t primary_tile,
588*4bdc9457SAndroid Build Coastguard Worker   size_t h,
589*4bdc9457SAndroid Build Coastguard Worker   size_t w,
590*4bdc9457SAndroid Build Coastguard Worker   size_t c,
591*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
592*4bdc9457SAndroid Build Coastguard Worker   const uint8_t* k,
593*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
594*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
595*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
596*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qu8_packing_params* params);
597*4bdc9457SAndroid Build Coastguard Worker 
598*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_qs8_dwconv_hwg_w(
599*4bdc9457SAndroid Build Coastguard Worker   size_t primary_tile,
600*4bdc9457SAndroid Build Coastguard Worker   size_t h,
601*4bdc9457SAndroid Build Coastguard Worker   size_t w,
602*4bdc9457SAndroid Build Coastguard Worker   size_t c,
603*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
604*4bdc9457SAndroid Build Coastguard Worker   const int8_t* k,
605*4bdc9457SAndroid Build Coastguard Worker   const int32_t* b,
606*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
607*4bdc9457SAndroid Build Coastguard Worker   size_t extra_bytes,
608*4bdc9457SAndroid Build Coastguard Worker   const struct xnn_qs8_packing_params* params);
609*4bdc9457SAndroid Build Coastguard Worker 
610*4bdc9457SAndroid Build Coastguard Worker 
611*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_gemminc_goi_w(
612*4bdc9457SAndroid Build Coastguard Worker   size_t g,
613*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
614*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
615*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
616*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
617*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
618*4bdc9457SAndroid Build Coastguard Worker   const float* k,
619*4bdc9457SAndroid Build Coastguard Worker   float* packed_w,
620*4bdc9457SAndroid Build Coastguard Worker   const void* params);
621*4bdc9457SAndroid Build Coastguard Worker 
622*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f16_gemminc_goi_w(
623*4bdc9457SAndroid Build Coastguard Worker   size_t g,
624*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
625*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
626*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
627*4bdc9457SAndroid Build Coastguard Worker   size_t kr,
628*4bdc9457SAndroid Build Coastguard Worker   size_t sr,
629*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* k,
630*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
631*4bdc9457SAndroid Build Coastguard Worker   const void* params);
632*4bdc9457SAndroid Build Coastguard Worker 
633*4bdc9457SAndroid Build Coastguard Worker 
634*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_dconv_oki_w(
635*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
636*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
637*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
638*4bdc9457SAndroid Build Coastguard Worker   size_t kh,
639*4bdc9457SAndroid Build Coastguard Worker   size_t kw,
640*4bdc9457SAndroid Build Coastguard Worker   const float* k,
641*4bdc9457SAndroid Build Coastguard Worker   const float* b,
642*4bdc9457SAndroid Build Coastguard Worker   float* packed_w,
643*4bdc9457SAndroid Build Coastguard Worker   const void* params);
644*4bdc9457SAndroid Build Coastguard Worker 
645*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f16_dconv_oki_w(
646*4bdc9457SAndroid Build Coastguard Worker   size_t nc,
647*4bdc9457SAndroid Build Coastguard Worker   size_t kc,
648*4bdc9457SAndroid Build Coastguard Worker   size_t nr,
649*4bdc9457SAndroid Build Coastguard Worker   size_t kh,
650*4bdc9457SAndroid Build Coastguard Worker   size_t kw,
651*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* k,
652*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* b,
653*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
654*4bdc9457SAndroid Build Coastguard Worker   const void* params);
655*4bdc9457SAndroid Build Coastguard Worker 
656*4bdc9457SAndroid Build Coastguard Worker 
657*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_chw_dwconv_ghw_w(
658*4bdc9457SAndroid Build Coastguard Worker   size_t kernel_size,
659*4bdc9457SAndroid Build Coastguard Worker   size_t groups,
660*4bdc9457SAndroid Build Coastguard Worker   const float* kernel,
661*4bdc9457SAndroid Build Coastguard Worker   const float* bias,
662*4bdc9457SAndroid Build Coastguard Worker   float* packed_weights,
663*4bdc9457SAndroid Build Coastguard Worker   const void* params);
664*4bdc9457SAndroid Build Coastguard Worker 
665*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f16_chw_dwconv_ghw_w(
666*4bdc9457SAndroid Build Coastguard Worker   size_t kernel_size,
667*4bdc9457SAndroid Build Coastguard Worker   size_t groups,
668*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* kernel,
669*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* bias,
670*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_weights,
671*4bdc9457SAndroid Build Coastguard Worker   const void* params);
672*4bdc9457SAndroid Build Coastguard Worker 
673*4bdc9457SAndroid Build Coastguard Worker 
674*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_chw_dwconv_hwg_w(
675*4bdc9457SAndroid Build Coastguard Worker   size_t kernel_size,
676*4bdc9457SAndroid Build Coastguard Worker   size_t groups,
677*4bdc9457SAndroid Build Coastguard Worker   const float* kernel,
678*4bdc9457SAndroid Build Coastguard Worker   const float* bias,
679*4bdc9457SAndroid Build Coastguard Worker   float* packed_weights,
680*4bdc9457SAndroid Build Coastguard Worker   const void* params);
681*4bdc9457SAndroid Build Coastguard Worker 
682*4bdc9457SAndroid Build Coastguard Worker 
683*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_pack_vmulcaddc_w_function)(
684*4bdc9457SAndroid Build Coastguard Worker   size_t c,
685*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
686*4bdc9457SAndroid Build Coastguard Worker   const void* s,
687*4bdc9457SAndroid Build Coastguard Worker   const void* b,
688*4bdc9457SAndroid Build Coastguard Worker   void* packed_w,
689*4bdc9457SAndroid Build Coastguard Worker   const void* params);
690*4bdc9457SAndroid Build Coastguard Worker 
691*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_vmulcaddc_w(
692*4bdc9457SAndroid Build Coastguard Worker   size_t c,
693*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
694*4bdc9457SAndroid Build Coastguard Worker   const float* s,
695*4bdc9457SAndroid Build Coastguard Worker   const float* b,
696*4bdc9457SAndroid Build Coastguard Worker   float* packed_w,
697*4bdc9457SAndroid Build Coastguard Worker   const void* params);
698*4bdc9457SAndroid Build Coastguard Worker 
699*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f16_vmulcaddc_w(
700*4bdc9457SAndroid Build Coastguard Worker   size_t c,
701*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
702*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* s,
703*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* b,
704*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
705*4bdc9457SAndroid Build Coastguard Worker   const void* params);
706*4bdc9457SAndroid Build Coastguard Worker 
707*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_to_f16_vmulcaddc_w(
708*4bdc9457SAndroid Build Coastguard Worker   size_t c,
709*4bdc9457SAndroid Build Coastguard Worker   size_t cr,
710*4bdc9457SAndroid Build Coastguard Worker   const float* s,
711*4bdc9457SAndroid Build Coastguard Worker   const float* b,
712*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w,
713*4bdc9457SAndroid Build Coastguard Worker   const void* params);
714*4bdc9457SAndroid Build Coastguard Worker 
715*4bdc9457SAndroid Build Coastguard Worker 
716*4bdc9457SAndroid Build Coastguard Worker typedef void (*xnn_pack_prelu_w_function)(
717*4bdc9457SAndroid Build Coastguard Worker   size_t c,
718*4bdc9457SAndroid Build Coastguard Worker   const void* s,
719*4bdc9457SAndroid Build Coastguard Worker   void* packed_w);
720*4bdc9457SAndroid Build Coastguard Worker 
721*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_prelu_w(
722*4bdc9457SAndroid Build Coastguard Worker   size_t c,
723*4bdc9457SAndroid Build Coastguard Worker   const float* s,
724*4bdc9457SAndroid Build Coastguard Worker   float* packed_w);
725*4bdc9457SAndroid Build Coastguard Worker 
726*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f16_prelu_w(
727*4bdc9457SAndroid Build Coastguard Worker   size_t c,
728*4bdc9457SAndroid Build Coastguard Worker   const uint16_t* s,
729*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w);
730*4bdc9457SAndroid Build Coastguard Worker 
731*4bdc9457SAndroid Build Coastguard Worker XNN_INTERNAL void xnn_pack_f32_to_f16_prelu_w(
732*4bdc9457SAndroid Build Coastguard Worker   size_t c,
733*4bdc9457SAndroid Build Coastguard Worker   const float* s,
734*4bdc9457SAndroid Build Coastguard Worker   uint16_t* packed_w);
735*4bdc9457SAndroid Build Coastguard Worker 
736*4bdc9457SAndroid Build Coastguard Worker 
737*4bdc9457SAndroid Build Coastguard Worker #ifdef __cplusplus
738*4bdc9457SAndroid Build Coastguard Worker }  // extern "C"
739*4bdc9457SAndroid Build Coastguard Worker #endif
740