blob: 3bf32c8b70ac9e379ba753ef1b22f896754dde34 [file] [log] [blame]
XNNPACK Teamb455b122019-09-27 18:10:33 -07001// 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!
Marat Dukhanb2217dd2020-05-28 17:30:28 -07007// Specification: test/f32-vmulcaddc-minmax.yaml
XNNPACK Teamb455b122019-09-27 18:10:33 -07008// Generator: tools/generate-vmulcaddc-test.py
9
10
XNNPACK Teamb455b122019-09-27 18:10:33 -070011#include <gtest/gtest.h>
12
Marat Dukhan1dadbf72019-10-01 10:46:20 -070013#include <xnnpack/common.h>
XNNPACK Teamb455b122019-09-27 18:10:33 -070014#include <xnnpack/isa-checks.h>
15
Marat Dukhan1dadbf72019-10-01 10:46:20 -070016#include <xnnpack/vmulcaddc.h>
XNNPACK Teamb455b122019-09-27 18:10:33 -070017#include "vmulcaddc-microkernel-tester.h"
18
19
Marat Dukhan1dadbf72019-10-01 10:46:20 -070020#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhan9531e9f2020-07-24 15:25:02 -070021 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, channels_eq_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070022 TEST_REQUIRES_ARM_NEON_FMA;
23 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -080024 .channel_tile(4)
25 .channels(4)
26 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -070027 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -070028 }
29
Marat Dukhan9531e9f2020-07-24 15:25:02 -070030 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, channels_div_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070031 TEST_REQUIRES_ARM_NEON_FMA;
Marat Dukhan49e6ee92019-11-06 15:55:29 -080032 for (size_t channels = 8; channels < 40; channels += 4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070033 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -080034 .channel_tile(4)
35 .channels(channels)
36 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -070037 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -070038 }
39 }
40
Marat Dukhan9531e9f2020-07-24 15:25:02 -070041 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, channels_lt_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070042 TEST_REQUIRES_ARM_NEON_FMA;
Marat Dukhan49e6ee92019-11-06 15:55:29 -080043 for (size_t channels = 1; channels < 4; channels++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070044 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -080045 .channel_tile(4)
46 .channels(channels)
47 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -070048 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -070049 }
50 }
51
Marat Dukhan9531e9f2020-07-24 15:25:02 -070052 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, channels_gt_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070053 TEST_REQUIRES_ARM_NEON_FMA;
Marat Dukhan49e6ee92019-11-06 15:55:29 -080054 for (size_t channels = 5; channels < 8; channels++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070055 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -080056 .channel_tile(4)
57 .channels(channels)
58 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -070059 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -070060 }
61 }
62
Marat Dukhan9531e9f2020-07-24 15:25:02 -070063 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, rows_lt_2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070064 TEST_REQUIRES_ARM_NEON_FMA;
Marat Dukhan49e6ee92019-11-06 15:55:29 -080065 for (size_t rows = 1; rows < 2; rows++) {
66 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070067 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -080068 .channel_tile(4)
69 .channels(channels)
70 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -070071 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -070072 }
73 }
74 }
75
Marat Dukhan9531e9f2020-07-24 15:25:02 -070076 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, rows_div_2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070077 TEST_REQUIRES_ARM_NEON_FMA;
Marat Dukhan49e6ee92019-11-06 15:55:29 -080078 for (size_t rows = 4; rows <= 8; rows += 2) {
79 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070080 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -080081 .channel_tile(4)
82 .channels(channels)
83 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -070084 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -070085 }
86 }
87 }
88
Marat Dukhan9531e9f2020-07-24 15:25:02 -070089 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, rows_gt_2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070090 TEST_REQUIRES_ARM_NEON_FMA;
Marat Dukhan49e6ee92019-11-06 15:55:29 -080091 for (size_t rows = 3; rows < 4; rows++) {
92 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070093 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -080094 .channel_tile(4)
95 .channels(channels)
96 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -070097 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -070098 }
99 }
100 }
101
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700102 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700103 TEST_REQUIRES_ARM_NEON_FMA;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800104 for (size_t rows = 1; rows <= 6; rows += 1) {
105 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700106 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800107 .channel_tile(4)
108 .channels(channels)
109 .rows(rows)
110 .input_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700111 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700112 }
113 }
114 }
115
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700116 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700117 TEST_REQUIRES_ARM_NEON_FMA;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800118 for (size_t rows = 1; rows <= 6; rows += 1) {
119 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700120 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800121 .channel_tile(4)
122 .channels(channels)
123 .rows(rows)
124 .output_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700125 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800126 }
127 }
128 }
129
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700130 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, inplace) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800131 TEST_REQUIRES_ARM_NEON_FMA;
132 for (size_t rows = 1; rows <= 6; rows += 1) {
133 for (size_t channels = 1; channels <= 20; channels += 3) {
134 VMulCAddCMicrokernelTester()
135 .channel_tile(4)
136 .channels(channels)
137 .rows(rows)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700138 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700139 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700140 }
141 }
142 }
143
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700144 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700145 TEST_REQUIRES_ARM_NEON_FMA;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800146 for (size_t rows = 1; rows <= 6; rows += 1) {
147 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700148 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800149 .channel_tile(4)
150 .channels(channels)
151 .rows(rows)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700152 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700153 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700154 }
155 }
156 }
157
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700158 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700159 TEST_REQUIRES_ARM_NEON_FMA;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800160 for (size_t rows = 1; rows <= 6; rows += 1) {
161 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700162 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800163 .channel_tile(4)
164 .channels(channels)
165 .rows(rows)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700166 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700167 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700168 }
169 }
170 }
Marat Dukhan1dadbf72019-10-01 10:46:20 -0700171#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
XNNPACK Teamb455b122019-09-27 18:10:33 -0700172
173
Marat Dukhan1dadbf72019-10-01 10:46:20 -0700174#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700175 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, channels_eq_8) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800176 TEST_REQUIRES_ARM_NEON_FMA;
177 VMulCAddCMicrokernelTester()
178 .channel_tile(8)
179 .channels(8)
180 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700181 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800182 }
183
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700184 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, channels_div_8) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800185 TEST_REQUIRES_ARM_NEON_FMA;
186 for (size_t channels = 16; channels < 80; channels += 8) {
187 VMulCAddCMicrokernelTester()
188 .channel_tile(8)
189 .channels(channels)
190 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700191 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800192 }
193 }
194
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700195 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, channels_lt_8) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800196 TEST_REQUIRES_ARM_NEON_FMA;
197 for (size_t channels = 1; channels < 8; channels++) {
198 VMulCAddCMicrokernelTester()
199 .channel_tile(8)
200 .channels(channels)
201 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700202 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800203 }
204 }
205
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700206 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, channels_gt_8) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800207 TEST_REQUIRES_ARM_NEON_FMA;
208 for (size_t channels = 9; channels < 16; channels++) {
209 VMulCAddCMicrokernelTester()
210 .channel_tile(8)
211 .channels(channels)
212 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700213 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800214 }
215 }
216
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700217 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, rows_lt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800218 TEST_REQUIRES_ARM_NEON_FMA;
219 for (size_t rows = 1; rows < 2; rows++) {
220 for (size_t channels = 1; channels <= 40; channels += 7) {
221 VMulCAddCMicrokernelTester()
222 .channel_tile(8)
223 .channels(channels)
224 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700225 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800226 }
227 }
228 }
229
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700230 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, rows_div_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800231 TEST_REQUIRES_ARM_NEON_FMA;
232 for (size_t rows = 4; rows <= 8; rows += 2) {
233 for (size_t channels = 1; channels <= 40; channels += 7) {
234 VMulCAddCMicrokernelTester()
235 .channel_tile(8)
236 .channels(channels)
237 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700238 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800239 }
240 }
241 }
242
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700243 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, rows_gt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800244 TEST_REQUIRES_ARM_NEON_FMA;
245 for (size_t rows = 3; rows < 4; rows++) {
246 for (size_t channels = 1; channels <= 40; channels += 7) {
247 VMulCAddCMicrokernelTester()
248 .channel_tile(8)
249 .channels(channels)
250 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700251 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800252 }
253 }
254 }
255
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700256 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, input_stride) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800257 TEST_REQUIRES_ARM_NEON_FMA;
258 for (size_t rows = 1; rows <= 6; rows += 1) {
259 for (size_t channels = 1; channels <= 40; channels += 7) {
260 VMulCAddCMicrokernelTester()
261 .channel_tile(8)
262 .channels(channels)
263 .rows(rows)
264 .input_stride(43)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700265 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800266 }
267 }
268 }
269
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700270 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, output_stride) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800271 TEST_REQUIRES_ARM_NEON_FMA;
272 for (size_t rows = 1; rows <= 6; rows += 1) {
273 for (size_t channels = 1; channels <= 40; channels += 7) {
274 VMulCAddCMicrokernelTester()
275 .channel_tile(8)
276 .channels(channels)
277 .rows(rows)
278 .output_stride(43)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700279 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800280 }
281 }
282 }
283
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700284 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, inplace) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800285 TEST_REQUIRES_ARM_NEON_FMA;
286 for (size_t rows = 1; rows <= 6; rows += 1) {
287 for (size_t channels = 1; channels <= 40; channels += 7) {
288 VMulCAddCMicrokernelTester()
289 .channel_tile(8)
290 .channels(channels)
291 .rows(rows)
292 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700293 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800294 }
295 }
296 }
297
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700298 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, qmin) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800299 TEST_REQUIRES_ARM_NEON_FMA;
300 for (size_t rows = 1; rows <= 6; rows += 1) {
301 for (size_t channels = 1; channels <= 40; channels += 7) {
302 VMulCAddCMicrokernelTester()
303 .channel_tile(8)
304 .channels(channels)
305 .rows(rows)
306 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700307 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800308 }
309 }
310 }
311
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700312 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, qmax) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800313 TEST_REQUIRES_ARM_NEON_FMA;
314 for (size_t rows = 1; rows <= 6; rows += 1) {
315 for (size_t channels = 1; channels <= 40; channels += 7) {
316 VMulCAddCMicrokernelTester()
317 .channel_tile(8)
318 .channels(channels)
319 .rows(rows)
320 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700321 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800322 }
323 }
324 }
325#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
326
327
328#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700329 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, channels_eq_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700330 TEST_REQUIRES_ARM_NEON;
331 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800332 .channel_tile(4)
333 .channels(4)
334 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700335 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700336 }
337
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700338 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, channels_div_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700339 TEST_REQUIRES_ARM_NEON;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800340 for (size_t channels = 8; channels < 40; channels += 4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700341 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800342 .channel_tile(4)
343 .channels(channels)
344 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700345 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700346 }
347 }
348
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700349 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, channels_lt_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700350 TEST_REQUIRES_ARM_NEON;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800351 for (size_t channels = 1; channels < 4; channels++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700352 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800353 .channel_tile(4)
354 .channels(channels)
355 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700356 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700357 }
358 }
359
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700360 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, channels_gt_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700361 TEST_REQUIRES_ARM_NEON;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800362 for (size_t channels = 5; channels < 8; channels++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700363 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800364 .channel_tile(4)
365 .channels(channels)
366 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700367 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700368 }
369 }
370
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700371 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, rows_lt_2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700372 TEST_REQUIRES_ARM_NEON;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800373 for (size_t rows = 1; rows < 2; rows++) {
374 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700375 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800376 .channel_tile(4)
377 .channels(channels)
378 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700379 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700380 }
381 }
382 }
383
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700384 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, rows_div_2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700385 TEST_REQUIRES_ARM_NEON;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800386 for (size_t rows = 4; rows <= 8; rows += 2) {
387 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700388 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800389 .channel_tile(4)
390 .channels(channels)
391 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700392 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700393 }
394 }
395 }
396
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700397 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, rows_gt_2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700398 TEST_REQUIRES_ARM_NEON;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800399 for (size_t rows = 3; rows < 4; rows++) {
400 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700401 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800402 .channel_tile(4)
403 .channels(channels)
404 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700405 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700406 }
407 }
408 }
409
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700410 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700411 TEST_REQUIRES_ARM_NEON;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800412 for (size_t rows = 1; rows <= 6; rows += 1) {
413 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700414 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800415 .channel_tile(4)
416 .channels(channels)
417 .rows(rows)
418 .input_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700419 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700420 }
421 }
422 }
423
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700424 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700425 TEST_REQUIRES_ARM_NEON;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800426 for (size_t rows = 1; rows <= 6; rows += 1) {
427 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700428 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800429 .channel_tile(4)
430 .channels(channels)
431 .rows(rows)
432 .output_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700433 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800434 }
435 }
436 }
437
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700438 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, inplace) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800439 TEST_REQUIRES_ARM_NEON;
440 for (size_t rows = 1; rows <= 6; rows += 1) {
441 for (size_t channels = 1; channels <= 20; channels += 3) {
442 VMulCAddCMicrokernelTester()
443 .channel_tile(4)
444 .channels(channels)
445 .rows(rows)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700446 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700447 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700448 }
449 }
450 }
451
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700452 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700453 TEST_REQUIRES_ARM_NEON;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800454 for (size_t rows = 1; rows <= 6; rows += 1) {
455 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700456 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800457 .channel_tile(4)
458 .channels(channels)
459 .rows(rows)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700460 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700461 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700462 }
463 }
464 }
465
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700466 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700467 TEST_REQUIRES_ARM_NEON;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800468 for (size_t rows = 1; rows <= 6; rows += 1) {
469 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700470 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800471 .channel_tile(4)
472 .channels(channels)
473 .rows(rows)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700474 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700475 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800476 }
477 }
478 }
479#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
480
481
482#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700483 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, channels_eq_8) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800484 TEST_REQUIRES_ARM_NEON;
485 VMulCAddCMicrokernelTester()
486 .channel_tile(8)
487 .channels(8)
488 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700489 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800490 }
491
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700492 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, channels_div_8) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800493 TEST_REQUIRES_ARM_NEON;
494 for (size_t channels = 16; channels < 80; channels += 8) {
495 VMulCAddCMicrokernelTester()
496 .channel_tile(8)
497 .channels(channels)
498 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700499 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800500 }
501 }
502
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700503 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, channels_lt_8) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800504 TEST_REQUIRES_ARM_NEON;
505 for (size_t channels = 1; channels < 8; channels++) {
506 VMulCAddCMicrokernelTester()
507 .channel_tile(8)
508 .channels(channels)
509 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700510 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800511 }
512 }
513
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700514 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, channels_gt_8) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800515 TEST_REQUIRES_ARM_NEON;
516 for (size_t channels = 9; channels < 16; channels++) {
517 VMulCAddCMicrokernelTester()
518 .channel_tile(8)
519 .channels(channels)
520 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700521 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800522 }
523 }
524
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700525 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, rows_lt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800526 TEST_REQUIRES_ARM_NEON;
527 for (size_t rows = 1; rows < 2; rows++) {
528 for (size_t channels = 1; channels <= 40; channels += 7) {
529 VMulCAddCMicrokernelTester()
530 .channel_tile(8)
531 .channels(channels)
532 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700533 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800534 }
535 }
536 }
537
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700538 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, rows_div_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800539 TEST_REQUIRES_ARM_NEON;
540 for (size_t rows = 4; rows <= 8; rows += 2) {
541 for (size_t channels = 1; channels <= 40; channels += 7) {
542 VMulCAddCMicrokernelTester()
543 .channel_tile(8)
544 .channels(channels)
545 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700546 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800547 }
548 }
549 }
550
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700551 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, rows_gt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800552 TEST_REQUIRES_ARM_NEON;
553 for (size_t rows = 3; rows < 4; rows++) {
554 for (size_t channels = 1; channels <= 40; channels += 7) {
555 VMulCAddCMicrokernelTester()
556 .channel_tile(8)
557 .channels(channels)
558 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700559 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800560 }
561 }
562 }
563
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700564 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, input_stride) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800565 TEST_REQUIRES_ARM_NEON;
566 for (size_t rows = 1; rows <= 6; rows += 1) {
567 for (size_t channels = 1; channels <= 40; channels += 7) {
568 VMulCAddCMicrokernelTester()
569 .channel_tile(8)
570 .channels(channels)
571 .rows(rows)
572 .input_stride(43)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700573 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800574 }
575 }
576 }
577
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700578 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, output_stride) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800579 TEST_REQUIRES_ARM_NEON;
580 for (size_t rows = 1; rows <= 6; rows += 1) {
581 for (size_t channels = 1; channels <= 40; channels += 7) {
582 VMulCAddCMicrokernelTester()
583 .channel_tile(8)
584 .channels(channels)
585 .rows(rows)
586 .output_stride(43)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700587 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800588 }
589 }
590 }
591
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700592 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, inplace) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800593 TEST_REQUIRES_ARM_NEON;
594 for (size_t rows = 1; rows <= 6; rows += 1) {
595 for (size_t channels = 1; channels <= 40; channels += 7) {
596 VMulCAddCMicrokernelTester()
597 .channel_tile(8)
598 .channels(channels)
599 .rows(rows)
600 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700601 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800602 }
603 }
604 }
605
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700606 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, qmin) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800607 TEST_REQUIRES_ARM_NEON;
608 for (size_t rows = 1; rows <= 6; rows += 1) {
609 for (size_t channels = 1; channels <= 40; channels += 7) {
610 VMulCAddCMicrokernelTester()
611 .channel_tile(8)
612 .channels(channels)
613 .rows(rows)
614 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700615 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800616 }
617 }
618 }
619
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700620 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, qmax) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800621 TEST_REQUIRES_ARM_NEON;
622 for (size_t rows = 1; rows <= 6; rows += 1) {
623 for (size_t channels = 1; channels <= 40; channels += 7) {
624 VMulCAddCMicrokernelTester()
625 .channel_tile(8)
626 .channels(channels)
627 .rows(rows)
628 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700629 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700630 }
631 }
632 }
Marat Dukhan1dadbf72019-10-01 10:46:20 -0700633#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
XNNPACK Teamb455b122019-09-27 18:10:33 -0700634
635
Marat Dukhan1dadbf72019-10-01 10:46:20 -0700636#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700637 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, channels_eq_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700638 TEST_REQUIRES_X86_SSE;
639 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800640 .channel_tile(4)
641 .channels(4)
642 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700643 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700644 }
645
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700646 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, channels_div_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700647 TEST_REQUIRES_X86_SSE;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800648 for (size_t channels = 8; channels < 40; channels += 4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700649 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800650 .channel_tile(4)
651 .channels(channels)
652 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700653 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700654 }
655 }
656
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700657 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, channels_lt_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700658 TEST_REQUIRES_X86_SSE;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800659 for (size_t channels = 1; channels < 4; channels++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700660 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800661 .channel_tile(4)
662 .channels(channels)
663 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700664 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700665 }
666 }
667
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700668 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, channels_gt_4) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700669 TEST_REQUIRES_X86_SSE;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800670 for (size_t channels = 5; channels < 8; channels++) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700671 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800672 .channel_tile(4)
673 .channels(channels)
674 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700675 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700676 }
677 }
678
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700679 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, rows_lt_2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700680 TEST_REQUIRES_X86_SSE;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800681 for (size_t rows = 1; rows < 2; rows++) {
682 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700683 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800684 .channel_tile(4)
685 .channels(channels)
686 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700687 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700688 }
689 }
690 }
691
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700692 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, rows_div_2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700693 TEST_REQUIRES_X86_SSE;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800694 for (size_t rows = 4; rows <= 8; rows += 2) {
695 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700696 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800697 .channel_tile(4)
698 .channels(channels)
699 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700700 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700701 }
702 }
703 }
704
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700705 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, rows_gt_2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700706 TEST_REQUIRES_X86_SSE;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800707 for (size_t rows = 3; rows < 4; rows++) {
708 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700709 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800710 .channel_tile(4)
711 .channels(channels)
712 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700713 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700714 }
715 }
716 }
717
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700718 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700719 TEST_REQUIRES_X86_SSE;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800720 for (size_t rows = 1; rows <= 6; rows += 1) {
721 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700722 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800723 .channel_tile(4)
724 .channels(channels)
725 .rows(rows)
726 .input_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700727 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700728 }
729 }
730 }
731
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700732 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700733 TEST_REQUIRES_X86_SSE;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800734 for (size_t rows = 1; rows <= 6; rows += 1) {
735 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700736 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800737 .channel_tile(4)
738 .channels(channels)
739 .rows(rows)
740 .output_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700741 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800742 }
743 }
744 }
745
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700746 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, inplace) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800747 TEST_REQUIRES_X86_SSE;
748 for (size_t rows = 1; rows <= 6; rows += 1) {
749 for (size_t channels = 1; channels <= 20; channels += 3) {
750 VMulCAddCMicrokernelTester()
751 .channel_tile(4)
752 .channels(channels)
753 .rows(rows)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700754 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700755 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700756 }
757 }
758 }
759
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700760 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700761 TEST_REQUIRES_X86_SSE;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800762 for (size_t rows = 1; rows <= 6; rows += 1) {
763 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700764 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800765 .channel_tile(4)
766 .channels(channels)
767 .rows(rows)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700768 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700769 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700770 }
771 }
772 }
773
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700774 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700775 TEST_REQUIRES_X86_SSE;
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800776 for (size_t rows = 1; rows <= 6; rows += 1) {
777 for (size_t channels = 1; channels <= 20; channels += 3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700778 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800779 .channel_tile(4)
780 .channels(channels)
781 .rows(rows)
XNNPACK Teamb455b122019-09-27 18:10:33 -0700782 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700783 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800784 }
785 }
786 }
787#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
788
789
790#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700791 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, channels_eq_8) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800792 TEST_REQUIRES_X86_SSE;
793 VMulCAddCMicrokernelTester()
794 .channel_tile(8)
795 .channels(8)
796 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700797 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800798 }
799
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700800 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, channels_div_8) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800801 TEST_REQUIRES_X86_SSE;
802 for (size_t channels = 16; channels < 80; channels += 8) {
803 VMulCAddCMicrokernelTester()
804 .channel_tile(8)
805 .channels(channels)
806 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700807 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800808 }
809 }
810
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700811 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, channels_lt_8) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800812 TEST_REQUIRES_X86_SSE;
813 for (size_t channels = 1; channels < 8; channels++) {
814 VMulCAddCMicrokernelTester()
815 .channel_tile(8)
816 .channels(channels)
817 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700818 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800819 }
820 }
821
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700822 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, channels_gt_8) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800823 TEST_REQUIRES_X86_SSE;
824 for (size_t channels = 9; channels < 16; channels++) {
825 VMulCAddCMicrokernelTester()
826 .channel_tile(8)
827 .channels(channels)
828 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700829 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800830 }
831 }
832
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700833 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, rows_lt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800834 TEST_REQUIRES_X86_SSE;
835 for (size_t rows = 1; rows < 2; rows++) {
836 for (size_t channels = 1; channels <= 40; channels += 7) {
837 VMulCAddCMicrokernelTester()
838 .channel_tile(8)
839 .channels(channels)
840 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700841 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800842 }
843 }
844 }
845
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700846 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, rows_div_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800847 TEST_REQUIRES_X86_SSE;
848 for (size_t rows = 4; rows <= 8; rows += 2) {
849 for (size_t channels = 1; channels <= 40; channels += 7) {
850 VMulCAddCMicrokernelTester()
851 .channel_tile(8)
852 .channels(channels)
853 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700854 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800855 }
856 }
857 }
858
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700859 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, rows_gt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800860 TEST_REQUIRES_X86_SSE;
861 for (size_t rows = 3; rows < 4; rows++) {
862 for (size_t channels = 1; channels <= 40; channels += 7) {
863 VMulCAddCMicrokernelTester()
864 .channel_tile(8)
865 .channels(channels)
866 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700867 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800868 }
869 }
870 }
871
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700872 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, input_stride) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800873 TEST_REQUIRES_X86_SSE;
874 for (size_t rows = 1; rows <= 6; rows += 1) {
875 for (size_t channels = 1; channels <= 40; channels += 7) {
876 VMulCAddCMicrokernelTester()
877 .channel_tile(8)
878 .channels(channels)
879 .rows(rows)
880 .input_stride(43)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700881 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800882 }
883 }
884 }
885
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700886 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, output_stride) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800887 TEST_REQUIRES_X86_SSE;
888 for (size_t rows = 1; rows <= 6; rows += 1) {
889 for (size_t channels = 1; channels <= 40; channels += 7) {
890 VMulCAddCMicrokernelTester()
891 .channel_tile(8)
892 .channels(channels)
893 .rows(rows)
894 .output_stride(43)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700895 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800896 }
897 }
898 }
899
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700900 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, inplace) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800901 TEST_REQUIRES_X86_SSE;
902 for (size_t rows = 1; rows <= 6; rows += 1) {
903 for (size_t channels = 1; channels <= 40; channels += 7) {
904 VMulCAddCMicrokernelTester()
905 .channel_tile(8)
906 .channels(channels)
907 .rows(rows)
908 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700909 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800910 }
911 }
912 }
913
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700914 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, qmin) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800915 TEST_REQUIRES_X86_SSE;
916 for (size_t rows = 1; rows <= 6; rows += 1) {
917 for (size_t channels = 1; channels <= 40; channels += 7) {
918 VMulCAddCMicrokernelTester()
919 .channel_tile(8)
920 .channels(channels)
921 .rows(rows)
922 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700923 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x);
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800924 }
925 }
926 }
927
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700928 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, qmax) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -0800929 TEST_REQUIRES_X86_SSE;
930 for (size_t rows = 1; rows <= 6; rows += 1) {
931 for (size_t channels = 1; channels <= 40; channels += 7) {
932 VMulCAddCMicrokernelTester()
933 .channel_tile(8)
934 .channels(channels)
935 .rows(rows)
936 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700937 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700938 }
939 }
940 }
Marat Dukhan1dadbf72019-10-01 10:46:20 -0700941#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
XNNPACK Teamb455b122019-09-27 18:10:33 -0700942
943
Marat Dukhand816f622020-07-15 10:14:39 -0700944#if XNN_ARCH_WASMSIMD
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700945 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, channels_eq_4) {
Marat Dukhand816f622020-07-15 10:14:39 -0700946 VMulCAddCMicrokernelTester()
947 .channel_tile(4)
948 .channels(4)
949 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700950 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -0700951 }
952
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700953 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, channels_div_4) {
Marat Dukhand816f622020-07-15 10:14:39 -0700954 for (size_t channels = 8; channels < 40; channels += 4) {
955 VMulCAddCMicrokernelTester()
956 .channel_tile(4)
957 .channels(channels)
958 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700959 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -0700960 }
961 }
962
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700963 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, channels_lt_4) {
Marat Dukhand816f622020-07-15 10:14:39 -0700964 for (size_t channels = 1; channels < 4; channels++) {
965 VMulCAddCMicrokernelTester()
966 .channel_tile(4)
967 .channels(channels)
968 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700969 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -0700970 }
971 }
972
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700973 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, channels_gt_4) {
Marat Dukhand816f622020-07-15 10:14:39 -0700974 for (size_t channels = 5; channels < 8; channels++) {
975 VMulCAddCMicrokernelTester()
976 .channel_tile(4)
977 .channels(channels)
978 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700979 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -0700980 }
981 }
982
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700983 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, rows_lt_2) {
Marat Dukhand816f622020-07-15 10:14:39 -0700984 for (size_t rows = 1; rows < 2; rows++) {
985 for (size_t channels = 1; channels <= 20; channels += 3) {
986 VMulCAddCMicrokernelTester()
987 .channel_tile(4)
988 .channels(channels)
989 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700990 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -0700991 }
992 }
993 }
994
Marat Dukhan9531e9f2020-07-24 15:25:02 -0700995 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, rows_div_2) {
Marat Dukhand816f622020-07-15 10:14:39 -0700996 for (size_t rows = 4; rows <= 8; rows += 2) {
997 for (size_t channels = 1; channels <= 20; channels += 3) {
998 VMulCAddCMicrokernelTester()
999 .channel_tile(4)
1000 .channels(channels)
1001 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001002 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001003 }
1004 }
1005 }
1006
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001007 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, rows_gt_2) {
Marat Dukhand816f622020-07-15 10:14:39 -07001008 for (size_t rows = 3; rows < 4; rows++) {
1009 for (size_t channels = 1; channels <= 20; channels += 3) {
1010 VMulCAddCMicrokernelTester()
1011 .channel_tile(4)
1012 .channels(channels)
1013 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001014 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001015 }
1016 }
1017 }
1018
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001019 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, input_stride) {
Marat Dukhand816f622020-07-15 10:14:39 -07001020 for (size_t rows = 1; rows <= 6; rows += 1) {
1021 for (size_t channels = 1; channels <= 20; channels += 3) {
1022 VMulCAddCMicrokernelTester()
1023 .channel_tile(4)
1024 .channels(channels)
1025 .rows(rows)
1026 .input_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001027 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001028 }
1029 }
1030 }
1031
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001032 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, output_stride) {
Marat Dukhand816f622020-07-15 10:14:39 -07001033 for (size_t rows = 1; rows <= 6; rows += 1) {
1034 for (size_t channels = 1; channels <= 20; channels += 3) {
1035 VMulCAddCMicrokernelTester()
1036 .channel_tile(4)
1037 .channels(channels)
1038 .rows(rows)
1039 .output_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001040 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001041 }
1042 }
1043 }
1044
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001045 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, inplace) {
Marat Dukhand816f622020-07-15 10:14:39 -07001046 for (size_t rows = 1; rows <= 6; rows += 1) {
1047 for (size_t channels = 1; channels <= 20; channels += 3) {
1048 VMulCAddCMicrokernelTester()
1049 .channel_tile(4)
1050 .channels(channels)
1051 .rows(rows)
1052 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001053 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001054 }
1055 }
1056 }
1057
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001058 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, qmin) {
Marat Dukhand816f622020-07-15 10:14:39 -07001059 for (size_t rows = 1; rows <= 6; rows += 1) {
1060 for (size_t channels = 1; channels <= 20; channels += 3) {
1061 VMulCAddCMicrokernelTester()
1062 .channel_tile(4)
1063 .channels(channels)
1064 .rows(rows)
1065 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001066 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001067 }
1068 }
1069 }
1070
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001071 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, qmax) {
Marat Dukhand816f622020-07-15 10:14:39 -07001072 for (size_t rows = 1; rows <= 6; rows += 1) {
1073 for (size_t channels = 1; channels <= 20; channels += 3) {
1074 VMulCAddCMicrokernelTester()
1075 .channel_tile(4)
1076 .channels(channels)
1077 .rows(rows)
1078 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001079 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001080 }
1081 }
1082 }
1083#endif // XNN_ARCH_WASMSIMD
1084
1085
1086#if XNN_ARCH_WASMSIMD
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001087 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, channels_eq_8) {
Marat Dukhand816f622020-07-15 10:14:39 -07001088 VMulCAddCMicrokernelTester()
1089 .channel_tile(8)
1090 .channels(8)
1091 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001092 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001093 }
1094
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001095 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, channels_div_8) {
Marat Dukhand816f622020-07-15 10:14:39 -07001096 for (size_t channels = 16; channels < 80; channels += 8) {
1097 VMulCAddCMicrokernelTester()
1098 .channel_tile(8)
1099 .channels(channels)
1100 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001101 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001102 }
1103 }
1104
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001105 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, channels_lt_8) {
Marat Dukhand816f622020-07-15 10:14:39 -07001106 for (size_t channels = 1; channels < 8; channels++) {
1107 VMulCAddCMicrokernelTester()
1108 .channel_tile(8)
1109 .channels(channels)
1110 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001111 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001112 }
1113 }
1114
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001115 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, channels_gt_8) {
Marat Dukhand816f622020-07-15 10:14:39 -07001116 for (size_t channels = 9; channels < 16; channels++) {
1117 VMulCAddCMicrokernelTester()
1118 .channel_tile(8)
1119 .channels(channels)
1120 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001121 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001122 }
1123 }
1124
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001125 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, rows_lt_2) {
Marat Dukhand816f622020-07-15 10:14:39 -07001126 for (size_t rows = 1; rows < 2; rows++) {
1127 for (size_t channels = 1; channels <= 40; channels += 7) {
1128 VMulCAddCMicrokernelTester()
1129 .channel_tile(8)
1130 .channels(channels)
1131 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001132 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001133 }
1134 }
1135 }
1136
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001137 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, rows_div_2) {
Marat Dukhand816f622020-07-15 10:14:39 -07001138 for (size_t rows = 4; rows <= 8; rows += 2) {
1139 for (size_t channels = 1; channels <= 40; channels += 7) {
1140 VMulCAddCMicrokernelTester()
1141 .channel_tile(8)
1142 .channels(channels)
1143 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001144 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001145 }
1146 }
1147 }
1148
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001149 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, rows_gt_2) {
Marat Dukhand816f622020-07-15 10:14:39 -07001150 for (size_t rows = 3; rows < 4; rows++) {
1151 for (size_t channels = 1; channels <= 40; channels += 7) {
1152 VMulCAddCMicrokernelTester()
1153 .channel_tile(8)
1154 .channels(channels)
1155 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001156 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001157 }
1158 }
1159 }
1160
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001161 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, input_stride) {
Marat Dukhand816f622020-07-15 10:14:39 -07001162 for (size_t rows = 1; rows <= 6; rows += 1) {
1163 for (size_t channels = 1; channels <= 40; channels += 7) {
1164 VMulCAddCMicrokernelTester()
1165 .channel_tile(8)
1166 .channels(channels)
1167 .rows(rows)
1168 .input_stride(43)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001169 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001170 }
1171 }
1172 }
1173
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001174 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, output_stride) {
Marat Dukhand816f622020-07-15 10:14:39 -07001175 for (size_t rows = 1; rows <= 6; rows += 1) {
1176 for (size_t channels = 1; channels <= 40; channels += 7) {
1177 VMulCAddCMicrokernelTester()
1178 .channel_tile(8)
1179 .channels(channels)
1180 .rows(rows)
1181 .output_stride(43)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001182 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001183 }
1184 }
1185 }
1186
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001187 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, inplace) {
Marat Dukhand816f622020-07-15 10:14:39 -07001188 for (size_t rows = 1; rows <= 6; rows += 1) {
1189 for (size_t channels = 1; channels <= 40; channels += 7) {
1190 VMulCAddCMicrokernelTester()
1191 .channel_tile(8)
1192 .channels(channels)
1193 .rows(rows)
1194 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001195 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001196 }
1197 }
1198 }
1199
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001200 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, qmin) {
Marat Dukhand816f622020-07-15 10:14:39 -07001201 for (size_t rows = 1; rows <= 6; rows += 1) {
1202 for (size_t channels = 1; channels <= 40; channels += 7) {
1203 VMulCAddCMicrokernelTester()
1204 .channel_tile(8)
1205 .channels(channels)
1206 .rows(rows)
1207 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001208 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001209 }
1210 }
1211 }
1212
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001213 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, qmax) {
Marat Dukhand816f622020-07-15 10:14:39 -07001214 for (size_t rows = 1; rows <= 6; rows += 1) {
1215 for (size_t channels = 1; channels <= 40; channels += 7) {
1216 VMulCAddCMicrokernelTester()
1217 .channel_tile(8)
1218 .channels(channels)
1219 .rows(rows)
1220 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001221 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001222 }
1223 }
1224 }
1225#endif // XNN_ARCH_WASMSIMD
1226
1227
1228#if XNN_ARCH_WASMSIMD
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001229 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, channels_eq_4) {
Marat Dukhand816f622020-07-15 10:14:39 -07001230 VMulCAddCMicrokernelTester()
1231 .channel_tile(4)
1232 .channels(4)
1233 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001234 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001235 }
1236
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001237 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, channels_div_4) {
Marat Dukhand816f622020-07-15 10:14:39 -07001238 for (size_t channels = 8; channels < 40; channels += 4) {
1239 VMulCAddCMicrokernelTester()
1240 .channel_tile(4)
1241 .channels(channels)
1242 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001243 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001244 }
1245 }
1246
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001247 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, channels_lt_4) {
Marat Dukhand816f622020-07-15 10:14:39 -07001248 for (size_t channels = 1; channels < 4; channels++) {
1249 VMulCAddCMicrokernelTester()
1250 .channel_tile(4)
1251 .channels(channels)
1252 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001253 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001254 }
1255 }
1256
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001257 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, channels_gt_4) {
Marat Dukhand816f622020-07-15 10:14:39 -07001258 for (size_t channels = 5; channels < 8; channels++) {
1259 VMulCAddCMicrokernelTester()
1260 .channel_tile(4)
1261 .channels(channels)
1262 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001263 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001264 }
1265 }
1266
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001267 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, rows_lt_2) {
Marat Dukhand816f622020-07-15 10:14:39 -07001268 for (size_t rows = 1; rows < 2; rows++) {
1269 for (size_t channels = 1; channels <= 20; channels += 3) {
1270 VMulCAddCMicrokernelTester()
1271 .channel_tile(4)
1272 .channels(channels)
1273 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001274 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001275 }
1276 }
1277 }
1278
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001279 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, rows_div_2) {
Marat Dukhand816f622020-07-15 10:14:39 -07001280 for (size_t rows = 4; rows <= 8; rows += 2) {
1281 for (size_t channels = 1; channels <= 20; channels += 3) {
1282 VMulCAddCMicrokernelTester()
1283 .channel_tile(4)
1284 .channels(channels)
1285 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001286 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001287 }
1288 }
1289 }
1290
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001291 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, rows_gt_2) {
Marat Dukhand816f622020-07-15 10:14:39 -07001292 for (size_t rows = 3; rows < 4; rows++) {
1293 for (size_t channels = 1; channels <= 20; channels += 3) {
1294 VMulCAddCMicrokernelTester()
1295 .channel_tile(4)
1296 .channels(channels)
1297 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001298 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001299 }
1300 }
1301 }
1302
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001303 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, input_stride) {
Marat Dukhand816f622020-07-15 10:14:39 -07001304 for (size_t rows = 1; rows <= 6; rows += 1) {
1305 for (size_t channels = 1; channels <= 20; channels += 3) {
1306 VMulCAddCMicrokernelTester()
1307 .channel_tile(4)
1308 .channels(channels)
1309 .rows(rows)
1310 .input_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001311 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001312 }
1313 }
1314 }
1315
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001316 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, output_stride) {
Marat Dukhand816f622020-07-15 10:14:39 -07001317 for (size_t rows = 1; rows <= 6; rows += 1) {
1318 for (size_t channels = 1; channels <= 20; channels += 3) {
1319 VMulCAddCMicrokernelTester()
1320 .channel_tile(4)
1321 .channels(channels)
1322 .rows(rows)
1323 .output_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001324 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001325 }
1326 }
1327 }
1328
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001329 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, inplace) {
Marat Dukhand816f622020-07-15 10:14:39 -07001330 for (size_t rows = 1; rows <= 6; rows += 1) {
1331 for (size_t channels = 1; channels <= 20; channels += 3) {
1332 VMulCAddCMicrokernelTester()
1333 .channel_tile(4)
1334 .channels(channels)
1335 .rows(rows)
1336 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001337 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001338 }
1339 }
1340 }
1341
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001342 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, qmin) {
Marat Dukhand816f622020-07-15 10:14:39 -07001343 for (size_t rows = 1; rows <= 6; rows += 1) {
1344 for (size_t channels = 1; channels <= 20; channels += 3) {
1345 VMulCAddCMicrokernelTester()
1346 .channel_tile(4)
1347 .channels(channels)
1348 .rows(rows)
1349 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001350 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001351 }
1352 }
1353 }
1354
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001355 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, qmax) {
Marat Dukhand816f622020-07-15 10:14:39 -07001356 for (size_t rows = 1; rows <= 6; rows += 1) {
1357 for (size_t channels = 1; channels <= 20; channels += 3) {
1358 VMulCAddCMicrokernelTester()
1359 .channel_tile(4)
1360 .channels(channels)
1361 .rows(rows)
1362 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001363 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001364 }
1365 }
1366 }
1367#endif // XNN_ARCH_WASMSIMD
1368
1369
1370#if XNN_ARCH_WASMSIMD
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001371 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, channels_eq_8) {
Marat Dukhand816f622020-07-15 10:14:39 -07001372 VMulCAddCMicrokernelTester()
1373 .channel_tile(8)
1374 .channels(8)
1375 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001376 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001377 }
1378
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001379 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, channels_div_8) {
Marat Dukhand816f622020-07-15 10:14:39 -07001380 for (size_t channels = 16; channels < 80; channels += 8) {
1381 VMulCAddCMicrokernelTester()
1382 .channel_tile(8)
1383 .channels(channels)
1384 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001385 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001386 }
1387 }
1388
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001389 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, channels_lt_8) {
Marat Dukhand816f622020-07-15 10:14:39 -07001390 for (size_t channels = 1; channels < 8; channels++) {
1391 VMulCAddCMicrokernelTester()
1392 .channel_tile(8)
1393 .channels(channels)
1394 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001395 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001396 }
1397 }
1398
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001399 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, channels_gt_8) {
Marat Dukhand816f622020-07-15 10:14:39 -07001400 for (size_t channels = 9; channels < 16; channels++) {
1401 VMulCAddCMicrokernelTester()
1402 .channel_tile(8)
1403 .channels(channels)
1404 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001405 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001406 }
1407 }
1408
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001409 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, rows_lt_2) {
Marat Dukhand816f622020-07-15 10:14:39 -07001410 for (size_t rows = 1; rows < 2; rows++) {
1411 for (size_t channels = 1; channels <= 40; channels += 7) {
1412 VMulCAddCMicrokernelTester()
1413 .channel_tile(8)
1414 .channels(channels)
1415 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001416 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001417 }
1418 }
1419 }
1420
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001421 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, rows_div_2) {
Marat Dukhand816f622020-07-15 10:14:39 -07001422 for (size_t rows = 4; rows <= 8; rows += 2) {
1423 for (size_t channels = 1; channels <= 40; channels += 7) {
1424 VMulCAddCMicrokernelTester()
1425 .channel_tile(8)
1426 .channels(channels)
1427 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001428 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001429 }
1430 }
1431 }
1432
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001433 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, rows_gt_2) {
Marat Dukhand816f622020-07-15 10:14:39 -07001434 for (size_t rows = 3; rows < 4; rows++) {
1435 for (size_t channels = 1; channels <= 40; channels += 7) {
1436 VMulCAddCMicrokernelTester()
1437 .channel_tile(8)
1438 .channels(channels)
1439 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001440 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001441 }
1442 }
1443 }
1444
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001445 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, input_stride) {
Marat Dukhand816f622020-07-15 10:14:39 -07001446 for (size_t rows = 1; rows <= 6; rows += 1) {
1447 for (size_t channels = 1; channels <= 40; channels += 7) {
1448 VMulCAddCMicrokernelTester()
1449 .channel_tile(8)
1450 .channels(channels)
1451 .rows(rows)
1452 .input_stride(43)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001453 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001454 }
1455 }
1456 }
1457
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001458 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, output_stride) {
Marat Dukhand816f622020-07-15 10:14:39 -07001459 for (size_t rows = 1; rows <= 6; rows += 1) {
1460 for (size_t channels = 1; channels <= 40; channels += 7) {
1461 VMulCAddCMicrokernelTester()
1462 .channel_tile(8)
1463 .channels(channels)
1464 .rows(rows)
1465 .output_stride(43)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001466 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001467 }
1468 }
1469 }
1470
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001471 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, inplace) {
Marat Dukhand816f622020-07-15 10:14:39 -07001472 for (size_t rows = 1; rows <= 6; rows += 1) {
1473 for (size_t channels = 1; channels <= 40; channels += 7) {
1474 VMulCAddCMicrokernelTester()
1475 .channel_tile(8)
1476 .channels(channels)
1477 .rows(rows)
1478 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001479 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001480 }
1481 }
1482 }
1483
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001484 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, qmin) {
Marat Dukhand816f622020-07-15 10:14:39 -07001485 for (size_t rows = 1; rows <= 6; rows += 1) {
1486 for (size_t channels = 1; channels <= 40; channels += 7) {
1487 VMulCAddCMicrokernelTester()
1488 .channel_tile(8)
1489 .channels(channels)
1490 .rows(rows)
1491 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001492 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001493 }
1494 }
1495 }
1496
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001497 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, qmax) {
Marat Dukhand816f622020-07-15 10:14:39 -07001498 for (size_t rows = 1; rows <= 6; rows += 1) {
1499 for (size_t channels = 1; channels <= 40; channels += 7) {
1500 VMulCAddCMicrokernelTester()
1501 .channel_tile(8)
1502 .channels(channels)
1503 .rows(rows)
1504 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001505 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x);
Marat Dukhand816f622020-07-15 10:14:39 -07001506 }
1507 }
1508 }
1509#endif // XNN_ARCH_WASMSIMD
1510
1511
Marat Dukhanfb5b20a2020-06-26 13:14:50 -07001512#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001513 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, channels_eq_1) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001514 VMulCAddCMicrokernelTester()
1515 .channel_tile(1)
1516 .channels(1)
1517 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001518 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001519 }
1520
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001521 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, channels_gt_1) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001522 for (size_t channels = 2; channels < 10; channels++) {
1523 VMulCAddCMicrokernelTester()
1524 .channel_tile(1)
1525 .channels(channels)
1526 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001527 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001528 }
1529 }
1530
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001531 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, rows_lt_2) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001532 for (size_t rows = 1; rows < 2; rows++) {
1533 for (size_t channels = 1; channels <= 5; channels += 1) {
1534 VMulCAddCMicrokernelTester()
1535 .channel_tile(1)
1536 .channels(channels)
1537 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001538 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001539 }
1540 }
1541 }
1542
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001543 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, rows_div_2) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001544 for (size_t rows = 4; rows <= 8; rows += 2) {
1545 for (size_t channels = 1; channels <= 5; channels += 1) {
1546 VMulCAddCMicrokernelTester()
1547 .channel_tile(1)
1548 .channels(channels)
1549 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001550 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001551 }
1552 }
1553 }
1554
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001555 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, rows_gt_2) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001556 for (size_t rows = 3; rows < 4; rows++) {
1557 for (size_t channels = 1; channels <= 5; channels += 1) {
1558 VMulCAddCMicrokernelTester()
1559 .channel_tile(1)
1560 .channels(channels)
1561 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001562 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001563 }
1564 }
1565 }
1566
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001567 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, input_stride) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001568 for (size_t rows = 1; rows <= 6; rows += 1) {
1569 for (size_t channels = 1; channels <= 5; channels += 1) {
1570 VMulCAddCMicrokernelTester()
1571 .channel_tile(1)
1572 .channels(channels)
1573 .rows(rows)
1574 .input_stride(7)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001575 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001576 }
1577 }
1578 }
1579
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001580 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, output_stride) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001581 for (size_t rows = 1; rows <= 6; rows += 1) {
1582 for (size_t channels = 1; channels <= 5; channels += 1) {
1583 VMulCAddCMicrokernelTester()
1584 .channel_tile(1)
1585 .channels(channels)
1586 .rows(rows)
1587 .output_stride(7)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001588 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001589 }
1590 }
1591 }
1592
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001593 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, inplace) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001594 for (size_t rows = 1; rows <= 6; rows += 1) {
1595 for (size_t channels = 1; channels <= 5; channels += 1) {
1596 VMulCAddCMicrokernelTester()
1597 .channel_tile(1)
1598 .channels(channels)
1599 .rows(rows)
1600 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001601 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001602 }
1603 }
1604 }
1605
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001606 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, qmin) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001607 for (size_t rows = 1; rows <= 6; rows += 1) {
1608 for (size_t channels = 1; channels <= 5; channels += 1) {
1609 VMulCAddCMicrokernelTester()
1610 .channel_tile(1)
1611 .channels(channels)
1612 .rows(rows)
1613 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001614 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001615 }
1616 }
1617 }
1618
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001619 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, qmax) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001620 for (size_t rows = 1; rows <= 6; rows += 1) {
1621 for (size_t channels = 1; channels <= 5; channels += 1) {
1622 VMulCAddCMicrokernelTester()
1623 .channel_tile(1)
1624 .channels(channels)
1625 .rows(rows)
1626 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001627 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001628 }
1629 }
1630 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -07001631#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan436ebe62019-12-04 15:10:12 -08001632
1633
Marat Dukhanfb5b20a2020-06-26 13:14:50 -07001634#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001635 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, channels_eq_2) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001636 VMulCAddCMicrokernelTester()
1637 .channel_tile(2)
1638 .channels(2)
1639 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001640 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001641 }
1642
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001643 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, channels_div_2) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001644 for (size_t channels = 4; channels < 20; channels += 2) {
1645 VMulCAddCMicrokernelTester()
1646 .channel_tile(2)
1647 .channels(channels)
1648 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001649 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001650 }
1651 }
1652
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001653 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, channels_lt_2) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001654 for (size_t channels = 1; channels < 2; channels++) {
1655 VMulCAddCMicrokernelTester()
1656 .channel_tile(2)
1657 .channels(channels)
1658 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001659 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001660 }
1661 }
1662
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001663 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, channels_gt_2) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001664 for (size_t channels = 3; channels < 4; channels++) {
1665 VMulCAddCMicrokernelTester()
1666 .channel_tile(2)
1667 .channels(channels)
1668 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001669 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001670 }
1671 }
1672
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001673 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, rows_lt_2) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001674 for (size_t rows = 1; rows < 2; rows++) {
1675 for (size_t channels = 1; channels <= 10; channels += 1) {
1676 VMulCAddCMicrokernelTester()
1677 .channel_tile(2)
1678 .channels(channels)
1679 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001680 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001681 }
1682 }
1683 }
1684
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001685 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, rows_div_2) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001686 for (size_t rows = 4; rows <= 8; rows += 2) {
1687 for (size_t channels = 1; channels <= 10; channels += 1) {
1688 VMulCAddCMicrokernelTester()
1689 .channel_tile(2)
1690 .channels(channels)
1691 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001692 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001693 }
1694 }
1695 }
1696
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001697 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, rows_gt_2) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001698 for (size_t rows = 3; rows < 4; rows++) {
1699 for (size_t channels = 1; channels <= 10; channels += 1) {
1700 VMulCAddCMicrokernelTester()
1701 .channel_tile(2)
1702 .channels(channels)
1703 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001704 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001705 }
1706 }
1707 }
1708
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001709 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, input_stride) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001710 for (size_t rows = 1; rows <= 6; rows += 1) {
1711 for (size_t channels = 1; channels <= 10; channels += 1) {
1712 VMulCAddCMicrokernelTester()
1713 .channel_tile(2)
1714 .channels(channels)
1715 .rows(rows)
1716 .input_stride(13)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001717 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001718 }
1719 }
1720 }
1721
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001722 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, output_stride) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001723 for (size_t rows = 1; rows <= 6; rows += 1) {
1724 for (size_t channels = 1; channels <= 10; channels += 1) {
1725 VMulCAddCMicrokernelTester()
1726 .channel_tile(2)
1727 .channels(channels)
1728 .rows(rows)
1729 .output_stride(13)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001730 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001731 }
1732 }
1733 }
1734
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001735 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, inplace) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001736 for (size_t rows = 1; rows <= 6; rows += 1) {
1737 for (size_t channels = 1; channels <= 10; channels += 1) {
1738 VMulCAddCMicrokernelTester()
1739 .channel_tile(2)
1740 .channels(channels)
1741 .rows(rows)
1742 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001743 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001744 }
1745 }
1746 }
1747
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001748 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, qmin) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001749 for (size_t rows = 1; rows <= 6; rows += 1) {
1750 for (size_t channels = 1; channels <= 10; channels += 1) {
1751 VMulCAddCMicrokernelTester()
1752 .channel_tile(2)
1753 .channels(channels)
1754 .rows(rows)
1755 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001756 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001757 }
1758 }
1759 }
1760
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001761 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, qmax) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001762 for (size_t rows = 1; rows <= 6; rows += 1) {
1763 for (size_t channels = 1; channels <= 10; channels += 1) {
1764 VMulCAddCMicrokernelTester()
1765 .channel_tile(2)
1766 .channels(channels)
1767 .rows(rows)
1768 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001769 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001770 }
1771 }
1772 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -07001773#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan436ebe62019-12-04 15:10:12 -08001774
1775
Marat Dukhanfb5b20a2020-06-26 13:14:50 -07001776#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001777 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, channels_eq_4) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001778 VMulCAddCMicrokernelTester()
1779 .channel_tile(4)
1780 .channels(4)
1781 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001782 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001783 }
1784
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001785 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, channels_div_4) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001786 for (size_t channels = 8; channels < 40; channels += 4) {
1787 VMulCAddCMicrokernelTester()
1788 .channel_tile(4)
1789 .channels(channels)
1790 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001791 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001792 }
1793 }
1794
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001795 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, channels_lt_4) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001796 for (size_t channels = 1; channels < 4; channels++) {
1797 VMulCAddCMicrokernelTester()
1798 .channel_tile(4)
1799 .channels(channels)
1800 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001801 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001802 }
1803 }
1804
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001805 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, channels_gt_4) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001806 for (size_t channels = 5; channels < 8; channels++) {
1807 VMulCAddCMicrokernelTester()
1808 .channel_tile(4)
1809 .channels(channels)
1810 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001811 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001812 }
1813 }
1814
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001815 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, rows_lt_2) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001816 for (size_t rows = 1; rows < 2; rows++) {
1817 for (size_t channels = 1; channels <= 20; channels += 3) {
1818 VMulCAddCMicrokernelTester()
1819 .channel_tile(4)
1820 .channels(channels)
1821 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001822 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001823 }
1824 }
1825 }
1826
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001827 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, rows_div_2) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001828 for (size_t rows = 4; rows <= 8; rows += 2) {
1829 for (size_t channels = 1; channels <= 20; channels += 3) {
1830 VMulCAddCMicrokernelTester()
1831 .channel_tile(4)
1832 .channels(channels)
1833 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001834 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001835 }
1836 }
1837 }
1838
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001839 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, rows_gt_2) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001840 for (size_t rows = 3; rows < 4; rows++) {
1841 for (size_t channels = 1; channels <= 20; channels += 3) {
1842 VMulCAddCMicrokernelTester()
1843 .channel_tile(4)
1844 .channels(channels)
1845 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001846 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001847 }
1848 }
1849 }
1850
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001851 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, input_stride) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001852 for (size_t rows = 1; rows <= 6; rows += 1) {
1853 for (size_t channels = 1; channels <= 20; channels += 3) {
1854 VMulCAddCMicrokernelTester()
1855 .channel_tile(4)
1856 .channels(channels)
1857 .rows(rows)
1858 .input_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001859 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001860 }
1861 }
1862 }
1863
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001864 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, output_stride) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001865 for (size_t rows = 1; rows <= 6; rows += 1) {
1866 for (size_t channels = 1; channels <= 20; channels += 3) {
1867 VMulCAddCMicrokernelTester()
1868 .channel_tile(4)
1869 .channels(channels)
1870 .rows(rows)
1871 .output_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001872 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001873 }
1874 }
1875 }
1876
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001877 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, inplace) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001878 for (size_t rows = 1; rows <= 6; rows += 1) {
1879 for (size_t channels = 1; channels <= 20; channels += 3) {
1880 VMulCAddCMicrokernelTester()
1881 .channel_tile(4)
1882 .channels(channels)
1883 .rows(rows)
1884 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001885 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001886 }
1887 }
1888 }
1889
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001890 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, qmin) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001891 for (size_t rows = 1; rows <= 6; rows += 1) {
1892 for (size_t channels = 1; channels <= 20; channels += 3) {
1893 VMulCAddCMicrokernelTester()
1894 .channel_tile(4)
1895 .channels(channels)
1896 .rows(rows)
1897 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001898 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001899 }
1900 }
1901 }
1902
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001903 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, qmax) {
Marat Dukhan436ebe62019-12-04 15:10:12 -08001904 for (size_t rows = 1; rows <= 6; rows += 1) {
1905 for (size_t channels = 1; channels <= 20; channels += 3) {
1906 VMulCAddCMicrokernelTester()
1907 .channel_tile(4)
1908 .channels(channels)
1909 .rows(rows)
1910 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001911 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x);
Marat Dukhan436ebe62019-12-04 15:10:12 -08001912 }
1913 }
1914 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -07001915#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan436ebe62019-12-04 15:10:12 -08001916
1917
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001918TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, channels_eq_1) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001919 VMulCAddCMicrokernelTester()
1920 .channel_tile(1)
1921 .channels(1)
1922 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001923 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001924}
1925
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001926TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, channels_gt_1) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001927 for (size_t channels = 2; channels < 10; channels++) {
1928 VMulCAddCMicrokernelTester()
1929 .channel_tile(1)
1930 .channels(channels)
1931 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001932 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001933 }
1934}
1935
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001936TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, rows_lt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001937 for (size_t rows = 1; rows < 2; rows++) {
1938 for (size_t channels = 1; channels <= 5; channels += 1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001939 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001940 .channel_tile(1)
1941 .channels(channels)
1942 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001943 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001944 }
1945 }
1946}
1947
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001948TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, rows_div_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001949 for (size_t rows = 4; rows <= 8; rows += 2) {
1950 for (size_t channels = 1; channels <= 5; channels += 1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001951 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001952 .channel_tile(1)
1953 .channels(channels)
1954 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001955 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001956 }
1957 }
1958}
1959
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001960TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, rows_gt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001961 for (size_t rows = 3; rows < 4; rows++) {
1962 for (size_t channels = 1; channels <= 5; channels += 1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001963 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001964 .channel_tile(1)
1965 .channels(channels)
1966 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001967 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001968 }
1969 }
1970}
1971
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001972TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, input_stride) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001973 for (size_t rows = 1; rows <= 6; rows += 1) {
1974 for (size_t channels = 1; channels <= 5; channels += 1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001975 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001976 .channel_tile(1)
1977 .channels(channels)
1978 .rows(rows)
1979 .input_stride(7)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001980 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001981 }
1982 }
1983}
1984
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001985TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, output_stride) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001986 for (size_t rows = 1; rows <= 6; rows += 1) {
1987 for (size_t channels = 1; channels <= 5; channels += 1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07001988 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001989 .channel_tile(1)
1990 .channels(channels)
1991 .rows(rows)
1992 .output_stride(7)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001993 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001994 }
1995 }
1996}
1997
Marat Dukhan9531e9f2020-07-24 15:25:02 -07001998TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, inplace) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08001999 for (size_t rows = 1; rows <= 6; rows += 1) {
2000 for (size_t channels = 1; channels <= 5; channels += 1) {
2001 VMulCAddCMicrokernelTester()
2002 .channel_tile(1)
2003 .channels(channels)
2004 .rows(rows)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002005 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002006 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07002007 }
2008 }
2009}
2010
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002011TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, qmin) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002012 for (size_t rows = 1; rows <= 6; rows += 1) {
2013 for (size_t channels = 1; channels <= 5; channels += 1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002014 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002015 .channel_tile(1)
2016 .channels(channels)
2017 .rows(rows)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002018 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002019 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07002020 }
2021 }
2022}
2023
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002024TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, qmax) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002025 for (size_t rows = 1; rows <= 6; rows += 1) {
2026 for (size_t channels = 1; channels <= 5; channels += 1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002027 VMulCAddCMicrokernelTester()
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002028 .channel_tile(1)
2029 .channels(channels)
2030 .rows(rows)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002031 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002032 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002033 }
2034 }
2035}
2036
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002037TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, channels_eq_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002038 VMulCAddCMicrokernelTester()
2039 .channel_tile(2)
2040 .channels(2)
2041 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002042 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002043}
2044
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002045TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, channels_div_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002046 for (size_t channels = 4; channels < 20; channels += 2) {
2047 VMulCAddCMicrokernelTester()
2048 .channel_tile(2)
2049 .channels(channels)
2050 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002051 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002052 }
2053}
2054
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002055TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, channels_lt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002056 for (size_t channels = 1; channels < 2; channels++) {
2057 VMulCAddCMicrokernelTester()
2058 .channel_tile(2)
2059 .channels(channels)
2060 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002061 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002062 }
2063}
2064
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002065TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, channels_gt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002066 for (size_t channels = 3; channels < 4; channels++) {
2067 VMulCAddCMicrokernelTester()
2068 .channel_tile(2)
2069 .channels(channels)
2070 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002071 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002072 }
2073}
2074
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002075TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, rows_lt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002076 for (size_t rows = 1; rows < 2; rows++) {
2077 for (size_t channels = 1; channels <= 10; channels += 1) {
2078 VMulCAddCMicrokernelTester()
2079 .channel_tile(2)
2080 .channels(channels)
2081 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002082 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002083 }
2084 }
2085}
2086
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002087TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, rows_div_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002088 for (size_t rows = 4; rows <= 8; rows += 2) {
2089 for (size_t channels = 1; channels <= 10; channels += 1) {
2090 VMulCAddCMicrokernelTester()
2091 .channel_tile(2)
2092 .channels(channels)
2093 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002094 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002095 }
2096 }
2097}
2098
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002099TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, rows_gt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002100 for (size_t rows = 3; rows < 4; rows++) {
2101 for (size_t channels = 1; channels <= 10; channels += 1) {
2102 VMulCAddCMicrokernelTester()
2103 .channel_tile(2)
2104 .channels(channels)
2105 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002106 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002107 }
2108 }
2109}
2110
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002111TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, input_stride) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002112 for (size_t rows = 1; rows <= 6; rows += 1) {
2113 for (size_t channels = 1; channels <= 10; channels += 1) {
2114 VMulCAddCMicrokernelTester()
2115 .channel_tile(2)
2116 .channels(channels)
2117 .rows(rows)
2118 .input_stride(13)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002119 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002120 }
2121 }
2122}
2123
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002124TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, output_stride) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002125 for (size_t rows = 1; rows <= 6; rows += 1) {
2126 for (size_t channels = 1; channels <= 10; channels += 1) {
2127 VMulCAddCMicrokernelTester()
2128 .channel_tile(2)
2129 .channels(channels)
2130 .rows(rows)
2131 .output_stride(13)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002132 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002133 }
2134 }
2135}
2136
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002137TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, inplace) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002138 for (size_t rows = 1; rows <= 6; rows += 1) {
2139 for (size_t channels = 1; channels <= 10; channels += 1) {
2140 VMulCAddCMicrokernelTester()
2141 .channel_tile(2)
2142 .channels(channels)
2143 .rows(rows)
2144 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002145 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002146 }
2147 }
2148}
2149
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002150TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, qmin) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002151 for (size_t rows = 1; rows <= 6; rows += 1) {
2152 for (size_t channels = 1; channels <= 10; channels += 1) {
2153 VMulCAddCMicrokernelTester()
2154 .channel_tile(2)
2155 .channels(channels)
2156 .rows(rows)
2157 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002158 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002159 }
2160 }
2161}
2162
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002163TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, qmax) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002164 for (size_t rows = 1; rows <= 6; rows += 1) {
2165 for (size_t channels = 1; channels <= 10; channels += 1) {
2166 VMulCAddCMicrokernelTester()
2167 .channel_tile(2)
2168 .channels(channels)
2169 .rows(rows)
2170 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002171 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002172 }
2173 }
2174}
2175
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002176TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, channels_eq_4) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002177 VMulCAddCMicrokernelTester()
2178 .channel_tile(4)
2179 .channels(4)
2180 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002181 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002182}
2183
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002184TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, channels_div_4) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002185 for (size_t channels = 8; channels < 40; channels += 4) {
2186 VMulCAddCMicrokernelTester()
2187 .channel_tile(4)
2188 .channels(channels)
2189 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002190 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002191 }
2192}
2193
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002194TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, channels_lt_4) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002195 for (size_t channels = 1; channels < 4; channels++) {
2196 VMulCAddCMicrokernelTester()
2197 .channel_tile(4)
2198 .channels(channels)
2199 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002200 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002201 }
2202}
2203
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002204TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, channels_gt_4) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002205 for (size_t channels = 5; channels < 8; channels++) {
2206 VMulCAddCMicrokernelTester()
2207 .channel_tile(4)
2208 .channels(channels)
2209 .rows(2)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002210 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002211 }
2212}
2213
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002214TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, rows_lt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002215 for (size_t rows = 1; rows < 2; rows++) {
2216 for (size_t channels = 1; channels <= 20; channels += 3) {
2217 VMulCAddCMicrokernelTester()
2218 .channel_tile(4)
2219 .channels(channels)
2220 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002221 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002222 }
2223 }
2224}
2225
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002226TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, rows_div_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002227 for (size_t rows = 4; rows <= 8; rows += 2) {
2228 for (size_t channels = 1; channels <= 20; channels += 3) {
2229 VMulCAddCMicrokernelTester()
2230 .channel_tile(4)
2231 .channels(channels)
2232 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002233 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002234 }
2235 }
2236}
2237
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002238TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, rows_gt_2) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002239 for (size_t rows = 3; rows < 4; rows++) {
2240 for (size_t channels = 1; channels <= 20; channels += 3) {
2241 VMulCAddCMicrokernelTester()
2242 .channel_tile(4)
2243 .channels(channels)
2244 .rows(rows)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002245 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002246 }
2247 }
2248}
2249
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002250TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, input_stride) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002251 for (size_t rows = 1; rows <= 6; rows += 1) {
2252 for (size_t channels = 1; channels <= 20; channels += 3) {
2253 VMulCAddCMicrokernelTester()
2254 .channel_tile(4)
2255 .channels(channels)
2256 .rows(rows)
2257 .input_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002258 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002259 }
2260 }
2261}
2262
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002263TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, output_stride) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002264 for (size_t rows = 1; rows <= 6; rows += 1) {
2265 for (size_t channels = 1; channels <= 20; channels += 3) {
2266 VMulCAddCMicrokernelTester()
2267 .channel_tile(4)
2268 .channels(channels)
2269 .rows(rows)
2270 .output_stride(23)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002271 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002272 }
2273 }
2274}
2275
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002276TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, inplace) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002277 for (size_t rows = 1; rows <= 6; rows += 1) {
2278 for (size_t channels = 1; channels <= 20; channels += 3) {
2279 VMulCAddCMicrokernelTester()
2280 .channel_tile(4)
2281 .channels(channels)
2282 .rows(rows)
2283 .inplace(true)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002284 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002285 }
2286 }
2287}
2288
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002289TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, qmin) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002290 for (size_t rows = 1; rows <= 6; rows += 1) {
2291 for (size_t channels = 1; channels <= 20; channels += 3) {
2292 VMulCAddCMicrokernelTester()
2293 .channel_tile(4)
2294 .channels(channels)
2295 .rows(rows)
2296 .qmin(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002297 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002298 }
2299 }
2300}
2301
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002302TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, qmax) {
Marat Dukhan49e6ee92019-11-06 15:55:29 -08002303 for (size_t rows = 1; rows <= 6; rows += 1) {
2304 for (size_t channels = 1; channels <= 20; channels += 3) {
2305 VMulCAddCMicrokernelTester()
2306 .channel_tile(4)
2307 .channels(channels)
2308 .rows(rows)
2309 .qmax(128)
Marat Dukhan9531e9f2020-07-24 15:25:02 -07002310 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, VMulCAddCMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07002311 }
2312 }
2313}