1 | /* Definitions for operation tables, or "optabs". |
2 | Copyright (C) 1987-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 under |
7 | the terms of the GNU General Public License as published by the Free |
8 | Software Foundation; either version 3, or (at your option) any later |
9 | version. |
10 | |
11 | GCC is distributed in the hope that it will be useful, but WITHOUT ANY |
12 | WARRANTY; without even the implied warranty of MERCHANTABILITY or |
13 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
14 | 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 | /* The entries in optabs.def are categorized: |
21 | C: A "conversion" optab, which uses two modes; has libcall data. |
22 | N: A "normal" optab, which uses one mode; has libcall data. |
23 | D: A "direct" optab, which uses one mode; does not have libcall data. |
24 | V: An "oVerflow" optab. Like N, but does not record its code in |
25 | code_to_optab. |
26 | |
27 | CX, NX, VX: An extra pattern entry for a conversion or normal optab. |
28 | |
29 | These patterns may be present in the MD file with names that contain |
30 | the mode(s) used and the name of the operation. This array contains |
31 | a list of optabs that need to be initialized. Within each name, |
32 | $a and $b are used to match a short mode name (the part of the mode |
33 | name not including `mode' and converted to lower-case). |
34 | |
35 | $I means that only full integer modes should be considered for the |
36 | next mode, and $F means that only float modes should be considered. |
37 | $P means that both full and partial integer modes should be considered. |
38 | $Q means that only fixed-point modes should be considered. |
39 | |
40 | The pattern may be NULL if the optab exists only for the libcalls |
41 | that we plan to attach to it, and there are no named patterns in |
42 | the md files. */ |
43 | |
44 | /* The extension libcalls are used for float extension. */ |
45 | OPTAB_CL(sext_optab, "extend$b$a2" , SIGN_EXTEND, "extend" , gen_extend_conv_libfunc) |
46 | OPTAB_CL(trunc_optab, "trunc$b$a2" , TRUNCATE, "trunc" , gen_trunc_conv_libfunc) |
47 | OPTAB_CL(zext_optab, "zero_extend$b$a2" , ZERO_EXTEND, NULL, NULL) |
48 | |
49 | OPTAB_CL(sfix_optab, "fix$F$b$I$a2" , FIX, "fix" , gen_fp_to_int_conv_libfunc) |
50 | OPTAB_CL(ufix_optab, "fixuns$F$b$a2" , UNSIGNED_FIX, "fixuns" , gen_fp_to_int_conv_libfunc) |
51 | OPTAB_CL(sfloat_optab, "float$I$b$F$a2" , FLOAT, "float" , gen_int_to_fp_conv_libfunc) |
52 | OPTAB_CL(ufloat_optab, "floatuns$I$b$F$a2" , UNSIGNED_FLOAT, NULL, gen_ufloat_conv_libfunc) |
53 | |
54 | OPTAB_CL(lrint_optab, "lrint$F$b$I$a2" , UNKNOWN, "lrint" , gen_int_to_fp_nondecimal_conv_libfunc) |
55 | OPTAB_CL(lround_optab, "lround$F$b$I$a2" , UNKNOWN, "lround" , gen_int_to_fp_nondecimal_conv_libfunc) |
56 | OPTAB_CL(lfloor_optab, "lfloor$F$b$I$a2" , UNKNOWN, "lfloor" , gen_int_to_fp_nondecimal_conv_libfunc) |
57 | OPTAB_CL(lceil_optab, "lceil$F$b$I$a2" , UNKNOWN, "lceil" , gen_int_to_fp_nondecimal_conv_libfunc) |
58 | |
59 | /* Conversions for fixed-point modes and other modes. */ |
60 | OPTAB_CL(fract_optab, "fract$b$a2" , FRACT_CONVERT, "fract" , gen_fract_conv_libfunc) |
61 | OPTAB_CL(fractuns_optab, "fractuns$I$b$Q$a2" , UNSIGNED_FRACT_CONVERT, "fractuns" , gen_fractuns_conv_libfunc) |
62 | OPTAB_CX(fractuns_optab, "fractuns$Q$b$I$a2" ) |
63 | OPTAB_CL(satfract_optab, "satfract$b$Q$a2" , SAT_FRACT, "satfract" , gen_satfract_conv_libfunc) |
64 | OPTAB_CL(satfractuns_optab, "satfractuns$I$b$Q$a2" , UNSIGNED_SAT_FRACT, "satfractuns" , gen_satfractuns_conv_libfunc) |
65 | |
66 | OPTAB_CD(sfixtrunc_optab, "fix_trunc$F$b$I$a2" ) |
67 | OPTAB_CD(ufixtrunc_optab, "fixuns_trunc$F$b$I$a2" ) |
68 | |
69 | /* Misc optabs that use two modes; model them as "conversions". */ |
70 | OPTAB_CD(smul_widen_optab, "mul$b$a3" ) |
71 | OPTAB_CD(umul_widen_optab, "umul$b$a3" ) |
72 | OPTAB_CD(usmul_widen_optab, "usmul$b$a3" ) |
73 | OPTAB_CD(smadd_widen_optab, "madd$b$a4" ) |
74 | OPTAB_CD(umadd_widen_optab, "umadd$b$a4" ) |
75 | OPTAB_CD(ssmadd_widen_optab, "ssmadd$b$a4" ) |
76 | OPTAB_CD(usmadd_widen_optab, "usmadd$b$a4" ) |
77 | OPTAB_CD(smsub_widen_optab, "msub$b$a4" ) |
78 | OPTAB_CD(umsub_widen_optab, "umsub$b$a4" ) |
79 | OPTAB_CD(ssmsub_widen_optab, "ssmsub$b$a4" ) |
80 | OPTAB_CD(usmsub_widen_optab, "usmsub$a$b4" ) |
81 | OPTAB_CD(vec_load_lanes_optab, "vec_load_lanes$a$b" ) |
82 | OPTAB_CD(vec_store_lanes_optab, "vec_store_lanes$a$b" ) |
83 | OPTAB_CD(vec_mask_load_lanes_optab, "vec_mask_load_lanes$a$b" ) |
84 | OPTAB_CD(vec_mask_store_lanes_optab, "vec_mask_store_lanes$a$b" ) |
85 | OPTAB_CD(vec_mask_len_load_lanes_optab, "vec_mask_len_load_lanes$a$b" ) |
86 | OPTAB_CD(vec_mask_len_store_lanes_optab, "vec_mask_len_store_lanes$a$b" ) |
87 | OPTAB_CD(vcond_optab, "vcond$a$b" ) |
88 | OPTAB_CD(vcondu_optab, "vcondu$a$b" ) |
89 | OPTAB_CD(vcondeq_optab, "vcondeq$a$b" ) |
90 | OPTAB_CD(vcond_mask_optab, "vcond_mask_$a$b" ) |
91 | OPTAB_CD(vec_cmp_optab, "vec_cmp$a$b" ) |
92 | OPTAB_CD(vec_cmpu_optab, "vec_cmpu$a$b" ) |
93 | OPTAB_CD(vec_cmpeq_optab, "vec_cmpeq$a$b" ) |
94 | OPTAB_CD(maskload_optab, "maskload$a$b" ) |
95 | OPTAB_CD(maskstore_optab, "maskstore$a$b" ) |
96 | OPTAB_CD(mask_len_load_optab, "mask_len_load$a$b" ) |
97 | OPTAB_CD(mask_len_store_optab, "mask_len_store$a$b" ) |
98 | OPTAB_CD(gather_load_optab, "gather_load$a$b" ) |
99 | OPTAB_CD(mask_gather_load_optab, "mask_gather_load$a$b" ) |
100 | OPTAB_CD(mask_len_gather_load_optab, "mask_len_gather_load$a$b" ) |
101 | OPTAB_CD(scatter_store_optab, "scatter_store$a$b" ) |
102 | OPTAB_CD(mask_scatter_store_optab, "mask_scatter_store$a$b" ) |
103 | OPTAB_CD(mask_len_scatter_store_optab, "mask_len_scatter_store$a$b" ) |
104 | OPTAB_CD(, "vec_extract$a$b" ) |
105 | OPTAB_CD(vec_init_optab, "vec_init$a$b" ) |
106 | |
107 | OPTAB_CD (while_ult_optab, "while_ult$a$b" ) |
108 | |
109 | OPTAB_NL(add_optab, "add$P$a3" , PLUS, "add" , '3', gen_int_fp_fixed_libfunc) |
110 | OPTAB_NX(add_optab, "add$F$a3" ) |
111 | OPTAB_NX(add_optab, "add$Q$a3" ) |
112 | OPTAB_VL(addv_optab, "addv$I$a3" , PLUS, "add" , '3', gen_intv_fp_libfunc) |
113 | OPTAB_VX(addv_optab, "add$F$a3" ) |
114 | OPTAB_NL(ssadd_optab, "ssadd$Q$a3" , SS_PLUS, "ssadd" , '3', gen_signed_fixed_libfunc) |
115 | OPTAB_NL(usadd_optab, "usadd$Q$a3" , US_PLUS, "usadd" , '3', gen_unsigned_fixed_libfunc) |
116 | OPTAB_NL(sub_optab, "sub$P$a3" , MINUS, "sub" , '3', gen_int_fp_fixed_libfunc) |
117 | OPTAB_NX(sub_optab, "sub$F$a3" ) |
118 | OPTAB_NX(sub_optab, "sub$Q$a3" ) |
119 | OPTAB_VL(subv_optab, "subv$I$a3" , MINUS, "sub" , '3', gen_intv_fp_libfunc) |
120 | OPTAB_VX(subv_optab, "sub$F$a3" ) |
121 | OPTAB_NL(sssub_optab, "sssub$Q$a3" , SS_MINUS, "sssub" , '3', gen_signed_fixed_libfunc) |
122 | OPTAB_NL(ussub_optab, "ussub$Q$a3" , US_MINUS, "ussub" , '3', gen_unsigned_fixed_libfunc) |
123 | OPTAB_NL(smul_optab, "mul$Q$a3" , MULT, "mul" , '3', gen_int_fp_fixed_libfunc) |
124 | OPTAB_NX(smul_optab, "mul$P$a3" ) |
125 | OPTAB_NX(smul_optab, "mul$F$a3" ) |
126 | OPTAB_VL(smulv_optab, "mulv$I$a3" , MULT, "mul" , '3', gen_intv_fp_libfunc) |
127 | OPTAB_VX(smulv_optab, "mul$F$a3" ) |
128 | OPTAB_NL(ssmul_optab, "ssmul$Q$a3" , SS_MULT, "ssmul" , '3', gen_signed_fixed_libfunc) |
129 | OPTAB_NL(usmul_optab, "usmul$Q$a3" , US_MULT, "usmul" , '3', gen_unsigned_fixed_libfunc) |
130 | OPTAB_NL(sdiv_optab, "div$a3" , DIV, "div" , '3', gen_int_fp_signed_fixed_libfunc) |
131 | OPTAB_VL(sdivv_optab, "divv$I$a3" , DIV, "divv" , '3', gen_int_libfunc) |
132 | OPTAB_VX(sdivv_optab, "div$F$a3" ) |
133 | OPTAB_NL(ssdiv_optab, "ssdiv$Q$a3" , SS_DIV, "ssdiv" , '3', gen_signed_fixed_libfunc) |
134 | OPTAB_NL(udiv_optab, "udiv$I$a3" , UDIV, "udiv" , '3', gen_int_unsigned_fixed_libfunc) |
135 | OPTAB_NX(udiv_optab, "udiv$Q$a3" ) |
136 | OPTAB_NL(usdiv_optab, "usdiv$Q$a3" , US_DIV, "usdiv" , '3', gen_unsigned_fixed_libfunc) |
137 | OPTAB_NC(sdivmod_optab, "divmod$a4" , UNKNOWN) |
138 | OPTAB_NC(udivmod_optab, "udivmod$a4" , UNKNOWN) |
139 | OPTAB_NL(smod_optab, "mod$a3" , MOD, "mod" , '3', gen_int_libfunc) |
140 | OPTAB_NL(umod_optab, "umod$a3" , UMOD, "umod" , '3', gen_int_libfunc) |
141 | OPTAB_NL(ftrunc_optab, "ftrunc$F$a2" , UNKNOWN, "ftrunc" , '2', gen_fp_libfunc) |
142 | OPTAB_NL(and_optab, "and$a3" , AND, "and" , '3', gen_int_libfunc) |
143 | OPTAB_NL(ior_optab, "ior$a3" , IOR, "ior" , '3', gen_int_libfunc) |
144 | OPTAB_NL(xor_optab, "xor$a3" , XOR, "xor" , '3', gen_int_libfunc) |
145 | OPTAB_NL(ashl_optab, "ashl$a3" , ASHIFT, "ashl" , '3', gen_int_fixed_libfunc) |
146 | OPTAB_NL(ssashl_optab, "ssashl$Q$a3" , SS_ASHIFT, "ssashl" , '3', gen_signed_fixed_libfunc) |
147 | OPTAB_NL(usashl_optab, "usashl$Q$a3" , US_ASHIFT, "usashl" , '3', gen_unsigned_fixed_libfunc) |
148 | OPTAB_NL(ashr_optab, "ashr$a3" , ASHIFTRT, "ashr" , '3', gen_int_signed_fixed_libfunc) |
149 | OPTAB_NL(lshr_optab, "lshr$a3" , LSHIFTRT, "lshr" , '3', gen_int_unsigned_fixed_libfunc) |
150 | OPTAB_NC(rotl_optab, "rotl$a3" , ROTATE) |
151 | OPTAB_NC(rotr_optab, "rotr$a3" , ROTATERT) |
152 | OPTAB_VC(vashl_optab, "vashl$a3" , ASHIFT) |
153 | OPTAB_VC(vashr_optab, "vashr$a3" , ASHIFTRT) |
154 | OPTAB_VC(vlshr_optab, "vlshr$a3" , LSHIFTRT) |
155 | OPTAB_VC(vrotl_optab, "vrotl$a3" , ROTATE) |
156 | OPTAB_VC(vrotr_optab, "vrotr$a3" , ROTATERT) |
157 | OPTAB_NL(smin_optab, "smin$a3" , SMIN, "min" , '3', gen_int_fp_libfunc) |
158 | OPTAB_NL(smax_optab, "smax$a3" , SMAX, "max" , '3', gen_int_fp_libfunc) |
159 | OPTAB_NL(umin_optab, "umin$I$a3" , UMIN, "umin" , '3', gen_int_libfunc) |
160 | OPTAB_NL(umax_optab, "umax$I$a3" , UMAX, "umax" , '3', gen_int_libfunc) |
161 | |
162 | OPTAB_NL(neg_optab, "neg$P$a2" , NEG, "neg" , '2', gen_int_fp_fixed_libfunc) |
163 | OPTAB_NX(neg_optab, "neg$F$a2" ) |
164 | OPTAB_NX(neg_optab, "neg$Q$a2" ) |
165 | OPTAB_VL(negv_optab, "negv$I$a2" , NEG, "neg" , '2', gen_intv_fp_libfunc) |
166 | OPTAB_VX(negv_optab, "neg$F$a2" ) |
167 | OPTAB_NL(ssneg_optab, "ssneg$Q$a2" , SS_NEG, "ssneg" , '2', gen_signed_fixed_libfunc) |
168 | OPTAB_NL(usneg_optab, "usneg$Q$a2" , US_NEG, "usneg" , '2', gen_unsigned_fixed_libfunc) |
169 | OPTAB_NC(abs_optab, "abs$P$a2" , ABS) |
170 | OPTAB_NX(abs_optab, "abs$F$a2" ) |
171 | OPTAB_VC(absv_optab, "absv$I$a2" , ABS) |
172 | OPTAB_VX(absv_optab, "abs$F$a2" ) |
173 | OPTAB_NL(one_cmpl_optab, "one_cmpl$a2" , NOT, "one_cmpl" , '2', gen_int_libfunc) |
174 | OPTAB_NC(bswap_optab, "bswap$a2" , BSWAP) |
175 | OPTAB_NL(ffs_optab, "ffs$a2" , FFS, "ffs" , '2', gen_int_libfunc) |
176 | OPTAB_NL(clz_optab, "clz$a2" , CLZ, "clz" , '2', gen_int_libfunc) |
177 | OPTAB_NL(ctz_optab, "ctz$a2" , CTZ, "ctz" , '2', gen_int_libfunc) |
178 | OPTAB_NL(clrsb_optab, "clrsb$a2" , CLRSB, "clrsb" , '2', gen_int_libfunc) |
179 | OPTAB_NL(popcount_optab, "popcount$a2" , POPCOUNT, "popcount" , '2', gen_int_libfunc) |
180 | OPTAB_NL(parity_optab, "parity$a2" , PARITY, "parity" , '2', gen_int_libfunc) |
181 | |
182 | /* Comparison libcalls for integers MUST come in pairs, signed/unsigned. */ |
183 | OPTAB_NL(cmp_optab, NULL, UNKNOWN, "cmp" , '2', gen_int_fp_fixed_libfunc) |
184 | OPTAB_NL(ucmp_optab, NULL, UNKNOWN, "ucmp" , '2', gen_int_libfunc) |
185 | |
186 | /* EQ etc are floating point comparisons. */ |
187 | OPTAB_NL(eq_optab, NULL, EQ, "eq" , '2', gen_fp_libfunc) |
188 | OPTAB_NL(ne_optab, NULL, NE, "ne" , '2', gen_fp_libfunc) |
189 | OPTAB_NL(gt_optab, NULL, GT, "gt" , '2', gen_fp_libfunc) |
190 | OPTAB_NL(ge_optab, NULL, GE, "ge" , '2', gen_fp_libfunc) |
191 | OPTAB_NL(lt_optab, NULL, LT, "lt" , '2', gen_fp_libfunc) |
192 | OPTAB_NL(le_optab, NULL, LE, "le" , '2', gen_fp_libfunc) |
193 | OPTAB_NL(unord_optab, NULL, UNORDERED, "unord" , '2', gen_fp_libfunc) |
194 | |
195 | OPTAB_NL(powi_optab, NULL, UNKNOWN, "powi" , '2', gen_fp_libfunc) |
196 | |
197 | /* These are all initialized individually, on a per-host basis. */ |
198 | OPTAB_NC(sqrt_optab, "sqrt$a2" , SQRT) |
199 | OPTAB_NC(sync_old_add_optab, "sync_old_add$I$a" , UNKNOWN) |
200 | OPTAB_NC(sync_old_sub_optab, "sync_old_sub$I$a" , UNKNOWN) |
201 | OPTAB_NC(sync_old_ior_optab, "sync_old_ior$I$a" , UNKNOWN) |
202 | OPTAB_NC(sync_old_and_optab, "sync_old_and$I$a" , UNKNOWN) |
203 | OPTAB_NC(sync_old_xor_optab, "sync_old_xor$I$a" , UNKNOWN) |
204 | OPTAB_NC(sync_old_nand_optab, "sync_old_nand$I$a" , UNKNOWN) |
205 | OPTAB_NC(sync_new_add_optab, "sync_new_add$I$a" , UNKNOWN) |
206 | OPTAB_NC(sync_new_sub_optab, "sync_new_sub$I$a" , UNKNOWN) |
207 | OPTAB_NC(sync_new_ior_optab, "sync_new_ior$I$a" , UNKNOWN) |
208 | OPTAB_NC(sync_new_and_optab, "sync_new_and$I$a" , UNKNOWN) |
209 | OPTAB_NC(sync_new_xor_optab, "sync_new_xor$I$a" , UNKNOWN) |
210 | OPTAB_NC(sync_new_nand_optab, "sync_new_nand$I$a" , UNKNOWN) |
211 | OPTAB_NC(sync_compare_and_swap_optab, "sync_compare_and_swap$I$a" , UNKNOWN) |
212 | OPTAB_NC(sync_lock_test_and_set_optab, "sync_lock_test_and_set$I$a" , UNKNOWN) |
213 | |
214 | OPTAB_DC(mov_optab, "mov$a" , SET) |
215 | OPTAB_DC(movstrict_optab, "movstrict$a" , STRICT_LOW_PART) |
216 | OPTAB_D (movmisalign_optab, "movmisalign$a" ) |
217 | OPTAB_D (storent_optab, "storent$a" ) |
218 | OPTAB_D (insv_optab, "insv$a" ) |
219 | OPTAB_D (extv_optab, "extv$a" ) |
220 | OPTAB_D (extzv_optab, "extzv$a" ) |
221 | OPTAB_D (insvmisalign_optab, "insvmisalign$a" ) |
222 | OPTAB_D (extvmisalign_optab, "extvmisalign$a" ) |
223 | OPTAB_D (extzvmisalign_optab, "extzvmisalign$a" ) |
224 | OPTAB_D (push_optab, "push$a1" ) |
225 | OPTAB_D (reload_in_optab, "reload_in$a" ) |
226 | OPTAB_D (reload_out_optab, "reload_out$a" ) |
227 | |
228 | OPTAB_DC(cbranch_optab, "cbranch$a4" , COMPARE) |
229 | OPTAB_D (tbranch_eq_optab, "tbranch_eq$a3" ) |
230 | OPTAB_D (tbranch_ne_optab, "tbranch_ne$a3" ) |
231 | OPTAB_D (addcc_optab, "add$acc" ) |
232 | OPTAB_D (negcc_optab, "neg$acc" ) |
233 | OPTAB_D (notcc_optab, "not$acc" ) |
234 | OPTAB_D (movcc_optab, "mov$acc" ) |
235 | OPTAB_D (cond_add_optab, "cond_add$a" ) |
236 | OPTAB_D (cond_sub_optab, "cond_sub$a" ) |
237 | OPTAB_D (cond_smul_optab, "cond_mul$a" ) |
238 | OPTAB_D (cond_sdiv_optab, "cond_div$a" ) |
239 | OPTAB_D (cond_smod_optab, "cond_mod$a" ) |
240 | OPTAB_D (cond_udiv_optab, "cond_udiv$a" ) |
241 | OPTAB_D (cond_umod_optab, "cond_umod$a" ) |
242 | OPTAB_D (cond_and_optab, "cond_and$a" ) |
243 | OPTAB_D (cond_ior_optab, "cond_ior$a" ) |
244 | OPTAB_D (cond_xor_optab, "cond_xor$a" ) |
245 | OPTAB_D (cond_ashl_optab, "cond_ashl$a" ) |
246 | OPTAB_D (cond_ashr_optab, "cond_ashr$a" ) |
247 | OPTAB_D (cond_lshr_optab, "cond_lshr$a" ) |
248 | OPTAB_D (cond_smin_optab, "cond_smin$a" ) |
249 | OPTAB_D (cond_smax_optab, "cond_smax$a" ) |
250 | OPTAB_D (cond_umin_optab, "cond_umin$a" ) |
251 | OPTAB_D (cond_umax_optab, "cond_umax$a" ) |
252 | OPTAB_D (cond_fmin_optab, "cond_fmin$a" ) |
253 | OPTAB_D (cond_fmax_optab, "cond_fmax$a" ) |
254 | OPTAB_D (cond_fma_optab, "cond_fma$a" ) |
255 | OPTAB_D (cond_fms_optab, "cond_fms$a" ) |
256 | OPTAB_D (cond_fnma_optab, "cond_fnma$a" ) |
257 | OPTAB_D (cond_fnms_optab, "cond_fnms$a" ) |
258 | OPTAB_D (cond_neg_optab, "cond_neg$a" ) |
259 | OPTAB_D (cond_copysign_optab, "cond_copysign$F$a" ) |
260 | OPTAB_D (cond_one_cmpl_optab, "cond_one_cmpl$a" ) |
261 | OPTAB_D (cond_len_add_optab, "cond_len_add$a" ) |
262 | OPTAB_D (cond_len_sub_optab, "cond_len_sub$a" ) |
263 | OPTAB_D (cond_len_smul_optab, "cond_len_mul$a" ) |
264 | OPTAB_D (cond_len_sdiv_optab, "cond_len_div$a" ) |
265 | OPTAB_D (cond_len_smod_optab, "cond_len_mod$a" ) |
266 | OPTAB_D (cond_len_udiv_optab, "cond_len_udiv$a" ) |
267 | OPTAB_D (cond_len_umod_optab, "cond_len_umod$a" ) |
268 | OPTAB_D (cond_len_and_optab, "cond_len_and$a" ) |
269 | OPTAB_D (cond_len_ior_optab, "cond_len_ior$a" ) |
270 | OPTAB_D (cond_len_xor_optab, "cond_len_xor$a" ) |
271 | OPTAB_D (cond_len_ashl_optab, "cond_len_ashl$a" ) |
272 | OPTAB_D (cond_len_ashr_optab, "cond_len_ashr$a" ) |
273 | OPTAB_D (cond_len_lshr_optab, "cond_len_lshr$a" ) |
274 | OPTAB_D (cond_len_smin_optab, "cond_len_smin$a" ) |
275 | OPTAB_D (cond_len_smax_optab, "cond_len_smax$a" ) |
276 | OPTAB_D (cond_len_umin_optab, "cond_len_umin$a" ) |
277 | OPTAB_D (cond_len_umax_optab, "cond_len_umax$a" ) |
278 | OPTAB_D (cond_len_fmin_optab, "cond_len_fmin$a" ) |
279 | OPTAB_D (cond_len_fmax_optab, "cond_len_fmax$a" ) |
280 | OPTAB_D (cond_len_fma_optab, "cond_len_fma$a" ) |
281 | OPTAB_D (cond_len_fms_optab, "cond_len_fms$a" ) |
282 | OPTAB_D (cond_len_fnma_optab, "cond_len_fnma$a" ) |
283 | OPTAB_D (cond_len_fnms_optab, "cond_len_fnms$a" ) |
284 | OPTAB_D (cond_len_neg_optab, "cond_len_neg$a" ) |
285 | OPTAB_D (cond_len_copysign_optab, "cond_len_copysign$F$a" ) |
286 | OPTAB_D (cond_len_one_cmpl_optab, "cond_len_one_cmpl$a" ) |
287 | OPTAB_D (vcond_mask_len_optab, "vcond_mask_len_$a" ) |
288 | OPTAB_D (cmov_optab, "cmov$a6" ) |
289 | OPTAB_D (cstore_optab, "cstore$a4" ) |
290 | OPTAB_D (ctrap_optab, "ctrap$a4" ) |
291 | OPTAB_D (addv4_optab, "addv$I$a4" ) |
292 | OPTAB_D (subv4_optab, "subv$I$a4" ) |
293 | OPTAB_D (mulv4_optab, "mulv$I$a4" ) |
294 | OPTAB_D (uaddv4_optab, "uaddv$I$a4" ) |
295 | OPTAB_D (usubv4_optab, "usubv$I$a4" ) |
296 | OPTAB_D (umulv4_optab, "umulv$I$a4" ) |
297 | OPTAB_D (negv3_optab, "negv$I$a3" ) |
298 | OPTAB_D (uaddc5_optab, "uaddc$I$a5" ) |
299 | OPTAB_D (usubc5_optab, "usubc$I$a5" ) |
300 | OPTAB_D (addptr3_optab, "addptr$a3" ) |
301 | OPTAB_D (spaceship_optab, "spaceship$a3" ) |
302 | |
303 | OPTAB_D (smul_highpart_optab, "smul$a3_highpart" ) |
304 | OPTAB_D (umul_highpart_optab, "umul$a3_highpart" ) |
305 | |
306 | OPTAB_D (cmpmem_optab, "cmpmem$a" ) |
307 | OPTAB_D (cmpstr_optab, "cmpstr$a" ) |
308 | OPTAB_D (cmpstrn_optab, "cmpstrn$a" ) |
309 | OPTAB_D (cpymem_optab, "cpymem$a" ) |
310 | OPTAB_D (movmem_optab, "movmem$a" ) |
311 | OPTAB_D (setmem_optab, "setmem$a" ) |
312 | OPTAB_D (strlen_optab, "strlen$a" ) |
313 | OPTAB_D (rawmemchr_optab, "rawmemchr$a" ) |
314 | |
315 | OPTAB_DC(fma_optab, "fma$a4" , FMA) |
316 | OPTAB_D (fms_optab, "fms$a4" ) |
317 | OPTAB_D (fnma_optab, "fnma$a4" ) |
318 | OPTAB_D (fnms_optab, "fnms$a4" ) |
319 | |
320 | OPTAB_D (rint_optab, "rint$a2" ) |
321 | OPTAB_D (round_optab, "round$a2" ) |
322 | OPTAB_D (roundeven_optab, "roundeven$a2" ) |
323 | OPTAB_D (floor_optab, "floor$a2" ) |
324 | OPTAB_D (ceil_optab, "ceil$a2" ) |
325 | OPTAB_D (btrunc_optab, "btrunc$a2" ) |
326 | OPTAB_D (nearbyint_optab, "nearbyint$a2" ) |
327 | |
328 | OPTAB_D (acos_optab, "acos$a2" ) |
329 | OPTAB_D (acosh_optab, "acosh$a2" ) |
330 | OPTAB_D (asin_optab, "asin$a2" ) |
331 | OPTAB_D (asinh_optab, "asinh$a2" ) |
332 | OPTAB_D (atan2_optab, "atan2$a3" ) |
333 | OPTAB_D (atan_optab, "atan$a2" ) |
334 | OPTAB_D (atanh_optab, "atanh$a2" ) |
335 | OPTAB_D (copysign_optab, "copysign$F$a3" ) |
336 | OPTAB_D (xorsign_optab, "xorsign$F$a3" ) |
337 | OPTAB_D (cadd90_optab, "cadd90$a3" ) |
338 | OPTAB_D (cadd270_optab, "cadd270$a3" ) |
339 | OPTAB_D (cmul_optab, "cmul$a3" ) |
340 | OPTAB_D (cmul_conj_optab, "cmul_conj$a3" ) |
341 | OPTAB_D (cmla_optab, "cmla$a4" ) |
342 | OPTAB_D (cmla_conj_optab, "cmla_conj$a4" ) |
343 | OPTAB_D (cmls_optab, "cmls$a4" ) |
344 | OPTAB_D (cmls_conj_optab, "cmls_conj$a4" ) |
345 | OPTAB_D (cos_optab, "cos$a2" ) |
346 | OPTAB_D (cosh_optab, "cosh$a2" ) |
347 | OPTAB_D (exp10_optab, "exp10$a2" ) |
348 | OPTAB_D (exp2_optab, "exp2$a2" ) |
349 | OPTAB_D (exp_optab, "exp$a2" ) |
350 | OPTAB_D (expm1_optab, "expm1$a2" ) |
351 | OPTAB_D (fmod_optab, "fmod$a3" ) |
352 | OPTAB_D (hypot_optab, "hypot$a3" ) |
353 | OPTAB_D (ilogb_optab, "ilogb$a2" ) |
354 | OPTAB_D (isinf_optab, "isinf$a2" ) |
355 | OPTAB_D (issignaling_optab, "issignaling$a2" ) |
356 | OPTAB_D (ldexp_optab, "ldexp$a3" ) |
357 | OPTAB_D (log10_optab, "log10$a2" ) |
358 | OPTAB_D (log1p_optab, "log1p$a2" ) |
359 | OPTAB_D (log2_optab, "log2$a2" ) |
360 | OPTAB_D (log_optab, "log$a2" ) |
361 | OPTAB_D (logb_optab, "logb$a2" ) |
362 | OPTAB_D (pow_optab, "pow$a3" ) |
363 | OPTAB_D (remainder_optab, "remainder$a3" ) |
364 | OPTAB_D (rsqrt_optab, "rsqrt$a2" ) |
365 | OPTAB_D (scalb_optab, "scalb$a3" ) |
366 | OPTAB_D (signbit_optab, "signbit$F$a2" ) |
367 | OPTAB_D (significand_optab, "significand$a2" ) |
368 | OPTAB_D (sin_optab, "sin$a2" ) |
369 | OPTAB_D (sincos_optab, "sincos$a3" ) |
370 | OPTAB_D (sinh_optab, "sinh$a2" ) |
371 | OPTAB_D (tan_optab, "tan$a2" ) |
372 | OPTAB_D (tanh_optab, "tanh$a2" ) |
373 | |
374 | OPTAB_D (fegetround_optab, "fegetround$a" ) |
375 | OPTAB_D (feclearexcept_optab, "feclearexcept$a" ) |
376 | OPTAB_D (feraiseexcept_optab, "feraiseexcept$a" ) |
377 | |
378 | /* C99 implementations of fmax/fmin. */ |
379 | OPTAB_D (fmax_optab, "fmax$a3" ) |
380 | OPTAB_D (fmin_optab, "fmin$a3" ) |
381 | |
382 | /* Vector reduction to a scalar. */ |
383 | OPTAB_D (reduc_fmax_scal_optab, "reduc_fmax_scal_$a" ) |
384 | OPTAB_D (reduc_fmin_scal_optab, "reduc_fmin_scal_$a" ) |
385 | OPTAB_D (reduc_smax_scal_optab, "reduc_smax_scal_$a" ) |
386 | OPTAB_D (reduc_smin_scal_optab, "reduc_smin_scal_$a" ) |
387 | OPTAB_D (reduc_plus_scal_optab, "reduc_plus_scal_$a" ) |
388 | OPTAB_D (reduc_umax_scal_optab, "reduc_umax_scal_$a" ) |
389 | OPTAB_D (reduc_umin_scal_optab, "reduc_umin_scal_$a" ) |
390 | OPTAB_D (reduc_and_scal_optab, "reduc_and_scal_$a" ) |
391 | OPTAB_D (reduc_ior_scal_optab, "reduc_ior_scal_$a" ) |
392 | OPTAB_D (reduc_xor_scal_optab, "reduc_xor_scal_$a" ) |
393 | OPTAB_D (fold_left_plus_optab, "fold_left_plus_$a" ) |
394 | OPTAB_D (mask_fold_left_plus_optab, "mask_fold_left_plus_$a" ) |
395 | OPTAB_D (mask_len_fold_left_plus_optab, "mask_len_fold_left_plus_$a" ) |
396 | |
397 | OPTAB_D (, "extract_last_$a" ) |
398 | OPTAB_D (, "fold_extract_last_$a" ) |
399 | OPTAB_D (, "len_fold_extract_last_$a" ) |
400 | |
401 | OPTAB_D (uabd_optab, "uabd$a3" ) |
402 | OPTAB_D (sabd_optab, "sabd$a3" ) |
403 | OPTAB_D (savg_floor_optab, "avg$a3_floor" ) |
404 | OPTAB_D (uavg_floor_optab, "uavg$a3_floor" ) |
405 | OPTAB_D (savg_ceil_optab, "avg$a3_ceil" ) |
406 | OPTAB_D (uavg_ceil_optab, "uavg$a3_ceil" ) |
407 | OPTAB_D (sdot_prod_optab, "sdot_prod$I$a" ) |
408 | OPTAB_D (ssum_widen_optab, "widen_ssum$I$a3" ) |
409 | OPTAB_D (udot_prod_optab, "udot_prod$I$a" ) |
410 | OPTAB_D (usdot_prod_optab, "usdot_prod$I$a" ) |
411 | OPTAB_D (usum_widen_optab, "widen_usum$I$a3" ) |
412 | OPTAB_D (usad_optab, "usad$I$a" ) |
413 | OPTAB_D (ssad_optab, "ssad$I$a" ) |
414 | OPTAB_D (smulhs_optab, "smulhs$a3" ) |
415 | OPTAB_D (smulhrs_optab, "smulhrs$a3" ) |
416 | OPTAB_D (umulhs_optab, "umulhs$a3" ) |
417 | OPTAB_D (umulhrs_optab, "umulhrs$a3" ) |
418 | OPTAB_D (sdiv_pow2_optab, "sdiv_pow2$a3" ) |
419 | OPTAB_D (vec_pack_sfix_trunc_optab, "vec_pack_sfix_trunc_$a" ) |
420 | OPTAB_D (vec_pack_ssat_optab, "vec_pack_ssat_$a" ) |
421 | OPTAB_D (vec_pack_trunc_optab, "vec_pack_trunc_$a" ) |
422 | OPTAB_D (vec_pack_ufix_trunc_optab, "vec_pack_ufix_trunc_$a" ) |
423 | OPTAB_D (vec_pack_sbool_trunc_optab, "vec_pack_sbool_trunc_$a" ) |
424 | OPTAB_D (vec_pack_usat_optab, "vec_pack_usat_$a" ) |
425 | OPTAB_D (vec_packs_float_optab, "vec_packs_float_$a" ) |
426 | OPTAB_D (vec_packu_float_optab, "vec_packu_float_$a" ) |
427 | OPTAB_D (vec_perm_optab, "vec_perm$a" ) |
428 | OPTAB_D (vec_realign_load_optab, "vec_realign_load_$a" ) |
429 | OPTAB_D (vec_set_optab, "vec_set$a" ) |
430 | OPTAB_D (vec_shl_optab, "vec_shl_$a" ) |
431 | OPTAB_D (vec_shr_optab, "vec_shr_$a" ) |
432 | OPTAB_D (vec_unpack_sfix_trunc_hi_optab, "vec_unpack_sfix_trunc_hi_$a" ) |
433 | OPTAB_D (vec_unpack_sfix_trunc_lo_optab, "vec_unpack_sfix_trunc_lo_$a" ) |
434 | OPTAB_D (vec_unpack_ufix_trunc_hi_optab, "vec_unpack_ufix_trunc_hi_$a" ) |
435 | OPTAB_D (vec_unpack_ufix_trunc_lo_optab, "vec_unpack_ufix_trunc_lo_$a" ) |
436 | OPTAB_D (vec_unpacks_float_hi_optab, "vec_unpacks_float_hi_$a" ) |
437 | OPTAB_D (vec_unpacks_float_lo_optab, "vec_unpacks_float_lo_$a" ) |
438 | OPTAB_D (vec_unpacks_hi_optab, "vec_unpacks_hi_$a" ) |
439 | OPTAB_D (vec_unpacks_lo_optab, "vec_unpacks_lo_$a" ) |
440 | OPTAB_D (vec_unpacks_sbool_hi_optab, "vec_unpacks_sbool_hi_$a" ) |
441 | OPTAB_D (vec_unpacks_sbool_lo_optab, "vec_unpacks_sbool_lo_$a" ) |
442 | OPTAB_D (vec_unpacku_float_hi_optab, "vec_unpacku_float_hi_$a" ) |
443 | OPTAB_D (vec_unpacku_float_lo_optab, "vec_unpacku_float_lo_$a" ) |
444 | OPTAB_D (vec_unpacku_hi_optab, "vec_unpacku_hi_$a" ) |
445 | OPTAB_D (vec_unpacku_lo_optab, "vec_unpacku_lo_$a" ) |
446 | OPTAB_D (vec_widen_smult_even_optab, "vec_widen_smult_even_$a" ) |
447 | OPTAB_D (vec_widen_smult_hi_optab, "vec_widen_smult_hi_$a" ) |
448 | OPTAB_D (vec_widen_smult_lo_optab, "vec_widen_smult_lo_$a" ) |
449 | OPTAB_D (vec_widen_smult_odd_optab, "vec_widen_smult_odd_$a" ) |
450 | OPTAB_D (vec_widen_ssub_optab, "vec_widen_ssub_$a" ) |
451 | OPTAB_D (vec_widen_ssub_hi_optab, "vec_widen_ssub_hi_$a" ) |
452 | OPTAB_D (vec_widen_ssub_lo_optab, "vec_widen_ssub_lo_$a" ) |
453 | OPTAB_D (vec_widen_ssub_odd_optab, "vec_widen_ssub_odd_$a" ) |
454 | OPTAB_D (vec_widen_ssub_even_optab, "vec_widen_ssub_even_$a" ) |
455 | OPTAB_D (vec_widen_sadd_optab, "vec_widen_sadd_$a" ) |
456 | OPTAB_D (vec_widen_sadd_hi_optab, "vec_widen_sadd_hi_$a" ) |
457 | OPTAB_D (vec_widen_sadd_lo_optab, "vec_widen_sadd_lo_$a" ) |
458 | OPTAB_D (vec_widen_sadd_odd_optab, "vec_widen_sadd_odd_$a" ) |
459 | OPTAB_D (vec_widen_sadd_even_optab, "vec_widen_sadd_even_$a" ) |
460 | OPTAB_D (vec_widen_sabd_optab, "vec_widen_sabd_$a" ) |
461 | OPTAB_D (vec_widen_sabd_hi_optab, "vec_widen_sabd_hi_$a" ) |
462 | OPTAB_D (vec_widen_sabd_lo_optab, "vec_widen_sabd_lo_$a" ) |
463 | OPTAB_D (vec_widen_sabd_odd_optab, "vec_widen_sabd_odd_$a" ) |
464 | OPTAB_D (vec_widen_sabd_even_optab, "vec_widen_sabd_even_$a" ) |
465 | OPTAB_D (vec_widen_sshiftl_hi_optab, "vec_widen_sshiftl_hi_$a" ) |
466 | OPTAB_D (vec_widen_sshiftl_lo_optab, "vec_widen_sshiftl_lo_$a" ) |
467 | OPTAB_D (vec_widen_umult_even_optab, "vec_widen_umult_even_$a" ) |
468 | OPTAB_D (vec_widen_umult_hi_optab, "vec_widen_umult_hi_$a" ) |
469 | OPTAB_D (vec_widen_umult_lo_optab, "vec_widen_umult_lo_$a" ) |
470 | OPTAB_D (vec_widen_umult_odd_optab, "vec_widen_umult_odd_$a" ) |
471 | OPTAB_D (vec_widen_ushiftl_hi_optab, "vec_widen_ushiftl_hi_$a" ) |
472 | OPTAB_D (vec_widen_ushiftl_lo_optab, "vec_widen_ushiftl_lo_$a" ) |
473 | OPTAB_D (vec_widen_usub_optab, "vec_widen_usub_$a" ) |
474 | OPTAB_D (vec_widen_usub_hi_optab, "vec_widen_usub_hi_$a" ) |
475 | OPTAB_D (vec_widen_usub_lo_optab, "vec_widen_usub_lo_$a" ) |
476 | OPTAB_D (vec_widen_usub_odd_optab, "vec_widen_usub_odd_$a" ) |
477 | OPTAB_D (vec_widen_usub_even_optab, "vec_widen_usub_even_$a" ) |
478 | OPTAB_D (vec_widen_uadd_optab, "vec_widen_uadd_$a" ) |
479 | OPTAB_D (vec_widen_uadd_hi_optab, "vec_widen_uadd_hi_$a" ) |
480 | OPTAB_D (vec_widen_uadd_lo_optab, "vec_widen_uadd_lo_$a" ) |
481 | OPTAB_D (vec_widen_uadd_odd_optab, "vec_widen_uadd_odd_$a" ) |
482 | OPTAB_D (vec_widen_uadd_even_optab, "vec_widen_uadd_even_$a" ) |
483 | OPTAB_D (vec_widen_uabd_optab, "vec_widen_uabd_$a" ) |
484 | OPTAB_D (vec_widen_uabd_hi_optab, "vec_widen_uabd_hi_$a" ) |
485 | OPTAB_D (vec_widen_uabd_lo_optab, "vec_widen_uabd_lo_$a" ) |
486 | OPTAB_D (vec_widen_uabd_odd_optab, "vec_widen_uabd_odd_$a" ) |
487 | OPTAB_D (vec_widen_uabd_even_optab, "vec_widen_uabd_even_$a" ) |
488 | OPTAB_D (vec_addsub_optab, "vec_addsub$a3" ) |
489 | OPTAB_D (vec_fmaddsub_optab, "vec_fmaddsub$a4" ) |
490 | OPTAB_D (vec_fmsubadd_optab, "vec_fmsubadd$a4" ) |
491 | |
492 | OPTAB_D (sync_add_optab, "sync_add$I$a" ) |
493 | OPTAB_D (sync_and_optab, "sync_and$I$a" ) |
494 | OPTAB_D (sync_ior_optab, "sync_ior$I$a" ) |
495 | OPTAB_D (sync_lock_release_optab, "sync_lock_release$I$a" ) |
496 | OPTAB_D (sync_nand_optab, "sync_nand$I$a" ) |
497 | OPTAB_D (sync_sub_optab, "sync_sub$I$a" ) |
498 | OPTAB_D (sync_xor_optab, "sync_xor$I$a" ) |
499 | |
500 | OPTAB_D (atomic_add_fetch_optab, "atomic_add_fetch$I$a" ) |
501 | OPTAB_D (atomic_add_optab, "atomic_add$I$a" ) |
502 | OPTAB_D (atomic_and_fetch_optab, "atomic_and_fetch$I$a" ) |
503 | OPTAB_D (atomic_and_optab, "atomic_and$I$a" ) |
504 | OPTAB_D (atomic_bit_test_and_set_optab, "atomic_bit_test_and_set$I$a" ) |
505 | OPTAB_D (atomic_bit_test_and_complement_optab, "atomic_bit_test_and_complement$I$a" ) |
506 | OPTAB_D (atomic_bit_test_and_reset_optab, "atomic_bit_test_and_reset$I$a" ) |
507 | OPTAB_D (atomic_compare_and_swap_optab, "atomic_compare_and_swap$I$a" ) |
508 | OPTAB_D (atomic_exchange_optab, "atomic_exchange$I$a" ) |
509 | OPTAB_D (atomic_fetch_add_optab, "atomic_fetch_add$I$a" ) |
510 | OPTAB_D (atomic_fetch_and_optab, "atomic_fetch_and$I$a" ) |
511 | OPTAB_D (atomic_fetch_nand_optab, "atomic_fetch_nand$I$a" ) |
512 | OPTAB_D (atomic_fetch_or_optab, "atomic_fetch_or$I$a" ) |
513 | OPTAB_D (atomic_fetch_sub_optab, "atomic_fetch_sub$I$a" ) |
514 | OPTAB_D (atomic_fetch_xor_optab, "atomic_fetch_xor$I$a" ) |
515 | OPTAB_D (atomic_load_optab, "atomic_load$I$a" ) |
516 | OPTAB_D (atomic_nand_fetch_optab, "atomic_nand_fetch$I$a" ) |
517 | OPTAB_D (atomic_nand_optab, "atomic_nand$I$a" ) |
518 | OPTAB_D (atomic_or_fetch_optab, "atomic_or_fetch$I$a" ) |
519 | OPTAB_D (atomic_or_optab, "atomic_or$I$a" ) |
520 | OPTAB_D (atomic_store_optab, "atomic_store$I$a" ) |
521 | OPTAB_D (atomic_sub_fetch_optab, "atomic_sub_fetch$I$a" ) |
522 | OPTAB_D (atomic_sub_optab, "atomic_sub$I$a" ) |
523 | OPTAB_D (atomic_xor_fetch_optab, "atomic_xor_fetch$I$a" ) |
524 | OPTAB_D (atomic_xor_optab, "atomic_xor$I$a" ) |
525 | OPTAB_D (atomic_add_fetch_cmp_0_optab, "atomic_add_fetch_cmp_0$I$a" ) |
526 | OPTAB_D (atomic_sub_fetch_cmp_0_optab, "atomic_sub_fetch_cmp_0$I$a" ) |
527 | OPTAB_D (atomic_and_fetch_cmp_0_optab, "atomic_and_fetch_cmp_0$I$a" ) |
528 | OPTAB_D (atomic_or_fetch_cmp_0_optab, "atomic_or_fetch_cmp_0$I$a" ) |
529 | OPTAB_D (atomic_xor_fetch_cmp_0_optab, "atomic_xor_fetch_cmp_0$I$a" ) |
530 | |
531 | OPTAB_D (get_thread_pointer_optab, "get_thread_pointer$I$a" ) |
532 | OPTAB_D (set_thread_pointer_optab, "set_thread_pointer$I$a" ) |
533 | |
534 | OPTAB_D (check_raw_ptrs_optab, "check_raw_ptrs$a" ) |
535 | OPTAB_D (check_war_ptrs_optab, "check_war_ptrs$a" ) |
536 | |
537 | OPTAB_DC (vec_duplicate_optab, "vec_duplicate$a" , VEC_DUPLICATE) |
538 | OPTAB_DC (vec_series_optab, "vec_series$a" , VEC_SERIES) |
539 | OPTAB_D (vec_shl_insert_optab, "vec_shl_insert_$a" ) |
540 | OPTAB_D (len_load_optab, "len_load_$a" ) |
541 | OPTAB_D (len_store_optab, "len_store_$a" ) |
542 | OPTAB_D (select_vl_optab, "select_vl$a" ) |
543 | |