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