/src/xnnpack/src/qs8-packw/gen/qs8-packw-x4c8-gemm-goi-scalar.c
Line | Count | Source |
1 | | // clang-format off |
2 | | // Auto-generated file. Do not edit! |
3 | | // Template: src/x8-packw/kr-scalar.c.in |
4 | | // Generator: tools/xngen |
5 | | // |
6 | | // Copyright 2023 Google LLC |
7 | | // |
8 | | // This source code is licensed under the BSD-style license found in the |
9 | | // LICENSE file in the root directory of this source tree. |
10 | | |
11 | | #include <assert.h> |
12 | | #include <stddef.h> |
13 | | #include <stdint.h> |
14 | | |
15 | | #include "src/xnnpack/common.h" |
16 | | #include "src/xnnpack/microparams.h" |
17 | | #include "src/xnnpack/packw.h" |
18 | | |
19 | | void xnn_qs8_packw_gemm_goi_ukernel_x4c8__scalar( |
20 | | size_t g, |
21 | | size_t nc, |
22 | | size_t kc, |
23 | | size_t nr, |
24 | | size_t kr, |
25 | | size_t sr, |
26 | | size_t n_stride, |
27 | | const int8_t* weights, |
28 | | const int32_t* bias, |
29 | | const void* scale, |
30 | | int8_t* packed_weights, |
31 | | size_t extra_bytes, |
32 | | const void* params) |
33 | 0 | { |
34 | 0 | assert(g != 0); |
35 | 0 | assert(nc != 0); |
36 | 0 | assert(kc != 0); |
37 | 0 | assert(nr == 4); |
38 | 0 | assert(kr == 8); |
39 | 0 | assert(sr == 1); |
40 | 0 | assert(weights != NULL); |
41 | 0 | assert(packed_weights != NULL); |
42 | | |
43 | 0 | int8_t* out = (int8_t*) packed_weights; |
44 | 0 | const int32_t* b = (const int32_t*) bias; |
45 | 0 | const uint32_t izp = (uint32_t) (params ? (((const struct xnn_qs8_packw_params*) params)->input_zero_point + 0): 0); |
46 | |
|
47 | 0 | do { |
48 | | // NC main loop multiple of 4 |
49 | 0 | const int8_t* w0 = (const int8_t*) weights; |
50 | 0 | size_t n = nc; |
51 | 0 | for (;n >= 4; n -= 4) { |
52 | 0 | int32_t* packed_b = (int32_t*) out; |
53 | 0 | if XNN_LIKELY(b != NULL) { |
54 | 0 | ((int32_t*) out)[0] = b[0]; |
55 | 0 | ((int32_t*) out)[1] = b[1]; |
56 | 0 | ((int32_t*) out)[2] = b[2]; |
57 | 0 | ((int32_t*) out)[3] = b[3]; |
58 | 0 | b += 4; |
59 | 0 | } else { |
60 | 0 | ((int32_t*) out)[0] = 0; |
61 | 0 | ((int32_t*) out)[1] = 0; |
62 | 0 | ((int32_t*) out)[2] = 0; |
63 | 0 | ((int32_t*) out)[3] = 0; |
64 | 0 | } |
65 | 0 | out += 4 * sizeof(int32_t); |
66 | |
|
67 | 0 | const int8_t* w1 = w0 + n_stride; |
68 | 0 | const int8_t* w2 = w1 + n_stride; |
69 | 0 | const int8_t* w3 = w2 + n_stride; |
70 | 0 | uint32_t ksum0 = 0; |
71 | 0 | uint32_t ksum1 = 0; |
72 | 0 | uint32_t ksum2 = 0; |
73 | 0 | uint32_t ksum3 = 0; |
74 | | |
75 | | // KC main loop multiple of 4x8 |
76 | 0 | size_t k = kc; |
77 | 0 | for (; k >= 8; k -= 8) { |
78 | 0 | const int8_t v0x0 = w0[0]; |
79 | 0 | const int8_t v0x1 = w0[1]; |
80 | 0 | const int8_t v0x2 = w0[2]; |
81 | 0 | const int8_t v0x3 = w0[3]; |
82 | 0 | const int8_t v0x4 = w0[4]; |
83 | 0 | const int8_t v0x5 = w0[5]; |
84 | 0 | const int8_t v0x6 = w0[6]; |
85 | 0 | const int8_t v0x7 = w0[7]; |
86 | 0 | ksum0 += (uint32_t) v0x0; |
87 | 0 | ksum0 += (uint32_t) v0x1; |
88 | 0 | ksum0 += (uint32_t) v0x2; |
89 | 0 | ksum0 += (uint32_t) v0x3; |
90 | 0 | ksum0 += (uint32_t) v0x4; |
91 | 0 | ksum0 += (uint32_t) v0x5; |
92 | 0 | ksum0 += (uint32_t) v0x6; |
93 | 0 | ksum0 += (uint32_t) v0x7; |
94 | 0 | out[0] = v0x0; |
95 | 0 | out[1] = v0x1; |
96 | 0 | out[2] = v0x2; |
97 | 0 | out[3] = v0x3; |
98 | 0 | out[4] = v0x4; |
99 | 0 | out[5] = v0x5; |
100 | 0 | out[6] = v0x6; |
101 | 0 | out[7] = v0x7; |
102 | 0 | w0 += 8; |
103 | 0 | const int8_t v1x0 = w1[0]; |
104 | 0 | const int8_t v1x1 = w1[1]; |
105 | 0 | const int8_t v1x2 = w1[2]; |
106 | 0 | const int8_t v1x3 = w1[3]; |
107 | 0 | const int8_t v1x4 = w1[4]; |
108 | 0 | const int8_t v1x5 = w1[5]; |
109 | 0 | const int8_t v1x6 = w1[6]; |
110 | 0 | const int8_t v1x7 = w1[7]; |
111 | 0 | ksum1 += (uint32_t) v1x0; |
112 | 0 | ksum1 += (uint32_t) v1x1; |
113 | 0 | ksum1 += (uint32_t) v1x2; |
114 | 0 | ksum1 += (uint32_t) v1x3; |
115 | 0 | ksum1 += (uint32_t) v1x4; |
116 | 0 | ksum1 += (uint32_t) v1x5; |
117 | 0 | ksum1 += (uint32_t) v1x6; |
118 | 0 | ksum1 += (uint32_t) v1x7; |
119 | 0 | out[8] = v1x0; |
120 | 0 | out[9] = v1x1; |
121 | 0 | out[10] = v1x2; |
122 | 0 | out[11] = v1x3; |
123 | 0 | out[12] = v1x4; |
124 | 0 | out[13] = v1x5; |
125 | 0 | out[14] = v1x6; |
126 | 0 | out[15] = v1x7; |
127 | 0 | w1 += 8; |
128 | 0 | const int8_t v2x0 = w2[0]; |
129 | 0 | const int8_t v2x1 = w2[1]; |
130 | 0 | const int8_t v2x2 = w2[2]; |
131 | 0 | const int8_t v2x3 = w2[3]; |
132 | 0 | const int8_t v2x4 = w2[4]; |
133 | 0 | const int8_t v2x5 = w2[5]; |
134 | 0 | const int8_t v2x6 = w2[6]; |
135 | 0 | const int8_t v2x7 = w2[7]; |
136 | 0 | ksum2 += (uint32_t) v2x0; |
137 | 0 | ksum2 += (uint32_t) v2x1; |
138 | 0 | ksum2 += (uint32_t) v2x2; |
139 | 0 | ksum2 += (uint32_t) v2x3; |
140 | 0 | ksum2 += (uint32_t) v2x4; |
141 | 0 | ksum2 += (uint32_t) v2x5; |
142 | 0 | ksum2 += (uint32_t) v2x6; |
143 | 0 | ksum2 += (uint32_t) v2x7; |
144 | 0 | out[16] = v2x0; |
145 | 0 | out[17] = v2x1; |
146 | 0 | out[18] = v2x2; |
147 | 0 | out[19] = v2x3; |
148 | 0 | out[20] = v2x4; |
149 | 0 | out[21] = v2x5; |
150 | 0 | out[22] = v2x6; |
151 | 0 | out[23] = v2x7; |
152 | 0 | w2 += 8; |
153 | 0 | const int8_t v3x0 = w3[0]; |
154 | 0 | const int8_t v3x1 = w3[1]; |
155 | 0 | const int8_t v3x2 = w3[2]; |
156 | 0 | const int8_t v3x3 = w3[3]; |
157 | 0 | const int8_t v3x4 = w3[4]; |
158 | 0 | const int8_t v3x5 = w3[5]; |
159 | 0 | const int8_t v3x6 = w3[6]; |
160 | 0 | const int8_t v3x7 = w3[7]; |
161 | 0 | ksum3 += (uint32_t) v3x0; |
162 | 0 | ksum3 += (uint32_t) v3x1; |
163 | 0 | ksum3 += (uint32_t) v3x2; |
164 | 0 | ksum3 += (uint32_t) v3x3; |
165 | 0 | ksum3 += (uint32_t) v3x4; |
166 | 0 | ksum3 += (uint32_t) v3x5; |
167 | 0 | ksum3 += (uint32_t) v3x6; |
168 | 0 | ksum3 += (uint32_t) v3x7; |
169 | 0 | out[24] = v3x0; |
170 | 0 | out[25] = v3x1; |
171 | 0 | out[26] = v3x2; |
172 | 0 | out[27] = v3x3; |
173 | 0 | out[28] = v3x4; |
174 | 0 | out[29] = v3x5; |
175 | 0 | out[30] = v3x6; |
176 | 0 | out[31] = v3x7; |
177 | 0 | w3 += 8; |
178 | 0 | out += 32; |
179 | 0 | } |
180 | | |
181 | | // KC remainder of 1..7 |
182 | 0 | if (k != 0) { |
183 | 0 | assert(k >= 1 && k <= 7); |
184 | 0 | const int8_t v0x0 = w0[0]; |
185 | 0 | const int8_t v0x1 = 1 < k ? w0[1] : 0; |
186 | 0 | const int8_t v0x2 = 2 < k ? w0[2] : 0; |
187 | 0 | const int8_t v0x3 = 3 < k ? w0[3] : 0; |
188 | 0 | const int8_t v0x4 = 4 < k ? w0[4] : 0; |
189 | 0 | const int8_t v0x5 = 5 < k ? w0[5] : 0; |
190 | 0 | const int8_t v0x6 = 6 < k ? w0[6] : 0; |
191 | 0 | const int8_t v0x7 = 7 < k ? w0[7] : 0; |
192 | 0 | ksum0 += (uint32_t) v0x0; |
193 | 0 | ksum0 += (uint32_t) v0x1; |
194 | 0 | ksum0 += (uint32_t) v0x2; |
195 | 0 | ksum0 += (uint32_t) v0x3; |
196 | 0 | ksum0 += (uint32_t) v0x4; |
197 | 0 | ksum0 += (uint32_t) v0x5; |
198 | 0 | ksum0 += (uint32_t) v0x6; |
199 | 0 | ksum0 += (uint32_t) v0x7; |
200 | 0 | out[0] = v0x0; |
201 | 0 | out[1] = v0x1; |
202 | 0 | out[2] = v0x2; |
203 | 0 | out[3] = v0x3; |
204 | 0 | out[4] = v0x4; |
205 | 0 | out[5] = v0x5; |
206 | 0 | out[6] = v0x6; |
207 | 0 | out[7] = v0x7; |
208 | 0 | w0 += k; |
209 | 0 | const int8_t v1x0 = w1[0]; |
210 | 0 | const int8_t v1x1 = 1 < k ? w1[1] : 0; |
211 | 0 | const int8_t v1x2 = 2 < k ? w1[2] : 0; |
212 | 0 | const int8_t v1x3 = 3 < k ? w1[3] : 0; |
213 | 0 | const int8_t v1x4 = 4 < k ? w1[4] : 0; |
214 | 0 | const int8_t v1x5 = 5 < k ? w1[5] : 0; |
215 | 0 | const int8_t v1x6 = 6 < k ? w1[6] : 0; |
216 | 0 | const int8_t v1x7 = 7 < k ? w1[7] : 0; |
217 | 0 | ksum1 += (uint32_t) v1x0; |
218 | 0 | ksum1 += (uint32_t) v1x1; |
219 | 0 | ksum1 += (uint32_t) v1x2; |
220 | 0 | ksum1 += (uint32_t) v1x3; |
221 | 0 | ksum1 += (uint32_t) v1x4; |
222 | 0 | ksum1 += (uint32_t) v1x5; |
223 | 0 | ksum1 += (uint32_t) v1x6; |
224 | 0 | ksum1 += (uint32_t) v1x7; |
225 | 0 | out[8] = v1x0; |
226 | 0 | out[9] = v1x1; |
227 | 0 | out[10] = v1x2; |
228 | 0 | out[11] = v1x3; |
229 | 0 | out[12] = v1x4; |
230 | 0 | out[13] = v1x5; |
231 | 0 | out[14] = v1x6; |
232 | 0 | out[15] = v1x7; |
233 | 0 | w1 += k; |
234 | 0 | const int8_t v2x0 = w2[0]; |
235 | 0 | const int8_t v2x1 = 1 < k ? w2[1] : 0; |
236 | 0 | const int8_t v2x2 = 2 < k ? w2[2] : 0; |
237 | 0 | const int8_t v2x3 = 3 < k ? w2[3] : 0; |
238 | 0 | const int8_t v2x4 = 4 < k ? w2[4] : 0; |
239 | 0 | const int8_t v2x5 = 5 < k ? w2[5] : 0; |
240 | 0 | const int8_t v2x6 = 6 < k ? w2[6] : 0; |
241 | 0 | const int8_t v2x7 = 7 < k ? w2[7] : 0; |
242 | 0 | ksum2 += (uint32_t) v2x0; |
243 | 0 | ksum2 += (uint32_t) v2x1; |
244 | 0 | ksum2 += (uint32_t) v2x2; |
245 | 0 | ksum2 += (uint32_t) v2x3; |
246 | 0 | ksum2 += (uint32_t) v2x4; |
247 | 0 | ksum2 += (uint32_t) v2x5; |
248 | 0 | ksum2 += (uint32_t) v2x6; |
249 | 0 | ksum2 += (uint32_t) v2x7; |
250 | 0 | out[16] = v2x0; |
251 | 0 | out[17] = v2x1; |
252 | 0 | out[18] = v2x2; |
253 | 0 | out[19] = v2x3; |
254 | 0 | out[20] = v2x4; |
255 | 0 | out[21] = v2x5; |
256 | 0 | out[22] = v2x6; |
257 | 0 | out[23] = v2x7; |
258 | 0 | w2 += k; |
259 | 0 | const int8_t v3x0 = w3[0]; |
260 | 0 | const int8_t v3x1 = 1 < k ? w3[1] : 0; |
261 | 0 | const int8_t v3x2 = 2 < k ? w3[2] : 0; |
262 | 0 | const int8_t v3x3 = 3 < k ? w3[3] : 0; |
263 | 0 | const int8_t v3x4 = 4 < k ? w3[4] : 0; |
264 | 0 | const int8_t v3x5 = 5 < k ? w3[5] : 0; |
265 | 0 | const int8_t v3x6 = 6 < k ? w3[6] : 0; |
266 | 0 | const int8_t v3x7 = 7 < k ? w3[7] : 0; |
267 | 0 | ksum3 += (uint32_t) v3x0; |
268 | 0 | ksum3 += (uint32_t) v3x1; |
269 | 0 | ksum3 += (uint32_t) v3x2; |
270 | 0 | ksum3 += (uint32_t) v3x3; |
271 | 0 | ksum3 += (uint32_t) v3x4; |
272 | 0 | ksum3 += (uint32_t) v3x5; |
273 | 0 | ksum3 += (uint32_t) v3x6; |
274 | 0 | ksum3 += (uint32_t) v3x7; |
275 | 0 | out[24] = v3x0; |
276 | 0 | out[25] = v3x1; |
277 | 0 | out[26] = v3x2; |
278 | 0 | out[27] = v3x3; |
279 | 0 | out[28] = v3x4; |
280 | 0 | out[29] = v3x5; |
281 | 0 | out[30] = v3x6; |
282 | 0 | out[31] = v3x7; |
283 | 0 | w3 += k; |
284 | 0 | out += 32; |
285 | 0 | } |
286 | | |
287 | 0 | packed_b[0] -= ksum0 * izp; |
288 | 0 | packed_b[1] -= ksum1 * izp; |
289 | 0 | packed_b[2] -= ksum2 * izp; |
290 | 0 | packed_b[3] -= ksum3 * izp; |
291 | 0 | out = (int8_t*) ((uintptr_t) out + extra_bytes); |
292 | 0 | w0 = w3 + n_stride - kc; |
293 | 0 | } |
294 | | |
295 | | // NC remainder (1..3) |
296 | 0 | if XNN_UNLIKELY(n != 0) { |
297 | 0 | int32_t* packed_b = (int32_t*) out; |
298 | 0 | if XNN_LIKELY(b != NULL) { |
299 | 0 | size_t nb = n; |
300 | 0 | do { |
301 | 0 | *((int32_t*) out) = *b++; |
302 | 0 | out += sizeof(int32_t); |
303 | 0 | } while (--nb != 0); |
304 | 0 | } else { |
305 | 0 | size_t nb = n; |
306 | 0 | do { |
307 | 0 | *((int32_t*) out) = 0; |
308 | 0 | out += sizeof(int32_t); |
309 | 0 | } while (--nb != 0); |
310 | 0 | } |
311 | 0 | out += (4 - n) * sizeof(int32_t); |
312 | | |
313 | | // NR remainder has less than 4 rows so last row is not loaded |
314 | 0 | const int8_t* w1 = w0 + n_stride; |
315 | 0 | if XNN_UNPREDICTABLE(n < 2) { |
316 | 0 | w1 = w0; |
317 | 0 | } |
318 | 0 | const int8_t* w2 = w1 + n_stride; |
319 | 0 | if XNN_UNPREDICTABLE(n <= 2) { |
320 | 0 | w2 = w1; |
321 | 0 | } |
322 | 0 | uint32_t ksum0 = 0; |
323 | 0 | uint32_t ksum1 = 0; |
324 | 0 | uint32_t ksum2 = 0; |
325 | | |
326 | | // KC main loop multiple of 4x8 |
327 | 0 | size_t k = kc; |
328 | 0 | for (; k >= 8; k -= 8) { |
329 | 0 | const int8_t v0x0 = w0[0]; |
330 | 0 | const int8_t v0x1 = w0[1]; |
331 | 0 | const int8_t v0x2 = w0[2]; |
332 | 0 | const int8_t v0x3 = w0[3]; |
333 | 0 | const int8_t v0x4 = w0[4]; |
334 | 0 | const int8_t v0x5 = w0[5]; |
335 | 0 | const int8_t v0x6 = w0[6]; |
336 | 0 | const int8_t v0x7 = w0[7]; |
337 | 0 | ksum0 += (uint32_t) v0x0; |
338 | 0 | ksum0 += (uint32_t) v0x1; |
339 | 0 | ksum0 += (uint32_t) v0x2; |
340 | 0 | ksum0 += (uint32_t) v0x3; |
341 | 0 | ksum0 += (uint32_t) v0x4; |
342 | 0 | ksum0 += (uint32_t) v0x5; |
343 | 0 | ksum0 += (uint32_t) v0x6; |
344 | 0 | ksum0 += (uint32_t) v0x7; |
345 | 0 | out[0] = v0x0; |
346 | 0 | out[1] = v0x1; |
347 | 0 | out[2] = v0x2; |
348 | 0 | out[3] = v0x3; |
349 | 0 | out[4] = v0x4; |
350 | 0 | out[5] = v0x5; |
351 | 0 | out[6] = v0x6; |
352 | 0 | out[7] = v0x7; |
353 | 0 | w0 += 8; |
354 | 0 | const int8_t v1x0 = w1[0]; |
355 | 0 | const int8_t v1x1 = w1[1]; |
356 | 0 | const int8_t v1x2 = w1[2]; |
357 | 0 | const int8_t v1x3 = w1[3]; |
358 | 0 | const int8_t v1x4 = w1[4]; |
359 | 0 | const int8_t v1x5 = w1[5]; |
360 | 0 | const int8_t v1x6 = w1[6]; |
361 | 0 | const int8_t v1x7 = w1[7]; |
362 | 0 | ksum1 += (uint32_t) v1x0; |
363 | 0 | ksum1 += (uint32_t) v1x1; |
364 | 0 | ksum1 += (uint32_t) v1x2; |
365 | 0 | ksum1 += (uint32_t) v1x3; |
366 | 0 | ksum1 += (uint32_t) v1x4; |
367 | 0 | ksum1 += (uint32_t) v1x5; |
368 | 0 | ksum1 += (uint32_t) v1x6; |
369 | 0 | ksum1 += (uint32_t) v1x7; |
370 | 0 | out[8] = v1x0; |
371 | 0 | out[9] = v1x1; |
372 | 0 | out[10] = v1x2; |
373 | 0 | out[11] = v1x3; |
374 | 0 | out[12] = v1x4; |
375 | 0 | out[13] = v1x5; |
376 | 0 | out[14] = v1x6; |
377 | 0 | out[15] = v1x7; |
378 | 0 | w1 += 8; |
379 | 0 | const int8_t v2x0 = w2[0]; |
380 | 0 | const int8_t v2x1 = w2[1]; |
381 | 0 | const int8_t v2x2 = w2[2]; |
382 | 0 | const int8_t v2x3 = w2[3]; |
383 | 0 | const int8_t v2x4 = w2[4]; |
384 | 0 | const int8_t v2x5 = w2[5]; |
385 | 0 | const int8_t v2x6 = w2[6]; |
386 | 0 | const int8_t v2x7 = w2[7]; |
387 | 0 | ksum2 += (uint32_t) v2x0; |
388 | 0 | ksum2 += (uint32_t) v2x1; |
389 | 0 | ksum2 += (uint32_t) v2x2; |
390 | 0 | ksum2 += (uint32_t) v2x3; |
391 | 0 | ksum2 += (uint32_t) v2x4; |
392 | 0 | ksum2 += (uint32_t) v2x5; |
393 | 0 | ksum2 += (uint32_t) v2x6; |
394 | 0 | ksum2 += (uint32_t) v2x7; |
395 | 0 | out[16] = v2x0; |
396 | 0 | out[17] = v2x1; |
397 | 0 | out[18] = v2x2; |
398 | 0 | out[19] = v2x3; |
399 | 0 | out[20] = v2x4; |
400 | 0 | out[21] = v2x5; |
401 | 0 | out[22] = v2x6; |
402 | 0 | out[23] = v2x7; |
403 | 0 | w2 += 8; |
404 | 0 | out += 32; |
405 | 0 | } |
406 | | |
407 | | // KC remainder of 1..7 |
408 | 0 | if (k != 0) { |
409 | 0 | assert(k >= 1 && k <= 7); |
410 | 0 | const int8_t v0x0 = w0[0]; |
411 | 0 | const int8_t v0x1 = 1 < k ? w0[1] : 0; |
412 | 0 | const int8_t v0x2 = 2 < k ? w0[2] : 0; |
413 | 0 | const int8_t v0x3 = 3 < k ? w0[3] : 0; |
414 | 0 | const int8_t v0x4 = 4 < k ? w0[4] : 0; |
415 | 0 | const int8_t v0x5 = 5 < k ? w0[5] : 0; |
416 | 0 | const int8_t v0x6 = 6 < k ? w0[6] : 0; |
417 | 0 | const int8_t v0x7 = 7 < k ? w0[7] : 0; |
418 | 0 | ksum0 += (uint32_t) v0x0; |
419 | 0 | ksum0 += (uint32_t) v0x1; |
420 | 0 | ksum0 += (uint32_t) v0x2; |
421 | 0 | ksum0 += (uint32_t) v0x3; |
422 | 0 | ksum0 += (uint32_t) v0x4; |
423 | 0 | ksum0 += (uint32_t) v0x5; |
424 | 0 | ksum0 += (uint32_t) v0x6; |
425 | 0 | ksum0 += (uint32_t) v0x7; |
426 | 0 | out[0] = v0x0; |
427 | 0 | out[1] = v0x1; |
428 | 0 | out[2] = v0x2; |
429 | 0 | out[3] = v0x3; |
430 | 0 | out[4] = v0x4; |
431 | 0 | out[5] = v0x5; |
432 | 0 | out[6] = v0x6; |
433 | 0 | out[7] = v0x7; |
434 | 0 | w0 += k; |
435 | 0 | const int8_t v1x0 = w1[0]; |
436 | 0 | const int8_t v1x1 = 1 < k ? w1[1] : 0; |
437 | 0 | const int8_t v1x2 = 2 < k ? w1[2] : 0; |
438 | 0 | const int8_t v1x3 = 3 < k ? w1[3] : 0; |
439 | 0 | const int8_t v1x4 = 4 < k ? w1[4] : 0; |
440 | 0 | const int8_t v1x5 = 5 < k ? w1[5] : 0; |
441 | 0 | const int8_t v1x6 = 6 < k ? w1[6] : 0; |
442 | 0 | const int8_t v1x7 = 7 < k ? w1[7] : 0; |
443 | 0 | ksum1 += (uint32_t) v1x0; |
444 | 0 | ksum1 += (uint32_t) v1x1; |
445 | 0 | ksum1 += (uint32_t) v1x2; |
446 | 0 | ksum1 += (uint32_t) v1x3; |
447 | 0 | ksum1 += (uint32_t) v1x4; |
448 | 0 | ksum1 += (uint32_t) v1x5; |
449 | 0 | ksum1 += (uint32_t) v1x6; |
450 | 0 | ksum1 += (uint32_t) v1x7; |
451 | 0 | out[8] = v1x0; |
452 | 0 | out[9] = v1x1; |
453 | 0 | out[10] = v1x2; |
454 | 0 | out[11] = v1x3; |
455 | 0 | out[12] = v1x4; |
456 | 0 | out[13] = v1x5; |
457 | 0 | out[14] = v1x6; |
458 | 0 | out[15] = v1x7; |
459 | 0 | w1 += k; |
460 | 0 | const int8_t v2x0 = w2[0]; |
461 | 0 | const int8_t v2x1 = 1 < k ? w2[1] : 0; |
462 | 0 | const int8_t v2x2 = 2 < k ? w2[2] : 0; |
463 | 0 | const int8_t v2x3 = 3 < k ? w2[3] : 0; |
464 | 0 | const int8_t v2x4 = 4 < k ? w2[4] : 0; |
465 | 0 | const int8_t v2x5 = 5 < k ? w2[5] : 0; |
466 | 0 | const int8_t v2x6 = 6 < k ? w2[6] : 0; |
467 | 0 | const int8_t v2x7 = 7 < k ? w2[7] : 0; |
468 | 0 | ksum2 += (uint32_t) v2x0; |
469 | 0 | ksum2 += (uint32_t) v2x1; |
470 | 0 | ksum2 += (uint32_t) v2x2; |
471 | 0 | ksum2 += (uint32_t) v2x3; |
472 | 0 | ksum2 += (uint32_t) v2x4; |
473 | 0 | ksum2 += (uint32_t) v2x5; |
474 | 0 | ksum2 += (uint32_t) v2x6; |
475 | 0 | ksum2 += (uint32_t) v2x7; |
476 | 0 | out[16] = v2x0; |
477 | 0 | out[17] = v2x1; |
478 | 0 | out[18] = v2x2; |
479 | 0 | out[19] = v2x3; |
480 | 0 | out[20] = v2x4; |
481 | 0 | out[21] = v2x5; |
482 | 0 | out[22] = v2x6; |
483 | 0 | out[23] = v2x7; |
484 | 0 | w2 += k; |
485 | 0 | out[24] = 0; |
486 | 0 | out[25] = 0; |
487 | 0 | out[26] = 0; |
488 | 0 | out[27] = 0; |
489 | 0 | out[28] = 0; |
490 | 0 | out[29] = 0; |
491 | 0 | out[30] = 0; |
492 | 0 | out[31] = 0; |
493 | 0 | out += 32; |
494 | 0 | } |
495 | | |
496 | 0 | packed_b[0] -= ksum0 * izp; |
497 | 0 | packed_b[1] -= ksum1 * izp; |
498 | 0 | packed_b[2] -= ksum2 * izp; |
499 | 0 | out = (int8_t*) ((uintptr_t) out + extra_bytes); |
500 | 0 | } |
501 | 0 | weights += nc * n_stride; |
502 | 0 | } while (--g != 0); |
503 | 0 | } |