xref: /aosp_15_r20/external/XNNPACK/test/qu8-vmul-minmax-rndnu.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 // Auto-generated file. Do not edit!
7*4bdc9457SAndroid Build Coastguard Worker //   Specification: test/qu8-vmul-minmax-rndnu.yaml
8*4bdc9457SAndroid Build Coastguard Worker //   Generator: tools/generate-vbinary-test.py
9*4bdc9457SAndroid Build Coastguard Worker 
10*4bdc9457SAndroid Build Coastguard Worker 
11*4bdc9457SAndroid Build Coastguard Worker #include <gtest/gtest.h>
12*4bdc9457SAndroid Build Coastguard Worker 
13*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h>
14*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/isa-checks.h>
15*4bdc9457SAndroid Build Coastguard Worker 
16*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/microparams-init.h>
17*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/vmul.h>
18*4bdc9457SAndroid Build Coastguard Worker #include "vmul-microkernel-tester.h"
19*4bdc9457SAndroid Build Coastguard Worker 
20*4bdc9457SAndroid Build Coastguard Worker 
21*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,batch_eq_8)22*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, batch_eq_8) {
23*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
24*4bdc9457SAndroid Build Coastguard Worker     VMulMicrokernelTester()
25*4bdc9457SAndroid Build Coastguard Worker       .batch_size(8)
26*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
27*4bdc9457SAndroid Build Coastguard Worker   }
28*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,batch_div_8)29*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, batch_div_8) {
30*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
31*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
32*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
33*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
34*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
35*4bdc9457SAndroid Build Coastguard Worker     }
36*4bdc9457SAndroid Build Coastguard Worker   }
37*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,batch_lt_8)38*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, batch_lt_8) {
39*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
40*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
41*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
42*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
43*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
44*4bdc9457SAndroid Build Coastguard Worker     }
45*4bdc9457SAndroid Build Coastguard Worker   }
46*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,batch_gt_8)47*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, batch_gt_8) {
48*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
49*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
50*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
51*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
52*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
53*4bdc9457SAndroid Build Coastguard Worker     }
54*4bdc9457SAndroid Build Coastguard Worker   }
55*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,inplace_a)56*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, inplace_a) {
57*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
58*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
59*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
60*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
61*4bdc9457SAndroid Build Coastguard Worker         .inplace_a(true)
62*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
63*4bdc9457SAndroid Build Coastguard Worker     }
64*4bdc9457SAndroid Build Coastguard Worker   }
65*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,inplace_b)66*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, inplace_b) {
67*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
68*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
69*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
70*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
71*4bdc9457SAndroid Build Coastguard Worker         .inplace_b(true)
72*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
73*4bdc9457SAndroid Build Coastguard Worker     }
74*4bdc9457SAndroid Build Coastguard Worker   }
75*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,inplace_a_and_b)76*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, inplace_a_and_b) {
77*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
78*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
79*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
80*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
81*4bdc9457SAndroid Build Coastguard Worker         .inplace_a(true)
82*4bdc9457SAndroid Build Coastguard Worker         .inplace_b(true)
83*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
84*4bdc9457SAndroid Build Coastguard Worker     }
85*4bdc9457SAndroid Build Coastguard Worker   }
86*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,a_zero_point)87*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, a_zero_point) {
88*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
89*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
90*4bdc9457SAndroid Build Coastguard Worker       for (int32_t a_zero_point = -128; a_zero_point <= 127; a_zero_point += 51) {
91*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
92*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
93*4bdc9457SAndroid Build Coastguard Worker           .a_zero_point(a_zero_point)
94*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
95*4bdc9457SAndroid Build Coastguard Worker       }
96*4bdc9457SAndroid Build Coastguard Worker     }
97*4bdc9457SAndroid Build Coastguard Worker   }
98*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,b_zero_point)99*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, b_zero_point) {
100*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
101*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
102*4bdc9457SAndroid Build Coastguard Worker       for (int32_t b_zero_point = -128; b_zero_point <= 127; b_zero_point += 51) {
103*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
104*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
105*4bdc9457SAndroid Build Coastguard Worker           .b_zero_point(b_zero_point)
106*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
107*4bdc9457SAndroid Build Coastguard Worker       }
108*4bdc9457SAndroid Build Coastguard Worker     }
109*4bdc9457SAndroid Build Coastguard Worker   }
110*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,y_zero_point)111*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, y_zero_point) {
112*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
113*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
114*4bdc9457SAndroid Build Coastguard Worker       for (int32_t y_zero_point = -128; y_zero_point <= 127; y_zero_point += 51) {
115*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
116*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
117*4bdc9457SAndroid Build Coastguard Worker           .y_zero_point(y_zero_point)
118*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
119*4bdc9457SAndroid Build Coastguard Worker       }
120*4bdc9457SAndroid Build Coastguard Worker     }
121*4bdc9457SAndroid Build Coastguard Worker   }
122*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,a_scale)123*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, a_scale) {
124*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
125*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
126*4bdc9457SAndroid Build Coastguard Worker       for (float a_scale = 0.1f; a_scale <= 10.0f; a_scale *= 3.14f) {
127*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
128*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
129*4bdc9457SAndroid Build Coastguard Worker           .a_scale(a_scale)
130*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
131*4bdc9457SAndroid Build Coastguard Worker       }
132*4bdc9457SAndroid Build Coastguard Worker     }
133*4bdc9457SAndroid Build Coastguard Worker   }
134*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,b_scale)135*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, b_scale) {
136*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
137*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
138*4bdc9457SAndroid Build Coastguard Worker       for (float b_scale = 0.1f; b_scale <= 10.0f; b_scale *= 3.14f) {
139*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
140*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
141*4bdc9457SAndroid Build Coastguard Worker           .b_scale(b_scale)
142*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
143*4bdc9457SAndroid Build Coastguard Worker       }
144*4bdc9457SAndroid Build Coastguard Worker     }
145*4bdc9457SAndroid Build Coastguard Worker   }
146*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,y_scale)147*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, y_scale) {
148*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
149*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
150*4bdc9457SAndroid Build Coastguard Worker       for (float y_scale = 0.1f; y_scale <= 10.0f; y_scale *= 3.14f) {
151*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
152*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
153*4bdc9457SAndroid Build Coastguard Worker           .y_scale(y_scale)
154*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
155*4bdc9457SAndroid Build Coastguard Worker       }
156*4bdc9457SAndroid Build Coastguard Worker     }
157*4bdc9457SAndroid Build Coastguard Worker   }
158*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,qmin)159*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, qmin) {
160*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
161*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
162*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
163*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
164*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
165*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
166*4bdc9457SAndroid Build Coastguard Worker     }
167*4bdc9457SAndroid Build Coastguard Worker   }
168*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8,qmax)169*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X8, qmax) {
170*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
171*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
172*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
173*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
174*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
175*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x8, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
176*4bdc9457SAndroid Build Coastguard Worker     }
177*4bdc9457SAndroid Build Coastguard Worker   }
178*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
179*4bdc9457SAndroid Build Coastguard Worker 
180*4bdc9457SAndroid Build Coastguard Worker 
181*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,batch_eq_16)182*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, batch_eq_16) {
183*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
184*4bdc9457SAndroid Build Coastguard Worker     VMulMicrokernelTester()
185*4bdc9457SAndroid Build Coastguard Worker       .batch_size(16)
186*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
187*4bdc9457SAndroid Build Coastguard Worker   }
188*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,batch_div_16)189*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, batch_div_16) {
190*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
191*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
192*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
193*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
194*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
195*4bdc9457SAndroid Build Coastguard Worker     }
196*4bdc9457SAndroid Build Coastguard Worker   }
197*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,batch_lt_16)198*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, batch_lt_16) {
199*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
200*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
201*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
202*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
203*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
204*4bdc9457SAndroid Build Coastguard Worker     }
205*4bdc9457SAndroid Build Coastguard Worker   }
206*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,batch_gt_16)207*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, batch_gt_16) {
208*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
209*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
210*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
211*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
212*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
213*4bdc9457SAndroid Build Coastguard Worker     }
214*4bdc9457SAndroid Build Coastguard Worker   }
215*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,inplace_a)216*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, inplace_a) {
217*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
218*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
219*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
220*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
221*4bdc9457SAndroid Build Coastguard Worker         .inplace_a(true)
222*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
223*4bdc9457SAndroid Build Coastguard Worker     }
224*4bdc9457SAndroid Build Coastguard Worker   }
225*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,inplace_b)226*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, inplace_b) {
227*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
228*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
229*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
230*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
231*4bdc9457SAndroid Build Coastguard Worker         .inplace_b(true)
232*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
233*4bdc9457SAndroid Build Coastguard Worker     }
234*4bdc9457SAndroid Build Coastguard Worker   }
235*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,inplace_a_and_b)236*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, inplace_a_and_b) {
237*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
238*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
239*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
240*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
241*4bdc9457SAndroid Build Coastguard Worker         .inplace_a(true)
242*4bdc9457SAndroid Build Coastguard Worker         .inplace_b(true)
243*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
244*4bdc9457SAndroid Build Coastguard Worker     }
245*4bdc9457SAndroid Build Coastguard Worker   }
246*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,a_zero_point)247*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, a_zero_point) {
248*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
249*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
250*4bdc9457SAndroid Build Coastguard Worker       for (int32_t a_zero_point = -128; a_zero_point <= 127; a_zero_point += 51) {
251*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
252*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
253*4bdc9457SAndroid Build Coastguard Worker           .a_zero_point(a_zero_point)
254*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
255*4bdc9457SAndroid Build Coastguard Worker       }
256*4bdc9457SAndroid Build Coastguard Worker     }
257*4bdc9457SAndroid Build Coastguard Worker   }
258*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,b_zero_point)259*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, b_zero_point) {
260*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
261*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
262*4bdc9457SAndroid Build Coastguard Worker       for (int32_t b_zero_point = -128; b_zero_point <= 127; b_zero_point += 51) {
263*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
264*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
265*4bdc9457SAndroid Build Coastguard Worker           .b_zero_point(b_zero_point)
266*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
267*4bdc9457SAndroid Build Coastguard Worker       }
268*4bdc9457SAndroid Build Coastguard Worker     }
269*4bdc9457SAndroid Build Coastguard Worker   }
270*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,y_zero_point)271*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, y_zero_point) {
272*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
273*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
274*4bdc9457SAndroid Build Coastguard Worker       for (int32_t y_zero_point = -128; y_zero_point <= 127; y_zero_point += 51) {
275*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
276*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
277*4bdc9457SAndroid Build Coastguard Worker           .y_zero_point(y_zero_point)
278*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
279*4bdc9457SAndroid Build Coastguard Worker       }
280*4bdc9457SAndroid Build Coastguard Worker     }
281*4bdc9457SAndroid Build Coastguard Worker   }
282*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,a_scale)283*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, a_scale) {
284*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
285*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
286*4bdc9457SAndroid Build Coastguard Worker       for (float a_scale = 0.1f; a_scale <= 10.0f; a_scale *= 3.14f) {
287*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
288*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
289*4bdc9457SAndroid Build Coastguard Worker           .a_scale(a_scale)
290*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
291*4bdc9457SAndroid Build Coastguard Worker       }
292*4bdc9457SAndroid Build Coastguard Worker     }
293*4bdc9457SAndroid Build Coastguard Worker   }
294*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,b_scale)295*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, b_scale) {
296*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
297*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
298*4bdc9457SAndroid Build Coastguard Worker       for (float b_scale = 0.1f; b_scale <= 10.0f; b_scale *= 3.14f) {
299*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
300*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
301*4bdc9457SAndroid Build Coastguard Worker           .b_scale(b_scale)
302*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
303*4bdc9457SAndroid Build Coastguard Worker       }
304*4bdc9457SAndroid Build Coastguard Worker     }
305*4bdc9457SAndroid Build Coastguard Worker   }
306*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,y_scale)307*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, y_scale) {
308*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
309*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
310*4bdc9457SAndroid Build Coastguard Worker       for (float y_scale = 0.1f; y_scale <= 10.0f; y_scale *= 3.14f) {
311*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
312*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
313*4bdc9457SAndroid Build Coastguard Worker           .y_scale(y_scale)
314*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
315*4bdc9457SAndroid Build Coastguard Worker       }
316*4bdc9457SAndroid Build Coastguard Worker     }
317*4bdc9457SAndroid Build Coastguard Worker   }
318*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,qmin)319*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, qmin) {
320*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
321*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
322*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
323*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
324*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
325*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
326*4bdc9457SAndroid Build Coastguard Worker     }
327*4bdc9457SAndroid Build Coastguard Worker   }
328*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16,qmax)329*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD64_X16, qmax) {
330*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
331*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
332*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
333*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
334*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
335*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld64_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
336*4bdc9457SAndroid Build Coastguard Worker     }
337*4bdc9457SAndroid Build Coastguard Worker   }
338*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
339*4bdc9457SAndroid Build Coastguard Worker 
340*4bdc9457SAndroid Build Coastguard Worker 
341*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,batch_eq_16)342*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, batch_eq_16) {
343*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
344*4bdc9457SAndroid Build Coastguard Worker     VMulMicrokernelTester()
345*4bdc9457SAndroid Build Coastguard Worker       .batch_size(16)
346*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
347*4bdc9457SAndroid Build Coastguard Worker   }
348*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,batch_div_16)349*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, batch_div_16) {
350*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
351*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
352*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
353*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
354*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
355*4bdc9457SAndroid Build Coastguard Worker     }
356*4bdc9457SAndroid Build Coastguard Worker   }
357*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,batch_lt_16)358*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, batch_lt_16) {
359*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
360*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
361*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
362*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
363*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
364*4bdc9457SAndroid Build Coastguard Worker     }
365*4bdc9457SAndroid Build Coastguard Worker   }
366*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,batch_gt_16)367*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, batch_gt_16) {
368*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
369*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
370*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
371*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
372*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
373*4bdc9457SAndroid Build Coastguard Worker     }
374*4bdc9457SAndroid Build Coastguard Worker   }
375*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,inplace_a)376*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, inplace_a) {
377*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
378*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
379*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
380*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
381*4bdc9457SAndroid Build Coastguard Worker         .inplace_a(true)
382*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
383*4bdc9457SAndroid Build Coastguard Worker     }
384*4bdc9457SAndroid Build Coastguard Worker   }
385*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,inplace_b)386*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, inplace_b) {
387*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
388*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
389*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
390*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
391*4bdc9457SAndroid Build Coastguard Worker         .inplace_b(true)
392*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
393*4bdc9457SAndroid Build Coastguard Worker     }
394*4bdc9457SAndroid Build Coastguard Worker   }
395*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,inplace_a_and_b)396*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, inplace_a_and_b) {
397*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
398*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
399*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
400*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
401*4bdc9457SAndroid Build Coastguard Worker         .inplace_a(true)
402*4bdc9457SAndroid Build Coastguard Worker         .inplace_b(true)
403*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
404*4bdc9457SAndroid Build Coastguard Worker     }
405*4bdc9457SAndroid Build Coastguard Worker   }
406*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,a_zero_point)407*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, a_zero_point) {
408*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
409*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
410*4bdc9457SAndroid Build Coastguard Worker       for (int32_t a_zero_point = -128; a_zero_point <= 127; a_zero_point += 51) {
411*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
412*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
413*4bdc9457SAndroid Build Coastguard Worker           .a_zero_point(a_zero_point)
414*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
415*4bdc9457SAndroid Build Coastguard Worker       }
416*4bdc9457SAndroid Build Coastguard Worker     }
417*4bdc9457SAndroid Build Coastguard Worker   }
418*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,b_zero_point)419*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, b_zero_point) {
420*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
421*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
422*4bdc9457SAndroid Build Coastguard Worker       for (int32_t b_zero_point = -128; b_zero_point <= 127; b_zero_point += 51) {
423*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
424*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
425*4bdc9457SAndroid Build Coastguard Worker           .b_zero_point(b_zero_point)
426*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
427*4bdc9457SAndroid Build Coastguard Worker       }
428*4bdc9457SAndroid Build Coastguard Worker     }
429*4bdc9457SAndroid Build Coastguard Worker   }
430*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,y_zero_point)431*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, y_zero_point) {
432*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
433*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
434*4bdc9457SAndroid Build Coastguard Worker       for (int32_t y_zero_point = -128; y_zero_point <= 127; y_zero_point += 51) {
435*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
436*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
437*4bdc9457SAndroid Build Coastguard Worker           .y_zero_point(y_zero_point)
438*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
439*4bdc9457SAndroid Build Coastguard Worker       }
440*4bdc9457SAndroid Build Coastguard Worker     }
441*4bdc9457SAndroid Build Coastguard Worker   }
442*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,a_scale)443*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, a_scale) {
444*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
445*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
446*4bdc9457SAndroid Build Coastguard Worker       for (float a_scale = 0.1f; a_scale <= 10.0f; a_scale *= 3.14f) {
447*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
448*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
449*4bdc9457SAndroid Build Coastguard Worker           .a_scale(a_scale)
450*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
451*4bdc9457SAndroid Build Coastguard Worker       }
452*4bdc9457SAndroid Build Coastguard Worker     }
453*4bdc9457SAndroid Build Coastguard Worker   }
454*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,b_scale)455*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, b_scale) {
456*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
457*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
458*4bdc9457SAndroid Build Coastguard Worker       for (float b_scale = 0.1f; b_scale <= 10.0f; b_scale *= 3.14f) {
459*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
460*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
461*4bdc9457SAndroid Build Coastguard Worker           .b_scale(b_scale)
462*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
463*4bdc9457SAndroid Build Coastguard Worker       }
464*4bdc9457SAndroid Build Coastguard Worker     }
465*4bdc9457SAndroid Build Coastguard Worker   }
466*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,y_scale)467*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, y_scale) {
468*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
469*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
470*4bdc9457SAndroid Build Coastguard Worker       for (float y_scale = 0.1f; y_scale <= 10.0f; y_scale *= 3.14f) {
471*4bdc9457SAndroid Build Coastguard Worker         VMulMicrokernelTester()
472*4bdc9457SAndroid Build Coastguard Worker           .batch_size(batch_size)
473*4bdc9457SAndroid Build Coastguard Worker           .y_scale(y_scale)
474*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
475*4bdc9457SAndroid Build Coastguard Worker       }
476*4bdc9457SAndroid Build Coastguard Worker     }
477*4bdc9457SAndroid Build Coastguard Worker   }
478*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,qmin)479*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, qmin) {
480*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
481*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
482*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
483*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
484*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
485*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
486*4bdc9457SAndroid Build Coastguard Worker     }
487*4bdc9457SAndroid Build Coastguard Worker   }
488*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16,qmax)489*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_VMUL_MINMAX_RNDNU__NEON_LD128_X16, qmax) {
490*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
491*4bdc9457SAndroid Build Coastguard Worker     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
492*4bdc9457SAndroid Build Coastguard Worker       VMulMicrokernelTester()
493*4bdc9457SAndroid Build Coastguard Worker         .batch_size(batch_size)
494*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
495*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_vmul_minmax_rndnu_ukernel__neon_ld128_x16, xnn_init_qu8_mul_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
496*4bdc9457SAndroid Build Coastguard Worker     }
497*4bdc9457SAndroid Build Coastguard Worker   }
498*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
499