1*4bdc9457SAndroid Build Coastguard Worker // Copyright (c) Facebook, Inc. and its affiliates.
2*4bdc9457SAndroid Build Coastguard Worker // All rights reserved.
3*4bdc9457SAndroid Build Coastguard Worker //
4*4bdc9457SAndroid Build Coastguard Worker // Copyright 2019 Google LLC
5*4bdc9457SAndroid Build Coastguard Worker //
6*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the
7*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree.
8*4bdc9457SAndroid Build Coastguard Worker
9*4bdc9457SAndroid Build Coastguard Worker #include <gtest/gtest.h>
10*4bdc9457SAndroid Build Coastguard Worker
11*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h>
12*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/isa-checks.h>
13*4bdc9457SAndroid Build Coastguard Worker
14*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/rmax.h>
15*4bdc9457SAndroid Build Coastguard Worker #include "rmax-microkernel-tester.h"
16*4bdc9457SAndroid Build Coastguard Worker
17*4bdc9457SAndroid Build Coastguard Worker
18*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(U8RMAX__NEON,n_lt_16)19*4bdc9457SAndroid Build Coastguard Worker TEST(U8RMAX__NEON, n_lt_16) {
20*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON;
21*4bdc9457SAndroid Build Coastguard Worker for (size_t n = 1; n < 16; n++) {
22*4bdc9457SAndroid Build Coastguard Worker RMaxMicrokernelTester()
23*4bdc9457SAndroid Build Coastguard Worker .n(n)
24*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_u8_rmax_ukernel__neon);
25*4bdc9457SAndroid Build Coastguard Worker }
26*4bdc9457SAndroid Build Coastguard Worker }
27*4bdc9457SAndroid Build Coastguard Worker
TEST(U8RMAX__NEON,n_eq_16)28*4bdc9457SAndroid Build Coastguard Worker TEST(U8RMAX__NEON, n_eq_16) {
29*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON;
30*4bdc9457SAndroid Build Coastguard Worker RMaxMicrokernelTester()
31*4bdc9457SAndroid Build Coastguard Worker .n(16)
32*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_u8_rmax_ukernel__neon);
33*4bdc9457SAndroid Build Coastguard Worker }
34*4bdc9457SAndroid Build Coastguard Worker
TEST(U8RMAX__NEON,n_div_16)35*4bdc9457SAndroid Build Coastguard Worker TEST(U8RMAX__NEON, n_div_16) {
36*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON;
37*4bdc9457SAndroid Build Coastguard Worker for (size_t n = 16; n < 128; n += 16) {
38*4bdc9457SAndroid Build Coastguard Worker RMaxMicrokernelTester()
39*4bdc9457SAndroid Build Coastguard Worker .n(n)
40*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_u8_rmax_ukernel__neon);
41*4bdc9457SAndroid Build Coastguard Worker }
42*4bdc9457SAndroid Build Coastguard Worker }
43*4bdc9457SAndroid Build Coastguard Worker
TEST(U8RMAX__NEON,n_gt_16)44*4bdc9457SAndroid Build Coastguard Worker TEST(U8RMAX__NEON, n_gt_16) {
45*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON;
46*4bdc9457SAndroid Build Coastguard Worker for (size_t n = 16; n < 32; n++) {
47*4bdc9457SAndroid Build Coastguard Worker RMaxMicrokernelTester()
48*4bdc9457SAndroid Build Coastguard Worker .n(n)
49*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_u8_rmax_ukernel__neon);
50*4bdc9457SAndroid Build Coastguard Worker }
51*4bdc9457SAndroid Build Coastguard Worker }
52*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
53*4bdc9457SAndroid Build Coastguard Worker
54*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(U8RMAX__SSE2,n_lt_16)55*4bdc9457SAndroid Build Coastguard Worker TEST(U8RMAX__SSE2, n_lt_16) {
56*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_SSE2;
57*4bdc9457SAndroid Build Coastguard Worker for (size_t n = 1; n < 16; n++) {
58*4bdc9457SAndroid Build Coastguard Worker RMaxMicrokernelTester()
59*4bdc9457SAndroid Build Coastguard Worker .n(n)
60*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_u8_rmax_ukernel__sse2);
61*4bdc9457SAndroid Build Coastguard Worker }
62*4bdc9457SAndroid Build Coastguard Worker }
63*4bdc9457SAndroid Build Coastguard Worker
TEST(U8RMAX__SSE2,n_eq_16)64*4bdc9457SAndroid Build Coastguard Worker TEST(U8RMAX__SSE2, n_eq_16) {
65*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_SSE2;
66*4bdc9457SAndroid Build Coastguard Worker RMaxMicrokernelTester()
67*4bdc9457SAndroid Build Coastguard Worker .n(16)
68*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_u8_rmax_ukernel__sse2);
69*4bdc9457SAndroid Build Coastguard Worker }
70*4bdc9457SAndroid Build Coastguard Worker
TEST(U8RMAX__SSE2,n_div_16)71*4bdc9457SAndroid Build Coastguard Worker TEST(U8RMAX__SSE2, n_div_16) {
72*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_SSE2;
73*4bdc9457SAndroid Build Coastguard Worker for (size_t n = 16; n < 128; n += 16) {
74*4bdc9457SAndroid Build Coastguard Worker RMaxMicrokernelTester()
75*4bdc9457SAndroid Build Coastguard Worker .n(n)
76*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_u8_rmax_ukernel__sse2);
77*4bdc9457SAndroid Build Coastguard Worker }
78*4bdc9457SAndroid Build Coastguard Worker }
79*4bdc9457SAndroid Build Coastguard Worker
TEST(U8RMAX__SSE2,n_gt_16)80*4bdc9457SAndroid Build Coastguard Worker TEST(U8RMAX__SSE2, n_gt_16) {
81*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_SSE2;
82*4bdc9457SAndroid Build Coastguard Worker for (size_t n = 17; n < 32; n++) {
83*4bdc9457SAndroid Build Coastguard Worker RMaxMicrokernelTester()
84*4bdc9457SAndroid Build Coastguard Worker .n(n)
85*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_u8_rmax_ukernel__sse2);
86*4bdc9457SAndroid Build Coastguard Worker }
87*4bdc9457SAndroid Build Coastguard Worker }
88*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
89*4bdc9457SAndroid Build Coastguard Worker
TEST(U8RMAX__SCALAR,n_lt_2)90*4bdc9457SAndroid Build Coastguard Worker TEST(U8RMAX__SCALAR, n_lt_2) {
91*4bdc9457SAndroid Build Coastguard Worker for (size_t n = 1; n < 2; n++) {
92*4bdc9457SAndroid Build Coastguard Worker RMaxMicrokernelTester()
93*4bdc9457SAndroid Build Coastguard Worker .n(n)
94*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_u8_rmax_ukernel__scalar);
95*4bdc9457SAndroid Build Coastguard Worker }
96*4bdc9457SAndroid Build Coastguard Worker }
97*4bdc9457SAndroid Build Coastguard Worker
TEST(U8RMAX__SCALAR,n_eq_2)98*4bdc9457SAndroid Build Coastguard Worker TEST(U8RMAX__SCALAR, n_eq_2) {
99*4bdc9457SAndroid Build Coastguard Worker RMaxMicrokernelTester()
100*4bdc9457SAndroid Build Coastguard Worker .n(2)
101*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_u8_rmax_ukernel__scalar);
102*4bdc9457SAndroid Build Coastguard Worker }
103*4bdc9457SAndroid Build Coastguard Worker
TEST(U8RMAX__SCALAR,n_div_2)104*4bdc9457SAndroid Build Coastguard Worker TEST(U8RMAX__SCALAR, n_div_2) {
105*4bdc9457SAndroid Build Coastguard Worker for (size_t n = 2; n < 16; n += 2) {
106*4bdc9457SAndroid Build Coastguard Worker RMaxMicrokernelTester()
107*4bdc9457SAndroid Build Coastguard Worker .n(n)
108*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_u8_rmax_ukernel__scalar);
109*4bdc9457SAndroid Build Coastguard Worker }
110*4bdc9457SAndroid Build Coastguard Worker }
111*4bdc9457SAndroid Build Coastguard Worker
TEST(U8RMAX__SCALAR,n_gt_2)112*4bdc9457SAndroid Build Coastguard Worker TEST(U8RMAX__SCALAR, n_gt_2) {
113*4bdc9457SAndroid Build Coastguard Worker for (size_t n = 3; n < 4; n++) {
114*4bdc9457SAndroid Build Coastguard Worker RMaxMicrokernelTester()
115*4bdc9457SAndroid Build Coastguard Worker .n(n)
116*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_u8_rmax_ukernel__scalar);
117*4bdc9457SAndroid Build Coastguard Worker }
118*4bdc9457SAndroid Build Coastguard Worker }
119