blob: 5d8bf060aa6f89e547198ae9c97d5b9457dbc026 [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
XNNPACK Teamb455b122019-09-27 18:10:33 -07006#include <gtest/gtest.h>
7
Marat Dukhan1dadbf72019-10-01 10:46:20 -07008#include <xnnpack/common.h>
XNNPACK Teamb455b122019-09-27 18:10:33 -07009#include <xnnpack/isa-checks.h>
XNNPACK Teamb455b122019-09-27 18:10:33 -070010
Marat Dukhan1dadbf72019-10-01 10:46:20 -070011#include <xnnpack/rmax.h>
XNNPACK Teamb455b122019-09-27 18:10:33 -070012#include "rmax-microkernel-tester.h"
13
14
Marat Dukhan1dadbf72019-10-01 10:46:20 -070015#if XNN_ARCH_ARM || XNN_ARCH_ARM64
XNNPACK Teamb455b122019-09-27 18:10:33 -070016 TEST(F32_RMAX__NEON, n_lt_16) {
17 TEST_REQUIRES_ARM_NEON;
18 for (size_t n = 1; n < 16; n++) {
19 RMaxMicrokernelTester()
20 .n(n)
21 .Test(xnn_f32_rmax_ukernel__neon);
22 }
23 }
24
25 TEST(F32_RMAX__NEON, n_eq_16) {
26 TEST_REQUIRES_ARM_NEON;
27 RMaxMicrokernelTester()
28 .n(16)
29 .Test(xnn_f32_rmax_ukernel__neon);
30 }
31
32 TEST(F32_RMAX__NEON, n_div_16) {
33 TEST_REQUIRES_ARM_NEON;
34 for (size_t n = 16; n < 128; n += 16) {
35 RMaxMicrokernelTester()
36 .n(n)
37 .Test(xnn_f32_rmax_ukernel__neon);
38 }
39 }
40
41 TEST(F32_RMAX__NEON, n_gt_16) {
42 TEST_REQUIRES_ARM_NEON;
43 for (size_t n = 16; n < 32; n++) {
44 RMaxMicrokernelTester()
45 .n(n)
46 .Test(xnn_f32_rmax_ukernel__neon);
47 }
48 }
Marat Dukhan1dadbf72019-10-01 10:46:20 -070049#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
XNNPACK Teamb455b122019-09-27 18:10:33 -070050
Marat Dukhan1dadbf72019-10-01 10:46:20 -070051#if XNN_ARCH_X86 || XNN_ARCH_X86_64
XNNPACK Teamb455b122019-09-27 18:10:33 -070052 TEST(F32_RMAX__SSE, n_lt_16) {
53 TEST_REQUIRES_X86_SSE2;
54 for (size_t n = 1; n < 16; n++) {
55 RMaxMicrokernelTester()
56 .n(n)
57 .Test(xnn_f32_rmax_ukernel__sse);
58 }
59 }
60
61 TEST(F32_RMAX__SSE, n_eq_16) {
62 TEST_REQUIRES_X86_SSE2;
63 RMaxMicrokernelTester()
64 .n(16)
65 .Test(xnn_f32_rmax_ukernel__sse);
66 }
67
68 TEST(F32_RMAX__SSE, n_div_16) {
69 TEST_REQUIRES_X86_SSE2;
70 for (size_t n = 16; n < 128; n += 16) {
71 RMaxMicrokernelTester()
72 .n(n)
73 .Test(xnn_f32_rmax_ukernel__sse);
74 }
75 }
76
77 TEST(F32_RMAX__SSE, n_gt_16) {
78 TEST_REQUIRES_X86_SSE2;
79 for (size_t n = 16; n < 32; n++) {
80 RMaxMicrokernelTester()
81 .n(n)
82 .Test(xnn_f32_rmax_ukernel__sse);
83 }
84 }
85
86 TEST(F32_RMAX__AVX, n_lt_32) {
87 TEST_REQUIRES_X86_AVX;
88 for (size_t n = 1; n < 32; n++) {
89 RMaxMicrokernelTester()
90 .n(n)
91 .Test(xnn_f32_rmax_ukernel__avx);
92 }
93 }
94
95 TEST(F32_RMAX__AVX, n_eq_32) {
96 TEST_REQUIRES_X86_AVX;
97 RMaxMicrokernelTester()
98 .n(32)
99 .Test(xnn_f32_rmax_ukernel__avx);
100 }
101
102 TEST(F32_RMAX__AVX, n_div_32) {
103 TEST_REQUIRES_X86_AVX;
104 for (size_t n = 32; n < 256; n += 32) {
105 RMaxMicrokernelTester()
106 .n(n)
107 .Test(xnn_f32_rmax_ukernel__avx);
108 }
109 }
110
111 TEST(F32_RMAX__AVX, n_gt_32) {
112 TEST_REQUIRES_X86_AVX;
113 for (size_t n = 32; n < 64; n++) {
114 RMaxMicrokernelTester()
115 .n(n)
116 .Test(xnn_f32_rmax_ukernel__avx);
117 }
118 }
119
120 TEST(F32_RMAX__AVX512F, n_lt_64) {
121 TEST_REQUIRES_X86_AVX512F;
122 for (size_t n = 1; n < 64; n++) {
123 RMaxMicrokernelTester()
124 .n(n)
125 .Test(xnn_f32_rmax_ukernel__avx512f);
126 }
127 }
128
129 TEST(F32_RMAX__AVX512F, n_eq_64) {
130 TEST_REQUIRES_X86_AVX512F;
131 RMaxMicrokernelTester()
132 .n(64)
133 .Test(xnn_f32_rmax_ukernel__avx512f);
134 }
135
136 TEST(F32_RMAX__AVX512F, n_div_64) {
137 TEST_REQUIRES_X86_AVX512F;
138 for (size_t n = 64; n < 512; n += 64) {
139 RMaxMicrokernelTester()
140 .n(n)
141 .Test(xnn_f32_rmax_ukernel__avx512f);
142 }
143 }
144
145 TEST(F32_RMAX__AVX512F, n_gt_64) {
146 TEST_REQUIRES_X86_AVX512F;
147 for (size_t n = 64; n < 128; n++) {
148 RMaxMicrokernelTester()
149 .n(n)
150 .Test(xnn_f32_rmax_ukernel__avx512f);
151 }
152 }
Marat Dukhan1dadbf72019-10-01 10:46:20 -0700153#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
XNNPACK Teamb455b122019-09-27 18:10:33 -0700154
155TEST(F32_RMAX__SCALAR, n_lt_4) {
156 for (size_t n = 1; n < 4; n++) {
157 RMaxMicrokernelTester()
158 .n(n)
159 .Test(xnn_f32_rmax_ukernel__scalar);
160 }
161}
162
163TEST(F32_RMAX__SCALAR, n_eq_4) {
164 RMaxMicrokernelTester()
165 .n(4)
166 .Test(xnn_f32_rmax_ukernel__scalar);
167}
168
169TEST(F32_RMAX__SCALAR, n_div_4) {
170 for (size_t n = 4; n < 32; n += 4) {
171 RMaxMicrokernelTester()
172 .n(n)
173 .Test(xnn_f32_rmax_ukernel__scalar);
174 }
175}
176
177TEST(F32_RMAX__SCALAR, n_gt_4) {
178 for (size_t n = 4; n < 8; n++) {
179 RMaxMicrokernelTester()
180 .n(n)
181 .Test(xnn_f32_rmax_ukernel__scalar);
182 }
183}