• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2019 Google LLC
2 //
3 // This source code is licensed under the BSD-style license found in the
4 // LICENSE file in the root directory of this source tree.
5 //
6 // Auto-generated file. Do not edit!
7 //   Specification: test/f32-bilinear.yaml
8 //   Generator: tools/generate-bilinear-test.py
9 
10 
11 #include <gtest/gtest.h>
12 
13 #include <xnnpack/common.h>
14 #include <xnnpack/isa-checks.h>
15 
16 #include <xnnpack/bilinear.h>
17 #include "bilinear-microkernel-tester.h"
18 
19 
TEST(F32_BILINEAR__SCALAR_C1,channels_eq_1)20 TEST(F32_BILINEAR__SCALAR_C1, channels_eq_1) {
21   BilinearMicrokernelTester()
22     .pixels(1)
23     .channels(1)
24     .Test(xnn_f32_bilinear_ukernel__scalar_c1);
25 }
26 
TEST(F32_BILINEAR__SCALAR_C1,channels_gt_1)27 TEST(F32_BILINEAR__SCALAR_C1, channels_gt_1) {
28   for (size_t channels = 2; channels < 10; channels++) {
29     BilinearMicrokernelTester()
30       .pixels(1)
31       .channels(channels)
32       .Test(xnn_f32_bilinear_ukernel__scalar_c1);
33   }
34 }
35 
TEST(F32_BILINEAR__SCALAR_C1,pixels_gt_1)36 TEST(F32_BILINEAR__SCALAR_C1, pixels_gt_1) {
37   for (size_t pixels = 2; pixels < 3; pixels++) {
38     for (size_t channels = 1; channels <= 5; channels += 1) {
39       BilinearMicrokernelTester()
40         .pixels(pixels)
41         .channels(channels)
42         .Test(xnn_f32_bilinear_ukernel__scalar_c1);
43     }
44   }
45 }
46 
TEST(F32_BILINEAR__SCALAR_C1,input_offset)47 TEST(F32_BILINEAR__SCALAR_C1, input_offset) {
48   for (size_t pixels = 1; pixels < 5; pixels += 1) {
49     for (size_t channels = 1; channels <= 5; channels += 1) {
50       BilinearMicrokernelTester()
51         .pixels(pixels)
52         .channels(channels)
53         .input_offset(7)
54         .Test(xnn_f32_bilinear_ukernel__scalar_c1);
55     }
56   }
57 }
TEST(F32_BILINEAR__SCALAR_C1,output_stride)58 TEST(F32_BILINEAR__SCALAR_C1, output_stride) {
59   for (size_t pixels = 1; pixels < 5; pixels += 1) {
60     for (size_t channels = 1; channels <= 5; channels += 1) {
61       BilinearMicrokernelTester()
62         .pixels(pixels)
63         .channels(channels)
64         .output_stride(7)
65         .Test(xnn_f32_bilinear_ukernel__scalar_c1);
66     }
67   }
68 }
69 
TEST(F32_BILINEAR__SCALAR_C2,channels_eq_2)70 TEST(F32_BILINEAR__SCALAR_C2, channels_eq_2) {
71   BilinearMicrokernelTester()
72     .pixels(1)
73     .channels(2)
74     .Test(xnn_f32_bilinear_ukernel__scalar_c2);
75 }
76 
TEST(F32_BILINEAR__SCALAR_C2,channels_div_2)77 TEST(F32_BILINEAR__SCALAR_C2, channels_div_2) {
78   for (size_t channels = 4; channels < 20; channels += 2) {
79     BilinearMicrokernelTester()
80       .pixels(1)
81       .channels(channels)
82       .Test(xnn_f32_bilinear_ukernel__scalar_c2);
83   }
84 }
85 
TEST(F32_BILINEAR__SCALAR_C2,channels_lt_2)86 TEST(F32_BILINEAR__SCALAR_C2, channels_lt_2) {
87   for (size_t channels = 1; channels < 2; channels++) {
88     BilinearMicrokernelTester()
89       .pixels(1)
90       .channels(channels)
91       .Test(xnn_f32_bilinear_ukernel__scalar_c2);
92   }
93 }
94 
TEST(F32_BILINEAR__SCALAR_C2,channels_gt_2)95 TEST(F32_BILINEAR__SCALAR_C2, channels_gt_2) {
96   for (size_t channels = 3; channels < 4; channels++) {
97     BilinearMicrokernelTester()
98       .pixels(1)
99       .channels(channels)
100       .Test(xnn_f32_bilinear_ukernel__scalar_c2);
101   }
102 }
103 
TEST(F32_BILINEAR__SCALAR_C2,pixels_gt_1)104 TEST(F32_BILINEAR__SCALAR_C2, pixels_gt_1) {
105   for (size_t pixels = 2; pixels < 3; pixels++) {
106     for (size_t channels = 1; channels <= 10; channels += 1) {
107       BilinearMicrokernelTester()
108         .pixels(pixels)
109         .channels(channels)
110         .Test(xnn_f32_bilinear_ukernel__scalar_c2);
111     }
112   }
113 }
114 
TEST(F32_BILINEAR__SCALAR_C2,input_offset)115 TEST(F32_BILINEAR__SCALAR_C2, input_offset) {
116   for (size_t pixels = 1; pixels < 5; pixels += 1) {
117     for (size_t channels = 1; channels <= 10; channels += 1) {
118       BilinearMicrokernelTester()
119         .pixels(pixels)
120         .channels(channels)
121         .input_offset(13)
122         .Test(xnn_f32_bilinear_ukernel__scalar_c2);
123     }
124   }
125 }
TEST(F32_BILINEAR__SCALAR_C2,output_stride)126 TEST(F32_BILINEAR__SCALAR_C2, output_stride) {
127   for (size_t pixels = 1; pixels < 5; pixels += 1) {
128     for (size_t channels = 1; channels <= 10; channels += 1) {
129       BilinearMicrokernelTester()
130         .pixels(pixels)
131         .channels(channels)
132         .output_stride(13)
133         .Test(xnn_f32_bilinear_ukernel__scalar_c2);
134     }
135   }
136 }
137 
TEST(F32_BILINEAR__SCALAR_C4,channels_eq_4)138 TEST(F32_BILINEAR__SCALAR_C4, channels_eq_4) {
139   BilinearMicrokernelTester()
140     .pixels(1)
141     .channels(4)
142     .Test(xnn_f32_bilinear_ukernel__scalar_c4);
143 }
144 
TEST(F32_BILINEAR__SCALAR_C4,channels_div_4)145 TEST(F32_BILINEAR__SCALAR_C4, channels_div_4) {
146   for (size_t channels = 8; channels < 40; channels += 4) {
147     BilinearMicrokernelTester()
148       .pixels(1)
149       .channels(channels)
150       .Test(xnn_f32_bilinear_ukernel__scalar_c4);
151   }
152 }
153 
TEST(F32_BILINEAR__SCALAR_C4,channels_lt_4)154 TEST(F32_BILINEAR__SCALAR_C4, channels_lt_4) {
155   for (size_t channels = 1; channels < 4; channels++) {
156     BilinearMicrokernelTester()
157       .pixels(1)
158       .channels(channels)
159       .Test(xnn_f32_bilinear_ukernel__scalar_c4);
160   }
161 }
162 
TEST(F32_BILINEAR__SCALAR_C4,channels_gt_4)163 TEST(F32_BILINEAR__SCALAR_C4, channels_gt_4) {
164   for (size_t channels = 5; channels < 8; channels++) {
165     BilinearMicrokernelTester()
166       .pixels(1)
167       .channels(channels)
168       .Test(xnn_f32_bilinear_ukernel__scalar_c4);
169   }
170 }
171 
TEST(F32_BILINEAR__SCALAR_C4,pixels_gt_1)172 TEST(F32_BILINEAR__SCALAR_C4, pixels_gt_1) {
173   for (size_t pixels = 2; pixels < 3; pixels++) {
174     for (size_t channels = 1; channels <= 20; channels += 3) {
175       BilinearMicrokernelTester()
176         .pixels(pixels)
177         .channels(channels)
178         .Test(xnn_f32_bilinear_ukernel__scalar_c4);
179     }
180   }
181 }
182 
TEST(F32_BILINEAR__SCALAR_C4,input_offset)183 TEST(F32_BILINEAR__SCALAR_C4, input_offset) {
184   for (size_t pixels = 1; pixels < 5; pixels += 1) {
185     for (size_t channels = 1; channels <= 20; channels += 3) {
186       BilinearMicrokernelTester()
187         .pixels(pixels)
188         .channels(channels)
189         .input_offset(23)
190         .Test(xnn_f32_bilinear_ukernel__scalar_c4);
191     }
192   }
193 }
TEST(F32_BILINEAR__SCALAR_C4,output_stride)194 TEST(F32_BILINEAR__SCALAR_C4, output_stride) {
195   for (size_t pixels = 1; pixels < 5; pixels += 1) {
196     for (size_t channels = 1; channels <= 20; channels += 3) {
197       BilinearMicrokernelTester()
198         .pixels(pixels)
199         .channels(channels)
200         .output_stride(23)
201         .Test(xnn_f32_bilinear_ukernel__scalar_c4);
202     }
203   }
204 }
205 
206 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_BILINEAR__NEON_C4,channels_eq_4)207   TEST(F32_BILINEAR__NEON_C4, channels_eq_4) {
208     TEST_REQUIRES_ARM_NEON;
209     BilinearMicrokernelTester()
210       .pixels(1)
211       .channels(4)
212       .Test(xnn_f32_bilinear_ukernel__neon_c4);
213   }
214 
TEST(F32_BILINEAR__NEON_C4,channels_div_4)215   TEST(F32_BILINEAR__NEON_C4, channels_div_4) {
216     TEST_REQUIRES_ARM_NEON;
217     for (size_t channels = 8; channels < 40; channels += 4) {
218       BilinearMicrokernelTester()
219         .pixels(1)
220         .channels(channels)
221         .Test(xnn_f32_bilinear_ukernel__neon_c4);
222     }
223   }
224 
TEST(F32_BILINEAR__NEON_C4,channels_lt_4)225   TEST(F32_BILINEAR__NEON_C4, channels_lt_4) {
226     TEST_REQUIRES_ARM_NEON;
227     for (size_t channels = 1; channels < 4; channels++) {
228       BilinearMicrokernelTester()
229         .pixels(1)
230         .channels(channels)
231         .Test(xnn_f32_bilinear_ukernel__neon_c4);
232     }
233   }
234 
TEST(F32_BILINEAR__NEON_C4,channels_gt_4)235   TEST(F32_BILINEAR__NEON_C4, channels_gt_4) {
236     TEST_REQUIRES_ARM_NEON;
237     for (size_t channels = 5; channels < 8; channels++) {
238       BilinearMicrokernelTester()
239         .pixels(1)
240         .channels(channels)
241         .Test(xnn_f32_bilinear_ukernel__neon_c4);
242     }
243   }
244 
TEST(F32_BILINEAR__NEON_C4,pixels_gt_1)245   TEST(F32_BILINEAR__NEON_C4, pixels_gt_1) {
246     TEST_REQUIRES_ARM_NEON;
247     for (size_t pixels = 2; pixels < 3; pixels++) {
248       for (size_t channels = 1; channels <= 20; channels += 3) {
249         BilinearMicrokernelTester()
250           .pixels(pixels)
251           .channels(channels)
252           .Test(xnn_f32_bilinear_ukernel__neon_c4);
253       }
254     }
255   }
256 
TEST(F32_BILINEAR__NEON_C4,input_offset)257   TEST(F32_BILINEAR__NEON_C4, input_offset) {
258     TEST_REQUIRES_ARM_NEON;
259     for (size_t pixels = 1; pixels < 5; pixels += 1) {
260       for (size_t channels = 1; channels <= 20; channels += 3) {
261         BilinearMicrokernelTester()
262           .pixels(pixels)
263           .channels(channels)
264           .input_offset(23)
265           .Test(xnn_f32_bilinear_ukernel__neon_c4);
266       }
267     }
268   }
TEST(F32_BILINEAR__NEON_C4,output_stride)269   TEST(F32_BILINEAR__NEON_C4, output_stride) {
270     TEST_REQUIRES_ARM_NEON;
271     for (size_t pixels = 1; pixels < 5; pixels += 1) {
272       for (size_t channels = 1; channels <= 20; channels += 3) {
273         BilinearMicrokernelTester()
274           .pixels(pixels)
275           .channels(channels)
276           .output_stride(23)
277           .Test(xnn_f32_bilinear_ukernel__neon_c4);
278       }
279     }
280   }
281 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
282 
283 
284 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_BILINEAR__NEON_C8,channels_eq_8)285   TEST(F32_BILINEAR__NEON_C8, channels_eq_8) {
286     TEST_REQUIRES_ARM_NEON;
287     BilinearMicrokernelTester()
288       .pixels(1)
289       .channels(8)
290       .Test(xnn_f32_bilinear_ukernel__neon_c8);
291   }
292 
TEST(F32_BILINEAR__NEON_C8,channels_div_8)293   TEST(F32_BILINEAR__NEON_C8, channels_div_8) {
294     TEST_REQUIRES_ARM_NEON;
295     for (size_t channels = 16; channels < 80; channels += 8) {
296       BilinearMicrokernelTester()
297         .pixels(1)
298         .channels(channels)
299         .Test(xnn_f32_bilinear_ukernel__neon_c8);
300     }
301   }
302 
TEST(F32_BILINEAR__NEON_C8,channels_lt_8)303   TEST(F32_BILINEAR__NEON_C8, channels_lt_8) {
304     TEST_REQUIRES_ARM_NEON;
305     for (size_t channels = 1; channels < 8; channels++) {
306       BilinearMicrokernelTester()
307         .pixels(1)
308         .channels(channels)
309         .Test(xnn_f32_bilinear_ukernel__neon_c8);
310     }
311   }
312 
TEST(F32_BILINEAR__NEON_C8,channels_gt_8)313   TEST(F32_BILINEAR__NEON_C8, channels_gt_8) {
314     TEST_REQUIRES_ARM_NEON;
315     for (size_t channels = 9; channels < 16; channels++) {
316       BilinearMicrokernelTester()
317         .pixels(1)
318         .channels(channels)
319         .Test(xnn_f32_bilinear_ukernel__neon_c8);
320     }
321   }
322 
TEST(F32_BILINEAR__NEON_C8,pixels_gt_1)323   TEST(F32_BILINEAR__NEON_C8, pixels_gt_1) {
324     TEST_REQUIRES_ARM_NEON;
325     for (size_t pixels = 2; pixels < 3; pixels++) {
326       for (size_t channels = 1; channels <= 40; channels += 7) {
327         BilinearMicrokernelTester()
328           .pixels(pixels)
329           .channels(channels)
330           .Test(xnn_f32_bilinear_ukernel__neon_c8);
331       }
332     }
333   }
334 
TEST(F32_BILINEAR__NEON_C8,input_offset)335   TEST(F32_BILINEAR__NEON_C8, input_offset) {
336     TEST_REQUIRES_ARM_NEON;
337     for (size_t pixels = 1; pixels < 5; pixels += 1) {
338       for (size_t channels = 1; channels <= 40; channels += 7) {
339         BilinearMicrokernelTester()
340           .pixels(pixels)
341           .channels(channels)
342           .input_offset(43)
343           .Test(xnn_f32_bilinear_ukernel__neon_c8);
344       }
345     }
346   }
TEST(F32_BILINEAR__NEON_C8,output_stride)347   TEST(F32_BILINEAR__NEON_C8, output_stride) {
348     TEST_REQUIRES_ARM_NEON;
349     for (size_t pixels = 1; pixels < 5; pixels += 1) {
350       for (size_t channels = 1; channels <= 40; channels += 7) {
351         BilinearMicrokernelTester()
352           .pixels(pixels)
353           .channels(channels)
354           .output_stride(43)
355           .Test(xnn_f32_bilinear_ukernel__neon_c8);
356       }
357     }
358   }
359 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
360 
361 
362 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_BILINEAR__NEONFMA_C4,channels_eq_4)363   TEST(F32_BILINEAR__NEONFMA_C4, channels_eq_4) {
364     TEST_REQUIRES_ARM_NEON_FMA;
365     BilinearMicrokernelTester()
366       .pixels(1)
367       .channels(4)
368       .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
369   }
370 
TEST(F32_BILINEAR__NEONFMA_C4,channels_div_4)371   TEST(F32_BILINEAR__NEONFMA_C4, channels_div_4) {
372     TEST_REQUIRES_ARM_NEON_FMA;
373     for (size_t channels = 8; channels < 40; channels += 4) {
374       BilinearMicrokernelTester()
375         .pixels(1)
376         .channels(channels)
377         .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
378     }
379   }
380 
TEST(F32_BILINEAR__NEONFMA_C4,channels_lt_4)381   TEST(F32_BILINEAR__NEONFMA_C4, channels_lt_4) {
382     TEST_REQUIRES_ARM_NEON_FMA;
383     for (size_t channels = 1; channels < 4; channels++) {
384       BilinearMicrokernelTester()
385         .pixels(1)
386         .channels(channels)
387         .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
388     }
389   }
390 
TEST(F32_BILINEAR__NEONFMA_C4,channels_gt_4)391   TEST(F32_BILINEAR__NEONFMA_C4, channels_gt_4) {
392     TEST_REQUIRES_ARM_NEON_FMA;
393     for (size_t channels = 5; channels < 8; channels++) {
394       BilinearMicrokernelTester()
395         .pixels(1)
396         .channels(channels)
397         .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
398     }
399   }
400 
TEST(F32_BILINEAR__NEONFMA_C4,pixels_gt_1)401   TEST(F32_BILINEAR__NEONFMA_C4, pixels_gt_1) {
402     TEST_REQUIRES_ARM_NEON_FMA;
403     for (size_t pixels = 2; pixels < 3; pixels++) {
404       for (size_t channels = 1; channels <= 20; channels += 3) {
405         BilinearMicrokernelTester()
406           .pixels(pixels)
407           .channels(channels)
408           .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
409       }
410     }
411   }
412 
TEST(F32_BILINEAR__NEONFMA_C4,input_offset)413   TEST(F32_BILINEAR__NEONFMA_C4, input_offset) {
414     TEST_REQUIRES_ARM_NEON_FMA;
415     for (size_t pixels = 1; pixels < 5; pixels += 1) {
416       for (size_t channels = 1; channels <= 20; channels += 3) {
417         BilinearMicrokernelTester()
418           .pixels(pixels)
419           .channels(channels)
420           .input_offset(23)
421           .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
422       }
423     }
424   }
TEST(F32_BILINEAR__NEONFMA_C4,output_stride)425   TEST(F32_BILINEAR__NEONFMA_C4, output_stride) {
426     TEST_REQUIRES_ARM_NEON_FMA;
427     for (size_t pixels = 1; pixels < 5; pixels += 1) {
428       for (size_t channels = 1; channels <= 20; channels += 3) {
429         BilinearMicrokernelTester()
430           .pixels(pixels)
431           .channels(channels)
432           .output_stride(23)
433           .Test(xnn_f32_bilinear_ukernel__neonfma_c4);
434       }
435     }
436   }
437 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
438 
439 
440 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_BILINEAR__NEONFMA_C8,channels_eq_8)441   TEST(F32_BILINEAR__NEONFMA_C8, channels_eq_8) {
442     TEST_REQUIRES_ARM_NEON_FMA;
443     BilinearMicrokernelTester()
444       .pixels(1)
445       .channels(8)
446       .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
447   }
448 
TEST(F32_BILINEAR__NEONFMA_C8,channels_div_8)449   TEST(F32_BILINEAR__NEONFMA_C8, channels_div_8) {
450     TEST_REQUIRES_ARM_NEON_FMA;
451     for (size_t channels = 16; channels < 80; channels += 8) {
452       BilinearMicrokernelTester()
453         .pixels(1)
454         .channels(channels)
455         .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
456     }
457   }
458 
TEST(F32_BILINEAR__NEONFMA_C8,channels_lt_8)459   TEST(F32_BILINEAR__NEONFMA_C8, channels_lt_8) {
460     TEST_REQUIRES_ARM_NEON_FMA;
461     for (size_t channels = 1; channels < 8; channels++) {
462       BilinearMicrokernelTester()
463         .pixels(1)
464         .channels(channels)
465         .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
466     }
467   }
468 
TEST(F32_BILINEAR__NEONFMA_C8,channels_gt_8)469   TEST(F32_BILINEAR__NEONFMA_C8, channels_gt_8) {
470     TEST_REQUIRES_ARM_NEON_FMA;
471     for (size_t channels = 9; channels < 16; channels++) {
472       BilinearMicrokernelTester()
473         .pixels(1)
474         .channels(channels)
475         .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
476     }
477   }
478 
TEST(F32_BILINEAR__NEONFMA_C8,pixels_gt_1)479   TEST(F32_BILINEAR__NEONFMA_C8, pixels_gt_1) {
480     TEST_REQUIRES_ARM_NEON_FMA;
481     for (size_t pixels = 2; pixels < 3; pixels++) {
482       for (size_t channels = 1; channels <= 40; channels += 7) {
483         BilinearMicrokernelTester()
484           .pixels(pixels)
485           .channels(channels)
486           .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
487       }
488     }
489   }
490 
TEST(F32_BILINEAR__NEONFMA_C8,input_offset)491   TEST(F32_BILINEAR__NEONFMA_C8, input_offset) {
492     TEST_REQUIRES_ARM_NEON_FMA;
493     for (size_t pixels = 1; pixels < 5; pixels += 1) {
494       for (size_t channels = 1; channels <= 40; channels += 7) {
495         BilinearMicrokernelTester()
496           .pixels(pixels)
497           .channels(channels)
498           .input_offset(43)
499           .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
500       }
501     }
502   }
TEST(F32_BILINEAR__NEONFMA_C8,output_stride)503   TEST(F32_BILINEAR__NEONFMA_C8, output_stride) {
504     TEST_REQUIRES_ARM_NEON_FMA;
505     for (size_t pixels = 1; pixels < 5; pixels += 1) {
506       for (size_t channels = 1; channels <= 40; channels += 7) {
507         BilinearMicrokernelTester()
508           .pixels(pixels)
509           .channels(channels)
510           .output_stride(43)
511           .Test(xnn_f32_bilinear_ukernel__neonfma_c8);
512       }
513     }
514   }
515 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
516 
517 
518 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_BILINEAR__SSE_C4,channels_eq_4)519   TEST(F32_BILINEAR__SSE_C4, channels_eq_4) {
520     TEST_REQUIRES_X86_SSE;
521     BilinearMicrokernelTester()
522       .pixels(1)
523       .channels(4)
524       .Test(xnn_f32_bilinear_ukernel__sse_c4);
525   }
526 
TEST(F32_BILINEAR__SSE_C4,channels_div_4)527   TEST(F32_BILINEAR__SSE_C4, channels_div_4) {
528     TEST_REQUIRES_X86_SSE;
529     for (size_t channels = 8; channels < 40; channels += 4) {
530       BilinearMicrokernelTester()
531         .pixels(1)
532         .channels(channels)
533         .Test(xnn_f32_bilinear_ukernel__sse_c4);
534     }
535   }
536 
TEST(F32_BILINEAR__SSE_C4,channels_lt_4)537   TEST(F32_BILINEAR__SSE_C4, channels_lt_4) {
538     TEST_REQUIRES_X86_SSE;
539     for (size_t channels = 1; channels < 4; channels++) {
540       BilinearMicrokernelTester()
541         .pixels(1)
542         .channels(channels)
543         .Test(xnn_f32_bilinear_ukernel__sse_c4);
544     }
545   }
546 
TEST(F32_BILINEAR__SSE_C4,channels_gt_4)547   TEST(F32_BILINEAR__SSE_C4, channels_gt_4) {
548     TEST_REQUIRES_X86_SSE;
549     for (size_t channels = 5; channels < 8; channels++) {
550       BilinearMicrokernelTester()
551         .pixels(1)
552         .channels(channels)
553         .Test(xnn_f32_bilinear_ukernel__sse_c4);
554     }
555   }
556 
TEST(F32_BILINEAR__SSE_C4,pixels_gt_1)557   TEST(F32_BILINEAR__SSE_C4, pixels_gt_1) {
558     TEST_REQUIRES_X86_SSE;
559     for (size_t pixels = 2; pixels < 3; pixels++) {
560       for (size_t channels = 1; channels <= 20; channels += 3) {
561         BilinearMicrokernelTester()
562           .pixels(pixels)
563           .channels(channels)
564           .Test(xnn_f32_bilinear_ukernel__sse_c4);
565       }
566     }
567   }
568 
TEST(F32_BILINEAR__SSE_C4,input_offset)569   TEST(F32_BILINEAR__SSE_C4, input_offset) {
570     TEST_REQUIRES_X86_SSE;
571     for (size_t pixels = 1; pixels < 5; pixels += 1) {
572       for (size_t channels = 1; channels <= 20; channels += 3) {
573         BilinearMicrokernelTester()
574           .pixels(pixels)
575           .channels(channels)
576           .input_offset(23)
577           .Test(xnn_f32_bilinear_ukernel__sse_c4);
578       }
579     }
580   }
TEST(F32_BILINEAR__SSE_C4,output_stride)581   TEST(F32_BILINEAR__SSE_C4, output_stride) {
582     TEST_REQUIRES_X86_SSE;
583     for (size_t pixels = 1; pixels < 5; pixels += 1) {
584       for (size_t channels = 1; channels <= 20; channels += 3) {
585         BilinearMicrokernelTester()
586           .pixels(pixels)
587           .channels(channels)
588           .output_stride(23)
589           .Test(xnn_f32_bilinear_ukernel__sse_c4);
590       }
591     }
592   }
593 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
594 
595 
596 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_BILINEAR__SSE_C8,channels_eq_8)597   TEST(F32_BILINEAR__SSE_C8, channels_eq_8) {
598     TEST_REQUIRES_X86_SSE;
599     BilinearMicrokernelTester()
600       .pixels(1)
601       .channels(8)
602       .Test(xnn_f32_bilinear_ukernel__sse_c8);
603   }
604 
TEST(F32_BILINEAR__SSE_C8,channels_div_8)605   TEST(F32_BILINEAR__SSE_C8, channels_div_8) {
606     TEST_REQUIRES_X86_SSE;
607     for (size_t channels = 16; channels < 80; channels += 8) {
608       BilinearMicrokernelTester()
609         .pixels(1)
610         .channels(channels)
611         .Test(xnn_f32_bilinear_ukernel__sse_c8);
612     }
613   }
614 
TEST(F32_BILINEAR__SSE_C8,channels_lt_8)615   TEST(F32_BILINEAR__SSE_C8, channels_lt_8) {
616     TEST_REQUIRES_X86_SSE;
617     for (size_t channels = 1; channels < 8; channels++) {
618       BilinearMicrokernelTester()
619         .pixels(1)
620         .channels(channels)
621         .Test(xnn_f32_bilinear_ukernel__sse_c8);
622     }
623   }
624 
TEST(F32_BILINEAR__SSE_C8,channels_gt_8)625   TEST(F32_BILINEAR__SSE_C8, channels_gt_8) {
626     TEST_REQUIRES_X86_SSE;
627     for (size_t channels = 9; channels < 16; channels++) {
628       BilinearMicrokernelTester()
629         .pixels(1)
630         .channels(channels)
631         .Test(xnn_f32_bilinear_ukernel__sse_c8);
632     }
633   }
634 
TEST(F32_BILINEAR__SSE_C8,pixels_gt_1)635   TEST(F32_BILINEAR__SSE_C8, pixels_gt_1) {
636     TEST_REQUIRES_X86_SSE;
637     for (size_t pixels = 2; pixels < 3; pixels++) {
638       for (size_t channels = 1; channels <= 40; channels += 7) {
639         BilinearMicrokernelTester()
640           .pixels(pixels)
641           .channels(channels)
642           .Test(xnn_f32_bilinear_ukernel__sse_c8);
643       }
644     }
645   }
646 
TEST(F32_BILINEAR__SSE_C8,input_offset)647   TEST(F32_BILINEAR__SSE_C8, input_offset) {
648     TEST_REQUIRES_X86_SSE;
649     for (size_t pixels = 1; pixels < 5; pixels += 1) {
650       for (size_t channels = 1; channels <= 40; channels += 7) {
651         BilinearMicrokernelTester()
652           .pixels(pixels)
653           .channels(channels)
654           .input_offset(43)
655           .Test(xnn_f32_bilinear_ukernel__sse_c8);
656       }
657     }
658   }
TEST(F32_BILINEAR__SSE_C8,output_stride)659   TEST(F32_BILINEAR__SSE_C8, output_stride) {
660     TEST_REQUIRES_X86_SSE;
661     for (size_t pixels = 1; pixels < 5; pixels += 1) {
662       for (size_t channels = 1; channels <= 40; channels += 7) {
663         BilinearMicrokernelTester()
664           .pixels(pixels)
665           .channels(channels)
666           .output_stride(43)
667           .Test(xnn_f32_bilinear_ukernel__sse_c8);
668       }
669     }
670   }
671 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
672 
673 
674 #if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM
TEST(F32_BILINEAR__PSIMD_C4,channels_eq_4)675   TEST(F32_BILINEAR__PSIMD_C4, channels_eq_4) {
676     TEST_REQUIRES_PSIMD;
677     BilinearMicrokernelTester()
678       .pixels(1)
679       .channels(4)
680       .Test(xnn_f32_bilinear_ukernel__psimd_c4);
681   }
682 
TEST(F32_BILINEAR__PSIMD_C4,channels_div_4)683   TEST(F32_BILINEAR__PSIMD_C4, channels_div_4) {
684     TEST_REQUIRES_PSIMD;
685     for (size_t channels = 8; channels < 40; channels += 4) {
686       BilinearMicrokernelTester()
687         .pixels(1)
688         .channels(channels)
689         .Test(xnn_f32_bilinear_ukernel__psimd_c4);
690     }
691   }
692 
TEST(F32_BILINEAR__PSIMD_C4,channels_lt_4)693   TEST(F32_BILINEAR__PSIMD_C4, channels_lt_4) {
694     TEST_REQUIRES_PSIMD;
695     for (size_t channels = 1; channels < 4; channels++) {
696       BilinearMicrokernelTester()
697         .pixels(1)
698         .channels(channels)
699         .Test(xnn_f32_bilinear_ukernel__psimd_c4);
700     }
701   }
702 
TEST(F32_BILINEAR__PSIMD_C4,channels_gt_4)703   TEST(F32_BILINEAR__PSIMD_C4, channels_gt_4) {
704     TEST_REQUIRES_PSIMD;
705     for (size_t channels = 5; channels < 8; channels++) {
706       BilinearMicrokernelTester()
707         .pixels(1)
708         .channels(channels)
709         .Test(xnn_f32_bilinear_ukernel__psimd_c4);
710     }
711   }
712 
TEST(F32_BILINEAR__PSIMD_C4,pixels_gt_1)713   TEST(F32_BILINEAR__PSIMD_C4, pixels_gt_1) {
714     TEST_REQUIRES_PSIMD;
715     for (size_t pixels = 2; pixels < 3; pixels++) {
716       for (size_t channels = 1; channels <= 20; channels += 3) {
717         BilinearMicrokernelTester()
718           .pixels(pixels)
719           .channels(channels)
720           .Test(xnn_f32_bilinear_ukernel__psimd_c4);
721       }
722     }
723   }
724 
TEST(F32_BILINEAR__PSIMD_C4,input_offset)725   TEST(F32_BILINEAR__PSIMD_C4, input_offset) {
726     TEST_REQUIRES_PSIMD;
727     for (size_t pixels = 1; pixels < 5; pixels += 1) {
728       for (size_t channels = 1; channels <= 20; channels += 3) {
729         BilinearMicrokernelTester()
730           .pixels(pixels)
731           .channels(channels)
732           .input_offset(23)
733           .Test(xnn_f32_bilinear_ukernel__psimd_c4);
734       }
735     }
736   }
TEST(F32_BILINEAR__PSIMD_C4,output_stride)737   TEST(F32_BILINEAR__PSIMD_C4, output_stride) {
738     TEST_REQUIRES_PSIMD;
739     for (size_t pixels = 1; pixels < 5; pixels += 1) {
740       for (size_t channels = 1; channels <= 20; channels += 3) {
741         BilinearMicrokernelTester()
742           .pixels(pixels)
743           .channels(channels)
744           .output_stride(23)
745           .Test(xnn_f32_bilinear_ukernel__psimd_c4);
746       }
747     }
748   }
749 #endif  // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM
750 
751 
752 #if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM
TEST(F32_BILINEAR__PSIMD_C8,channels_eq_8)753   TEST(F32_BILINEAR__PSIMD_C8, channels_eq_8) {
754     TEST_REQUIRES_PSIMD;
755     BilinearMicrokernelTester()
756       .pixels(1)
757       .channels(8)
758       .Test(xnn_f32_bilinear_ukernel__psimd_c8);
759   }
760 
TEST(F32_BILINEAR__PSIMD_C8,channels_div_8)761   TEST(F32_BILINEAR__PSIMD_C8, channels_div_8) {
762     TEST_REQUIRES_PSIMD;
763     for (size_t channels = 16; channels < 80; channels += 8) {
764       BilinearMicrokernelTester()
765         .pixels(1)
766         .channels(channels)
767         .Test(xnn_f32_bilinear_ukernel__psimd_c8);
768     }
769   }
770 
TEST(F32_BILINEAR__PSIMD_C8,channels_lt_8)771   TEST(F32_BILINEAR__PSIMD_C8, channels_lt_8) {
772     TEST_REQUIRES_PSIMD;
773     for (size_t channels = 1; channels < 8; channels++) {
774       BilinearMicrokernelTester()
775         .pixels(1)
776         .channels(channels)
777         .Test(xnn_f32_bilinear_ukernel__psimd_c8);
778     }
779   }
780 
TEST(F32_BILINEAR__PSIMD_C8,channels_gt_8)781   TEST(F32_BILINEAR__PSIMD_C8, channels_gt_8) {
782     TEST_REQUIRES_PSIMD;
783     for (size_t channels = 9; channels < 16; channels++) {
784       BilinearMicrokernelTester()
785         .pixels(1)
786         .channels(channels)
787         .Test(xnn_f32_bilinear_ukernel__psimd_c8);
788     }
789   }
790 
TEST(F32_BILINEAR__PSIMD_C8,pixels_gt_1)791   TEST(F32_BILINEAR__PSIMD_C8, pixels_gt_1) {
792     TEST_REQUIRES_PSIMD;
793     for (size_t pixels = 2; pixels < 3; pixels++) {
794       for (size_t channels = 1; channels <= 40; channels += 7) {
795         BilinearMicrokernelTester()
796           .pixels(pixels)
797           .channels(channels)
798           .Test(xnn_f32_bilinear_ukernel__psimd_c8);
799       }
800     }
801   }
802 
TEST(F32_BILINEAR__PSIMD_C8,input_offset)803   TEST(F32_BILINEAR__PSIMD_C8, input_offset) {
804     TEST_REQUIRES_PSIMD;
805     for (size_t pixels = 1; pixels < 5; pixels += 1) {
806       for (size_t channels = 1; channels <= 40; channels += 7) {
807         BilinearMicrokernelTester()
808           .pixels(pixels)
809           .channels(channels)
810           .input_offset(43)
811           .Test(xnn_f32_bilinear_ukernel__psimd_c8);
812       }
813     }
814   }
TEST(F32_BILINEAR__PSIMD_C8,output_stride)815   TEST(F32_BILINEAR__PSIMD_C8, output_stride) {
816     TEST_REQUIRES_PSIMD;
817     for (size_t pixels = 1; pixels < 5; pixels += 1) {
818       for (size_t channels = 1; channels <= 40; channels += 7) {
819         BilinearMicrokernelTester()
820           .pixels(pixels)
821           .channels(channels)
822           .output_stride(43)
823           .Test(xnn_f32_bilinear_ukernel__psimd_c8);
824       }
825     }
826   }
827 #endif  // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM
828