1 // Copyright 2019 Google LLC 2 // 3 // This source code is licensed under the BSD-style license found in the 4 // LICENSE file in the root directory of this source tree. 5 // 6 // Auto-generated file. Do not edit! 7 // Specification: test/f16-vsub-minmax.yaml 8 // Generator: tools/generate-vbinary-test.py 9 10 11 #include <gtest/gtest.h> 12 13 #include <xnnpack/common.h> 14 #include <xnnpack/isa-checks.h> 15 16 #include <xnnpack/microparams-init.h> 17 #include <xnnpack/vbinary.h> 18 #include "vbinary-microkernel-tester.h" 19 20 21 #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8,batch_eq_8)22 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8, batch_eq_8) { 23 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 24 VBinaryMicrokernelTester() 25 .batch_size(8) 26 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 27 } 28 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8,batch_div_8)29 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8, batch_div_8) { 30 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 31 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) { 32 VBinaryMicrokernelTester() 33 .batch_size(batch_size) 34 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 35 } 36 } 37 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8,batch_lt_8)38 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8, batch_lt_8) { 39 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 40 for (size_t batch_size = 1; batch_size < 8; batch_size++) { 41 VBinaryMicrokernelTester() 42 .batch_size(batch_size) 43 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 44 } 45 } 46 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8,batch_gt_8)47 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8, batch_gt_8) { 48 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 49 for (size_t batch_size = 9; batch_size < 16; batch_size++) { 50 VBinaryMicrokernelTester() 51 .batch_size(batch_size) 52 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 53 } 54 } 55 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8,inplace_a)56 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8, inplace_a) { 57 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 58 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) { 59 VBinaryMicrokernelTester() 60 .batch_size(batch_size) 61 .inplace_a(true) 62 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 63 } 64 } 65 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8,inplace_b)66 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8, inplace_b) { 67 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 68 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) { 69 VBinaryMicrokernelTester() 70 .batch_size(batch_size) 71 .inplace_b(true) 72 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 73 } 74 } 75 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8,inplace_a_and_b)76 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8, inplace_a_and_b) { 77 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 78 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) { 79 VBinaryMicrokernelTester() 80 .batch_size(batch_size) 81 .inplace_a(true) 82 .inplace_b(true) 83 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 84 } 85 } 86 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8,qmin)87 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8, qmin) { 88 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 89 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) { 90 VBinaryMicrokernelTester() 91 .batch_size(batch_size) 92 .qmin(128) 93 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 94 } 95 } 96 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8,qmax)97 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X8, qmax) { 98 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 99 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) { 100 VBinaryMicrokernelTester() 101 .batch_size(batch_size) 102 .qmax(128) 103 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 104 } 105 } 106 #endif // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) 107 108 109 #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16,batch_eq_16)110 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16, batch_eq_16) { 111 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 112 VBinaryMicrokernelTester() 113 .batch_size(16) 114 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 115 } 116 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16,batch_div_16)117 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16, batch_div_16) { 118 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 119 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) { 120 VBinaryMicrokernelTester() 121 .batch_size(batch_size) 122 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 123 } 124 } 125 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16,batch_lt_16)126 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16, batch_lt_16) { 127 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 128 for (size_t batch_size = 1; batch_size < 16; batch_size++) { 129 VBinaryMicrokernelTester() 130 .batch_size(batch_size) 131 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 132 } 133 } 134 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16,batch_gt_16)135 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16, batch_gt_16) { 136 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 137 for (size_t batch_size = 17; batch_size < 32; batch_size++) { 138 VBinaryMicrokernelTester() 139 .batch_size(batch_size) 140 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 141 } 142 } 143 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16,inplace_a)144 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16, inplace_a) { 145 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 146 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) { 147 VBinaryMicrokernelTester() 148 .batch_size(batch_size) 149 .inplace_a(true) 150 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 151 } 152 } 153 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16,inplace_b)154 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16, inplace_b) { 155 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 156 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) { 157 VBinaryMicrokernelTester() 158 .batch_size(batch_size) 159 .inplace_b(true) 160 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 161 } 162 } 163 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16,inplace_a_and_b)164 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16, inplace_a_and_b) { 165 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 166 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) { 167 VBinaryMicrokernelTester() 168 .batch_size(batch_size) 169 .inplace_a(true) 170 .inplace_b(true) 171 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 172 } 173 } 174 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16,qmin)175 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16, qmin) { 176 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 177 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) { 178 VBinaryMicrokernelTester() 179 .batch_size(batch_size) 180 .qmin(128) 181 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 182 } 183 } 184 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16,qmax)185 TEST(F16_VSUB_MINMAX__NEONFP16ARITH_X16, qmax) { 186 TEST_REQUIRES_ARM_NEON_FP16_ARITH; 187 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) { 188 VBinaryMicrokernelTester() 189 .batch_size(batch_size) 190 .qmax(128) 191 .Test(xnn_f16_vsub_minmax_ukernel__neonfp16arith_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_neon_params); 192 } 193 } 194 #endif // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) 195 196 197 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 TEST(F16_VSUB_MINMAX__F16C_X8,batch_eq_8)198 TEST(F16_VSUB_MINMAX__F16C_X8, batch_eq_8) { 199 TEST_REQUIRES_X86_F16C; 200 VBinaryMicrokernelTester() 201 .batch_size(8) 202 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 203 } 204 TEST(F16_VSUB_MINMAX__F16C_X8,batch_div_8)205 TEST(F16_VSUB_MINMAX__F16C_X8, batch_div_8) { 206 TEST_REQUIRES_X86_F16C; 207 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) { 208 VBinaryMicrokernelTester() 209 .batch_size(batch_size) 210 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 211 } 212 } 213 TEST(F16_VSUB_MINMAX__F16C_X8,batch_lt_8)214 TEST(F16_VSUB_MINMAX__F16C_X8, batch_lt_8) { 215 TEST_REQUIRES_X86_F16C; 216 for (size_t batch_size = 1; batch_size < 8; batch_size++) { 217 VBinaryMicrokernelTester() 218 .batch_size(batch_size) 219 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 220 } 221 } 222 TEST(F16_VSUB_MINMAX__F16C_X8,batch_gt_8)223 TEST(F16_VSUB_MINMAX__F16C_X8, batch_gt_8) { 224 TEST_REQUIRES_X86_F16C; 225 for (size_t batch_size = 9; batch_size < 16; batch_size++) { 226 VBinaryMicrokernelTester() 227 .batch_size(batch_size) 228 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 229 } 230 } 231 TEST(F16_VSUB_MINMAX__F16C_X8,inplace_a)232 TEST(F16_VSUB_MINMAX__F16C_X8, inplace_a) { 233 TEST_REQUIRES_X86_F16C; 234 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) { 235 VBinaryMicrokernelTester() 236 .batch_size(batch_size) 237 .inplace_a(true) 238 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 239 } 240 } 241 TEST(F16_VSUB_MINMAX__F16C_X8,inplace_b)242 TEST(F16_VSUB_MINMAX__F16C_X8, inplace_b) { 243 TEST_REQUIRES_X86_F16C; 244 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) { 245 VBinaryMicrokernelTester() 246 .batch_size(batch_size) 247 .inplace_b(true) 248 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 249 } 250 } 251 TEST(F16_VSUB_MINMAX__F16C_X8,inplace_a_and_b)252 TEST(F16_VSUB_MINMAX__F16C_X8, inplace_a_and_b) { 253 TEST_REQUIRES_X86_F16C; 254 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) { 255 VBinaryMicrokernelTester() 256 .batch_size(batch_size) 257 .inplace_a(true) 258 .inplace_b(true) 259 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 260 } 261 } 262 TEST(F16_VSUB_MINMAX__F16C_X8,qmin)263 TEST(F16_VSUB_MINMAX__F16C_X8, qmin) { 264 TEST_REQUIRES_X86_F16C; 265 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) { 266 VBinaryMicrokernelTester() 267 .batch_size(batch_size) 268 .qmin(128) 269 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 270 } 271 } 272 TEST(F16_VSUB_MINMAX__F16C_X8,qmax)273 TEST(F16_VSUB_MINMAX__F16C_X8, qmax) { 274 TEST_REQUIRES_X86_F16C; 275 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) { 276 VBinaryMicrokernelTester() 277 .batch_size(batch_size) 278 .qmax(128) 279 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x8, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 280 } 281 } 282 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 283 284 285 #if XNN_ARCH_X86 || XNN_ARCH_X86_64 TEST(F16_VSUB_MINMAX__F16C_X16,batch_eq_16)286 TEST(F16_VSUB_MINMAX__F16C_X16, batch_eq_16) { 287 TEST_REQUIRES_X86_F16C; 288 VBinaryMicrokernelTester() 289 .batch_size(16) 290 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 291 } 292 TEST(F16_VSUB_MINMAX__F16C_X16,batch_div_16)293 TEST(F16_VSUB_MINMAX__F16C_X16, batch_div_16) { 294 TEST_REQUIRES_X86_F16C; 295 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) { 296 VBinaryMicrokernelTester() 297 .batch_size(batch_size) 298 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 299 } 300 } 301 TEST(F16_VSUB_MINMAX__F16C_X16,batch_lt_16)302 TEST(F16_VSUB_MINMAX__F16C_X16, batch_lt_16) { 303 TEST_REQUIRES_X86_F16C; 304 for (size_t batch_size = 1; batch_size < 16; batch_size++) { 305 VBinaryMicrokernelTester() 306 .batch_size(batch_size) 307 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 308 } 309 } 310 TEST(F16_VSUB_MINMAX__F16C_X16,batch_gt_16)311 TEST(F16_VSUB_MINMAX__F16C_X16, batch_gt_16) { 312 TEST_REQUIRES_X86_F16C; 313 for (size_t batch_size = 17; batch_size < 32; batch_size++) { 314 VBinaryMicrokernelTester() 315 .batch_size(batch_size) 316 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 317 } 318 } 319 TEST(F16_VSUB_MINMAX__F16C_X16,inplace_a)320 TEST(F16_VSUB_MINMAX__F16C_X16, inplace_a) { 321 TEST_REQUIRES_X86_F16C; 322 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) { 323 VBinaryMicrokernelTester() 324 .batch_size(batch_size) 325 .inplace_a(true) 326 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 327 } 328 } 329 TEST(F16_VSUB_MINMAX__F16C_X16,inplace_b)330 TEST(F16_VSUB_MINMAX__F16C_X16, inplace_b) { 331 TEST_REQUIRES_X86_F16C; 332 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) { 333 VBinaryMicrokernelTester() 334 .batch_size(batch_size) 335 .inplace_b(true) 336 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 337 } 338 } 339 TEST(F16_VSUB_MINMAX__F16C_X16,inplace_a_and_b)340 TEST(F16_VSUB_MINMAX__F16C_X16, inplace_a_and_b) { 341 TEST_REQUIRES_X86_F16C; 342 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) { 343 VBinaryMicrokernelTester() 344 .batch_size(batch_size) 345 .inplace_a(true) 346 .inplace_b(true) 347 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 348 } 349 } 350 TEST(F16_VSUB_MINMAX__F16C_X16,qmin)351 TEST(F16_VSUB_MINMAX__F16C_X16, qmin) { 352 TEST_REQUIRES_X86_F16C; 353 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) { 354 VBinaryMicrokernelTester() 355 .batch_size(batch_size) 356 .qmin(128) 357 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 358 } 359 } 360 TEST(F16_VSUB_MINMAX__F16C_X16,qmax)361 TEST(F16_VSUB_MINMAX__F16C_X16, qmax) { 362 TEST_REQUIRES_X86_F16C; 363 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) { 364 VBinaryMicrokernelTester() 365 .batch_size(batch_size) 366 .qmax(128) 367 .Test(xnn_f16_vsub_minmax_ukernel__f16c_x16, VBinaryMicrokernelTester::OpType::Sub, xnn_init_f16_minmax_avx_params); 368 } 369 } 370 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 371