]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/config/arm/arm-mve-builtins-base.def
01dfbdef8a30062f632e571e132d91d56482b168
[thirdparty/gcc.git] / gcc / config / arm / arm-mve-builtins-base.def
1 /* ACLE support for Arm MVE (__ARM_FEATURE_MVE intrinsics)
2 Copyright (C) 2023 Free Software Foundation, Inc.
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 REQUIRES_FLOAT false
21 DEF_MVE_FUNCTION (vabavq, binary_acca_int32, all_integer, p_or_none)
22 DEF_MVE_FUNCTION (vabdq, binary, all_integer, mx_or_none)
23 DEF_MVE_FUNCTION (vabsq, unary, all_signed, mx_or_none)
24 DEF_MVE_FUNCTION (vaddlvaq, unary_widen_acc, integer_32, p_or_none)
25 DEF_MVE_FUNCTION (vaddlvq, unary_acc, integer_32, p_or_none)
26 DEF_MVE_FUNCTION (vaddq, binary_opt_n, all_integer, mx_or_none)
27 DEF_MVE_FUNCTION (vaddvaq, unary_int32_acc, all_integer, p_or_none)
28 DEF_MVE_FUNCTION (vaddvq, unary_int32, all_integer, p_or_none)
29 DEF_MVE_FUNCTION (vandq, binary, all_integer, mx_or_none)
30 DEF_MVE_FUNCTION (vbrsrq, binary_imm32, all_integer, mx_or_none)
31 DEF_MVE_FUNCTION (vcaddq_rot90, binary, all_integer, mx_or_none)
32 DEF_MVE_FUNCTION (vcaddq_rot270, binary, all_integer, mx_or_none)
33 DEF_MVE_FUNCTION (vclsq, unary, all_signed, mx_or_none)
34 DEF_MVE_FUNCTION (vclzq, unary, all_integer, mx_or_none)
35 DEF_MVE_FUNCTION (vcmpcsq, cmp, all_unsigned, m_or_none)
36 DEF_MVE_FUNCTION (vcmpeqq, cmp, all_integer, m_or_none)
37 DEF_MVE_FUNCTION (vcmpgeq, cmp, all_signed, m_or_none)
38 DEF_MVE_FUNCTION (vcmpgtq, cmp, all_signed, m_or_none)
39 DEF_MVE_FUNCTION (vcmphiq, cmp, all_unsigned, m_or_none)
40 DEF_MVE_FUNCTION (vcmpleq, cmp, all_signed, m_or_none)
41 DEF_MVE_FUNCTION (vcmpltq, cmp, all_signed, m_or_none)
42 DEF_MVE_FUNCTION (vcmpneq, cmp, all_integer, m_or_none)
43 DEF_MVE_FUNCTION (vcreateq, create, all_integer_with_64, none)
44 DEF_MVE_FUNCTION (vdupq, unary_n, all_integer, mx_or_none)
45 DEF_MVE_FUNCTION (veorq, binary, all_integer, mx_or_none)
46 DEF_MVE_FUNCTION (vhaddq, binary_opt_n, all_integer, mx_or_none)
47 DEF_MVE_FUNCTION (vhcaddq_rot90, binary, all_signed, mx_or_none)
48 DEF_MVE_FUNCTION (vhcaddq_rot270, binary, all_signed, mx_or_none)
49 DEF_MVE_FUNCTION (vhsubq, binary_opt_n, all_integer, mx_or_none)
50 DEF_MVE_FUNCTION (vmaxaq, binary_maxamina, all_signed, m_or_none)
51 DEF_MVE_FUNCTION (vmaxavq, binary_maxavminav, all_signed, p_or_none)
52 DEF_MVE_FUNCTION (vmaxq, binary, all_integer, mx_or_none)
53 DEF_MVE_FUNCTION (vmaxvq, binary_maxvminv, all_integer, p_or_none)
54 DEF_MVE_FUNCTION (vminaq, binary_maxamina, all_signed, m_or_none)
55 DEF_MVE_FUNCTION (vminavq, binary_maxavminav, all_signed, p_or_none)
56 DEF_MVE_FUNCTION (vminq, binary, all_integer, mx_or_none)
57 DEF_MVE_FUNCTION (vminvq, binary_maxvminv, all_integer, p_or_none)
58 DEF_MVE_FUNCTION (vmladavaq, binary_acca_int32, all_integer, p_or_none)
59 DEF_MVE_FUNCTION (vmladavaxq, binary_acca_int32, all_signed, p_or_none)
60 DEF_MVE_FUNCTION (vmladavq, binary_acc_int32, all_integer, p_or_none)
61 DEF_MVE_FUNCTION (vmladavxq, binary_acc_int32, all_signed, p_or_none)
62 DEF_MVE_FUNCTION (vmlaldavaq, binary_acca_int64, integer_16_32, p_or_none)
63 DEF_MVE_FUNCTION (vmlaldavaxq, binary_acca_int64, signed_16_32, p_or_none)
64 DEF_MVE_FUNCTION (vmlaldavq, binary_acc_int64, integer_16_32, p_or_none)
65 DEF_MVE_FUNCTION (vmlaldavxq, binary_acc_int64, signed_16_32, p_or_none)
66 DEF_MVE_FUNCTION (vmlaq, ternary_n, all_integer, m_or_none)
67 DEF_MVE_FUNCTION (vmlasq, ternary_n, all_integer, m_or_none)
68 DEF_MVE_FUNCTION (vmlsdavaq, binary_acca_int32, all_signed, p_or_none)
69 DEF_MVE_FUNCTION (vmlsdavaxq, binary_acca_int32, all_signed, p_or_none)
70 DEF_MVE_FUNCTION (vmlsdavq, binary_acc_int32, all_integer, p_or_none)
71 DEF_MVE_FUNCTION (vmlsdavxq, binary_acc_int32, all_signed, p_or_none)
72 DEF_MVE_FUNCTION (vmlsldavaq, binary_acca_int64, signed_16_32, p_or_none)
73 DEF_MVE_FUNCTION (vmlsldavaxq, binary_acca_int64, signed_16_32, p_or_none)
74 DEF_MVE_FUNCTION (vmlsldavq, binary_acc_int64, signed_16_32, p_or_none)
75 DEF_MVE_FUNCTION (vmlsldavxq, binary_acc_int64, signed_16_32, p_or_none)
76 DEF_MVE_FUNCTION (vmovlbq, unary_widen, integer_8_16, mx_or_none)
77 DEF_MVE_FUNCTION (vmovltq, unary_widen, integer_8_16, mx_or_none)
78 DEF_MVE_FUNCTION (vmovnbq, binary_move_narrow, integer_16_32, m_or_none)
79 DEF_MVE_FUNCTION (vmovntq, binary_move_narrow, integer_16_32, m_or_none)
80 DEF_MVE_FUNCTION (vmulhq, binary, all_integer, mx_or_none)
81 DEF_MVE_FUNCTION (vmullbq_int, binary_widen, all_integer, mx_or_none)
82 DEF_MVE_FUNCTION (vmulltq_int, binary_widen, all_integer, mx_or_none)
83 DEF_MVE_FUNCTION (vmullbq_poly, binary_widen_poly, poly_8_16, mx_or_none)
84 DEF_MVE_FUNCTION (vmulltq_poly, binary_widen_poly, poly_8_16, mx_or_none)
85 DEF_MVE_FUNCTION (vmulq, binary_opt_n, all_integer, mx_or_none)
86 DEF_MVE_FUNCTION (vmvnq, mvn, all_integer, mx_or_none)
87 DEF_MVE_FUNCTION (vnegq, unary, all_signed, mx_or_none)
88 DEF_MVE_FUNCTION (vorrq, binary_orrq, all_integer, mx_or_none)
89 DEF_MVE_FUNCTION (vpselq, vpsel, all_integer_with_64, none)
90 DEF_MVE_FUNCTION (vqabsq, unary, all_signed, m_or_none)
91 DEF_MVE_FUNCTION (vqaddq, binary_opt_n, all_integer, m_or_none)
92 DEF_MVE_FUNCTION (vqdmladhq, ternary, all_signed, m_or_none)
93 DEF_MVE_FUNCTION (vqdmladhxq, ternary, all_signed, m_or_none)
94 DEF_MVE_FUNCTION (vqdmlahq, ternary_n, all_signed, m_or_none)
95 DEF_MVE_FUNCTION (vqdmlashq, ternary_n, all_signed, m_or_none)
96 DEF_MVE_FUNCTION (vqdmlsdhq, ternary, all_signed, m_or_none)
97 DEF_MVE_FUNCTION (vqdmlsdhxq, ternary, all_signed, m_or_none)
98 DEF_MVE_FUNCTION (vqdmulhq, binary_opt_n, all_signed, m_or_none)
99 DEF_MVE_FUNCTION (vqdmullbq, binary_widen_opt_n, signed_16_32, m_or_none)
100 DEF_MVE_FUNCTION (vqdmulltq, binary_widen_opt_n, signed_16_32, m_or_none)
101 DEF_MVE_FUNCTION (vqmovnbq, binary_move_narrow, integer_16_32, m_or_none)
102 DEF_MVE_FUNCTION (vqmovntq, binary_move_narrow, integer_16_32, m_or_none)
103 DEF_MVE_FUNCTION (vqmovunbq, binary_move_narrow_unsigned, signed_16_32, m_or_none)
104 DEF_MVE_FUNCTION (vqmovuntq, binary_move_narrow_unsigned, signed_16_32, m_or_none)
105 DEF_MVE_FUNCTION (vqnegq, unary, all_signed, m_or_none)
106 DEF_MVE_FUNCTION (vqrdmladhq, ternary, all_signed, m_or_none)
107 DEF_MVE_FUNCTION (vqrdmladhxq, ternary, all_signed, m_or_none)
108 DEF_MVE_FUNCTION (vqrdmlahq, ternary_n, all_signed, m_or_none)
109 DEF_MVE_FUNCTION (vqrdmlashq, ternary_n, all_signed, m_or_none)
110 DEF_MVE_FUNCTION (vqrdmlsdhq, ternary, all_signed, m_or_none)
111 DEF_MVE_FUNCTION (vqrdmlsdhxq, ternary, all_signed, m_or_none)
112 DEF_MVE_FUNCTION (vqrdmulhq, binary_opt_n, all_signed, m_or_none)
113 DEF_MVE_FUNCTION (vqrshlq, binary_round_lshift, all_integer, m_or_none)
114 DEF_MVE_FUNCTION (vqrshrnbq, binary_rshift_narrow, integer_16_32, m_or_none)
115 DEF_MVE_FUNCTION (vqrshrntq, binary_rshift_narrow, integer_16_32, m_or_none)
116 DEF_MVE_FUNCTION (vqrshrunbq, binary_rshift_narrow_unsigned, signed_16_32, m_or_none)
117 DEF_MVE_FUNCTION (vqrshruntq, binary_rshift_narrow_unsigned, signed_16_32, m_or_none)
118 DEF_MVE_FUNCTION (vqshlq, binary_lshift, all_integer, m_or_none)
119 DEF_MVE_FUNCTION (vqshlq, binary_lshift_r, all_integer, m_or_none)
120 DEF_MVE_FUNCTION (vqshluq, binary_lshift_unsigned, all_signed, m_or_none)
121 DEF_MVE_FUNCTION (vqshrnbq, binary_rshift_narrow, integer_16_32, m_or_none)
122 DEF_MVE_FUNCTION (vqshrntq, binary_rshift_narrow, integer_16_32, m_or_none)
123 DEF_MVE_FUNCTION (vqshrunbq, binary_rshift_narrow_unsigned, signed_16_32, m_or_none)
124 DEF_MVE_FUNCTION (vqshruntq, binary_rshift_narrow_unsigned, signed_16_32, m_or_none)
125 DEF_MVE_FUNCTION (vqsubq, binary_opt_n, all_integer, m_or_none)
126 DEF_MVE_FUNCTION (vreinterpretq, unary_convert, reinterpret_integer, none)
127 DEF_MVE_FUNCTION (vrev16q, unary, integer_8, mx_or_none)
128 DEF_MVE_FUNCTION (vrev32q, unary, integer_8_16, mx_or_none)
129 DEF_MVE_FUNCTION (vrev64q, unary, all_integer, mx_or_none)
130 DEF_MVE_FUNCTION (vrhaddq, binary, all_integer, mx_or_none)
131 DEF_MVE_FUNCTION (vrmlaldavhaq, binary_acca_int64, integer_32, p_or_none)
132 DEF_MVE_FUNCTION (vrmlaldavhaxq, binary_acca_int64, integer_32, p_or_none)
133 DEF_MVE_FUNCTION (vrmlaldavhq, binary_acc_int64, integer_32, p_or_none)
134 DEF_MVE_FUNCTION (vrmlaldavhxq, binary_acc_int64, signed_32, p_or_none)
135 DEF_MVE_FUNCTION (vrmlsldavhaq, binary_acca_int64, integer_32, p_or_none)
136 DEF_MVE_FUNCTION (vrmlsldavhaxq, binary_acca_int64, integer_32, p_or_none)
137 DEF_MVE_FUNCTION (vrmlsldavhq, binary_acc_int64, signed_32, p_or_none)
138 DEF_MVE_FUNCTION (vrmlsldavhxq, binary_acc_int64, signed_32, p_or_none)
139 DEF_MVE_FUNCTION (vrmulhq, binary, all_integer, mx_or_none)
140 DEF_MVE_FUNCTION (vrshlq, binary_round_lshift, all_integer, mx_or_none)
141 DEF_MVE_FUNCTION (vrshrnbq, binary_rshift_narrow, integer_16_32, m_or_none)
142 DEF_MVE_FUNCTION (vrshrntq, binary_rshift_narrow, integer_16_32, m_or_none)
143 DEF_MVE_FUNCTION (vrshrq, binary_rshift, all_integer, mx_or_none)
144 DEF_MVE_FUNCTION (vshllbq, binary_widen_n, integer_8_16, mx_or_none)
145 DEF_MVE_FUNCTION (vshlltq, binary_widen_n, integer_8_16, mx_or_none)
146 DEF_MVE_FUNCTION (vshlq, binary_lshift, all_integer, mx_or_none)
147 DEF_MVE_FUNCTION (vshlq, binary_lshift_r, all_integer, m_or_none) // "_r" forms do not support the "x" predicate
148 DEF_MVE_FUNCTION (vshrnbq, binary_rshift_narrow, integer_16_32, m_or_none)
149 DEF_MVE_FUNCTION (vshrntq, binary_rshift_narrow, integer_16_32, m_or_none)
150 DEF_MVE_FUNCTION (vshrq, binary_rshift, all_integer, mx_or_none)
151 DEF_MVE_FUNCTION (vsliq, ternary_lshift, all_integer, m_or_none)
152 DEF_MVE_FUNCTION (vsriq, ternary_rshift, all_integer, m_or_none)
153 DEF_MVE_FUNCTION (vsubq, binary_opt_n, all_integer, mx_or_none)
154 DEF_MVE_FUNCTION (vuninitializedq, inherent, all_integer_with_64, none)
155 #undef REQUIRES_FLOAT
156
157 #define REQUIRES_FLOAT true
158 DEF_MVE_FUNCTION (vabdq, binary, all_float, mx_or_none)
159 DEF_MVE_FUNCTION (vabsq, unary, all_float, mx_or_none)
160 DEF_MVE_FUNCTION (vaddq, binary_opt_n, all_float, mx_or_none)
161 DEF_MVE_FUNCTION (vandq, binary, all_float, mx_or_none)
162 DEF_MVE_FUNCTION (vbrsrq, binary_imm32, all_float, mx_or_none)
163 DEF_MVE_FUNCTION (vcaddq_rot90, binary, all_float, mx_or_none)
164 DEF_MVE_FUNCTION (vcaddq_rot270, binary, all_float, mx_or_none)
165 DEF_MVE_FUNCTION (vcmlaq, ternary, all_float, m_or_none)
166 DEF_MVE_FUNCTION (vcmlaq_rot90, ternary, all_float, m_or_none)
167 DEF_MVE_FUNCTION (vcmlaq_rot180, ternary, all_float, m_or_none)
168 DEF_MVE_FUNCTION (vcmlaq_rot270, ternary, all_float, m_or_none)
169 DEF_MVE_FUNCTION (vcmulq, binary, all_float, mx_or_none)
170 DEF_MVE_FUNCTION (vcmulq_rot90, binary, all_float, mx_or_none)
171 DEF_MVE_FUNCTION (vcmulq_rot180, binary, all_float, mx_or_none)
172 DEF_MVE_FUNCTION (vcmulq_rot270, binary, all_float, mx_or_none)
173 DEF_MVE_FUNCTION (vcmpeqq, cmp, all_float, m_or_none)
174 DEF_MVE_FUNCTION (vcmpgeq, cmp, all_float, m_or_none)
175 DEF_MVE_FUNCTION (vcmpgtq, cmp, all_float, m_or_none)
176 DEF_MVE_FUNCTION (vcmpleq, cmp, all_float, m_or_none)
177 DEF_MVE_FUNCTION (vcmpltq, cmp, all_float, m_or_none)
178 DEF_MVE_FUNCTION (vcmpneq, cmp, all_float, m_or_none)
179 DEF_MVE_FUNCTION (vcreateq, create, all_float, none)
180 DEF_MVE_FUNCTION (vdupq, unary_n, all_float, mx_or_none)
181 DEF_MVE_FUNCTION (veorq, binary, all_float, mx_or_none)
182 DEF_MVE_FUNCTION (vfmaq, ternary_opt_n, all_float, m_or_none)
183 DEF_MVE_FUNCTION (vfmasq, ternary_n, all_float, m_or_none)
184 DEF_MVE_FUNCTION (vfmsq, ternary, all_float, m_or_none)
185 DEF_MVE_FUNCTION (vmaxnmaq, binary, all_float, m_or_none)
186 DEF_MVE_FUNCTION (vmaxnmavq, binary_maxvminv, all_float, p_or_none)
187 DEF_MVE_FUNCTION (vmaxnmq, binary, all_float, mx_or_none)
188 DEF_MVE_FUNCTION (vmaxnmvq, binary_maxvminv, all_float, p_or_none)
189 DEF_MVE_FUNCTION (vminnmaq, binary, all_float, m_or_none)
190 DEF_MVE_FUNCTION (vminnmavq, binary_maxvminv, all_float, p_or_none)
191 DEF_MVE_FUNCTION (vminnmq, binary, all_float, mx_or_none)
192 DEF_MVE_FUNCTION (vminnmvq, binary_maxvminv, all_float, p_or_none)
193 DEF_MVE_FUNCTION (vmulq, binary_opt_n, all_float, mx_or_none)
194 DEF_MVE_FUNCTION (vnegq, unary, all_float, mx_or_none)
195 DEF_MVE_FUNCTION (vorrq, binary_orrq, all_float, mx_or_none)
196 DEF_MVE_FUNCTION (vpselq, vpsel, all_float, none)
197 DEF_MVE_FUNCTION (vreinterpretq, unary_convert, reinterpret_float, none)
198 DEF_MVE_FUNCTION (vrev32q, unary, float16, mx_or_none)
199 DEF_MVE_FUNCTION (vrev64q, unary, all_float, mx_or_none)
200 DEF_MVE_FUNCTION (vrndaq, unary, all_float, mx_or_none)
201 DEF_MVE_FUNCTION (vrndmq, unary, all_float, mx_or_none)
202 DEF_MVE_FUNCTION (vrndnq, unary, all_float, mx_or_none)
203 DEF_MVE_FUNCTION (vrndpq, unary, all_float, mx_or_none)
204 DEF_MVE_FUNCTION (vrndq, unary, all_float, mx_or_none)
205 DEF_MVE_FUNCTION (vrndxq, unary, all_float, mx_or_none)
206 DEF_MVE_FUNCTION (vsubq, binary_opt_n, all_float, mx_or_none)
207 DEF_MVE_FUNCTION (vuninitializedq, inherent, all_float, none)
208 #undef REQUIRES_FLOAT