xref: /aosp_15_r20/external/XNNPACK/test/f16-ibilinear.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
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/f16-ibilinear.yaml
8 //   Generator: tools/generate-ibilinear-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/ibilinear.h>
17 #include "ibilinear-microkernel-tester.h"
18 
19 
20 #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
TEST(F16_IBILINEAR__NEONFP16ARITH_C8,channels_eq_8)21   TEST(F16_IBILINEAR__NEONFP16ARITH_C8, channels_eq_8) {
22     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
23     IBilinearMicrokernelTester()
24       .pixels(1)
25       .channels(8)
26       .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c8);
27   }
28 
TEST(F16_IBILINEAR__NEONFP16ARITH_C8,channels_div_8)29   TEST(F16_IBILINEAR__NEONFP16ARITH_C8, channels_div_8) {
30     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
31     for (size_t channels = 16; channels < 80; channels += 8) {
32       IBilinearMicrokernelTester()
33         .pixels(1)
34         .channels(channels)
35         .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c8);
36     }
37   }
38 
TEST(F16_IBILINEAR__NEONFP16ARITH_C8,channels_lt_8)39   TEST(F16_IBILINEAR__NEONFP16ARITH_C8, channels_lt_8) {
40     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
41     for (size_t channels = 1; channels < 8; channels++) {
42       IBilinearMicrokernelTester()
43         .pixels(1)
44         .channels(channels)
45         .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c8);
46     }
47   }
48 
TEST(F16_IBILINEAR__NEONFP16ARITH_C8,channels_gt_8)49   TEST(F16_IBILINEAR__NEONFP16ARITH_C8, channels_gt_8) {
50     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
51     for (size_t channels = 9; channels < 16; channels++) {
52       IBilinearMicrokernelTester()
53         .pixels(1)
54         .channels(channels)
55         .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c8);
56     }
57   }
58 
TEST(F16_IBILINEAR__NEONFP16ARITH_C8,pixels_gt_1)59   TEST(F16_IBILINEAR__NEONFP16ARITH_C8, pixels_gt_1) {
60     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
61     for (size_t pixels = 2; pixels < 3; pixels++) {
62       for (size_t channels = 1; channels <= 40; channels += 7) {
63         IBilinearMicrokernelTester()
64           .pixels(pixels)
65           .channels(channels)
66           .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c8);
67       }
68     }
69   }
70 
TEST(F16_IBILINEAR__NEONFP16ARITH_C8,input_offset)71   TEST(F16_IBILINEAR__NEONFP16ARITH_C8, input_offset) {
72     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
73     for (size_t pixels = 1; pixels < 5; pixels += 1) {
74       for (size_t channels = 1; channels <= 40; channels += 7) {
75         IBilinearMicrokernelTester()
76           .pixels(pixels)
77           .channels(channels)
78           .input_offset(43)
79           .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c8);
80       }
81     }
82   }
83 
TEST(F16_IBILINEAR__NEONFP16ARITH_C8,output_stride)84   TEST(F16_IBILINEAR__NEONFP16ARITH_C8, output_stride) {
85     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
86     for (size_t pixels = 1; pixels < 5; pixels += 1) {
87       for (size_t channels = 1; channels <= 40; channels += 7) {
88         IBilinearMicrokernelTester()
89           .pixels(pixels)
90           .channels(channels)
91           .output_stride(43)
92           .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c8);
93       }
94     }
95   }
96 #endif  // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
97 
98 
99 #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
TEST(F16_IBILINEAR__NEONFP16ARITH_C16,channels_eq_16)100   TEST(F16_IBILINEAR__NEONFP16ARITH_C16, channels_eq_16) {
101     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
102     IBilinearMicrokernelTester()
103       .pixels(1)
104       .channels(16)
105       .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c16);
106   }
107 
TEST(F16_IBILINEAR__NEONFP16ARITH_C16,channels_div_16)108   TEST(F16_IBILINEAR__NEONFP16ARITH_C16, channels_div_16) {
109     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
110     for (size_t channels = 32; channels < 160; channels += 16) {
111       IBilinearMicrokernelTester()
112         .pixels(1)
113         .channels(channels)
114         .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c16);
115     }
116   }
117 
TEST(F16_IBILINEAR__NEONFP16ARITH_C16,channels_lt_16)118   TEST(F16_IBILINEAR__NEONFP16ARITH_C16, channels_lt_16) {
119     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
120     for (size_t channels = 1; channels < 16; channels++) {
121       IBilinearMicrokernelTester()
122         .pixels(1)
123         .channels(channels)
124         .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c16);
125     }
126   }
127 
TEST(F16_IBILINEAR__NEONFP16ARITH_C16,channels_gt_16)128   TEST(F16_IBILINEAR__NEONFP16ARITH_C16, channels_gt_16) {
129     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
130     for (size_t channels = 17; channels < 32; channels++) {
131       IBilinearMicrokernelTester()
132         .pixels(1)
133         .channels(channels)
134         .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c16);
135     }
136   }
137 
TEST(F16_IBILINEAR__NEONFP16ARITH_C16,pixels_gt_1)138   TEST(F16_IBILINEAR__NEONFP16ARITH_C16, pixels_gt_1) {
139     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
140     for (size_t pixels = 2; pixels < 3; pixels++) {
141       for (size_t channels = 1; channels <= 80; channels += 15) {
142         IBilinearMicrokernelTester()
143           .pixels(pixels)
144           .channels(channels)
145           .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c16);
146       }
147     }
148   }
149 
TEST(F16_IBILINEAR__NEONFP16ARITH_C16,input_offset)150   TEST(F16_IBILINEAR__NEONFP16ARITH_C16, input_offset) {
151     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
152     for (size_t pixels = 1; pixels < 5; pixels += 1) {
153       for (size_t channels = 1; channels <= 80; channels += 15) {
154         IBilinearMicrokernelTester()
155           .pixels(pixels)
156           .channels(channels)
157           .input_offset(83)
158           .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c16);
159       }
160     }
161   }
162 
TEST(F16_IBILINEAR__NEONFP16ARITH_C16,output_stride)163   TEST(F16_IBILINEAR__NEONFP16ARITH_C16, output_stride) {
164     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
165     for (size_t pixels = 1; pixels < 5; pixels += 1) {
166       for (size_t channels = 1; channels <= 80; channels += 15) {
167         IBilinearMicrokernelTester()
168           .pixels(pixels)
169           .channels(channels)
170           .output_stride(83)
171           .Test(xnn_f16_ibilinear_ukernel__neonfp16arith_c16);
172       }
173     }
174   }
175 #endif  // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
176 
177 
178 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F16_IBILINEAR__FMA3_C8,channels_eq_8)179   TEST(F16_IBILINEAR__FMA3_C8, channels_eq_8) {
180     TEST_REQUIRES_X86_FMA3;
181     IBilinearMicrokernelTester()
182       .pixels(1)
183       .channels(8)
184       .Test(xnn_f16_ibilinear_ukernel__fma3_c8);
185   }
186 
TEST(F16_IBILINEAR__FMA3_C8,channels_div_8)187   TEST(F16_IBILINEAR__FMA3_C8, channels_div_8) {
188     TEST_REQUIRES_X86_FMA3;
189     for (size_t channels = 16; channels < 80; channels += 8) {
190       IBilinearMicrokernelTester()
191         .pixels(1)
192         .channels(channels)
193         .Test(xnn_f16_ibilinear_ukernel__fma3_c8);
194     }
195   }
196 
TEST(F16_IBILINEAR__FMA3_C8,channels_lt_8)197   TEST(F16_IBILINEAR__FMA3_C8, channels_lt_8) {
198     TEST_REQUIRES_X86_FMA3;
199     for (size_t channels = 1; channels < 8; channels++) {
200       IBilinearMicrokernelTester()
201         .pixels(1)
202         .channels(channels)
203         .Test(xnn_f16_ibilinear_ukernel__fma3_c8);
204     }
205   }
206 
TEST(F16_IBILINEAR__FMA3_C8,channels_gt_8)207   TEST(F16_IBILINEAR__FMA3_C8, channels_gt_8) {
208     TEST_REQUIRES_X86_FMA3;
209     for (size_t channels = 9; channels < 16; channels++) {
210       IBilinearMicrokernelTester()
211         .pixels(1)
212         .channels(channels)
213         .Test(xnn_f16_ibilinear_ukernel__fma3_c8);
214     }
215   }
216 
TEST(F16_IBILINEAR__FMA3_C8,pixels_gt_1)217   TEST(F16_IBILINEAR__FMA3_C8, pixels_gt_1) {
218     TEST_REQUIRES_X86_FMA3;
219     for (size_t pixels = 2; pixels < 3; pixels++) {
220       for (size_t channels = 1; channels <= 40; channels += 7) {
221         IBilinearMicrokernelTester()
222           .pixels(pixels)
223           .channels(channels)
224           .Test(xnn_f16_ibilinear_ukernel__fma3_c8);
225       }
226     }
227   }
228 
TEST(F16_IBILINEAR__FMA3_C8,input_offset)229   TEST(F16_IBILINEAR__FMA3_C8, input_offset) {
230     TEST_REQUIRES_X86_FMA3;
231     for (size_t pixels = 1; pixels < 5; pixels += 1) {
232       for (size_t channels = 1; channels <= 40; channels += 7) {
233         IBilinearMicrokernelTester()
234           .pixels(pixels)
235           .channels(channels)
236           .input_offset(43)
237           .Test(xnn_f16_ibilinear_ukernel__fma3_c8);
238       }
239     }
240   }
241 
TEST(F16_IBILINEAR__FMA3_C8,output_stride)242   TEST(F16_IBILINEAR__FMA3_C8, output_stride) {
243     TEST_REQUIRES_X86_FMA3;
244     for (size_t pixels = 1; pixels < 5; pixels += 1) {
245       for (size_t channels = 1; channels <= 40; channels += 7) {
246         IBilinearMicrokernelTester()
247           .pixels(pixels)
248           .channels(channels)
249           .output_stride(43)
250           .Test(xnn_f16_ibilinear_ukernel__fma3_c8);
251       }
252     }
253   }
254 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
255 
256 
257 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F16_IBILINEAR__FMA3_C16,channels_eq_16)258   TEST(F16_IBILINEAR__FMA3_C16, channels_eq_16) {
259     TEST_REQUIRES_X86_FMA3;
260     IBilinearMicrokernelTester()
261       .pixels(1)
262       .channels(16)
263       .Test(xnn_f16_ibilinear_ukernel__fma3_c16);
264   }
265 
TEST(F16_IBILINEAR__FMA3_C16,channels_div_16)266   TEST(F16_IBILINEAR__FMA3_C16, channels_div_16) {
267     TEST_REQUIRES_X86_FMA3;
268     for (size_t channels = 32; channels < 160; channels += 16) {
269       IBilinearMicrokernelTester()
270         .pixels(1)
271         .channels(channels)
272         .Test(xnn_f16_ibilinear_ukernel__fma3_c16);
273     }
274   }
275 
TEST(F16_IBILINEAR__FMA3_C16,channels_lt_16)276   TEST(F16_IBILINEAR__FMA3_C16, channels_lt_16) {
277     TEST_REQUIRES_X86_FMA3;
278     for (size_t channels = 1; channels < 16; channels++) {
279       IBilinearMicrokernelTester()
280         .pixels(1)
281         .channels(channels)
282         .Test(xnn_f16_ibilinear_ukernel__fma3_c16);
283     }
284   }
285 
TEST(F16_IBILINEAR__FMA3_C16,channels_gt_16)286   TEST(F16_IBILINEAR__FMA3_C16, channels_gt_16) {
287     TEST_REQUIRES_X86_FMA3;
288     for (size_t channels = 17; channels < 32; channels++) {
289       IBilinearMicrokernelTester()
290         .pixels(1)
291         .channels(channels)
292         .Test(xnn_f16_ibilinear_ukernel__fma3_c16);
293     }
294   }
295 
TEST(F16_IBILINEAR__FMA3_C16,pixels_gt_1)296   TEST(F16_IBILINEAR__FMA3_C16, pixels_gt_1) {
297     TEST_REQUIRES_X86_FMA3;
298     for (size_t pixels = 2; pixels < 3; pixels++) {
299       for (size_t channels = 1; channels <= 80; channels += 15) {
300         IBilinearMicrokernelTester()
301           .pixels(pixels)
302           .channels(channels)
303           .Test(xnn_f16_ibilinear_ukernel__fma3_c16);
304       }
305     }
306   }
307 
TEST(F16_IBILINEAR__FMA3_C16,input_offset)308   TEST(F16_IBILINEAR__FMA3_C16, input_offset) {
309     TEST_REQUIRES_X86_FMA3;
310     for (size_t pixels = 1; pixels < 5; pixels += 1) {
311       for (size_t channels = 1; channels <= 80; channels += 15) {
312         IBilinearMicrokernelTester()
313           .pixels(pixels)
314           .channels(channels)
315           .input_offset(83)
316           .Test(xnn_f16_ibilinear_ukernel__fma3_c16);
317       }
318     }
319   }
320 
TEST(F16_IBILINEAR__FMA3_C16,output_stride)321   TEST(F16_IBILINEAR__FMA3_C16, output_stride) {
322     TEST_REQUIRES_X86_FMA3;
323     for (size_t pixels = 1; pixels < 5; pixels += 1) {
324       for (size_t channels = 1; channels <= 80; channels += 15) {
325         IBilinearMicrokernelTester()
326           .pixels(pixels)
327           .channels(channels)
328           .output_stride(83)
329           .Test(xnn_f16_ibilinear_ukernel__fma3_c16);
330       }
331     }
332   }
333 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
334