28 #if defined(ARM_COMPUTE_ENABLE_SVE) && defined(__ARM_FP16_ARGS) && defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
33 void sve_fp16_nhwc_3x3_s1_output4x4_mla_depthfirst_indirect_impl(
34 const __fp16 *
const *
const input_ptrs,
35 __fp16 *
const *
const outptrs,
37 unsigned int n_channels,
44 __fp16 *
const *outptrs;
46 const __fp16 min, max;
47 const __fp16 *inptrs[36];
50 const __fp16 *
const *
const input_ptrs,
51 __fp16 *
const *
const outptrs,
52 const void *
const params,
55 ) : outptrs(outptrs), params(params), min(min), max(max)
57 inptrs[0] = input_ptrs[14];
58 inptrs[1] = input_ptrs[0];
59 inptrs[2] = input_ptrs[5];
60 inptrs[3] = input_ptrs[15];
61 inptrs[4] = input_ptrs[30];
62 inptrs[5] = input_ptrs[35];
63 inptrs[6] = input_ptrs[20];
64 inptrs[7] = input_ptrs[1];
65 inptrs[8] = input_ptrs[4];
66 inptrs[9] = input_ptrs[21];
67 inptrs[10] = input_ptrs[6];
68 inptrs[11] = input_ptrs[11];
69 inptrs[12] = input_ptrs[24];
70 inptrs[13] = input_ptrs[8];
71 inptrs[14] = input_ptrs[29];
72 inptrs[15] = input_ptrs[9];
73 inptrs[16] = input_ptrs[31];
74 inptrs[17] = input_ptrs[13];
75 inptrs[18] = input_ptrs[34];
76 inptrs[19] = input_ptrs[16];
77 inptrs[20] = input_ptrs[2];
78 inptrs[21] = input_ptrs[19];
79 inptrs[22] = input_ptrs[3];
80 inptrs[23] = input_ptrs[12];
81 inptrs[24] = input_ptrs[22];
82 inptrs[25] = input_ptrs[17];
83 inptrs[26] = input_ptrs[18];
84 inptrs[27] = input_ptrs[26];
85 inptrs[28] = input_ptrs[23];
86 inptrs[29] = input_ptrs[32];
87 inptrs[30] = input_ptrs[27];
88 inptrs[31] = input_ptrs[33];
89 inptrs[32] = input_ptrs[7];
90 inptrs[33] = input_ptrs[10];
91 inptrs[34] = input_ptrs[25];
92 inptrs[35] = input_ptrs[28];
97 Args params_struct(input_ptrs, outptrs, params,
100 __asm__ __volatile__(
102 "ldr x7, [%x[params_struct], %[offsetof_args_params]]\n"
103 "add x8, %x[params_struct], %[offsetof_Args_inptrs]\n"
104 "ld1h { z17.h }, p3/Z, [x7]\n"
107 "ld1h { z0.h }, p3/Z, [x7, #1, MUL VL]\n"
108 "ld1h { z1.h }, p3/Z, [x7, #2, MUL VL]\n"
109 "whilelt p2.h, XZR, %x[n_channels]\n"
110 "ld1h { z2.h }, p3/Z, [x7, #3, MUL VL]\n"
111 "ld1h { z3.h }, p3/Z, [x7, #4, MUL VL]\n"
112 "cmp x17, %x[n_channels]\n"
113 "ld1h { z4.h }, p3/Z, [x7, #5, MUL VL]\n"
114 "ld1h { z5.h }, p3/Z, [x7, #6, MUL VL]\n"
115 "sub x15, XZR, x17\n"
116 "ld1h { z6.h }, p3/Z, [x7, #7, MUL VL]\n"
117 "addvl x7, x7, #16\n"
118 "ldp x23, x22, [x8, #0x0]\n"
119 "ldp x21, x20, [x8, #0x10]\n"
120 "ldr x14, [%x[params_struct], %[offsetof_args_outptrs]]\n"
121 "ld1rh { z16.h }, p3/Z, [%x[params_struct], %[offsetof_args_min]]\n"
122 "ld1rh { z19.h }, p3/Z, [%x[params_struct], %[offsetof_args_max]]\n"
123 "ld1h { z7.h }, p3/Z, [x7, #-8, MUL VL]\n"
124 "ld1h { z8.h }, p3/Z, [x7, #-7, MUL VL]\n"
125 "addvl x7, x7, #-6\n"
126 "ld1h { z9.h }, p2/Z, [x23, x16, LSL #1]\n"
127 "ld1h { z10.h }, p2/Z, [x22, x16, LSL #1]\n"
128 "ld1h { z11.h }, p2/Z, [x21, x16, LSL #1]\n"
129 "ld1h { z12.h }, p2/Z, [x20, x16, LSL #1]\n"
132 "movprfx z20, z17\n fmla z20.h, p3/M, z4.h, z9.h\n"
133 "movprfx z26, z17\n fmla z26.h, p3/M, z8.h, z9.h\n"
134 "ldr x27, [x8, #0x20]\n"
135 "ldr x24, [x8, #0x30]\n"
136 "movprfx z24, z17\n fmla z24.h, p3/M, z3.h, z9.h\n"
137 "movprfx z30, z17\n fmla z30.h, p3/M, z1.h, z9.h\n"
138 "ldr x23, [x8, #0x28]\n"
139 "ldr x22, [x8, #0x38]\n"
140 "movprfx z31, z17\n fmla z31.h, p3/M, z0.h, z9.h\n"
141 "movprfx z22, z17\n fmla z22.h, p3/M, z7.h, z9.h\n"
142 "ldr x26, [x8, #0x40]\n"
143 "ldr x21, [x8, #0x48]\n"
144 "movprfx z27, z17\n fmla z27.h, p3/M, z6.h, z9.h\n"
145 "fmla z20.h, p3/M, z5.h, z12.h\n"
146 "ldr x25, [x8, #0x50]\n"
147 "ldr x20, [x8, #0x58]\n"
148 "movprfx z14, z17\n fmla z14.h, p3/M, z5.h, z9.h\n"
149 "movprfx z23, z17\n fmla z23.h, p3/M, z2.h, z9.h\n"
150 "ld1h { z25.h }, p2/Z, [x24, x16, LSL #1]\n"
151 "ldr x13, [x8, #0x70]\n"
152 "fmla z26.h, p3/M, z0.h, z10.h\n"
153 "movprfx z9, z17\n fmla z9.h, p3/M, z2.h, z11.h\n"
154 "ld1h { z28.h }, p2/Z, [x27, x16, LSL #1]\n"
155 "ld1h { z21.h }, p2/Z, [x23, x16, LSL #1]\n"
156 "fmla z24.h, p3/M, z4.h, z12.h\n"
157 "fmla z30.h, p3/M, z2.h, z12.h\n"
158 "ldr x24, [x8, #0x60]\n"
159 "ldr x23, [x8, #0x68]\n"
160 "fmla z31.h, p3/M, z1.h, z12.h\n"
161 "fmla z22.h, p3/M, z8.h, z12.h\n"
164 "fmla z27.h, p3/M, z7.h, z12.h\n"
165 "movprfx z15, z17\n fmla z15.h, p3/M, z6.h, z28.h\n"
166 "ld1h { z10.h }, p2/Z, [x21, x16, LSL #1]\n"
167 "ldr x28, [x8, #0x88]\n"
168 "fmla z20.h, p3/M, z7.h, z25.h\n"
169 "fmla z9.h, p3/M, z6.h, z12.h\n"
170 "ldr x12, [x14, #0x0]\n"
171 "ldr x11, [x14, #0x8]\n"
172 "movprfx z11, z17\n fmla z11.h, p3/M, z3.h, z12.h\n"
173 "movprfx z13, z17\n fmla z13.h, p3/M, z0.h, z12.h\n"
174 "ld1h { z12.h }, p2/Z, [x22, x16, LSL #1]\n"
175 "ldr x22, [x8, #0x78]\n"
176 "movprfx z28, z17\n fmla z28.h, p3/M, z8.h, z21.h\n"
177 "fmla z24.h, p3/M, z6.h, z25.h\n"
178 "ld1h { z29.h }, p2/Z, [x26, x16, LSL #1]\n"
179 "ldr x21, [x8, #0x80]\n"
180 "fmla z30.h, p3/M, z4.h, z25.h\n"
181 "fmla z31.h, p3/M, z3.h, z25.h\n"
182 "ldr x10, [x14, #0x10]\n"
183 "ldr x9, [x14, #0x18]\n"
184 "movprfx z18, z17\n fmla z18.h, p3/M, z1.h, z25.h\n"
185 "movprfx z21, z17\n fmla z21.h, p3/M, z0.h, z25.h\n"
186 "whilelt p0.h, x17, %x[n_channels]\n"
187 "ld1h { z17.h }, p3/Z, [x7]\n"
188 "fmla z14.h, p3/M, z8.h, z25.h\n"
189 "fmla z23.h, p3/M, z5.h, z25.h\n"
190 "fmla z15.h, p3/M, z2.h, z25.h\n"
191 "fmla z26.h, p3/M, z1.h, z12.h\n"
192 "ld1h { z25.h }, p2/Z, [x25, x16, LSL #1]\n"
193 "ldr x27, [x8, #0x90]\n"
194 "fmla z22.h, p3/M, z0.h, z12.h\n"
195 "fmla z27.h, p3/M, z2.h, z29.h\n"
196 "ld1h { z12.h }, p2/Z, [x20, x16, LSL #1]\n"
197 "ldr x20, [x8, #0x98]\n"
198 "fmla z20.h, p3/M, z8.h, z10.h\n"
199 "fmla z9.h, p3/M, z1.h, z29.h\n"
200 "ld1h { z29.h }, p2/Z, [x24, x16, LSL #1]\n"
201 "ldr x26, [x8, #0xa0]\n"
202 "fmla z24.h, p3/M, z7.h, z10.h\n"
203 "fmla z11.h, p3/M, z6.h, z10.h\n"
204 "fmla z30.h, p3/M, z5.h, z10.h\n"
205 "fmla z31.h, p3/M, z4.h, z10.h\n"
206 "fmla z13.h, p3/M, z3.h, z10.h\n"
207 "fmla z18.h, p3/M, z2.h, z10.h\n"
208 "fmla z21.h, p3/M, z1.h, z10.h\n"
209 "fmla z28.h, p3/M, z0.h, z10.h\n"
210 "ld1h { z10.h }, p2/Z, [x23, x16, LSL #1]\n"
211 "ldr x25, [x8, #0xa8]\n"
212 "fmla z26.h, p3/M, z3.h, z25.h\n"
213 "fmla z14.h, p3/M, z0.h, z25.h\n"
214 "fmla z23.h, p3/M, z6.h, z29.h\n"
215 "fmla z15.h, p3/M, z3.h, z29.h\n"
216 "ld1h { z25.h }, p2/Z, [x13, x16, LSL #1]\n"
217 "ldr x24, [x8, #0xb0]\n"
218 "fmla z22.h, p3/M, z4.h, z10.h\n"
219 "fmla z27.h, p3/M, z3.h, z10.h\n"
220 "fmla z20.h, p3/M, z1.h, z10.h\n"
221 "fmla z9.h, p3/M, z5.h, z12.h\n"
222 "fmla z11.h, p3/M, z2.h, z12.h\n"
223 "fmla z24.h, p3/M, z0.h, z10.h\n"
224 "ld1h { z12.h }, p2/Z, [x22, x16, LSL #1]\n"
225 "ldr x23, [x8, #0xb8]\n"
226 "fmla z13.h, p3/M, z8.h, z25.h\n"
227 "fmla z28.h, p3/M, z5.h, z25.h\n"
228 "ld1h { z25.h }, p2/Z, [x21, x16, LSL #1]\n"
229 "ldr x22, [x8, #0xc0]\n"
230 "fmla z26.h, p3/M, z5.h, z10.h\n"
231 "fmla z14.h, p3/M, z2.h, z10.h\n"
232 "ld1h { z29.h }, p2/Z, [x28, x16, LSL #1]\n"
233 "ldr x21, [x8, #0xc8]\n"
234 "fmla z22.h, p3/M, z5.h, z12.h\n"
235 "fmla z27.h, p3/M, z4.h, z12.h\n"
236 "fmla z20.h, p3/M, z2.h, z12.h\n"
237 "fmla z9.h, p3/M, z3.h, z12.h\n"
238 "fmla z24.h, p3/M, z1.h, z12.h\n"
239 "fmla z11.h, p3/M, z0.h, z12.h\n"
240 "ld1h { z10.h }, p2/Z, [x20, x16, LSL #1]\n"
241 "ldr x28, [x8, #0xd8]\n"
242 "fmla z15.h, p3/M, z7.h, z25.h\n"
243 "fmla z18.h, p3/M, z6.h, z25.h\n"
244 "ld1h { z25.h }, p2/Z, [x27, x16, LSL #1]\n"
245 "ldr x20, [x8, #0xd0]\n"
246 "fmla z26.h, p3/M, z7.h, z29.h\n"
247 "fmla z22.h, p3/M, z6.h, z29.h\n"
248 "fmla z14.h, p3/M, z4.h, z29.h\n"
249 "fmla z20.h, p3/M, z3.h, z29.h\n"
250 "fmla z23.h, p3/M, z1.h, z29.h\n"
251 "fmla z30.h, p3/M, z0.h, z29.h\n"
252 "ld1h { z29.h }, p2/Z, [x26, x16, LSL #1]\n"
253 "ldr x27, [x8, #0xe0]\n"
254 "fmla z27.h, p3/M, z8.h, z10.h\n"
255 "fmla z21.h, p3/M, z8.h, z25.h\n"
256 "fmla z28.h, p3/M, z7.h, z25.h\n"
257 "ld1h { z25.h }, p2/Z, [x25, x16, LSL #1]\n"
258 "fmla z13.h, p3/M, z1.h, z10.h\n"
259 "ldr x26, [x8, #0xe8]\n"
260 "fmla z9.h, p3/M, z7.h, z10.h\n"
261 "fmla z24.h, p3/M, z5.h, z10.h\n"
262 "fmla z11.h, p3/M, z4.h, z10.h\n"
263 "fmla z31.h, p3/M, z2.h, z10.h\n"
264 "ld1h { z10.h }, p2/Z, [x24, x16, LSL #1]\n"
265 "ldr x25, [x8, #0xf0]\n"
266 "fmla z26.h, p3/M, z2.h, z29.h\n"
267 "fmla z22.h, p3/M, z1.h, z29.h\n"
268 "fmla z27.h, p3/M, z0.h, z29.h\n"
269 "fmla z14.h, p3/M, z7.h, z25.h\n"
270 "ld1h { z29.h }, p2/Z, [x23, x16, LSL #1]\n"
271 "ldr x24, [x8, #0xf8]\n"
272 "fmla z20.h, p3/M, z6.h, z25.h\n"
273 "fmla z23.h, p3/M, z4.h, z25.h\n"
274 "fmla z30.h, p3/M, z3.h, z25.h\n"
275 "fmla z15.h, p3/M, z1.h, z25.h\n"
276 "fmla z18.h, p3/M, z0.h, z25.h\n"
277 "ld1h { z25.h }, p2/Z, [x22, x16, LSL #1]\n"
278 "fmla z13.h, p3/M, z4.h, z25.h\n"
279 "ldr x23, [x8, #0x100]\n"
280 "fmla z21.h, p3/M, z2.h, z25.h\n"
281 "fmla z22.h, p3/M, z2.h, z10.h\n"
282 "fmla z27.h, p3/M, z1.h, z10.h\n"
283 "fmla z9.h, p3/M, z0.h, z10.h\n"
284 "ld1h { z12.h }, p2/Z, [x21, x16, LSL #1]\n"
285 "ldr x22, [x8, #0x108]\n"
286 "fmla z26.h, p3/M, z6.h, z29.h\n"
287 "fmla z14.h, p3/M, z3.h, z29.h\n"
288 "fmla z23.h, p3/M, z0.h, z29.h\n"
289 "fmla z24.h, p3/M, z8.h, z25.h\n"
290 "ld1h { z10.h }, p2/Z, [x20, x16, LSL #1]\n"
291 "ldr x21, [x8, #0x110]\n"
292 "fmla z11.h, p3/M, z7.h, z25.h\n"
293 "fmla z31.h, p3/M, z5.h, z25.h\n"
294 "fmla z28.h, p3/M, z1.h, z25.h\n"
295 "ld1h { z25.h }, p2/Z, [x28, x16, LSL #1]\n"
296 "fmla z13.h, p3/M, z2.h, z12.h\n"
297 "ldr x20, [x8, #0x118]\n"
298 "fmla z15.h, p3/M, z0.h, z10.h\n"
299 "fmla z18.h, p3/M, z4.h, z25.h\n"
300 "fmla z21.h, p3/M, z3.h, z25.h\n"
301 "fmla z9.h, p3/M, z8.h, z12.h\n"
302 "fmla z11.h, p3/M, z5.h, z12.h\n"
303 "fmla z14.h, p3/M, z6.h, z10.h\n"
304 "ld1h { z12.h }, p2/Z, [x27, x16, LSL #1]\n"
305 "fmla z23.h, p3/M, z3.h, z10.h\n"
306 "ld1h { z29.h }, p2/Z, [x26, x16, LSL #1]\n"
307 "fmla z30.h, p3/M, z7.h, z25.h\n"
308 "fmla z31.h, p3/M, z6.h, z25.h\n"
309 "fmla z15.h, p3/M, z5.h, z25.h\n"
310 "fmla z13.h, p3/M, z5.h, z12.h\n"
311 "fmla z28.h, p3/M, z2.h, z12.h\n"
312 "fmla z18.h, p3/M, z7.h, z29.h\n"
313 "fmla z21.h, p3/M, z6.h, z29.h\n"
314 "fmla z23.h, p3/M, z8.h, z25.h\n"
315 "ld1h { z25.h }, p2/Z, [x25, x16, LSL #1]\n"
316 "fmla z15.h, p3/M, z8.h, z29.h\n"
317 "ld1h { z29.h }, p2/Z, [x23, x16, LSL #1]\n"
318 "fmla z30.h, p3/M, z8.h, z25.h\n"
319 "fmla z31.h, p3/M, z7.h, z25.h\n"
320 "fmla z13.h, p3/M, z6.h, z25.h\n"
321 "fmla z18.h, p3/M, z5.h, z25.h\n"
322 "fmla z21.h, p3/M, z4.h, z25.h\n"
323 "fmla z28.h, p3/M, z3.h, z25.h\n"
324 "ld1h { z25.h }, p2/Z, [x22, x16, LSL #1]\n"
325 "ldp x27, x26, [x8, #0x0]\n"
326 "fmla z11.h, p3/M, z8.h, z12.h\n"
327 "ld1h { z12.h }, p2/Z, [x24, x16, LSL #1]\n"
328 "fmla z26.h, p3/M, z4.h, z29.h\n"
329 "fmax z26.h, p3/M, z26.h, z16.h\n"
330 "fmla z22.h, p3/M, z3.h, z29.h\n"
331 "fmla z27.h, p3/M, z5.h, z25.h\n"
332 "fmax z22.h, p3/M, z22.h, z16.h\n"
333 "fmax z27.h, p3/M, z27.h, z16.h\n"
334 "fmla z9.h, p3/M, z4.h, z25.h\n"
335 "fmla z18.h, p3/M, z8.h, z12.h\n"
336 "fmax z9.h, p3/M, z9.h, z16.h\n"
337 "fmin z26.h, p3/M, z26.h, z19.h\n"
338 "fmla z21.h, p3/M, z7.h, z12.h\n"
339 "fmla z28.h, p3/M, z6.h, z12.h\n"
340 "ld1h { z10.h }, p2/Z, [x21, x16, LSL #1]\n"
341 "fmin z22.h, p3/M, z22.h, z19.h\n"
342 "fmla z14.h, p3/M, z1.h, z29.h\n"
343 "fmla z20.h, p3/M, z0.h, z29.h\n"
344 "ld1h { z12.h }, p2/Z, [x20, x16, LSL #1]\n"
345 "fmin z27.h, p3/M, z27.h, z19.h\n"
346 "fmla z24.h, p3/M, z2.h, z25.h\n"
347 "fmla z11.h, p3/M, z1.h, z25.h\n"
348 "fmin z9.h, p3/M, z9.h, z19.h\n"
349 "fmax z14.h, p3/M, z14.h, z16.h\n"
350 "fmla z23.h, p3/M, z7.h, z10.h\n"
351 "fmla z30.h, p3/M, z6.h, z10.h\n"
352 "fmax z20.h, p3/M, z20.h, z16.h\n"
353 "fmax z24.h, p3/M, z24.h, z16.h\n"
354 "fmla z31.h, p3/M, z8.h, z12.h\n"
355 "fmla z13.h, p3/M, z7.h, z12.h\n"
356 "fmax z11.h, p3/M, z11.h, z16.h\n"
357 "st1h { z26.h }, p1, [x12, x15, LSL #1]\n"
358 "st1h { z22.h }, p1, [x11, x15, LSL #1]\n"
359 "ldr x23, [x14, #0x20]\n"
360 "ldr x22, [x14, #0x28]\n"
361 "fmla z15.h, p3/M, z4.h, z10.h\n"
362 "st1h { z27.h }, p1, [x10, x15, LSL #1]\n"
363 "ldr x21, [x14, #0x30]\n"
364 "fmla z18.h, p3/M, z3.h, z10.h\n"
365 "fmla z21.h, p3/M, z5.h, z12.h\n"
366 "st1h { z9.h }, p1, [x9, x15, LSL #1]\n"
367 "ldr x20, [x14, #0x38]\n"
368 "fmla z28.h, p3/M, z4.h, z12.h\n"
369 "ldp x25, x24, [x8, #0x10]\n"
370 "fmin z14.h, p3/M, z14.h, z19.h\n"
371 "fmin z20.h, p3/M, z20.h, z19.h\n"
372 "st1h { z14.h }, p1, [x23, x15, LSL #1]\n"
373 "ldr x23, [x14, #0x40]\n"
374 "fmin z24.h, p3/M, z24.h, z19.h\n"
375 "fmin z11.h, p3/M, z11.h, z19.h\n"
376 "st1h { z20.h }, p1, [x22, x15, LSL #1]\n"
377 "ldr x22, [x14, #0x48]\n"
378 "fmax z23.h, p3/M, z23.h, z16.h\n"
379 "fmax z30.h, p3/M, z30.h, z16.h\n"
380 "st1h { z24.h }, p1, [x21, x15, LSL #1]\n"
381 "ldr x21, [x14, #0x50]\n"
382 "fmax z31.h, p3/M, z31.h, z16.h\n"
383 "fmax z13.h, p3/M, z13.h, z16.h\n"
384 "st1h { z11.h }, p1, [x20, x15, LSL #1]\n"
385 "ldr x20, [x14, #0x58]\n"
387 "ld1h { z9.h }, p0/Z, [x27, x17, LSL #1]\n"
388 "ld1h { z10.h }, p0/Z, [x26, x17, LSL #1]\n"
389 "fmin z23.h, p3/M, z23.h, z19.h\n"
390 "ld1h { z11.h }, p0/Z, [x25, x17, LSL #1]\n"
391 "ld1h { z12.h }, p0/Z, [x24, x17, LSL #1]\n"
393 "fmin z30.h, p3/M, z30.h, z19.h\n"
394 "fmin z31.h, p3/M, z31.h, z19.h\n"
395 "fmin z13.h, p3/M, z13.h, z19.h\n"
396 "st1h { z23.h }, p1, [x23, x15, LSL #1]\n"
397 "ldr x23, [x14, #0x60]\n"
398 "fmax z15.h, p3/M, z15.h, z16.h\n"
399 "fmax z18.h, p3/M, z18.h, z16.h\n"
400 "st1h { z30.h }, p1, [x22, x15, LSL #1]\n"
401 "ldr x22, [x14, #0x68]\n"
402 "fmax z21.h, p3/M, z21.h, z16.h\n"
403 "fmax z28.h, p3/M, z28.h, z16.h\n"
404 "st1h { z31.h }, p1, [x21, x15, LSL #1]\n"
405 "ldr x21, [x14, #0x70]\n"
406 "st1h { z13.h }, p1, [x20, x15, LSL #1]\n"
407 "ldr x20, [x14, #0x78]\n"
408 "ld1h { z0.h }, p3/Z, [x7, #1, MUL VL]\n"
409 "whilelt p2.h, x16, %x[n_channels]\n"
410 "ld1h { z1.h }, p3/Z, [x7, #2, MUL VL]\n"
411 "ld1h { z2.h }, p3/Z, [x7, #3, MUL VL]\n"
412 "cmp x17, %x[n_channels]\n"
413 "fmin z15.h, p3/M, z15.h, z19.h\n"
414 "ld1h { z3.h }, p3/Z, [x7, #4, MUL VL]\n"
415 "ld1h { z4.h }, p3/Z, [x7, #5, MUL VL]\n"
416 "fmin z18.h, p3/M, z18.h, z19.h\n"
417 "fmin z21.h, p3/M, z21.h, z19.h\n"
418 "ld1h { z5.h }, p3/Z, [x7, #6, MUL VL]\n"
419 "ld1h { z6.h }, p3/Z, [x7, #7, MUL VL]\n"
420 "addvl x7, x7, #16\n"
421 "fmin z28.h, p3/M, z28.h, z19.h\n"
422 "st1h { z15.h }, p1, [x23, x15, LSL #1]\n"
423 "ld1h { z7.h }, p3/Z, [x7, #-8, MUL VL]\n"
424 "ld1h { z8.h }, p3/Z, [x7, #-7, MUL VL]\n"
425 "addvl x7, x7, #-6\n"
426 "st1h { z18.h }, p1, [x22, x15, LSL #1]\n"
427 "st1h { z21.h }, p1, [x21, x15, LSL #1]\n"
428 "st1h { z28.h }, p1, [x20, x15, LSL #1]\n"
431 "movprfx z14, z17\n fmla z14.h, p3/M, z4.h, z9.h\n"
432 "movprfx z18, z17\n fmla z18.h, p3/M, z8.h, z9.h\n"
433 "ldr x27, [x8, #0x20]\n"
434 "ldr x24, [x8, #0x30]\n"
435 "movprfx z15, z17\n fmla z15.h, p3/M, z3.h, z9.h\n"
436 "movprfx z30, z17\n fmla z30.h, p3/M, z1.h, z9.h\n"
437 "ldr x23, [x8, #0x28]\n"
438 "ldr x22, [x8, #0x38]\n"
439 "movprfx z20, z17\n fmla z20.h, p3/M, z0.h, z9.h\n"
440 "movprfx z13, z17\n fmla z13.h, p3/M, z7.h, z9.h\n"
441 "ldr x26, [x8, #0x40]\n"
442 "ldr x21, [x8, #0x48]\n"
443 "movprfx z22, z17\n fmla z22.h, p3/M, z6.h, z9.h\n"
444 "fmla z14.h, p3/M, z5.h, z12.h\n"
445 "ldr x25, [x8, #0x50]\n"
446 "ldr x20, [x8, #0x58]\n"
447 "movprfx z27, z17\n fmla z27.h, p3/M, z5.h, z9.h\n"
448 "movprfx z31, z17\n fmla z31.h, p3/M, z2.h, z9.h\n"
449 "ld1h { z23.h }, p2/Z, [x24, x16, LSL #1]\n"
450 "ldr x13, [x8, #0x70]\n"
451 "fmla z18.h, p3/M, z0.h, z10.h\n"
452 "movprfx z9, z17\n fmla z9.h, p3/M, z2.h, z11.h\n"
453 "ld1h { z21.h }, p2/Z, [x27, x16, LSL #1]\n"
454 "ld1h { z25.h }, p2/Z, [x23, x16, LSL #1]\n"
455 "fmla z15.h, p3/M, z4.h, z12.h\n"
456 "fmla z30.h, p3/M, z2.h, z12.h\n"
457 "ldr x24, [x8, #0x60]\n"
458 "ldr x23, [x8, #0x68]\n"
459 "fmla z20.h, p3/M, z1.h, z12.h\n"
460 "fmla z13.h, p3/M, z8.h, z12.h\n"
463 "fmla z22.h, p3/M, z7.h, z12.h\n"
464 "movprfx z28, z17\n fmla z28.h, p3/M, z6.h, z21.h\n"
465 "ld1h { z29.h }, p2/Z, [x21, x16, LSL #1]\n"
466 "ldr x28, [x8, #0x88]\n"
467 "fmla z14.h, p3/M, z7.h, z23.h\n"
468 "fmla z9.h, p3/M, z6.h, z12.h\n"
469 "ldr x12, [x14, #0x0]\n"
470 "ldr x11, [x14, #0x8]\n"
471 "movprfx z11, z17\n fmla z11.h, p3/M, z3.h, z12.h\n"
472 "movprfx z10, z17\n fmla z10.h, p3/M, z0.h, z12.h\n"
473 "ld1h { z12.h }, p2/Z, [x22, x16, LSL #1]\n"
474 "ldr x22, [x8, #0x78]\n"
475 "movprfx z26, z17\n fmla z26.h, p3/M, z8.h, z25.h\n"
476 "fmla z15.h, p3/M, z6.h, z23.h\n"
477 "ld1h { z21.h }, p2/Z, [x26, x16, LSL #1]\n"
478 "ldr x21, [x8, #0x80]\n"
479 "fmla z30.h, p3/M, z4.h, z23.h\n"
480 "fmla z20.h, p3/M, z3.h, z23.h\n"
481 "ldr x10, [x14, #0x10]\n"
482 "ldr x9, [x14, #0x18]\n"
483 "movprfx z25, z17\n fmla z25.h, p3/M, z1.h, z23.h\n"
484 "movprfx z24, z17\n fmla z24.h, p3/M, z0.h, z23.h\n"
485 "fmla z27.h, p3/M, z8.h, z23.h\n"
486 "fmla z31.h, p3/M, z5.h, z23.h\n"
487 "fmla z28.h, p3/M, z2.h, z23.h\n"
488 "fmla z18.h, p3/M, z1.h, z12.h\n"
489 "ld1h { z23.h }, p2/Z, [x25, x16, LSL #1]\n"
490 "ldr x27, [x8, #0x90]\n"
491 "fmla z13.h, p3/M, z0.h, z12.h\n"
492 "fmla z22.h, p3/M, z2.h, z21.h\n"
493 "ld1h { z12.h }, p2/Z, [x20, x16, LSL #1]\n"
494 "ldr x20, [x8, #0x98]\n"
495 "fmla z14.h, p3/M, z8.h, z29.h\n"
496 "fmla z9.h, p3/M, z1.h, z21.h\n"
497 "ld1h { z21.h }, p2/Z, [x24, x16, LSL #1]\n"
498 "ldr x26, [x8, #0xa0]\n"
499 "fmla z15.h, p3/M, z7.h, z29.h\n"
500 "fmla z11.h, p3/M, z6.h, z29.h\n"
501 "fmla z30.h, p3/M, z5.h, z29.h\n"
502 "fmla z20.h, p3/M, z4.h, z29.h\n"
503 "fmla z10.h, p3/M, z3.h, z29.h\n"
504 "fmla z25.h, p3/M, z2.h, z29.h\n"
505 "fmla z24.h, p3/M, z1.h, z29.h\n"
506 "fmla z26.h, p3/M, z0.h, z29.h\n"
507 "ld1h { z29.h }, p2/Z, [x23, x16, LSL #1]\n"
508 "ldr x25, [x8, #0xa8]\n"
509 "fmla z18.h, p3/M, z3.h, z23.h\n"
510 "fmla z27.h, p3/M, z0.h, z23.h\n"
511 "fmla z31.h, p3/M, z6.h, z21.h\n"
512 "fmla z28.h, p3/M, z3.h, z21.h\n"
513 "ld1h { z21.h }, p2/Z, [x13, x16, LSL #1]\n"
514 "ldr x24, [x8, #0xb0]\n"
515 "fmla z13.h, p3/M, z4.h, z29.h\n"
516 "fmla z22.h, p3/M, z3.h, z29.h\n"
517 "fmla z14.h, p3/M, z1.h, z29.h\n"
518 "fmla z9.h, p3/M, z5.h, z12.h\n"
519 "fmla z11.h, p3/M, z2.h, z12.h\n"
520 "fmla z15.h, p3/M, z0.h, z29.h\n"
521 "ld1h { z17.h }, p2/Z, [x22, x16, LSL #1]\n"
522 "ldr x23, [x8, #0xb8]\n"
523 "fmla z10.h, p3/M, z8.h, z21.h\n"
524 "fmla z26.h, p3/M, z5.h, z21.h\n"
525 "ld1h { z23.h }, p2/Z, [x21, x16, LSL #1]\n"
526 "ldr x22, [x8, #0xc0]\n"
527 "fmla z18.h, p3/M, z5.h, z29.h\n"
528 "fmla z27.h, p3/M, z2.h, z29.h\n"
529 "ld1h { z21.h }, p2/Z, [x28, x16, LSL #1]\n"
530 "ldr x21, [x8, #0xc8]\n"
531 "fmla z13.h, p3/M, z5.h, z17.h\n"
532 "fmla z22.h, p3/M, z4.h, z17.h\n"
533 "fmla z14.h, p3/M, z2.h, z17.h\n"
534 "fmla z9.h, p3/M, z3.h, z17.h\n"
535 "fmla z15.h, p3/M, z1.h, z17.h\n"
536 "fmla z11.h, p3/M, z0.h, z17.h\n"
537 "ld1h { z29.h }, p2/Z, [x20, x16, LSL #1]\n"
538 "ldr x28, [x8, #0xd8]\n"
539 "fmla z28.h, p3/M, z7.h, z23.h\n"
540 "fmla z25.h, p3/M, z6.h, z23.h\n"
541 "ld1h { z23.h }, p2/Z, [x27, x16, LSL #1]\n"
542 "ldr x20, [x8, #0xd0]\n"
543 "fmla z18.h, p3/M, z7.h, z21.h\n"
544 "fmla z13.h, p3/M, z6.h, z21.h\n"
545 "fmla z27.h, p3/M, z4.h, z21.h\n"
546 "fmla z14.h, p3/M, z3.h, z21.h\n"
547 "fmla z31.h, p3/M, z1.h, z21.h\n"
548 "fmla z30.h, p3/M, z0.h, z21.h\n"
549 "ld1h { z21.h }, p2/Z, [x26, x16, LSL #1]\n"
550 "ldr x27, [x8, #0xe0]\n"
551 "fmla z22.h, p3/M, z8.h, z29.h\n"
552 "fmla z24.h, p3/M, z8.h, z23.h\n"
553 "fmla z26.h, p3/M, z7.h, z23.h\n"
554 "ld1h { z23.h }, p2/Z, [x25, x16, LSL #1]\n"
555 "fmla z10.h, p3/M, z1.h, z29.h\n"
556 "ldr x26, [x8, #0xe8]\n"
557 "fmla z9.h, p3/M, z7.h, z29.h\n"
558 "fmla z15.h, p3/M, z5.h, z29.h\n"
559 "fmla z11.h, p3/M, z4.h, z29.h\n"
560 "fmla z20.h, p3/M, z2.h, z29.h\n"
561 "ld1h { z29.h }, p2/Z, [x24, x16, LSL #1]\n"
562 "ldr x25, [x8, #0xf0]\n"
563 "fmla z18.h, p3/M, z2.h, z21.h\n"
564 "fmla z13.h, p3/M, z1.h, z21.h\n"
565 "fmla z22.h, p3/M, z0.h, z21.h\n"
566 "fmla z27.h, p3/M, z7.h, z23.h\n"
567 "ld1h { z21.h }, p2/Z, [x23, x16, LSL #1]\n"
568 "ldr x24, [x8, #0xf8]\n"
569 "fmla z14.h, p3/M, z6.h, z23.h\n"
570 "fmla z31.h, p3/M, z4.h, z23.h\n"
571 "fmla z30.h, p3/M, z3.h, z23.h\n"
572 "fmla z28.h, p3/M, z1.h, z23.h\n"
573 "fmla z25.h, p3/M, z0.h, z23.h\n"
574 "ld1h { z17.h }, p2/Z, [x22, x16, LSL #1]\n"
575 "fmla z10.h, p3/M, z4.h, z17.h\n"
576 "ldr x23, [x8, #0x100]\n"
577 "fmla z24.h, p3/M, z2.h, z17.h\n"
578 "fmla z13.h, p3/M, z2.h, z29.h\n"
579 "fmla z22.h, p3/M, z1.h, z29.h\n"
580 "fmla z9.h, p3/M, z0.h, z29.h\n"
581 "ld1h { z23.h }, p2/Z, [x21, x16, LSL #1]\n"
582 "ldr x22, [x8, #0x108]\n"
583 "fmla z18.h, p3/M, z6.h, z21.h\n"
584 "fmla z27.h, p3/M, z3.h, z21.h\n"
585 "fmla z31.h, p3/M, z0.h, z21.h\n"
586 "fmla z15.h, p3/M, z8.h, z17.h\n"
587 "ld1h { z29.h }, p2/Z, [x20, x16, LSL #1]\n"
588 "ldr x21, [x8, #0x110]\n"
589 "fmla z11.h, p3/M, z7.h, z17.h\n"
590 "fmla z20.h, p3/M, z5.h, z17.h\n"
591 "fmla z26.h, p3/M, z1.h, z17.h\n"
592 "ld1h { z21.h }, p2/Z, [x28, x16, LSL #1]\n"
593 "fmla z10.h, p3/M, z2.h, z23.h\n"
594 "ldr x20, [x8, #0x118]\n"
595 "fmla z28.h, p3/M, z0.h, z29.h\n"
596 "fmla z25.h, p3/M, z4.h, z21.h\n"
597 "fmla z24.h, p3/M, z3.h, z21.h\n"
598 "fmla z9.h, p3/M, z8.h, z23.h\n"
599 "fmla z11.h, p3/M, z5.h, z23.h\n"
600 "fmla z27.h, p3/M, z6.h, z29.h\n"
601 "ld1h { z23.h }, p2/Z, [x27, x16, LSL #1]\n"
602 "fmla z31.h, p3/M, z3.h, z29.h\n"
603 "ld1h { z17.h }, p2/Z, [x26, x16, LSL #1]\n"
604 "fmla z30.h, p3/M, z7.h, z21.h\n"
605 "fmla z20.h, p3/M, z6.h, z21.h\n"
606 "fmla z28.h, p3/M, z5.h, z21.h\n"
607 "fmla z10.h, p3/M, z5.h, z23.h\n"
608 "fmla z26.h, p3/M, z2.h, z23.h\n"
609 "fmla z25.h, p3/M, z7.h, z17.h\n"
610 "fmla z24.h, p3/M, z6.h, z17.h\n"
611 "fmla z31.h, p3/M, z8.h, z21.h\n"
612 "ld1h { z21.h }, p2/Z, [x25, x16, LSL #1]\n"
613 "fmla z28.h, p3/M, z8.h, z17.h\n"
614 "ld1h { z12.h }, p2/Z, [x23, x16, LSL #1]\n"
615 "fmla z30.h, p3/M, z8.h, z21.h\n"
616 "fmla z20.h, p3/M, z7.h, z21.h\n"
617 "fmla z10.h, p3/M, z6.h, z21.h\n"
618 "fmla z25.h, p3/M, z5.h, z21.h\n"
619 "fmla z24.h, p3/M, z4.h, z21.h\n"
620 "fmla z26.h, p3/M, z3.h, z21.h\n"
621 "ld1h { z21.h }, p2/Z, [x22, x16, LSL #1]\n"
622 "fmla z11.h, p3/M, z8.h, z23.h\n"
623 "ld1h { z29.h }, p2/Z, [x24, x16, LSL #1]\n"
624 "fmla z18.h, p3/M, z4.h, z12.h\n"
625 "fmax z18.h, p3/M, z18.h, z16.h\n"
626 "fmla z13.h, p3/M, z3.h, z12.h\n"
627 "fmla z22.h, p3/M, z5.h, z21.h\n"
628 "fmax z13.h, p3/M, z13.h, z16.h\n"
629 "fmax z22.h, p3/M, z22.h, z16.h\n"
630 "fmla z9.h, p3/M, z4.h, z21.h\n"
631 "fmla z25.h, p3/M, z8.h, z29.h\n"
632 "fmax z9.h, p3/M, z9.h, z16.h\n"
633 "fmin z18.h, p3/M, z18.h, z19.h\n"
634 "fmla z24.h, p3/M, z7.h, z29.h\n"
635 "fmla z26.h, p3/M, z6.h, z29.h\n"
636 "ld1h { z23.h }, p2/Z, [x21, x16, LSL #1]\n"
637 "fmin z13.h, p3/M, z13.h, z19.h\n"
638 "fmla z27.h, p3/M, z1.h, z12.h\n"
639 "fmla z14.h, p3/M, z0.h, z12.h\n"
640 "ld1h { z29.h }, p2/Z, [x20, x16, LSL #1]\n"
641 "fmin z22.h, p3/M, z22.h, z19.h\n"
642 "fmla z15.h, p3/M, z2.h, z21.h\n"
643 "fmla z11.h, p3/M, z1.h, z21.h\n"
644 "fmin z9.h, p3/M, z9.h, z19.h\n"
645 "fmax z27.h, p3/M, z27.h, z16.h\n"
646 "fmla z31.h, p3/M, z7.h, z23.h\n"
647 "fmla z30.h, p3/M, z6.h, z23.h\n"
648 "fmax z14.h, p3/M, z14.h, z16.h\n"
649 "fmax z15.h, p3/M, z15.h, z16.h\n"
650 "fmla z20.h, p3/M, z8.h, z29.h\n"
651 "fmla z10.h, p3/M, z7.h, z29.h\n"
652 "fmax z11.h, p3/M, z11.h, z16.h\n"
653 "st1h { z18.h }, p0, [x12, x15, LSL #1]\n"
654 "st1h { z13.h }, p0, [x11, x15, LSL #1]\n"
655 "ldr x23, [x14, #0x20]\n"
656 "ldr x22, [x14, #0x28]\n"
657 "fmla z28.h, p3/M, z4.h, z23.h\n"
658 "st1h { z22.h }, p0, [x10, x15, LSL #1]\n"
659 "ldr x21, [x14, #0x30]\n"
660 "fmla z25.h, p3/M, z3.h, z23.h\n"
661 "fmla z24.h, p3/M, z5.h, z29.h\n"
662 "st1h { z9.h }, p0, [x9, x15, LSL #1]\n"
663 "ldr x20, [x14, #0x38]\n"
664 "fmla z26.h, p3/M, z4.h, z29.h\n"
665 "fmin z27.h, p3/M, z27.h, z19.h\n"
666 "fmin z14.h, p3/M, z14.h, z19.h\n"
667 "fmin z15.h, p3/M, z15.h, z19.h\n"
668 "st1h { z27.h }, p0, [x23, x15, LSL #1]\n"
669 "ldr x23, [x14, #0x40]\n"
670 "fmin z11.h, p3/M, z11.h, z19.h\n"
671 "fmax z31.h, p3/M, z31.h, z16.h\n"
672 "st1h { z14.h }, p0, [x22, x15, LSL #1]\n"
673 "ldr x22, [x14, #0x48]\n"
674 "fmax z30.h, p3/M, z30.h, z16.h\n"
675 "fmax z20.h, p3/M, z20.h, z16.h\n"
676 "st1h { z15.h }, p0, [x21, x15, LSL #1]\n"
677 "ldr x21, [x14, #0x50]\n"
678 "fmax z10.h, p3/M, z10.h, z16.h\n"
679 "st1h { z11.h }, p0, [x20, x15, LSL #1]\n"
680 "ldr x20, [x14, #0x58]\n"
681 "fmin z31.h, p3/M, z31.h, z19.h\n"
682 "fmin z30.h, p3/M, z30.h, z19.h\n"
683 "fmin z20.h, p3/M, z20.h, z19.h\n"
684 "st1h { z31.h }, p0, [x23, x15, LSL #1]\n"
685 "ldr x23, [x14, #0x60]\n"
686 "fmin z10.h, p3/M, z10.h, z19.h\n"
687 "fmax z28.h, p3/M, z28.h, z16.h\n"
688 "st1h { z30.h }, p0, [x22, x15, LSL #1]\n"
689 "ldr x22, [x14, #0x68]\n"
690 "fmax z25.h, p3/M, z25.h, z16.h\n"
691 "fmax z24.h, p3/M, z24.h, z16.h\n"
692 "st1h { z20.h }, p0, [x21, x15, LSL #1]\n"
693 "ldr x21, [x14, #0x70]\n"
694 "fmax z26.h, p3/M, z26.h, z16.h\n"
695 "st1h { z10.h }, p0, [x20, x15, LSL #1]\n"
696 "ldr x20, [x14, #0x78]\n"
697 "fmin z28.h, p3/M, z28.h, z19.h\n"
698 "fmin z25.h, p3/M, z25.h, z19.h\n"
699 "fmin z24.h, p3/M, z24.h, z19.h\n"
700 "st1h { z28.h }, p0, [x23, x15, LSL #1]\n"
701 "fmin z26.h, p3/M, z26.h, z19.h\n"
702 "st1h { z25.h }, p0, [x22, x15, LSL #1]\n"
703 "st1h { z24.h }, p0, [x21, x15, LSL #1]\n"
704 "st1h { z26.h }, p0, [x20, x15, LSL #1]\n"
706 : [n_channels]
"r" ((
unsigned long) n_channels), [offsetof_Args_inptrs]
"I" (offsetof(Args, inptrs)), [offsetof_args_max]
"I" (offsetof(Args, max)), [offsetof_args_min]
"I" (offsetof(Args, min)), [offsetof_args_outptrs]
"I" (offsetof(Args, outptrs)), [offsetof_args_params]
"I" (offsetof(Args, params)), [params_struct]
"r" (¶ms_struct)
707 :
"cc",
"memory",
"p0",
"p1",
"p2",
"p3",
"x7",
"x8",
"x9",
"x10",
"x11",
"x12",
"x13",
"x14",
"x15",
"x16",
"x17",
"x20",
"x21",
"x22",
"x23",
"x24",
"x25",
"x26",
"x27",
"x28",
"z0",
"z1",
"z2",
"z3",
"z4",
"z5",
"z6",
"z7",
"z8",
"z9",
"z10",
"z11",
"z12",
"z13",
"z14",
"z15",
"z16",
"z17",
"z18",
"z19",
"z20",
"z21",
"z22",
"z23",
"z24",
"z25",
"z26",
"z27",
"z28",
"z29",
"z30",
"z31"
714 #endif // defined(ARM_COMPUTE_ENABLE_SVE) && defined(__ARM_FP16_ARGS) && defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)