gcc: Make exec-tool.in handle missing Binutils more gracefully
[official-gcc.git] / gcc / config / riscv / riscv-vector-builtins-functions.def
blobb69cf3cae2930a19c5169d2b408c3ef85ac04a5b
1 /* Intrinsic define macros for RISC-V 'V' Extension for GNU compiler.
2 Copyright (C) 2022-2024 Free Software Foundation, Inc.
3 Contributed by Juzhe Zhong (juzhe.zhong@rivai.ai), RiVAI Technologies Ltd.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 /* Use "DEF_RVV_FUNCTION" macro to define RVV intrinsic functions.
23 - NAME not only describes the base_name of the functions
24 but also point to the name of the function_base class.
26 - SHAPE point to the function_shape class.
28 - PREDS describes the predication types that are supported in the
29 functions.
31 - OPS_INFO describes all information of return type and each
32 argument type.
35 #ifndef DEF_RVV_FUNCTION
36 #define DEF_RVV_FUNCTION(NAME, SHAPE, PREDS, OPS_INFO)
37 #endif
39 #define REQUIRED_EXTENSIONS VECTOR_EXT
40 /* Internal helper functions for gimple fold use. */
41 DEF_RVV_FUNCTION (read_vl, read_vl, none_preds, p_none_void_ops)
42 DEF_RVV_FUNCTION (vlenb, vlenb, none_preds, ul_none_void_ops)
44 /* 6. Configuration-Setting Instructions. */
46 DEF_RVV_FUNCTION (vsetvl, vsetvl, none_preds, i_none_size_size_ops)
47 DEF_RVV_FUNCTION (vsetvlmax, vsetvlmax, none_preds, i_none_size_void_ops)
49 /* 7. Vector Loads and Stores. */
51 // 7.4. Vector Unit-Stride Instructions
52 DEF_RVV_FUNCTION (vle, loadstore, full_preds, all_v_scalar_const_ptr_ops)
53 DEF_RVV_FUNCTION (vse, loadstore, none_m_preds, all_v_scalar_ptr_ops)
54 DEF_RVV_FUNCTION (vlm, loadstore, none_preds, b_v_scalar_const_ptr_ops)
55 DEF_RVV_FUNCTION (vsm, loadstore, none_preds, b_v_scalar_ptr_ops)
57 // 7.5. Vector Strided Instructions
58 DEF_RVV_FUNCTION (vlse, loadstore, full_preds, all_v_scalar_const_ptr_ptrdiff_ops)
59 DEF_RVV_FUNCTION (vsse, loadstore, none_m_preds, all_v_scalar_ptr_ptrdiff_ops)
61 // 7.6. Vector Indexed Instructions
62 DEF_RVV_FUNCTION (vluxei8, indexed_loadstore, full_preds, all_v_scalar_const_ptr_eew8_index_ops)
63 DEF_RVV_FUNCTION (vluxei16, indexed_loadstore, full_preds, all_v_scalar_const_ptr_eew16_index_ops)
64 DEF_RVV_FUNCTION (vluxei32, indexed_loadstore, full_preds, all_v_scalar_const_ptr_eew32_index_ops)
65 DEF_RVV_FUNCTION (vluxei64, indexed_loadstore, full_preds, all_v_scalar_const_ptr_eew64_index_ops)
66 DEF_RVV_FUNCTION (vloxei8, indexed_loadstore, full_preds, all_v_scalar_const_ptr_eew8_index_ops)
67 DEF_RVV_FUNCTION (vloxei16, indexed_loadstore, full_preds, all_v_scalar_const_ptr_eew16_index_ops)
68 DEF_RVV_FUNCTION (vloxei32, indexed_loadstore, full_preds, all_v_scalar_const_ptr_eew32_index_ops)
69 DEF_RVV_FUNCTION (vloxei64, indexed_loadstore, full_preds, all_v_scalar_const_ptr_eew64_index_ops)
70 DEF_RVV_FUNCTION (vsuxei8, indexed_loadstore, none_m_preds, all_v_scalar_ptr_eew8_index_ops)
71 DEF_RVV_FUNCTION (vsuxei16, indexed_loadstore, none_m_preds, all_v_scalar_ptr_eew16_index_ops)
72 DEF_RVV_FUNCTION (vsuxei32, indexed_loadstore, none_m_preds, all_v_scalar_ptr_eew32_index_ops)
73 DEF_RVV_FUNCTION (vsuxei64, indexed_loadstore, none_m_preds, all_v_scalar_ptr_eew64_index_ops)
74 DEF_RVV_FUNCTION (vsoxei8, indexed_loadstore, none_m_preds, all_v_scalar_ptr_eew8_index_ops)
75 DEF_RVV_FUNCTION (vsoxei16, indexed_loadstore, none_m_preds, all_v_scalar_ptr_eew16_index_ops)
76 DEF_RVV_FUNCTION (vsoxei32, indexed_loadstore, none_m_preds, all_v_scalar_ptr_eew32_index_ops)
77 DEF_RVV_FUNCTION (vsoxei64, indexed_loadstore, none_m_preds, all_v_scalar_ptr_eew64_index_ops)
79 // 7.7. Unit-stride Fault-Only-First Loads
80 DEF_RVV_FUNCTION (vleff, fault_load, full_preds, all_v_scalar_const_ptr_size_ptr_ops)
82 /* 11. Vector Integer Arithmetic Instructions. */
84 // 11.1. Vector Single-Width Integer Add and Subtract
85 DEF_RVV_FUNCTION (vadd, alu, full_preds, iu_vvv_ops)
86 DEF_RVV_FUNCTION (vadd, alu, full_preds, iu_vvx_ops)
87 DEF_RVV_FUNCTION (vsub, alu, full_preds, iu_vvv_ops)
88 DEF_RVV_FUNCTION (vsub, alu, full_preds, iu_vvx_ops)
89 DEF_RVV_FUNCTION (vrsub, alu, full_preds, iu_vvx_ops)
90 DEF_RVV_FUNCTION (vneg, alu, full_preds, iu_v_ops)
92 // 11.2. Vector Widening Integer Add/Subtract
93 DEF_RVV_FUNCTION (vwaddu, widen_alu, full_preds, u_wvv_ops)
94 DEF_RVV_FUNCTION (vwaddu, widen_alu, full_preds, u_wvx_ops)
95 DEF_RVV_FUNCTION (vwsubu, widen_alu, full_preds, u_wvv_ops)
96 DEF_RVV_FUNCTION (vwsubu, widen_alu, full_preds, u_wvx_ops)
97 DEF_RVV_FUNCTION (vwadd, widen_alu, full_preds, i_wvv_ops)
98 DEF_RVV_FUNCTION (vwadd, widen_alu, full_preds, i_wvx_ops)
99 DEF_RVV_FUNCTION (vwsub, widen_alu, full_preds, i_wvv_ops)
100 DEF_RVV_FUNCTION (vwsub, widen_alu, full_preds, i_wvx_ops)
101 DEF_RVV_FUNCTION (vwaddu, widen_alu, full_preds, u_wwv_ops)
102 DEF_RVV_FUNCTION (vwaddu, widen_alu, full_preds, u_wwx_ops)
103 DEF_RVV_FUNCTION (vwsubu, widen_alu, full_preds, u_wwv_ops)
104 DEF_RVV_FUNCTION (vwsubu, widen_alu, full_preds, u_wwx_ops)
105 DEF_RVV_FUNCTION (vwadd, widen_alu, full_preds, i_wwv_ops)
106 DEF_RVV_FUNCTION (vwadd, widen_alu, full_preds, i_wwx_ops)
107 DEF_RVV_FUNCTION (vwsub, widen_alu, full_preds, i_wwv_ops)
108 DEF_RVV_FUNCTION (vwsub, widen_alu, full_preds, i_wwx_ops)
109 DEF_RVV_FUNCTION (vwcvt_x, alu, full_preds, i_x_x_v_ops)
110 DEF_RVV_FUNCTION (vwcvtu_x, alu, full_preds, u_x_x_v_ops)
112 // 11.3. Vector Integer Extension
113 DEF_RVV_FUNCTION (vzext, widen_alu, full_preds, u_vf2_ops)
114 DEF_RVV_FUNCTION (vzext, widen_alu, full_preds, u_vf4_ops)
115 DEF_RVV_FUNCTION (vzext, widen_alu, full_preds, u_vf8_ops)
116 DEF_RVV_FUNCTION (vsext, widen_alu, full_preds, i_vf2_ops)
117 DEF_RVV_FUNCTION (vsext, widen_alu, full_preds, i_vf4_ops)
118 DEF_RVV_FUNCTION (vsext, widen_alu, full_preds, i_vf8_ops)
120 // 11.4. Vector Integer Add-with-Carry/Subtract-with-Borrow Instructions
121 DEF_RVV_FUNCTION (vadc, no_mask_policy, none_tu_preds, iu_vvvm_ops)
122 DEF_RVV_FUNCTION (vadc, no_mask_policy, none_tu_preds, iu_vvxm_ops)
123 DEF_RVV_FUNCTION (vmadc, return_mask, none_preds, iu_mvvm_ops)
124 DEF_RVV_FUNCTION (vmadc, return_mask, none_preds, iu_mvxm_ops)
125 DEF_RVV_FUNCTION (vmadc, return_mask, none_preds, iu_mvv_ops)
126 DEF_RVV_FUNCTION (vmadc, return_mask, none_preds, iu_mvx_ops)
127 DEF_RVV_FUNCTION (vsbc, no_mask_policy, none_tu_preds, iu_vvvm_ops)
128 DEF_RVV_FUNCTION (vsbc, no_mask_policy, none_tu_preds, iu_vvxm_ops)
129 DEF_RVV_FUNCTION (vmsbc, return_mask, none_preds, iu_mvvm_ops)
130 DEF_RVV_FUNCTION (vmsbc, return_mask, none_preds, iu_mvxm_ops)
131 DEF_RVV_FUNCTION (vmsbc, return_mask, none_preds, iu_mvv_ops)
132 DEF_RVV_FUNCTION (vmsbc, return_mask, none_preds, iu_mvx_ops)
134 // 11.5. Vector Bitwise Logical Instructions
135 DEF_RVV_FUNCTION (vand, alu, full_preds, iu_vvv_ops)
136 DEF_RVV_FUNCTION (vand, alu, full_preds, iu_vvx_ops)
137 DEF_RVV_FUNCTION (vor, alu, full_preds, iu_vvv_ops)
138 DEF_RVV_FUNCTION (vor, alu, full_preds, iu_vvx_ops)
139 DEF_RVV_FUNCTION (vxor, alu, full_preds, iu_vvv_ops)
140 DEF_RVV_FUNCTION (vxor, alu, full_preds, iu_vvx_ops)
141 DEF_RVV_FUNCTION (vnot, alu, full_preds, iu_v_ops)
143 // 11.6. Vector Single-Width Shift Instructions
144 DEF_RVV_FUNCTION (vsll, alu, full_preds, iu_shift_vvv_ops)
145 DEF_RVV_FUNCTION (vsll, alu, full_preds, iu_shift_vvx_ops)
146 DEF_RVV_FUNCTION (vsra, alu, full_preds, i_shift_vvv_ops)
147 DEF_RVV_FUNCTION (vsra, alu, full_preds, i_shift_vvx_ops)
148 DEF_RVV_FUNCTION (vsrl, alu, full_preds, u_shift_vvv_ops)
149 DEF_RVV_FUNCTION (vsrl, alu, full_preds, u_shift_vvx_ops)
151 // 11.7. Vector Narrowing Integer Right Shift Instructions
152 DEF_RVV_FUNCTION (vnsrl, narrow_alu, full_preds, u_narrow_shift_vwv_ops)
153 DEF_RVV_FUNCTION (vnsrl, narrow_alu, full_preds, u_narrow_shift_vwx_ops)
154 DEF_RVV_FUNCTION (vnsra, narrow_alu, full_preds, i_narrow_shift_vwv_ops)
155 DEF_RVV_FUNCTION (vnsra, narrow_alu, full_preds, i_narrow_shift_vwx_ops)
156 DEF_RVV_FUNCTION (vncvt_x, narrow_alu, full_preds, iu_trunc_ops)
158 // 11.8. Vector Integer Compare Instructions
159 DEF_RVV_FUNCTION (vmseq, return_mask, none_m_mu_preds, iu_mvv_ops)
160 DEF_RVV_FUNCTION (vmseq, return_mask, none_m_mu_preds, iu_mvx_ops)
161 DEF_RVV_FUNCTION (vmsne, return_mask, none_m_mu_preds, iu_mvv_ops)
162 DEF_RVV_FUNCTION (vmsne, return_mask, none_m_mu_preds, iu_mvx_ops)
163 DEF_RVV_FUNCTION (vmsltu, return_mask, none_m_mu_preds, u_mvv_ops)
164 DEF_RVV_FUNCTION (vmsltu, return_mask, none_m_mu_preds, u_mvx_ops)
165 DEF_RVV_FUNCTION (vmslt, return_mask, none_m_mu_preds, i_mvv_ops)
166 DEF_RVV_FUNCTION (vmslt, return_mask, none_m_mu_preds, i_mvx_ops)
167 DEF_RVV_FUNCTION (vmsleu, return_mask, none_m_mu_preds, u_mvv_ops)
168 DEF_RVV_FUNCTION (vmsleu, return_mask, none_m_mu_preds, u_mvx_ops)
169 DEF_RVV_FUNCTION (vmsle, return_mask, none_m_mu_preds, i_mvv_ops)
170 DEF_RVV_FUNCTION (vmsle, return_mask, none_m_mu_preds, i_mvx_ops)
171 DEF_RVV_FUNCTION (vmsgtu, return_mask, none_m_mu_preds, u_mvv_ops)
172 DEF_RVV_FUNCTION (vmsgtu, return_mask, none_m_mu_preds, u_mvx_ops)
173 DEF_RVV_FUNCTION (vmsgt, return_mask, none_m_mu_preds, i_mvv_ops)
174 DEF_RVV_FUNCTION (vmsgt, return_mask, none_m_mu_preds, i_mvx_ops)
175 DEF_RVV_FUNCTION (vmsgeu, return_mask, none_m_mu_preds, u_mvv_ops)
176 DEF_RVV_FUNCTION (vmsgeu, return_mask, none_m_mu_preds, u_mvx_ops)
177 DEF_RVV_FUNCTION (vmsge, return_mask, none_m_mu_preds, i_mvv_ops)
178 DEF_RVV_FUNCTION (vmsge, return_mask, none_m_mu_preds, i_mvx_ops)
180 // 11.9. Vector Integer Min/Max Instructions
181 DEF_RVV_FUNCTION (vminu, alu, full_preds, u_vvv_ops)
182 DEF_RVV_FUNCTION (vminu, alu, full_preds, u_vvx_ops)
183 DEF_RVV_FUNCTION (vmin, alu, full_preds, i_vvv_ops)
184 DEF_RVV_FUNCTION (vmin, alu, full_preds, i_vvx_ops)
185 DEF_RVV_FUNCTION (vmaxu, alu, full_preds, u_vvv_ops)
186 DEF_RVV_FUNCTION (vmaxu, alu, full_preds, u_vvx_ops)
187 DEF_RVV_FUNCTION (vmax, alu, full_preds, i_vvv_ops)
188 DEF_RVV_FUNCTION (vmax, alu, full_preds, i_vvx_ops)
190 // 11.10. Vector Single-Width Integer Multiply Instructions
191 DEF_RVV_FUNCTION (vmul, alu, full_preds, iu_vvv_ops)
192 DEF_RVV_FUNCTION (vmul, alu, full_preds, iu_vvx_ops)
193 DEF_RVV_FUNCTION (vmulh, alu, full_preds, full_v_i_vvv_ops)
194 DEF_RVV_FUNCTION (vmulh, alu, full_preds, full_v_i_vvx_ops)
195 DEF_RVV_FUNCTION (vmulhu, alu, full_preds, full_v_u_vvv_ops)
196 DEF_RVV_FUNCTION (vmulhu, alu, full_preds, full_v_u_vvx_ops)
197 DEF_RVV_FUNCTION (vmulhsu, alu, full_preds, full_v_i_su_vvv_ops)
198 DEF_RVV_FUNCTION (vmulhsu, alu, full_preds, full_v_i_su_vvx_ops)
200 // 11.11. Vector Integer Divide Instructions
201 DEF_RVV_FUNCTION (vdivu, alu, full_preds, u_vvv_ops)
202 DEF_RVV_FUNCTION (vdivu, alu, full_preds, u_vvx_ops)
203 DEF_RVV_FUNCTION (vdiv, alu, full_preds, i_vvv_ops)
204 DEF_RVV_FUNCTION (vdiv, alu, full_preds, i_vvx_ops)
205 DEF_RVV_FUNCTION (vremu, alu, full_preds, u_vvv_ops)
206 DEF_RVV_FUNCTION (vremu, alu, full_preds, u_vvx_ops)
207 DEF_RVV_FUNCTION (vrem, alu, full_preds, i_vvv_ops)
208 DEF_RVV_FUNCTION (vrem, alu, full_preds, i_vvx_ops)
210 // 11.12. Vector Widening Integer Multiply Instructions
211 DEF_RVV_FUNCTION (vwmul, alu, full_preds, i_wvv_ops)
212 DEF_RVV_FUNCTION (vwmul, alu, full_preds, i_wvx_ops)
213 DEF_RVV_FUNCTION (vwmulu, alu, full_preds, u_wvv_ops)
214 DEF_RVV_FUNCTION (vwmulu, alu, full_preds, u_wvx_ops)
215 DEF_RVV_FUNCTION (vwmulsu, alu, full_preds, i_su_wvv_ops)
216 DEF_RVV_FUNCTION (vwmulsu, alu, full_preds, i_su_wvx_ops)
218 // 11.13. Vector Single-Width Integer Multiply-Add Instructions
219 DEF_RVV_FUNCTION (vmacc, alu, full_preds, iu_vvvv_ops)
220 DEF_RVV_FUNCTION (vmacc, alu, full_preds, iu_vvxv_ops)
221 DEF_RVV_FUNCTION (vnmsac, alu, full_preds, iu_vvvv_ops)
222 DEF_RVV_FUNCTION (vnmsac, alu, full_preds, iu_vvxv_ops)
223 DEF_RVV_FUNCTION (vmadd, alu, full_preds, iu_vvvv_ops)
224 DEF_RVV_FUNCTION (vmadd, alu, full_preds, iu_vvxv_ops)
225 DEF_RVV_FUNCTION (vnmsub, alu, full_preds, iu_vvvv_ops)
226 DEF_RVV_FUNCTION (vnmsub, alu, full_preds, iu_vvxv_ops)
228 // 11.14. Vector Widening Integer Multiply-Add Instructions
229 DEF_RVV_FUNCTION (vwmaccu, alu, full_preds, u_wwvv_ops)
230 DEF_RVV_FUNCTION (vwmaccu, alu, full_preds, u_wwxv_ops)
231 DEF_RVV_FUNCTION (vwmacc, alu, full_preds, i_wwvv_ops)
232 DEF_RVV_FUNCTION (vwmacc, alu, full_preds, i_wwxv_ops)
233 DEF_RVV_FUNCTION (vwmaccsu, alu, full_preds, i_su_wwvv_ops)
234 DEF_RVV_FUNCTION (vwmaccsu, alu, full_preds, i_su_wwxv_ops)
235 DEF_RVV_FUNCTION (vwmaccus, alu, full_preds, i_us_wwxv_ops)
237 // 11.15. Vector Integer Merge Instructions
238 DEF_RVV_FUNCTION (vmerge, no_mask_policy, none_tu_preds, all_vvvm_ops)
239 DEF_RVV_FUNCTION (vmerge, no_mask_policy, none_tu_preds, iu_vvxm_ops)
241 // 11.16 Vector Integer Move Instructions
242 DEF_RVV_FUNCTION (vmv_v, move, none_tu_preds, all_v_ops)
243 DEF_RVV_FUNCTION (vmv_v, move, none_tu_preds, iu_x_ops)
245 /* 12. Vector Fixed-Point Arithmetic Instructions. */
247 // 12.1. Vector Single-Width Saturating Add and Subtract
248 DEF_RVV_FUNCTION (vsaddu, alu, full_preds, u_vvv_ops)
249 DEF_RVV_FUNCTION (vsaddu, alu, full_preds, u_vvx_ops)
250 DEF_RVV_FUNCTION (vsadd, alu, full_preds, i_vvv_ops)
251 DEF_RVV_FUNCTION (vsadd, alu, full_preds, i_vvx_ops)
252 DEF_RVV_FUNCTION (vssubu, alu, full_preds, u_vvv_ops)
253 DEF_RVV_FUNCTION (vssubu, alu, full_preds, u_vvx_ops)
254 DEF_RVV_FUNCTION (vssub, alu, full_preds, i_vvv_ops)
255 DEF_RVV_FUNCTION (vssub, alu, full_preds, i_vvx_ops)
257 // 12.2. Vector Single-Width Averaging Add and Subtract
258 DEF_RVV_FUNCTION (vaaddu, alu, full_preds, u_vvv_ops)
259 DEF_RVV_FUNCTION (vaaddu, alu, full_preds, u_vvx_ops)
260 DEF_RVV_FUNCTION (vaadd, alu, full_preds, i_vvv_ops)
261 DEF_RVV_FUNCTION (vaadd, alu, full_preds, i_vvx_ops)
262 DEF_RVV_FUNCTION (vasubu, alu, full_preds, u_vvv_ops)
263 DEF_RVV_FUNCTION (vasubu, alu, full_preds, u_vvx_ops)
264 DEF_RVV_FUNCTION (vasub, alu, full_preds, i_vvv_ops)
265 DEF_RVV_FUNCTION (vasub, alu, full_preds, i_vvx_ops)
267 // 12.3. Vector Single-Width Fractional Multiply with Rounding and Saturation
268 DEF_RVV_FUNCTION (vsmul, alu, full_preds, full_v_i_vvv_ops)
269 DEF_RVV_FUNCTION (vsmul, alu, full_preds, full_v_i_vvx_ops)
271 // 12.4. Vector Single-Width Scaling Shift Instructions
272 DEF_RVV_FUNCTION (vssrl, alu, full_preds, u_shift_vvv_ops)
273 DEF_RVV_FUNCTION (vssrl, alu, full_preds, u_shift_vvx_ops)
274 DEF_RVV_FUNCTION (vssra, alu, full_preds, i_shift_vvv_ops)
275 DEF_RVV_FUNCTION (vssra, alu, full_preds, i_shift_vvx_ops)
277 // 12.5. Vector Narrowing Fixed-Point Clip Instructions
278 DEF_RVV_FUNCTION (vnclipu, narrow_alu, full_preds, u_narrow_shift_vwv_ops)
279 DEF_RVV_FUNCTION (vnclipu, narrow_alu, full_preds, u_narrow_shift_vwx_ops)
280 DEF_RVV_FUNCTION (vnclip, narrow_alu, full_preds, i_narrow_shift_vwv_ops)
281 DEF_RVV_FUNCTION (vnclip, narrow_alu, full_preds, i_narrow_shift_vwx_ops)
283 /* 13. Vector Floating-Point Instructions. */
285 // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions
286 DEF_RVV_FUNCTION (vfadd, alu, full_preds, f_vvv_ops)
287 DEF_RVV_FUNCTION (vfadd, alu, full_preds, f_vvf_ops)
288 DEF_RVV_FUNCTION (vfsub, alu, full_preds, f_vvv_ops)
289 DEF_RVV_FUNCTION (vfsub, alu, full_preds, f_vvf_ops)
290 DEF_RVV_FUNCTION (vfrsub, alu, full_preds, f_vvf_ops)
291 DEF_RVV_FUNCTION (vfadd_frm, alu_frm, full_preds, f_vvv_ops)
292 DEF_RVV_FUNCTION (vfadd_frm, alu_frm, full_preds, f_vvf_ops)
293 DEF_RVV_FUNCTION (vfsub_frm, alu_frm, full_preds, f_vvv_ops)
294 DEF_RVV_FUNCTION (vfsub_frm, alu_frm, full_preds, f_vvf_ops)
295 DEF_RVV_FUNCTION (vfrsub_frm, alu_frm, full_preds, f_vvf_ops)
297 // 13.3. Vector Widening Floating-Point Add/Subtract Instructions
298 DEF_RVV_FUNCTION (vfwadd, widen_alu, full_preds, f_wvv_ops)
299 DEF_RVV_FUNCTION (vfwadd, widen_alu, full_preds, f_wvf_ops)
300 DEF_RVV_FUNCTION (vfwsub, widen_alu, full_preds, f_wvv_ops)
301 DEF_RVV_FUNCTION (vfwsub, widen_alu, full_preds, f_wvf_ops)
302 DEF_RVV_FUNCTION (vfwadd, widen_alu, full_preds, f_wwv_ops)
303 DEF_RVV_FUNCTION (vfwadd, widen_alu, full_preds, f_wwf_ops)
304 DEF_RVV_FUNCTION (vfwsub, widen_alu, full_preds, f_wwv_ops)
305 DEF_RVV_FUNCTION (vfwsub, widen_alu, full_preds, f_wwf_ops)
306 DEF_RVV_FUNCTION (vfwadd_frm, widen_alu_frm, full_preds, f_wvv_ops)
307 DEF_RVV_FUNCTION (vfwadd_frm, widen_alu_frm, full_preds, f_wvf_ops)
308 DEF_RVV_FUNCTION (vfwsub_frm, widen_alu_frm, full_preds, f_wvv_ops)
309 DEF_RVV_FUNCTION (vfwsub_frm, widen_alu_frm, full_preds, f_wvf_ops)
310 DEF_RVV_FUNCTION (vfwadd_frm, widen_alu_frm, full_preds, f_wwv_ops)
311 DEF_RVV_FUNCTION (vfwadd_frm, widen_alu_frm, full_preds, f_wwf_ops)
312 DEF_RVV_FUNCTION (vfwsub_frm, widen_alu_frm, full_preds, f_wwv_ops)
313 DEF_RVV_FUNCTION (vfwsub_frm, widen_alu_frm, full_preds, f_wwf_ops)
315 // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
316 DEF_RVV_FUNCTION (vfmul, alu, full_preds, f_vvv_ops)
317 DEF_RVV_FUNCTION (vfmul, alu, full_preds, f_vvf_ops)
318 DEF_RVV_FUNCTION (vfdiv, alu, full_preds, f_vvv_ops)
319 DEF_RVV_FUNCTION (vfdiv, alu, full_preds, f_vvf_ops)
320 DEF_RVV_FUNCTION (vfrdiv, alu, full_preds, f_vvf_ops)
321 DEF_RVV_FUNCTION (vfmul_frm, alu_frm, full_preds, f_vvv_ops)
322 DEF_RVV_FUNCTION (vfmul_frm, alu_frm, full_preds, f_vvf_ops)
323 DEF_RVV_FUNCTION (vfdiv_frm, alu_frm, full_preds, f_vvv_ops)
324 DEF_RVV_FUNCTION (vfdiv_frm, alu_frm, full_preds, f_vvf_ops)
325 DEF_RVV_FUNCTION (vfrdiv_frm, alu_frm, full_preds, f_vvf_ops)
327 // 13.5. Vector Widening Floating-Point Multiply
328 DEF_RVV_FUNCTION (vfwmul, alu, full_preds, f_wvv_ops)
329 DEF_RVV_FUNCTION (vfwmul, alu, full_preds, f_wvf_ops)
330 DEF_RVV_FUNCTION (vfwmul_frm, alu_frm, full_preds, f_wvv_ops)
331 DEF_RVV_FUNCTION (vfwmul_frm, alu_frm, full_preds, f_wvf_ops)
333 // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions
334 DEF_RVV_FUNCTION (vfmacc, alu, full_preds, f_vvvv_ops)
335 DEF_RVV_FUNCTION (vfmacc, alu, full_preds, f_vvfv_ops)
336 DEF_RVV_FUNCTION (vfnmsac, alu, full_preds, f_vvvv_ops)
337 DEF_RVV_FUNCTION (vfnmsac, alu, full_preds, f_vvfv_ops)
338 DEF_RVV_FUNCTION (vfmadd, alu, full_preds, f_vvvv_ops)
339 DEF_RVV_FUNCTION (vfmadd, alu, full_preds, f_vvfv_ops)
340 DEF_RVV_FUNCTION (vfnmsub, alu, full_preds, f_vvvv_ops)
341 DEF_RVV_FUNCTION (vfnmsub, alu, full_preds, f_vvfv_ops)
342 DEF_RVV_FUNCTION (vfnmacc, alu, full_preds, f_vvvv_ops)
343 DEF_RVV_FUNCTION (vfnmacc, alu, full_preds, f_vvfv_ops)
344 DEF_RVV_FUNCTION (vfmsac, alu, full_preds, f_vvvv_ops)
345 DEF_RVV_FUNCTION (vfmsac, alu, full_preds, f_vvfv_ops)
346 DEF_RVV_FUNCTION (vfnmadd, alu, full_preds, f_vvvv_ops)
347 DEF_RVV_FUNCTION (vfnmadd, alu, full_preds, f_vvfv_ops)
348 DEF_RVV_FUNCTION (vfmsub, alu, full_preds, f_vvvv_ops)
349 DEF_RVV_FUNCTION (vfmsub, alu, full_preds, f_vvfv_ops)
351 DEF_RVV_FUNCTION (vfmacc_frm, alu_frm, full_preds, f_vvvv_ops)
352 DEF_RVV_FUNCTION (vfmacc_frm, alu_frm, full_preds, f_vvfv_ops)
353 DEF_RVV_FUNCTION (vfnmacc_frm, alu_frm, full_preds, f_vvvv_ops)
354 DEF_RVV_FUNCTION (vfnmacc_frm, alu_frm, full_preds, f_vvfv_ops)
355 DEF_RVV_FUNCTION (vfmsac_frm, alu_frm, full_preds, f_vvvv_ops)
356 DEF_RVV_FUNCTION (vfmsac_frm, alu_frm, full_preds, f_vvfv_ops)
357 DEF_RVV_FUNCTION (vfnmsac_frm, alu_frm, full_preds, f_vvvv_ops)
358 DEF_RVV_FUNCTION (vfnmsac_frm, alu_frm, full_preds, f_vvfv_ops)
359 DEF_RVV_FUNCTION (vfmadd_frm, alu_frm, full_preds, f_vvvv_ops)
360 DEF_RVV_FUNCTION (vfmadd_frm, alu_frm, full_preds, f_vvfv_ops)
361 DEF_RVV_FUNCTION (vfnmadd_frm, alu_frm, full_preds, f_vvvv_ops)
362 DEF_RVV_FUNCTION (vfnmadd_frm, alu_frm, full_preds, f_vvfv_ops)
363 DEF_RVV_FUNCTION (vfmsub_frm, alu_frm, full_preds, f_vvvv_ops)
364 DEF_RVV_FUNCTION (vfmsub_frm, alu_frm, full_preds, f_vvfv_ops)
365 DEF_RVV_FUNCTION (vfnmsub_frm, alu_frm, full_preds, f_vvvv_ops)
366 DEF_RVV_FUNCTION (vfnmsub_frm, alu_frm, full_preds, f_vvfv_ops)
368 // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions
369 DEF_RVV_FUNCTION (vfwmacc, alu, full_preds, f_wwvv_ops)
370 DEF_RVV_FUNCTION (vfwmacc, alu, full_preds, f_wwfv_ops)
371 DEF_RVV_FUNCTION (vfwnmacc, alu, full_preds, f_wwvv_ops)
372 DEF_RVV_FUNCTION (vfwnmacc, alu, full_preds, f_wwfv_ops)
373 DEF_RVV_FUNCTION (vfwmsac, alu, full_preds, f_wwvv_ops)
374 DEF_RVV_FUNCTION (vfwmsac, alu, full_preds, f_wwfv_ops)
375 DEF_RVV_FUNCTION (vfwnmsac, alu, full_preds, f_wwvv_ops)
376 DEF_RVV_FUNCTION (vfwnmsac, alu, full_preds, f_wwfv_ops)
378 DEF_RVV_FUNCTION (vfwmacc_frm, alu_frm, full_preds, f_wwvv_ops)
379 DEF_RVV_FUNCTION (vfwmacc_frm, alu_frm, full_preds, f_wwfv_ops)
380 DEF_RVV_FUNCTION (vfwnmacc_frm, alu_frm, full_preds, f_wwvv_ops)
381 DEF_RVV_FUNCTION (vfwnmacc_frm, alu_frm, full_preds, f_wwfv_ops)
382 DEF_RVV_FUNCTION (vfwmsac_frm, alu_frm, full_preds, f_wwvv_ops)
383 DEF_RVV_FUNCTION (vfwmsac_frm, alu_frm, full_preds, f_wwfv_ops)
384 DEF_RVV_FUNCTION (vfwnmsac_frm, alu_frm, full_preds, f_wwvv_ops)
385 DEF_RVV_FUNCTION (vfwnmsac_frm, alu_frm, full_preds, f_wwfv_ops)
387 // 13.8. Vector Floating-Point Square-Root Instruction
388 DEF_RVV_FUNCTION (vfsqrt, alu, full_preds, f_v_ops)
390 DEF_RVV_FUNCTION (vfsqrt_frm, alu_frm, full_preds, f_v_ops)
392 // 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction
393 DEF_RVV_FUNCTION (vfrsqrt7, alu, full_preds, f_v_ops)
395 // 13.10. Vector Floating-Point Reciprocal Estimate Instruction
396 DEF_RVV_FUNCTION (vfrec7, alu, full_preds, f_v_ops)
398 DEF_RVV_FUNCTION (vfrec7_frm, alu_frm, full_preds, f_v_ops)
400 // 13.11. Vector Floating-Point MIN/MAX Instructions
401 DEF_RVV_FUNCTION (vfmin, alu, full_preds, f_vvv_ops)
402 DEF_RVV_FUNCTION (vfmin, alu, full_preds, f_vvf_ops)
403 DEF_RVV_FUNCTION (vfmax, alu, full_preds, f_vvv_ops)
404 DEF_RVV_FUNCTION (vfmax, alu, full_preds, f_vvf_ops)
406 // 13.12. Vector Floating-Point Sign-Injection Instructions
407 DEF_RVV_FUNCTION (vfsgnj, alu, full_preds, f_vvv_ops)
408 DEF_RVV_FUNCTION (vfsgnj, alu, full_preds, f_vvf_ops)
409 DEF_RVV_FUNCTION (vfsgnjn, alu, full_preds, f_vvv_ops)
410 DEF_RVV_FUNCTION (vfsgnjn, alu, full_preds, f_vvf_ops)
411 DEF_RVV_FUNCTION (vfsgnjx, alu, full_preds, f_vvv_ops)
412 DEF_RVV_FUNCTION (vfsgnjx, alu, full_preds, f_vvf_ops)
413 DEF_RVV_FUNCTION (vfneg, alu, full_preds, f_v_ops)
414 DEF_RVV_FUNCTION (vfabs, alu, full_preds, f_v_ops)
416 // 13.13. Vector Floating-Point Compare Instructions
417 DEF_RVV_FUNCTION (vmfeq, return_mask, none_m_mu_preds, f_mvv_ops)
418 DEF_RVV_FUNCTION (vmfeq, return_mask, none_m_mu_preds, f_mvf_ops)
419 DEF_RVV_FUNCTION (vmfne, return_mask, none_m_mu_preds, f_mvv_ops)
420 DEF_RVV_FUNCTION (vmfne, return_mask, none_m_mu_preds, f_mvf_ops)
421 DEF_RVV_FUNCTION (vmflt, return_mask, none_m_mu_preds, f_mvv_ops)
422 DEF_RVV_FUNCTION (vmflt, return_mask, none_m_mu_preds, f_mvf_ops)
423 DEF_RVV_FUNCTION (vmfle, return_mask, none_m_mu_preds, f_mvv_ops)
424 DEF_RVV_FUNCTION (vmfle, return_mask, none_m_mu_preds, f_mvf_ops)
425 DEF_RVV_FUNCTION (vmfgt, return_mask, none_m_mu_preds, f_mvv_ops)
426 DEF_RVV_FUNCTION (vmfgt, return_mask, none_m_mu_preds, f_mvf_ops)
427 DEF_RVV_FUNCTION (vmfge, return_mask, none_m_mu_preds, f_mvv_ops)
428 DEF_RVV_FUNCTION (vmfge, return_mask, none_m_mu_preds, f_mvf_ops)
430 // 13.14. Vector Floating-Point Classify Instruction
431 DEF_RVV_FUNCTION (vfclass, alu, full_preds, f_to_u_v_ops)
433 // 13.15. Vector Floating-Point Merge Instruction
434 DEF_RVV_FUNCTION (vfmerge, no_mask_policy, none_tu_preds, f_vvfm_ops)
436 // 13.16. Vector Floating-Point Move Instruction
437 DEF_RVV_FUNCTION (vfmv_v, move, none_tu_preds, f_f_ops)
439 // 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions
440 DEF_RVV_FUNCTION (vfcvt_x, alu, full_preds, f_to_i_f_v_ops)
441 DEF_RVV_FUNCTION (vfcvt_xu, alu, full_preds, f_to_u_f_v_ops)
442 DEF_RVV_FUNCTION (vfcvt_rtz_x, alu, full_preds, f_to_i_f_v_ops)
443 DEF_RVV_FUNCTION (vfcvt_rtz_xu, alu, full_preds, f_to_u_f_v_ops)
444 DEF_RVV_FUNCTION (vfcvt_f, alu, full_preds, i_to_f_x_v_ops)
445 DEF_RVV_FUNCTION (vfcvt_f, alu, full_preds, u_to_f_xu_v_ops)
447 DEF_RVV_FUNCTION (vfcvt_x_frm, alu_frm, full_preds, f_to_i_f_v_ops)
448 DEF_RVV_FUNCTION (vfcvt_xu_frm, alu_frm, full_preds, f_to_u_f_v_ops)
449 DEF_RVV_FUNCTION (vfcvt_f_frm, alu_frm, full_preds, i_to_f_x_v_ops)
450 DEF_RVV_FUNCTION (vfcvt_f_frm, alu_frm, full_preds, u_to_f_xu_v_ops)
452 // 13.18. Widening Floating-Point/Integer Type-Convert Instructions
453 DEF_RVV_FUNCTION (vfwcvt_x, alu, full_preds, f_to_wi_f_v_ops)
454 DEF_RVV_FUNCTION (vfwcvt_xu, alu, full_preds, f_to_wu_f_v_ops)
455 DEF_RVV_FUNCTION (vfwcvt_rtz_x, alu, full_preds, f_to_wi_f_v_ops)
456 DEF_RVV_FUNCTION (vfwcvt_rtz_xu, alu, full_preds, f_to_wu_f_v_ops)
457 DEF_RVV_FUNCTION (vfwcvt_f, alu, full_preds, i_to_wf_x_v_ops)
458 DEF_RVV_FUNCTION (vfwcvt_f, alu, full_preds, u_to_wf_xu_v_ops)
459 DEF_RVV_FUNCTION (vfwcvt_f, alu, full_preds, f_to_wf_f_v_ops)
461 DEF_RVV_FUNCTION (vfwcvt_x_frm, alu_frm, full_preds, f_to_wi_f_v_ops)
462 DEF_RVV_FUNCTION (vfwcvt_xu_frm, alu_frm, full_preds, f_to_wu_f_v_ops)
464 // 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions
465 DEF_RVV_FUNCTION (vfncvt_x, narrow_alu, full_preds, f_to_ni_f_w_ops)
466 DEF_RVV_FUNCTION (vfncvt_xu, narrow_alu, full_preds, f_to_nu_f_w_ops)
467 DEF_RVV_FUNCTION (vfncvt_rtz_x, narrow_alu, full_preds, f_to_ni_f_w_ops)
468 DEF_RVV_FUNCTION (vfncvt_rtz_xu, narrow_alu, full_preds, f_to_nu_f_w_ops)
469 DEF_RVV_FUNCTION (vfncvt_f, narrow_alu, full_preds, i_to_nf_x_w_ops)
470 DEF_RVV_FUNCTION (vfncvt_f, narrow_alu, full_preds, u_to_nf_xu_w_ops)
471 DEF_RVV_FUNCTION (vfncvt_f, narrow_alu, full_preds, f_to_nf_f_w_ops)
472 DEF_RVV_FUNCTION (vfncvt_rod_f, narrow_alu, full_preds, f_to_nf_f_w_ops)
474 DEF_RVV_FUNCTION (vfncvt_x_frm, narrow_alu_frm, full_preds, f_to_ni_f_w_ops)
475 DEF_RVV_FUNCTION (vfncvt_xu_frm, narrow_alu_frm, full_preds, f_to_nu_f_w_ops)
476 DEF_RVV_FUNCTION (vfncvt_f_frm, narrow_alu_frm, full_preds, i_to_nf_x_w_ops)
477 DEF_RVV_FUNCTION (vfncvt_f_frm, narrow_alu_frm, full_preds, u_to_nf_xu_w_ops)
478 DEF_RVV_FUNCTION (vfncvt_f_frm, narrow_alu_frm, full_preds, f_to_nf_f_w_ops)
480 /* 14. Vector Reduction Operations. */
482 // 14.1. Vector Single-Width Integer Reduction Instructions
483 DEF_RVV_FUNCTION (vredsum, reduc_alu, no_mu_preds, iu_vs_ops)
484 DEF_RVV_FUNCTION (vredmaxu, reduc_alu, no_mu_preds, iu_vs_ops)
485 DEF_RVV_FUNCTION (vredmax, reduc_alu, no_mu_preds, iu_vs_ops)
486 DEF_RVV_FUNCTION (vredminu, reduc_alu, no_mu_preds, iu_vs_ops)
487 DEF_RVV_FUNCTION (vredmin, reduc_alu, no_mu_preds, iu_vs_ops)
488 DEF_RVV_FUNCTION (vredand, reduc_alu, no_mu_preds, iu_vs_ops)
489 DEF_RVV_FUNCTION (vredor, reduc_alu, no_mu_preds, iu_vs_ops)
490 DEF_RVV_FUNCTION (vredxor, reduc_alu, no_mu_preds, iu_vs_ops)
492 // 14.2. Vector Widening Integer Reduction Instructions
493 DEF_RVV_FUNCTION (vwredsum, reduc_alu, no_mu_preds, wi_vs_ops)
494 DEF_RVV_FUNCTION (vwredsumu, reduc_alu, no_mu_preds, wu_vs_ops)
496 // 14.3. Vector Single-Width Floating-Point Reduction Instructions
497 DEF_RVV_FUNCTION (vfredusum, reduc_alu, no_mu_preds, f_vs_ops)
498 DEF_RVV_FUNCTION (vfredosum, reduc_alu, no_mu_preds, f_vs_ops)
499 DEF_RVV_FUNCTION (vfredmax, reduc_alu, no_mu_preds, f_vs_ops)
500 DEF_RVV_FUNCTION (vfredmin, reduc_alu, no_mu_preds, f_vs_ops)
502 DEF_RVV_FUNCTION (vfredusum_frm, reduc_alu_frm, no_mu_preds, f_vs_ops)
503 DEF_RVV_FUNCTION (vfredosum_frm, reduc_alu_frm, no_mu_preds, f_vs_ops)
505 // 14.4. Vector Widening Floating-Point Reduction Instructions
506 DEF_RVV_FUNCTION (vfwredosum, reduc_alu, no_mu_preds, wf_vs_ops)
507 DEF_RVV_FUNCTION (vfwredusum, reduc_alu, no_mu_preds, wf_vs_ops)
509 DEF_RVV_FUNCTION (vfwredosum_frm, reduc_alu_frm, no_mu_preds, wf_vs_ops)
510 DEF_RVV_FUNCTION (vfwredusum_frm, reduc_alu_frm, no_mu_preds, wf_vs_ops)
512 /* 15. Vector Mask Instructions. */
514 // 15.1. Vector Mask-Register Logical Instructions
515 DEF_RVV_FUNCTION (vmand, mask_alu, none_preds, b_mmm_ops)
516 DEF_RVV_FUNCTION (vmnand, mask_alu, none_preds, b_mmm_ops)
517 DEF_RVV_FUNCTION (vmandn, mask_alu, none_preds, b_mmm_ops)
518 DEF_RVV_FUNCTION (vmxor, mask_alu, none_preds, b_mmm_ops)
519 DEF_RVV_FUNCTION (vmor, mask_alu, none_preds, b_mmm_ops)
520 DEF_RVV_FUNCTION (vmnor, mask_alu, none_preds, b_mmm_ops)
521 DEF_RVV_FUNCTION (vmorn, mask_alu, none_preds, b_mmm_ops)
522 DEF_RVV_FUNCTION (vmxnor, mask_alu, none_preds, b_mmm_ops)
523 DEF_RVV_FUNCTION (vmmv, mask_alu, none_preds, b_mm_ops)
524 DEF_RVV_FUNCTION (vmclr, mask_alu, none_preds, b_m_ops)
525 DEF_RVV_FUNCTION (vmset, mask_alu, none_preds, b_m_ops)
526 DEF_RVV_FUNCTION (vmnot, mask_alu, none_preds, b_mm_ops)
527 // 15.2. Vector count population in mask vcpop.m
528 DEF_RVV_FUNCTION (vcpop, mask_alu, none_m_preds, b_ulong_m_ops)
529 // 15.3. vfirst find-first-set mask bit
530 DEF_RVV_FUNCTION (vfirst, mask_alu, none_m_preds, b_long_m_ops)
531 // 15.4. vmsbf.m set-before-first mask bit
532 DEF_RVV_FUNCTION (vmsbf, mask_alu, none_m_mu_preds, b_mm_ops)
533 // 15.5. vmsif.m set-including-first mask bit
534 DEF_RVV_FUNCTION (vmsif, mask_alu, none_m_mu_preds, b_mm_ops)
535 // 15.6. vmsof.m set-only-first mask bit
536 DEF_RVV_FUNCTION (vmsof, mask_alu, none_m_mu_preds, b_mm_ops)
537 // 15.8. Vector Iota Instruction
538 DEF_RVV_FUNCTION (viota, mask_alu, full_preds, u_vm_ops)
539 // 15.9. Vector Element Index Instruction
540 DEF_RVV_FUNCTION (vid, alu, full_preds, u_v_ops)
542 /* 16. Vector Permutation Instructions. */
544 // 16.1. Integer Scalar Move Instructions
545 DEF_RVV_FUNCTION (vmv_x, scalar_move, none_preds, iu_x_s_ops)
546 DEF_RVV_FUNCTION (vmv_s, move, none_tu_preds, iu_s_x_ops)
548 // 16.2. Floating-Point Scalar Move Instructions
549 DEF_RVV_FUNCTION (vfmv_f, scalar_move, none_preds, f_f_s_ops)
550 DEF_RVV_FUNCTION (vfmv_s, move, none_tu_preds, f_s_f_ops)
552 // 16.3. Vector Slide Instructions
553 DEF_RVV_FUNCTION (vslideup, alu, full_preds, all_vvvx_ops)
554 DEF_RVV_FUNCTION (vslidedown, alu, full_preds, all_vvx_ops)
555 DEF_RVV_FUNCTION (vslide1up, alu, full_preds, iu_vvx_ops)
556 DEF_RVV_FUNCTION (vslide1down, alu, full_preds, iu_vvx_ops)
557 DEF_RVV_FUNCTION (vfslide1up, alu, full_preds, f_vvf_ops)
558 DEF_RVV_FUNCTION (vfslide1down, alu, full_preds, f_vvf_ops)
560 // 16.4. Vector Register Gather Instructions
561 DEF_RVV_FUNCTION (vrgather, alu, full_preds, all_gather_vvv_ops)
562 DEF_RVV_FUNCTION (vrgather, alu, full_preds, all_gather_vvx_ops)
563 DEF_RVV_FUNCTION (vrgatherei16, alu, full_preds, all_gatherei16_vvv_ops)
565 // 16.5. Vector Compress Instruction
566 DEF_RVV_FUNCTION (vcompress, alu, none_tu_preds, all_vvm_ops)
568 /* Miscellaneous Vector Functions. */
569 DEF_RVV_FUNCTION (vundefined, vundefined, none_preds, all_none_void_ops)
570 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, i_v_u_ops)
571 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, u_v_i_ops)
572 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, f_v_i_ops)
573 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, f_v_u_ops)
574 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, i_v_f_ops)
575 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, u_v_f_ops)
576 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, iu_v_eew8_interpret_ops)
577 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, iu_v_eew16_interpret_ops)
578 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, iu_v_eew32_interpret_ops)
579 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, iu_v_eew64_interpret_ops)
580 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, iu_v_bool1_interpret_ops)
581 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, iu_v_bool2_interpret_ops)
582 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, iu_v_bool4_interpret_ops)
583 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, iu_v_bool8_interpret_ops)
584 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, iu_v_bool16_interpret_ops)
585 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, iu_v_bool32_interpret_ops)
586 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, iu_v_bool64_interpret_ops)
587 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, b_v_signed_eew8_lmul1_interpret_ops)
588 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, b_v_signed_eew16_lmul1_interpret_ops)
589 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, b_v_signed_eew32_lmul1_interpret_ops)
590 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, b_v_signed_eew64_lmul1_interpret_ops)
591 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, b_v_unsigned_eew8_lmul1_interpret_ops)
592 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, b_v_unsigned_eew16_lmul1_interpret_ops)
593 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, b_v_unsigned_eew32_lmul1_interpret_ops)
594 DEF_RVV_FUNCTION (vreinterpret, misc, none_preds, b_v_unsigned_eew64_lmul1_interpret_ops)
595 DEF_RVV_FUNCTION (vlmul_ext, misc, none_preds, all_v_vlmul_ext_x2_ops)
596 DEF_RVV_FUNCTION (vlmul_ext, misc, none_preds, all_v_vlmul_ext_x4_ops)
597 DEF_RVV_FUNCTION (vlmul_ext, misc, none_preds, all_v_vlmul_ext_x8_ops)
598 DEF_RVV_FUNCTION (vlmul_ext, misc, none_preds, all_v_vlmul_ext_x16_ops)
599 DEF_RVV_FUNCTION (vlmul_ext, misc, none_preds, all_v_vlmul_ext_x32_ops)
600 DEF_RVV_FUNCTION (vlmul_ext, misc, none_preds, all_v_vlmul_ext_x64_ops)
601 DEF_RVV_FUNCTION (vlmul_trunc, misc, none_preds, all_v_vlmul_trunc_x2_ops)
602 DEF_RVV_FUNCTION (vlmul_trunc, misc, none_preds, all_v_vlmul_trunc_x4_ops)
603 DEF_RVV_FUNCTION (vlmul_trunc, misc, none_preds, all_v_vlmul_trunc_x8_ops)
604 DEF_RVV_FUNCTION (vlmul_trunc, misc, none_preds, all_v_vlmul_trunc_x16_ops)
605 DEF_RVV_FUNCTION (vlmul_trunc, misc, none_preds, all_v_vlmul_trunc_x32_ops)
606 DEF_RVV_FUNCTION (vlmul_trunc, misc, none_preds, all_v_vlmul_trunc_x64_ops)
607 DEF_RVV_FUNCTION (vset, vset, none_preds, all_v_vset_lmul1_x2_ops)
608 DEF_RVV_FUNCTION (vset, vset, none_preds, all_v_vset_lmul1_x4_ops)
609 DEF_RVV_FUNCTION (vset, vset, none_preds, all_v_vset_lmul1_x8_ops)
610 DEF_RVV_FUNCTION (vset, vset, none_preds, all_v_vset_lmul2_x2_ops)
611 DEF_RVV_FUNCTION (vset, vset, none_preds, all_v_vset_lmul2_x4_ops)
612 DEF_RVV_FUNCTION (vset, vset, none_preds, all_v_vset_lmul4_x2_ops)
613 DEF_RVV_FUNCTION (vget, vget, none_preds, all_v_vget_lmul1_x2_ops)
614 DEF_RVV_FUNCTION (vget, vget, none_preds, all_v_vget_lmul1_x4_ops)
615 DEF_RVV_FUNCTION (vget, vget, none_preds, all_v_vget_lmul1_x8_ops)
616 DEF_RVV_FUNCTION (vget, vget, none_preds, all_v_vget_lmul2_x2_ops)
617 DEF_RVV_FUNCTION (vget, vget, none_preds, all_v_vget_lmul2_x4_ops)
618 DEF_RVV_FUNCTION (vget, vget, none_preds, all_v_vget_lmul4_x2_ops)
619 DEF_RVV_FUNCTION (vcreate, vcreate, none_preds, all_v_vcreate_lmul1_x2_ops)
620 DEF_RVV_FUNCTION (vcreate, vcreate, none_preds, all_v_vcreate_lmul1_x4_ops)
621 DEF_RVV_FUNCTION (vcreate, vcreate, none_preds, all_v_vcreate_lmul1_x8_ops)
622 DEF_RVV_FUNCTION (vcreate, vcreate, none_preds, all_v_vcreate_lmul2_x2_ops)
623 DEF_RVV_FUNCTION (vcreate, vcreate, none_preds, all_v_vcreate_lmul2_x4_ops)
624 DEF_RVV_FUNCTION (vcreate, vcreate, none_preds, all_v_vcreate_lmul4_x2_ops)
626 // Tuple types
627 DEF_RVV_FUNCTION (vset, vset, none_preds, all_v_vset_tuple_ops)
628 DEF_RVV_FUNCTION (vget, vget, none_preds, all_v_vget_tuple_ops)
629 DEF_RVV_FUNCTION (vcreate, vcreate, none_preds, all_v_vcreate_tuple_ops)
630 DEF_RVV_FUNCTION (vundefined, vundefined, none_preds, all_none_void_tuple_ops)
632 // 7.8. Vector Load/Store Segment Instructions
633 DEF_RVV_FUNCTION (vlseg, seg_loadstore, full_preds, tuple_v_scalar_const_ptr_ops)
634 DEF_RVV_FUNCTION (vsseg, seg_loadstore, none_m_preds, tuple_v_scalar_ptr_ops)
635 DEF_RVV_FUNCTION (vlsseg, seg_loadstore, full_preds, tuple_v_scalar_const_ptr_ptrdiff_ops)
636 DEF_RVV_FUNCTION (vssseg, seg_loadstore, none_m_preds, tuple_v_scalar_ptr_ptrdiff_ops)
637 DEF_RVV_FUNCTION (vluxseg, seg_indexed_loadstore, full_preds, tuple_v_scalar_const_ptr_eew8_index_ops)
638 DEF_RVV_FUNCTION (vluxseg, seg_indexed_loadstore, full_preds, tuple_v_scalar_const_ptr_eew16_index_ops)
639 DEF_RVV_FUNCTION (vluxseg, seg_indexed_loadstore, full_preds, tuple_v_scalar_const_ptr_eew32_index_ops)
640 DEF_RVV_FUNCTION (vluxseg, seg_indexed_loadstore, full_preds, tuple_v_scalar_const_ptr_eew64_index_ops)
641 DEF_RVV_FUNCTION (vloxseg, seg_indexed_loadstore, full_preds, tuple_v_scalar_const_ptr_eew8_index_ops)
642 DEF_RVV_FUNCTION (vloxseg, seg_indexed_loadstore, full_preds, tuple_v_scalar_const_ptr_eew16_index_ops)
643 DEF_RVV_FUNCTION (vloxseg, seg_indexed_loadstore, full_preds, tuple_v_scalar_const_ptr_eew32_index_ops)
644 DEF_RVV_FUNCTION (vloxseg, seg_indexed_loadstore, full_preds, tuple_v_scalar_const_ptr_eew64_index_ops)
645 DEF_RVV_FUNCTION (vsuxseg, seg_indexed_loadstore, none_m_preds, tuple_v_scalar_ptr_eew8_index_ops)
646 DEF_RVV_FUNCTION (vsuxseg, seg_indexed_loadstore, none_m_preds, tuple_v_scalar_ptr_eew16_index_ops)
647 DEF_RVV_FUNCTION (vsuxseg, seg_indexed_loadstore, none_m_preds, tuple_v_scalar_ptr_eew32_index_ops)
648 DEF_RVV_FUNCTION (vsuxseg, seg_indexed_loadstore, none_m_preds, tuple_v_scalar_ptr_eew64_index_ops)
649 DEF_RVV_FUNCTION (vsoxseg, seg_indexed_loadstore, none_m_preds, tuple_v_scalar_ptr_eew8_index_ops)
650 DEF_RVV_FUNCTION (vsoxseg, seg_indexed_loadstore, none_m_preds, tuple_v_scalar_ptr_eew16_index_ops)
651 DEF_RVV_FUNCTION (vsoxseg, seg_indexed_loadstore, none_m_preds, tuple_v_scalar_ptr_eew32_index_ops)
652 DEF_RVV_FUNCTION (vsoxseg, seg_indexed_loadstore, none_m_preds, tuple_v_scalar_ptr_eew64_index_ops)
653 DEF_RVV_FUNCTION (vlsegff, seg_fault_load, full_preds, tuple_v_scalar_const_ptr_size_ptr_ops)
654 #undef REQUIRED_EXTENSIONS
656 /* Definiation of crypto vector intrinsic functions */
657 // ZVBB and ZVKB
658 #define REQUIRED_EXTENSIONS ZVBB_EXT
659 DEF_RVV_FUNCTION (vbrev, alu, full_preds, u_vv_ops)
660 DEF_RVV_FUNCTION (vclz, alu, none_m_preds, u_vv_ops)
661 DEF_RVV_FUNCTION (vctz, alu, none_m_preds, u_vv_ops)
662 DEF_RVV_FUNCTION (vwsll, alu, full_preds, u_wvv_ops)
663 DEF_RVV_FUNCTION (vwsll, alu, full_preds, u_shift_wvx_ops)
664 #undef REQUIRED_EXTENSIONS
666 #define REQUIRED_EXTENSIONS ZVBB_OR_ZVKB_EXT
667 DEF_RVV_FUNCTION (vandn, alu, full_preds, u_vvv_ops)
668 DEF_RVV_FUNCTION (vandn, alu, full_preds, u_vvx_ops)
669 DEF_RVV_FUNCTION (vbrev8, alu, full_preds, u_vv_ops)
670 DEF_RVV_FUNCTION (vrev8, alu, full_preds, u_vv_ops)
671 DEF_RVV_FUNCTION (vrol, alu, full_preds, u_vvv_ops)
672 DEF_RVV_FUNCTION (vror, alu, full_preds, u_vvv_ops)
673 DEF_RVV_FUNCTION (vror, alu, full_preds, u_shift_vvx_ops)
674 DEF_RVV_FUNCTION (vrol, alu, full_preds, u_shift_vvx_ops)
675 #undef REQUIRED_EXTENSIONS
676 //ZVBC
677 #define REQUIRED_EXTENSIONS ZVBC_EXT
678 DEF_RVV_FUNCTION (vclmul, alu, full_preds, u_vvv_crypto_sew64_ops)
679 DEF_RVV_FUNCTION (vclmul, alu, full_preds, u_vvx_crypto_sew64_ops)
680 DEF_RVV_FUNCTION (vclmulh, alu, full_preds, u_vvv_crypto_sew64_ops)
681 DEF_RVV_FUNCTION (vclmulh, alu, full_preds, u_vvx_crypto_sew64_ops)
682 #undef REQUIRED_EXTENSIONS
683 //ZVKG
684 #define REQUIRED_EXTENSIONS ZVKG_EXT
685 DEF_RVV_FUNCTION(vghsh, no_mask_policy, none_tu_preds, u_vvvv_crypto_sew32_ops)
686 DEF_RVV_FUNCTION(vgmul, no_mask_policy, none_tu_preds, u_vvv_crypto_sew32_ops)
687 #undef REQUIRED_EXTENSIONS
688 //ZVKNED
689 #define REQUIRED_EXTENSIONS ZVKNED_EXT
690 DEF_RVV_FUNCTION (vaesef, crypto_vv, none_tu_preds, u_vvv_crypto_sew32_ops)
691 DEF_RVV_FUNCTION (vaesef, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_ops)
692 DEF_RVV_FUNCTION (vaesef, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x2_ops)
693 DEF_RVV_FUNCTION (vaesef, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x4_ops)
694 DEF_RVV_FUNCTION (vaesef, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x8_ops)
695 DEF_RVV_FUNCTION (vaesef, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x16_ops)
696 DEF_RVV_FUNCTION (vaesem, crypto_vv, none_tu_preds, u_vvv_crypto_sew32_ops)
697 DEF_RVV_FUNCTION (vaesem, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_ops)
698 DEF_RVV_FUNCTION (vaesem, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x2_ops)
699 DEF_RVV_FUNCTION (vaesem, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x4_ops)
700 DEF_RVV_FUNCTION (vaesem, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x8_ops)
701 DEF_RVV_FUNCTION (vaesem, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x16_ops)
702 DEF_RVV_FUNCTION (vaesdf, crypto_vv, none_tu_preds, u_vvv_crypto_sew32_ops)
703 DEF_RVV_FUNCTION (vaesdf, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_ops)
704 DEF_RVV_FUNCTION (vaesdf, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x2_ops)
705 DEF_RVV_FUNCTION (vaesdf, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x4_ops)
706 DEF_RVV_FUNCTION (vaesdf, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x8_ops)
707 DEF_RVV_FUNCTION (vaesdf, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x16_ops)
708 DEF_RVV_FUNCTION (vaesdm, crypto_vv, none_tu_preds, u_vvv_crypto_sew32_ops)
709 DEF_RVV_FUNCTION (vaesdm, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_ops)
710 DEF_RVV_FUNCTION (vaesdm, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x2_ops)
711 DEF_RVV_FUNCTION (vaesdm, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x4_ops)
712 DEF_RVV_FUNCTION (vaesdm, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x8_ops)
713 DEF_RVV_FUNCTION (vaesdm, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x16_ops)
714 DEF_RVV_FUNCTION (vaesz, crypto_vv_no_op_type, none_tu_preds, u_vvs_crypto_sew32_ops)
715 DEF_RVV_FUNCTION (vaesz, crypto_vv_no_op_type, none_tu_preds, u_vvs_crypto_sew32_lmul_x2_ops)
716 DEF_RVV_FUNCTION (vaesz, crypto_vv_no_op_type, none_tu_preds, u_vvs_crypto_sew32_lmul_x4_ops)
717 DEF_RVV_FUNCTION (vaesz, crypto_vv_no_op_type, none_tu_preds, u_vvs_crypto_sew32_lmul_x8_ops)
718 DEF_RVV_FUNCTION (vaesz, crypto_vv_no_op_type, none_tu_preds, u_vvs_crypto_sew32_lmul_x16_ops)
719 DEF_RVV_FUNCTION (vaeskf1, crypto_vi, none_tu_preds, u_vv_size_crypto_sew32_ops)
720 DEF_RVV_FUNCTION (vaeskf2, crypto_vi, none_tu_preds, u_vvv_size_crypto_sew32_ops)
721 #undef REQUIRED_EXTENSIONS
722 //ZVKNHA
723 //ZVKNHA and ZVKNHB
724 #define REQUIRED_EXTENSIONS ZVKNHA_OR_ZVKNHB_EXT
725 DEF_RVV_FUNCTION (vsha2ms, no_mask_policy, none_tu_preds, u_vvvv_crypto_sew32_ops)
726 DEF_RVV_FUNCTION (vsha2ch, no_mask_policy, none_tu_preds, u_vvvv_crypto_sew32_ops)
727 DEF_RVV_FUNCTION (vsha2cl, no_mask_policy, none_tu_preds, u_vvvv_crypto_sew32_ops)
728 #undef REQUIRED_EXTENSIONS
730 #define REQUIRED_EXTENSIONS ZVKNHB_EXT
731 DEF_RVV_FUNCTION (vsha2ms, no_mask_policy, none_tu_preds, u_vvvv_crypto_sew64_ops)
732 DEF_RVV_FUNCTION (vsha2ch, no_mask_policy, none_tu_preds, u_vvvv_crypto_sew64_ops)
733 DEF_RVV_FUNCTION (vsha2cl, no_mask_policy, none_tu_preds, u_vvvv_crypto_sew64_ops)
734 #undef REQUIRED_EXTENSIONS
735 //Zvksed
736 #define REQUIRED_EXTENSIONS ZVKSED_EXT
737 DEF_RVV_FUNCTION (vsm4k, crypto_vi, none_tu_preds, u_vv_size_crypto_sew32_ops)
738 DEF_RVV_FUNCTION (vsm4r, crypto_vv, none_tu_preds, u_vvv_crypto_sew32_ops)
739 DEF_RVV_FUNCTION (vsm4r, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_ops)
740 DEF_RVV_FUNCTION (vsm4r, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x2_ops)
741 DEF_RVV_FUNCTION (vsm4r, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x4_ops)
742 DEF_RVV_FUNCTION (vsm4r, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x8_ops)
743 DEF_RVV_FUNCTION (vsm4r, crypto_vv, none_tu_preds, u_vvs_crypto_sew32_lmul_x16_ops)
744 #undef REQUIRED_EXTENSIONS
745 //Zvksh
746 #define REQUIRED_EXTENSIONS ZVKSH_EXT
747 DEF_RVV_FUNCTION (vsm3me, no_mask_policy, none_tu_preds, u_vvv_crypto_sew32_ops)
748 DEF_RVV_FUNCTION (vsm3c, crypto_vi, none_tu_preds, u_vvv_size_crypto_sew32_ops)
749 #undef REQUIRED_EXTENSIONS
751 //Zvfbfmin
752 #define REQUIRED_EXTENSIONS ZVFBFMIN_EXT
753 DEF_RVV_FUNCTION (vfncvtbf16_f, narrow_alu, full_preds, f32_to_bf16_f_w_ops)
754 DEF_RVV_FUNCTION (vfncvtbf16_f_frm, narrow_alu_frm, full_preds, f32_to_bf16_f_w_ops)
755 DEF_RVV_FUNCTION (vfwcvtbf16_f, alu, full_preds, bf16_to_f32_f_v_ops)
756 #undef REQUIRED_EXTENSIONS
758 /* Zvfbfwma */
759 #define REQUIRED_EXTENSIONS ZVFBFWMA_EXT
760 DEF_RVV_FUNCTION (vfwmaccbf16, alu, full_preds, f32_wwvv_ops)
761 DEF_RVV_FUNCTION (vfwmaccbf16, alu, full_preds, f32_wwfv_ops)
762 DEF_RVV_FUNCTION (vfwmaccbf16_frm, alu_frm, full_preds, f32_wwvv_ops)
763 DEF_RVV_FUNCTION (vfwmaccbf16_frm, alu_frm, full_preds, f32_wwfv_ops)
764 #undef REQUIRED_EXTENSIONS
765 #undef DEF_RVV_FUNCTION