]> git.proxmox.com Git - mirror_zfs-debian.git/blame - module/zfs/vdev_raidz_math_aarch64_neonx2.c
Incorporate DebianPT.org Portuguese translation
[mirror_zfs-debian.git] / module / zfs / vdev_raidz_math_aarch64_neonx2.c
CommitLineData
cae5b340
AX
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright (C) 2016 Romain Dolbeau. All rights reserved.
23 */
24
25#include <sys/isa_defs.h>
26
27#if defined(__aarch64__)
28
29#include "vdev_raidz_math_aarch64_neon_common.h"
30
31#define SYN_STRIDE 4
32
33#define ZERO_STRIDE 8
34#define ZERO_DEFINE() \
35 GEN_X_DEFINE_0_3() \
36 GEN_X_DEFINE_4_5() \
37 GEN_X_DEFINE_6_7()
38#define ZERO_D 0, 1, 2, 3, 4, 5, 6, 7
39
40#define COPY_STRIDE 8
41#define COPY_DEFINE() \
42 GEN_X_DEFINE_0_3() \
43 GEN_X_DEFINE_4_5() \
44 GEN_X_DEFINE_6_7()
45#define COPY_D 0, 1, 2, 3, 4, 5, 6, 7
46
47#define ADD_STRIDE 8
48#define ADD_DEFINE() \
49 GEN_X_DEFINE_0_3() \
50 GEN_X_DEFINE_4_5() \
51 GEN_X_DEFINE_6_7()
52#define ADD_D 0, 1, 2, 3, 4, 5, 6, 7
53
54#define MUL_STRIDE 4
55#define MUL_DEFINE() \
56 GEN_X_DEFINE_0_3() \
57 GEN_X_DEFINE_33_36()
58#define MUL_D 0, 1, 2, 3
59
60#define GEN_P_DEFINE() \
61 GEN_X_DEFINE_0_3() \
62 GEN_X_DEFINE_33_36()
63#define GEN_P_STRIDE 4
64#define GEN_P_P 0, 1, 2, 3
65
66#define GEN_PQ_DEFINE() \
67 GEN_X_DEFINE_0_3() \
68 GEN_X_DEFINE_4_5() \
69 GEN_X_DEFINE_6_7() \
70 GEN_X_DEFINE_16() \
71 GEN_X_DEFINE_17() \
72 GEN_X_DEFINE_33_36()
73#define GEN_PQ_STRIDE 4
74#define GEN_PQ_D 0, 1, 2, 3
75#define GEN_PQ_C 4, 5, 6, 7
76
77#define GEN_PQR_DEFINE() \
78 GEN_X_DEFINE_0_3() \
79 GEN_X_DEFINE_4_5() \
80 GEN_X_DEFINE_6_7() \
81 GEN_X_DEFINE_16() \
82 GEN_X_DEFINE_17() \
83 GEN_X_DEFINE_33_36()
84#define GEN_PQR_STRIDE 4
85#define GEN_PQR_D 0, 1, 2, 3
86#define GEN_PQR_C 4, 5, 6, 7
87
88#define SYN_Q_DEFINE() \
89 GEN_X_DEFINE_0_3() \
90 GEN_X_DEFINE_4_5() \
91 GEN_X_DEFINE_6_7() \
92 GEN_X_DEFINE_16() \
93 GEN_X_DEFINE_17() \
94 GEN_X_DEFINE_33_36()
95#define SYN_Q_STRIDE 4
96#define SYN_Q_D 0, 1, 2, 3
97#define SYN_Q_X 4, 5, 6, 7
98
99#define SYN_R_DEFINE() \
100 GEN_X_DEFINE_0_3() \
101 GEN_X_DEFINE_4_5() \
102 GEN_X_DEFINE_6_7() \
103 GEN_X_DEFINE_16() \
104 GEN_X_DEFINE_17() \
105 GEN_X_DEFINE_33_36()
106#define SYN_R_STRIDE 4
107#define SYN_R_D 0, 1, 2, 3
108#define SYN_R_X 4, 5, 6, 7
109
110#define SYN_PQ_DEFINE() \
111 GEN_X_DEFINE_0_3() \
112 GEN_X_DEFINE_4_5() \
113 GEN_X_DEFINE_6_7() \
114 GEN_X_DEFINE_16() \
115 GEN_X_DEFINE_17() \
116 GEN_X_DEFINE_33_36()
117#define SYN_PQ_STRIDE 4
118#define SYN_PQ_D 0, 1, 2, 3
119#define SYN_PQ_X 4, 5, 6, 7
120
121#define REC_PQ_DEFINE() \
122 GEN_X_DEFINE_0_3() \
123 GEN_X_DEFINE_4_5() \
124 GEN_X_DEFINE_6_7() \
125 GEN_X_DEFINE_8_9() \
126 GEN_X_DEFINE_22_23() \
127 GEN_X_DEFINE_33_36()
128#define REC_PQ_STRIDE 4
129#define REC_PQ_X 0, 1, 2, 3
130#define REC_PQ_Y 4, 5, 6, 7
131#define REC_PQ_T 8, 9, 22, 23
132
133#define SYN_PR_DEFINE() \
134 GEN_X_DEFINE_0_3() \
135 GEN_X_DEFINE_4_5() \
136 GEN_X_DEFINE_6_7() \
137 GEN_X_DEFINE_16() \
138 GEN_X_DEFINE_17() \
139 GEN_X_DEFINE_33_36()
140#define SYN_PR_STRIDE 4
141#define SYN_PR_D 0, 1, 2, 3
142#define SYN_PR_X 4, 5, 6, 7
143
144#define REC_PR_DEFINE() \
145 GEN_X_DEFINE_0_3() \
146 GEN_X_DEFINE_4_5() \
147 GEN_X_DEFINE_6_7() \
148 GEN_X_DEFINE_8_9() \
149 GEN_X_DEFINE_22_23() \
150 GEN_X_DEFINE_33_36()
151#define REC_PR_STRIDE 4
152#define REC_PR_X 0, 1, 2, 3
153#define REC_PR_Y 4, 5, 6, 7
154#define REC_PR_T 8, 9, 22, 23
155
156#define SYN_QR_DEFINE() \
157 GEN_X_DEFINE_0_3() \
158 GEN_X_DEFINE_4_5() \
159 GEN_X_DEFINE_6_7() \
160 GEN_X_DEFINE_16() \
161 GEN_X_DEFINE_17() \
162 GEN_X_DEFINE_33_36()
163#define SYN_QR_STRIDE 4
164#define SYN_QR_D 0, 1, 2, 3
165#define SYN_QR_X 4, 5, 6, 7
166
167#define REC_QR_DEFINE() \
168 GEN_X_DEFINE_0_3() \
169 GEN_X_DEFINE_4_5() \
170 GEN_X_DEFINE_6_7() \
171 GEN_X_DEFINE_8_9() \
172 GEN_X_DEFINE_22_23() \
173 GEN_X_DEFINE_33_36()
174#define REC_QR_STRIDE 4
175#define REC_QR_X 0, 1, 2, 3
176#define REC_QR_Y 4, 5, 6, 7
177#define REC_QR_T 8, 9, 22, 23
178
179#define SYN_PQR_DEFINE() \
180 GEN_X_DEFINE_0_3() \
181 GEN_X_DEFINE_4_5() \
182 GEN_X_DEFINE_6_7() \
183 GEN_X_DEFINE_16() \
184 GEN_X_DEFINE_17() \
185 GEN_X_DEFINE_33_36()
186#define SYN_PQR_STRIDE 4
187#define SYN_PQR_D 0, 1, 2, 3
188#define SYN_PQR_X 4, 5, 6, 7
189
190#define REC_PQR_DEFINE() \
191 GEN_X_DEFINE_0_3() \
192 GEN_X_DEFINE_4_5() \
193 GEN_X_DEFINE_6_7() \
194 GEN_X_DEFINE_8_9() \
195 GEN_X_DEFINE_31() \
196 GEN_X_DEFINE_32() \
197 GEN_X_DEFINE_33_36()
198#define REC_PQR_STRIDE 2
199#define REC_PQR_X 0, 1
200#define REC_PQR_Y 2, 3
201#define REC_PQR_Z 4, 5
202#define REC_PQR_XS 6, 7
203#define REC_PQR_YS 8, 9
204
205#include <sys/vdev_raidz_impl.h>
206#include "vdev_raidz_math_impl.h"
207
208DEFINE_GEN_METHODS(aarch64_neonx2);
209/*
210 * If compiled with -O0, gcc doesn't do any stack frame coalescing
211 * and -Wframe-larger-than=1024 is triggered in debug mode.
212 */
213#pragma GCC diagnostic ignored "-Wframe-larger-than="
214DEFINE_REC_METHODS(aarch64_neonx2);
215#pragma GCC diagnostic pop
216
217static boolean_t
218raidz_will_aarch64_neonx2_work(void)
219{
220 return (B_TRUE); // __arch64__ requires NEON
221}
222
223const raidz_impl_ops_t vdev_raidz_aarch64_neonx2_impl = {
224 .init = NULL,
225 .fini = NULL,
226 .gen = RAIDZ_GEN_METHODS(aarch64_neonx2),
227 .rec = RAIDZ_REC_METHODS(aarch64_neonx2),
228 .is_supported = &raidz_will_aarch64_neonx2_work,
229 .name = "aarch64_neonx2"
230};
231
232#endif /* defined(__aarch64__) */