xref: /aosp_15_r20/external/XNNPACK/test/f32-rmax.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1*4bdc9457SAndroid Build Coastguard Worker // Copyright 2019 Google LLC
2*4bdc9457SAndroid Build Coastguard Worker //
3*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the
4*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree.
5*4bdc9457SAndroid Build Coastguard Worker 
6*4bdc9457SAndroid Build Coastguard Worker #include <gtest/gtest.h>
7*4bdc9457SAndroid Build Coastguard Worker 
8*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h>
9*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/isa-checks.h>
10*4bdc9457SAndroid Build Coastguard Worker 
11*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/rmax.h>
12*4bdc9457SAndroid Build Coastguard Worker #include "rmax-microkernel-tester.h"
13*4bdc9457SAndroid Build Coastguard Worker 
14*4bdc9457SAndroid Build Coastguard Worker 
15*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_RMAX__NEON,n_lt_16)16*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__NEON, n_lt_16) {
17*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
18*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 1; n < 16; n++) {
19*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
20*4bdc9457SAndroid Build Coastguard Worker         .n(n)
21*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__neon);
22*4bdc9457SAndroid Build Coastguard Worker     }
23*4bdc9457SAndroid Build Coastguard Worker   }
24*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__NEON,n_eq_16)25*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__NEON, n_eq_16) {
26*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
27*4bdc9457SAndroid Build Coastguard Worker     RMaxMicrokernelTester()
28*4bdc9457SAndroid Build Coastguard Worker       .n(16)
29*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_f32_rmax_ukernel__neon);
30*4bdc9457SAndroid Build Coastguard Worker   }
31*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__NEON,n_div_16)32*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__NEON, n_div_16) {
33*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
34*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 16; n < 128; n += 16) {
35*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
36*4bdc9457SAndroid Build Coastguard Worker         .n(n)
37*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__neon);
38*4bdc9457SAndroid Build Coastguard Worker     }
39*4bdc9457SAndroid Build Coastguard Worker   }
40*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__NEON,n_gt_16)41*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__NEON, n_gt_16) {
42*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
43*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 16; n < 32; n++) {
44*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
45*4bdc9457SAndroid Build Coastguard Worker         .n(n)
46*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__neon);
47*4bdc9457SAndroid Build Coastguard Worker     }
48*4bdc9457SAndroid Build Coastguard Worker   }
49*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
50*4bdc9457SAndroid Build Coastguard Worker 
51*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_RMAX__SSE,n_lt_16)52*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__SSE, n_lt_16) {
53*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
54*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 1; n < 16; n++) {
55*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
56*4bdc9457SAndroid Build Coastguard Worker         .n(n)
57*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__sse);
58*4bdc9457SAndroid Build Coastguard Worker     }
59*4bdc9457SAndroid Build Coastguard Worker   }
60*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__SSE,n_eq_16)61*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__SSE, n_eq_16) {
62*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
63*4bdc9457SAndroid Build Coastguard Worker     RMaxMicrokernelTester()
64*4bdc9457SAndroid Build Coastguard Worker       .n(16)
65*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_f32_rmax_ukernel__sse);
66*4bdc9457SAndroid Build Coastguard Worker   }
67*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__SSE,n_div_16)68*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__SSE, n_div_16) {
69*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
70*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 16; n < 128; n += 16) {
71*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
72*4bdc9457SAndroid Build Coastguard Worker         .n(n)
73*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__sse);
74*4bdc9457SAndroid Build Coastguard Worker     }
75*4bdc9457SAndroid Build Coastguard Worker   }
76*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__SSE,n_gt_16)77*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__SSE, n_gt_16) {
78*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
79*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 16; n < 32; n++) {
80*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
81*4bdc9457SAndroid Build Coastguard Worker         .n(n)
82*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__sse);
83*4bdc9457SAndroid Build Coastguard Worker     }
84*4bdc9457SAndroid Build Coastguard Worker   }
85*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
86*4bdc9457SAndroid Build Coastguard Worker 
87*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_RMAX__AVX,n_lt_32)88*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__AVX, n_lt_32) {
89*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
90*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 1; n < 32; n++) {
91*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
92*4bdc9457SAndroid Build Coastguard Worker         .n(n)
93*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__avx);
94*4bdc9457SAndroid Build Coastguard Worker     }
95*4bdc9457SAndroid Build Coastguard Worker   }
96*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__AVX,n_eq_32)97*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__AVX, n_eq_32) {
98*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
99*4bdc9457SAndroid Build Coastguard Worker     RMaxMicrokernelTester()
100*4bdc9457SAndroid Build Coastguard Worker       .n(32)
101*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_f32_rmax_ukernel__avx);
102*4bdc9457SAndroid Build Coastguard Worker   }
103*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__AVX,n_div_32)104*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__AVX, n_div_32) {
105*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
106*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 32; n < 256; n += 32) {
107*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
108*4bdc9457SAndroid Build Coastguard Worker         .n(n)
109*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__avx);
110*4bdc9457SAndroid Build Coastguard Worker     }
111*4bdc9457SAndroid Build Coastguard Worker   }
112*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__AVX,n_gt_32)113*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__AVX, n_gt_32) {
114*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
115*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 32; n < 64; n++) {
116*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
117*4bdc9457SAndroid Build Coastguard Worker         .n(n)
118*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__avx);
119*4bdc9457SAndroid Build Coastguard Worker     }
120*4bdc9457SAndroid Build Coastguard Worker   }
121*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
122*4bdc9457SAndroid Build Coastguard Worker 
123*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_RMAX__AVX512F,n_lt_64)124*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__AVX512F, n_lt_64) {
125*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512F;
126*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 1; n < 64; n++) {
127*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
128*4bdc9457SAndroid Build Coastguard Worker         .n(n)
129*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__avx512f);
130*4bdc9457SAndroid Build Coastguard Worker     }
131*4bdc9457SAndroid Build Coastguard Worker   }
132*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__AVX512F,n_eq_64)133*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__AVX512F, n_eq_64) {
134*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512F;
135*4bdc9457SAndroid Build Coastguard Worker     RMaxMicrokernelTester()
136*4bdc9457SAndroid Build Coastguard Worker       .n(64)
137*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_f32_rmax_ukernel__avx512f);
138*4bdc9457SAndroid Build Coastguard Worker   }
139*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__AVX512F,n_div_64)140*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__AVX512F, n_div_64) {
141*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512F;
142*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 64; n < 512; n += 64) {
143*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
144*4bdc9457SAndroid Build Coastguard Worker         .n(n)
145*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__avx512f);
146*4bdc9457SAndroid Build Coastguard Worker     }
147*4bdc9457SAndroid Build Coastguard Worker   }
148*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__AVX512F,n_gt_64)149*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__AVX512F, n_gt_64) {
150*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512F;
151*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 64; n < 128; n++) {
152*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
153*4bdc9457SAndroid Build Coastguard Worker         .n(n)
154*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__avx512f);
155*4bdc9457SAndroid Build Coastguard Worker     }
156*4bdc9457SAndroid Build Coastguard Worker   }
157*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
158*4bdc9457SAndroid Build Coastguard Worker 
159*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASMSIMD
TEST(F32_RMAX__WASMSIMD_ARM,n_lt_16)160*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__WASMSIMD_ARM, n_lt_16) {
161*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 1; n < 16; n++) {
162*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
163*4bdc9457SAndroid Build Coastguard Worker         .n(n)
164*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__wasmsimd_arm);
165*4bdc9457SAndroid Build Coastguard Worker     }
166*4bdc9457SAndroid Build Coastguard Worker   }
167*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__WASMSIMD_ARM,n_eq_16)168*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__WASMSIMD_ARM, n_eq_16) {
169*4bdc9457SAndroid Build Coastguard Worker     RMaxMicrokernelTester()
170*4bdc9457SAndroid Build Coastguard Worker       .n(16)
171*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_f32_rmax_ukernel__wasmsimd_arm);
172*4bdc9457SAndroid Build Coastguard Worker   }
173*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__WASMSIMD_ARM,n_div_16)174*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__WASMSIMD_ARM, n_div_16) {
175*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 16; n < 128; n += 16) {
176*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
177*4bdc9457SAndroid Build Coastguard Worker         .n(n)
178*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__wasmsimd_arm);
179*4bdc9457SAndroid Build Coastguard Worker     }
180*4bdc9457SAndroid Build Coastguard Worker   }
181*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__WASMSIMD_ARM,n_gt_16)182*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__WASMSIMD_ARM, n_gt_16) {
183*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 16; n < 32; n++) {
184*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
185*4bdc9457SAndroid Build Coastguard Worker         .n(n)
186*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__wasmsimd_arm);
187*4bdc9457SAndroid Build Coastguard Worker     }
188*4bdc9457SAndroid Build Coastguard Worker   }
189*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASMSIMD
190*4bdc9457SAndroid Build Coastguard Worker 
191*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASMSIMD
TEST(F32_RMAX__WASMSIMD_X86,n_lt_16)192*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__WASMSIMD_X86, n_lt_16) {
193*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 1; n < 16; n++) {
194*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
195*4bdc9457SAndroid Build Coastguard Worker         .n(n)
196*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__wasmsimd_x86);
197*4bdc9457SAndroid Build Coastguard Worker     }
198*4bdc9457SAndroid Build Coastguard Worker   }
199*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__WASMSIMD_X86,n_eq_16)200*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__WASMSIMD_X86, n_eq_16) {
201*4bdc9457SAndroid Build Coastguard Worker     RMaxMicrokernelTester()
202*4bdc9457SAndroid Build Coastguard Worker       .n(16)
203*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_f32_rmax_ukernel__wasmsimd_x86);
204*4bdc9457SAndroid Build Coastguard Worker   }
205*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__WASMSIMD_X86,n_div_16)206*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__WASMSIMD_X86, n_div_16) {
207*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 16; n < 128; n += 16) {
208*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
209*4bdc9457SAndroid Build Coastguard Worker         .n(n)
210*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__wasmsimd_x86);
211*4bdc9457SAndroid Build Coastguard Worker     }
212*4bdc9457SAndroid Build Coastguard Worker   }
213*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__WASMSIMD_X86,n_gt_16)214*4bdc9457SAndroid Build Coastguard Worker   TEST(F32_RMAX__WASMSIMD_X86, n_gt_16) {
215*4bdc9457SAndroid Build Coastguard Worker     for (size_t n = 16; n < 32; n++) {
216*4bdc9457SAndroid Build Coastguard Worker       RMaxMicrokernelTester()
217*4bdc9457SAndroid Build Coastguard Worker         .n(n)
218*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_f32_rmax_ukernel__wasmsimd_x86);
219*4bdc9457SAndroid Build Coastguard Worker     }
220*4bdc9457SAndroid Build Coastguard Worker   }
221*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASMSIMD
222*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__SCALAR,n_lt_4)223*4bdc9457SAndroid Build Coastguard Worker TEST(F32_RMAX__SCALAR, n_lt_4) {
224*4bdc9457SAndroid Build Coastguard Worker   for (size_t n = 1; n < 4; n++) {
225*4bdc9457SAndroid Build Coastguard Worker     RMaxMicrokernelTester()
226*4bdc9457SAndroid Build Coastguard Worker       .n(n)
227*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_f32_rmax_ukernel__scalar);
228*4bdc9457SAndroid Build Coastguard Worker   }
229*4bdc9457SAndroid Build Coastguard Worker }
230*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__SCALAR,n_eq_4)231*4bdc9457SAndroid Build Coastguard Worker TEST(F32_RMAX__SCALAR, n_eq_4) {
232*4bdc9457SAndroid Build Coastguard Worker   RMaxMicrokernelTester()
233*4bdc9457SAndroid Build Coastguard Worker     .n(4)
234*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_f32_rmax_ukernel__scalar);
235*4bdc9457SAndroid Build Coastguard Worker }
236*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__SCALAR,n_div_4)237*4bdc9457SAndroid Build Coastguard Worker TEST(F32_RMAX__SCALAR, n_div_4) {
238*4bdc9457SAndroid Build Coastguard Worker   for (size_t n = 4; n < 32; n += 4) {
239*4bdc9457SAndroid Build Coastguard Worker     RMaxMicrokernelTester()
240*4bdc9457SAndroid Build Coastguard Worker       .n(n)
241*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_f32_rmax_ukernel__scalar);
242*4bdc9457SAndroid Build Coastguard Worker   }
243*4bdc9457SAndroid Build Coastguard Worker }
244*4bdc9457SAndroid Build Coastguard Worker 
TEST(F32_RMAX__SCALAR,n_gt_4)245*4bdc9457SAndroid Build Coastguard Worker TEST(F32_RMAX__SCALAR, n_gt_4) {
246*4bdc9457SAndroid Build Coastguard Worker   for (size_t n = 4; n < 8; n++) {
247*4bdc9457SAndroid Build Coastguard Worker     RMaxMicrokernelTester()
248*4bdc9457SAndroid Build Coastguard Worker       .n(n)
249*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_f32_rmax_ukernel__scalar);
250*4bdc9457SAndroid Build Coastguard Worker   }
251*4bdc9457SAndroid Build Coastguard Worker }
252