]>
Commit | Line | Data |
---|---|---|
0a09a948 | 1 | /* ACLE support for AArch64 SVE (__ARM_FEATURE_SVE intrinsics) |
83ffe9cd | 2 | Copyright (C) 2020-2023 Free Software Foundation, Inc. |
0a09a948 RS |
3 | |
4 | This file is part of GCC. | |
5 | ||
6 | GCC is free software; you can redistribute it and/or modify it | |
7 | under the terms of the GNU General Public License as published by | |
8 | the Free Software Foundation; either version 3, or (at your option) | |
9 | any later version. | |
10 | ||
11 | GCC is distributed in the hope that it will be useful, but | |
12 | WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | General Public License for more details. | |
15 | ||
16 | You should have received a copy of the GNU General Public License | |
17 | along with GCC; see the file COPYING3. If not see | |
18 | <http://www.gnu.org/licenses/>. */ | |
19 | ||
20 | #define REQUIRED_EXTENSIONS AARCH64_FL_SVE2 | |
21 | DEF_SVE_FUNCTION (svaba, ternary_opt_n, all_integer, none) | |
22 | DEF_SVE_FUNCTION (svabalb, ternary_long_opt_n, hsd_integer, none) | |
23 | DEF_SVE_FUNCTION (svabalt, ternary_long_opt_n, hsd_integer, none) | |
24 | DEF_SVE_FUNCTION (svadalp, binary_wide, hsd_integer, mxz) | |
25 | DEF_SVE_FUNCTION (svadclb, ternary_opt_n, sd_unsigned, none) | |
26 | DEF_SVE_FUNCTION (svadclt, ternary_opt_n, sd_unsigned, none) | |
27 | DEF_SVE_FUNCTION (svaddhnb, binary_narrowb_opt_n, hsd_integer, none) | |
28 | DEF_SVE_FUNCTION (svaddhnt, binary_narrowt_opt_n, hsd_integer, none) | |
29 | DEF_SVE_FUNCTION (svabdlb, binary_long_opt_n, hsd_integer, none) | |
30 | DEF_SVE_FUNCTION (svabdlt, binary_long_opt_n, hsd_integer, none) | |
31 | DEF_SVE_FUNCTION (svaddlb, binary_long_opt_n, hsd_integer, none) | |
32 | DEF_SVE_FUNCTION (svaddlbt, binary_long_opt_n, hsd_signed, none) | |
33 | DEF_SVE_FUNCTION (svaddlt, binary_long_opt_n, hsd_integer, none) | |
02fcd8ac | 34 | DEF_SVE_FUNCTION (svaddp, binary, all_arith, mx) |
0a09a948 RS |
35 | DEF_SVE_FUNCTION (svaddwb, binary_wide_opt_n, hsd_integer, none) |
36 | DEF_SVE_FUNCTION (svaddwt, binary_wide_opt_n, hsd_integer, none) | |
37 | DEF_SVE_FUNCTION (svbcax, ternary_opt_n, all_integer, none) | |
38 | DEF_SVE_FUNCTION (svbsl, ternary_opt_n, all_integer, none) | |
39 | DEF_SVE_FUNCTION (svbsl1n, ternary_opt_n, all_integer, none) | |
40 | DEF_SVE_FUNCTION (svbsl2n, ternary_opt_n, all_integer, none) | |
41 | DEF_SVE_FUNCTION (svcadd, binary_rotate, all_integer, none) | |
42 | DEF_SVE_FUNCTION (svcdot, ternary_qq_rotate, sd_signed, none) | |
43 | DEF_SVE_FUNCTION (svcdot_lane, ternary_qq_lane_rotate, sd_signed, none) | |
44 | DEF_SVE_FUNCTION (svcmla, ternary_rotate, all_integer, none) | |
45 | DEF_SVE_FUNCTION (svcmla_lane, ternary_lane_rotate, hs_integer, none) | |
46 | DEF_SVE_FUNCTION (svcvtlt, unary_convert, cvt_long, mx) | |
47 | DEF_SVE_FUNCTION (svcvtnt, unary_convert_narrowt, cvt_narrow, mx) | |
48 | DEF_SVE_FUNCTION (svcvtx, unary_convert, cvt_narrow_s, mxz) | |
49 | DEF_SVE_FUNCTION (svcvtxnt, unary_convert_narrowt, cvt_narrow_s, mx) | |
50 | DEF_SVE_FUNCTION (sveor3, ternary_opt_n, all_integer, none) | |
51 | DEF_SVE_FUNCTION (sveorbt, ternary_opt_n, all_integer, none) | |
52 | DEF_SVE_FUNCTION (sveortb, ternary_opt_n, all_integer, none) | |
53 | DEF_SVE_FUNCTION (svhadd, binary_opt_n, all_integer, mxz) | |
54 | DEF_SVE_FUNCTION (svhistcnt, binary_to_uint, sd_integer, z) | |
55 | DEF_SVE_FUNCTION (svhistseg, binary_to_uint, b_integer, none) | |
56 | DEF_SVE_FUNCTION (svhsub, binary_opt_n, all_integer, mxz) | |
57 | DEF_SVE_FUNCTION (svhsubr, binary_opt_n, all_integer, mxz) | |
58 | DEF_SVE_FUNCTION (svldnt1_gather, load_gather_sv_restricted, sd_data, implicit) | |
59 | DEF_SVE_FUNCTION (svldnt1_gather, load_gather_vs, sd_data, implicit) | |
60 | DEF_SVE_FUNCTION (svldnt1sb_gather, load_ext_gather_offset_restricted, sd_integer, implicit) | |
61 | DEF_SVE_FUNCTION (svldnt1sh_gather, load_ext_gather_offset_restricted, sd_integer, implicit) | |
62 | DEF_SVE_FUNCTION (svldnt1sh_gather, load_ext_gather_index_restricted, sd_integer, implicit) | |
63 | DEF_SVE_FUNCTION (svldnt1sw_gather, load_ext_gather_offset_restricted, d_integer, implicit) | |
64 | DEF_SVE_FUNCTION (svldnt1sw_gather, load_ext_gather_index_restricted, d_integer, implicit) | |
65 | DEF_SVE_FUNCTION (svldnt1ub_gather, load_ext_gather_offset_restricted, sd_integer, implicit) | |
66 | DEF_SVE_FUNCTION (svldnt1uh_gather, load_ext_gather_offset_restricted, sd_integer, implicit) | |
67 | DEF_SVE_FUNCTION (svldnt1uh_gather, load_ext_gather_index_restricted, sd_integer, implicit) | |
68 | DEF_SVE_FUNCTION (svldnt1uw_gather, load_ext_gather_offset_restricted, d_integer, implicit) | |
69 | DEF_SVE_FUNCTION (svldnt1uw_gather, load_ext_gather_index_restricted, d_integer, implicit) | |
70 | DEF_SVE_FUNCTION (svlogb, unary_to_int, all_float, mxz) | |
71 | DEF_SVE_FUNCTION (svmatch, compare, bh_integer, implicit) | |
02fcd8ac | 72 | DEF_SVE_FUNCTION (svmaxp, binary, all_arith, mx) |
0a09a948 RS |
73 | DEF_SVE_FUNCTION (svmaxnmp, binary, all_float, mx) |
74 | DEF_SVE_FUNCTION (svmla_lane, ternary_lane, hsd_integer, none) | |
75 | DEF_SVE_FUNCTION (svmlalb, ternary_long_opt_n, s_float_hsd_integer, none) | |
76 | DEF_SVE_FUNCTION (svmlalb_lane, ternary_long_lane, s_float_sd_integer, none) | |
77 | DEF_SVE_FUNCTION (svmlalt, ternary_long_opt_n, s_float_hsd_integer, none) | |
78 | DEF_SVE_FUNCTION (svmlalt_lane, ternary_long_lane, s_float_sd_integer, none) | |
79 | DEF_SVE_FUNCTION (svmls_lane, ternary_lane, hsd_integer, none) | |
80 | DEF_SVE_FUNCTION (svmlslb, ternary_long_opt_n, s_float_hsd_integer, none) | |
81 | DEF_SVE_FUNCTION (svmlslb_lane, ternary_long_lane, s_float_sd_integer, none) | |
82 | DEF_SVE_FUNCTION (svmlslt, ternary_long_opt_n, s_float_hsd_integer, none) | |
83 | DEF_SVE_FUNCTION (svmlslt_lane, ternary_long_lane, s_float_sd_integer, none) | |
02fcd8ac | 84 | DEF_SVE_FUNCTION (svminp, binary, all_arith, mx) |
0a09a948 RS |
85 | DEF_SVE_FUNCTION (svminnmp, binary, all_float, mx) |
86 | DEF_SVE_FUNCTION (svmovlb, unary_long, hsd_integer, none) | |
87 | DEF_SVE_FUNCTION (svmovlt, unary_long, hsd_integer, none) | |
88 | DEF_SVE_FUNCTION (svmul_lane, binary_lane, hsd_integer, none) | |
89 | DEF_SVE_FUNCTION (svmullb, binary_long_opt_n, hsd_integer, none) | |
90 | DEF_SVE_FUNCTION (svmullb_lane, binary_long_lane, sd_integer, none) | |
91 | DEF_SVE_FUNCTION (svmullt, binary_long_opt_n, hsd_integer, none) | |
92 | DEF_SVE_FUNCTION (svmullt_lane, binary_long_lane, sd_integer, none) | |
93 | DEF_SVE_FUNCTION (svnbsl, ternary_opt_n, all_integer, none) | |
94 | DEF_SVE_FUNCTION (svnmatch, compare, bh_integer, implicit) | |
95 | DEF_SVE_FUNCTION (svpmul, binary_opt_n, b_unsigned, none) | |
96 | DEF_SVE_FUNCTION (svpmullb, binary_long_opt_n, hd_unsigned, none) | |
97 | DEF_SVE_FUNCTION (svpmullb_pair, binary_opt_n, bs_unsigned, none) | |
98 | DEF_SVE_FUNCTION (svpmullt, binary_long_opt_n, hd_unsigned, none) | |
99 | DEF_SVE_FUNCTION (svpmullt_pair, binary_opt_n, bs_unsigned, none) | |
100 | DEF_SVE_FUNCTION (svqabs, unary, all_signed, mxz) | |
101 | DEF_SVE_FUNCTION (svqadd, binary_opt_n, all_integer, mxz) | |
102 | DEF_SVE_FUNCTION (svqcadd, binary_rotate, all_signed, none) | |
103 | DEF_SVE_FUNCTION (svqdmlalb, ternary_long_opt_n, hsd_signed, none) | |
104 | DEF_SVE_FUNCTION (svqdmlalb_lane, ternary_long_lane, sd_signed, none) | |
105 | DEF_SVE_FUNCTION (svqdmlalbt, ternary_long_opt_n, hsd_signed, none) | |
106 | DEF_SVE_FUNCTION (svqdmlalt, ternary_long_opt_n, hsd_signed, none) | |
107 | DEF_SVE_FUNCTION (svqdmlalt_lane, ternary_long_lane, sd_signed, none) | |
108 | DEF_SVE_FUNCTION (svqdmlslb, ternary_long_opt_n, hsd_signed, none) | |
109 | DEF_SVE_FUNCTION (svqdmlslb_lane, ternary_long_lane, sd_signed, none) | |
110 | DEF_SVE_FUNCTION (svqdmlslbt, ternary_long_opt_n, hsd_signed, none) | |
111 | DEF_SVE_FUNCTION (svqdmlslt, ternary_long_opt_n, hsd_signed, none) | |
112 | DEF_SVE_FUNCTION (svqdmlslt_lane, ternary_long_lane, sd_signed, none) | |
113 | DEF_SVE_FUNCTION (svqdmulh, binary_opt_n, all_signed, none) | |
114 | DEF_SVE_FUNCTION (svqdmulh_lane, binary_lane, hsd_signed, none) | |
115 | DEF_SVE_FUNCTION (svqdmullb, binary_long_opt_n, hsd_signed, none) | |
116 | DEF_SVE_FUNCTION (svqdmullb_lane, binary_long_lane, sd_signed, none) | |
117 | DEF_SVE_FUNCTION (svqdmullt, binary_long_opt_n, hsd_signed, none) | |
118 | DEF_SVE_FUNCTION (svqdmullt_lane, binary_long_lane, sd_signed, none) | |
119 | DEF_SVE_FUNCTION (svqneg, unary, all_signed, mxz) | |
120 | DEF_SVE_FUNCTION (svqrdmulh, binary_opt_n, all_signed, none) | |
121 | DEF_SVE_FUNCTION (svqrdmulh_lane, binary_lane, hsd_signed, none) | |
122 | DEF_SVE_FUNCTION (svqrdmlah, ternary_opt_n, all_signed, none) | |
123 | DEF_SVE_FUNCTION (svqrdmlah_lane, ternary_lane, hsd_signed, none) | |
124 | DEF_SVE_FUNCTION (svqrdmlsh, ternary_opt_n, all_signed, none) | |
125 | DEF_SVE_FUNCTION (svqrdmlsh_lane, ternary_lane, hsd_signed, none) | |
126 | DEF_SVE_FUNCTION (svqrdcmlah, ternary_rotate, all_signed, none) | |
127 | DEF_SVE_FUNCTION (svqrdcmlah_lane, ternary_lane_rotate, hs_signed, none) | |
128 | DEF_SVE_FUNCTION (svqrshrnb, shift_right_imm_narrowb, hsd_integer, none) | |
129 | DEF_SVE_FUNCTION (svqrshrnt, shift_right_imm_narrowt, hsd_integer, none) | |
130 | DEF_SVE_FUNCTION (svqrshrunb, shift_right_imm_narrowb_to_uint, hsd_signed, none) | |
131 | DEF_SVE_FUNCTION (svqrshrunt, shift_right_imm_narrowt_to_uint, hsd_signed, none) | |
132 | DEF_SVE_FUNCTION (svqshl, binary_int_opt_n, all_integer, mxz) | |
133 | DEF_SVE_FUNCTION (svqshlu, shift_left_imm_to_uint, all_signed, mxz) | |
134 | DEF_SVE_FUNCTION (svqshrnb, shift_right_imm_narrowb, hsd_integer, none) | |
135 | DEF_SVE_FUNCTION (svqshrnt, shift_right_imm_narrowt, hsd_integer, none) | |
136 | DEF_SVE_FUNCTION (svqshrunb, shift_right_imm_narrowb_to_uint, hsd_signed, none) | |
137 | DEF_SVE_FUNCTION (svqshrunt, shift_right_imm_narrowt_to_uint, hsd_signed, none) | |
138 | DEF_SVE_FUNCTION (svqrshl, binary_int_opt_n, all_integer, mxz) | |
139 | DEF_SVE_FUNCTION (svqsub, binary_opt_n, all_integer, mxz) | |
140 | DEF_SVE_FUNCTION (svqsubr, binary_opt_n, all_integer, mxz) | |
141 | DEF_SVE_FUNCTION (svqxtnb, unary_narrowb, hsd_integer, none) | |
142 | DEF_SVE_FUNCTION (svqxtnt, unary_narrowt, hsd_integer, none) | |
143 | DEF_SVE_FUNCTION (svqxtunb, unary_narrowb_to_uint, hsd_signed, none) | |
144 | DEF_SVE_FUNCTION (svqxtunt, unary_narrowt_to_uint, hsd_signed, none) | |
145 | DEF_SVE_FUNCTION (svraddhnb, binary_narrowb_opt_n, hsd_integer, none) | |
146 | DEF_SVE_FUNCTION (svraddhnt, binary_narrowt_opt_n, hsd_integer, none) | |
147 | DEF_SVE_FUNCTION (svrecpe, unary, s_unsigned, mxz) | |
148 | DEF_SVE_FUNCTION (svrhadd, binary_opt_n, all_integer, mxz) | |
149 | DEF_SVE_FUNCTION (svrsqrte, unary, s_unsigned, mxz) | |
150 | DEF_SVE_FUNCTION (svrshl, binary_int_opt_n, all_integer, mxz) | |
151 | DEF_SVE_FUNCTION (svrshr, shift_right_imm, all_integer, mxz) | |
152 | DEF_SVE_FUNCTION (svrshrnb, shift_right_imm_narrowb, hsd_integer, none) | |
153 | DEF_SVE_FUNCTION (svrshrnt, shift_right_imm_narrowt, hsd_integer, none) | |
154 | DEF_SVE_FUNCTION (svrsra, ternary_shift_right_imm, all_integer, none) | |
155 | DEF_SVE_FUNCTION (svrsubhnb, binary_narrowb_opt_n, hsd_integer, none) | |
156 | DEF_SVE_FUNCTION (svrsubhnt, binary_narrowt_opt_n, hsd_integer, none) | |
157 | DEF_SVE_FUNCTION (svsbclb, ternary_opt_n, sd_unsigned, none) | |
158 | DEF_SVE_FUNCTION (svsbclt, ternary_opt_n, sd_unsigned, none) | |
159 | DEF_SVE_FUNCTION (svshllb, shift_left_imm_long, hsd_integer, none) | |
160 | DEF_SVE_FUNCTION (svshllt, shift_left_imm_long, hsd_integer, none) | |
161 | DEF_SVE_FUNCTION (svshrnb, shift_right_imm_narrowb, hsd_integer, none) | |
162 | DEF_SVE_FUNCTION (svshrnt, shift_right_imm_narrowt, hsd_integer, none) | |
163 | DEF_SVE_FUNCTION (svsli, ternary_shift_left_imm, all_integer, none) | |
164 | DEF_SVE_FUNCTION (svsqadd, binary_int_opt_n, all_unsigned, mxz) | |
165 | DEF_SVE_FUNCTION (svsra, ternary_shift_right_imm, all_integer, none) | |
166 | DEF_SVE_FUNCTION (svsri, ternary_shift_right_imm, all_integer, none) | |
167 | DEF_SVE_FUNCTION (svstnt1_scatter, store_scatter_index_restricted, sd_data, implicit) | |
168 | DEF_SVE_FUNCTION (svstnt1_scatter, store_scatter_offset_restricted, sd_data, implicit) | |
169 | DEF_SVE_FUNCTION (svstnt1b_scatter, store_scatter_offset_restricted, sd_integer, implicit) | |
170 | DEF_SVE_FUNCTION (svstnt1h_scatter, store_scatter_index_restricted, sd_integer, implicit) | |
171 | DEF_SVE_FUNCTION (svstnt1h_scatter, store_scatter_offset_restricted, sd_integer, implicit) | |
172 | DEF_SVE_FUNCTION (svstnt1w_scatter, store_scatter_index_restricted, d_integer, implicit) | |
173 | DEF_SVE_FUNCTION (svstnt1w_scatter, store_scatter_offset_restricted, d_integer, implicit) | |
174 | DEF_SVE_FUNCTION (svsubhnb, binary_narrowb_opt_n, hsd_integer, none) | |
175 | DEF_SVE_FUNCTION (svsubhnt, binary_narrowt_opt_n, hsd_integer, none) | |
176 | DEF_SVE_FUNCTION (svsublb, binary_long_opt_n, hsd_integer, none) | |
177 | DEF_SVE_FUNCTION (svsublbt, binary_long_opt_n, hsd_signed, none) | |
178 | DEF_SVE_FUNCTION (svsublt, binary_long_opt_n, hsd_integer, none) | |
179 | DEF_SVE_FUNCTION (svsubltb, binary_long_opt_n, hsd_signed, none) | |
180 | DEF_SVE_FUNCTION (svsubwb, binary_wide_opt_n, hsd_integer, none) | |
181 | DEF_SVE_FUNCTION (svsubwt, binary_wide_opt_n, hsd_integer, none) | |
182 | DEF_SVE_FUNCTION (svtbl2, tbl_tuple, all_data, none) | |
183 | DEF_SVE_FUNCTION (svtbx, ternary_uint, all_data, none) | |
184 | DEF_SVE_FUNCTION (svuqadd, binary_uint_opt_n, all_signed, mxz) | |
185 | DEF_SVE_FUNCTION (svwhilege, compare_scalar, while, none) | |
186 | DEF_SVE_FUNCTION (svwhilegt, compare_scalar, while, none) | |
187 | DEF_SVE_FUNCTION (svwhilerw, compare_ptr, all_data, none) | |
188 | DEF_SVE_FUNCTION (svwhilewr, compare_ptr, all_data, none) | |
189 | DEF_SVE_FUNCTION (svxar, ternary_shift_right_imm, all_integer, none) | |
190 | #undef REQUIRED_EXTENSIONS | |
191 | ||
192 | #define REQUIRED_EXTENSIONS (AARCH64_FL_SVE2 | AARCH64_FL_SVE2_AES) | |
193 | DEF_SVE_FUNCTION (svaesd, binary, b_unsigned, none) | |
194 | DEF_SVE_FUNCTION (svaese, binary, b_unsigned, none) | |
195 | DEF_SVE_FUNCTION (svaesmc, unary, b_unsigned, none) | |
196 | DEF_SVE_FUNCTION (svaesimc, unary, b_unsigned, none) | |
197 | DEF_SVE_FUNCTION (svpmullb_pair, binary_opt_n, d_unsigned, none) | |
198 | DEF_SVE_FUNCTION (svpmullt_pair, binary_opt_n, d_unsigned, none) | |
199 | #undef REQUIRED_EXTENSIONS | |
200 | ||
201 | #define REQUIRED_EXTENSIONS (AARCH64_FL_SVE2 | AARCH64_FL_SVE2_BITPERM) | |
202 | DEF_SVE_FUNCTION (svbdep, binary_opt_n, all_unsigned, none) | |
203 | DEF_SVE_FUNCTION (svbext, binary_opt_n, all_unsigned, none) | |
204 | DEF_SVE_FUNCTION (svbgrp, binary_opt_n, all_unsigned, none) | |
205 | #undef REQUIRED_EXTENSIONS | |
206 | ||
207 | #define REQUIRED_EXTENSIONS (AARCH64_FL_SVE2 | AARCH64_FL_SVE2_SHA3) | |
208 | DEF_SVE_FUNCTION (svrax1, binary, d_integer, none) | |
209 | #undef REQUIRED_EXTENSIONS | |
210 | ||
211 | #define REQUIRED_EXTENSIONS (AARCH64_FL_SVE2 | AARCH64_FL_SVE2_SM4) | |
212 | DEF_SVE_FUNCTION (svsm4e, binary, s_unsigned, none) | |
213 | DEF_SVE_FUNCTION (svsm4ekey, binary, s_unsigned, none) | |
214 | #undef REQUIRED_EXTENSIONS |