1 /* -*- buffer-read-only: t -*-
2    Generated automatically by parsecpu.awk from arm-cpus.in.
3    Do not edit.
4 
5    Copyright (C) 2011-2020 Free Software Foundation, Inc.
6 
7    This file is part of GCC.
8 
9    GCC is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as
11    published by the Free Software Foundation; either version 3,
12    or (at your option) any later version.
13 
14    GCC is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18 
19    You should have received a copy of the GNU General Public
20    License along with GCC; see the file COPYING3.  If not see
21    <http://www.gnu.org/licenses/>.  */
22 
23 enum isa_feature {
24   isa_nobit = 0,
25   isa_bit_fp16fml,
26   isa_bit_mve,
27   isa_bit_cmse,
28   isa_bit_quirk_armv6kz,
29   isa_bit_dotprod,
30   isa_bit_crc32,
31   isa_bit_xscale,
32   isa_bit_vfpv2,
33   isa_bit_vfpv3,
34   isa_bit_vfpv4,
35   isa_bit_lpae,
36   isa_bit_armv7em,
37   isa_bit_fp16,
38   isa_bit_adiv,
39   isa_bit_fp_d32,
40   isa_bit_be8,
41   isa_bit_fp16conv,
42   isa_bit_thumb2,
43   isa_bit_crypto,
44   isa_bit_mp,
45   isa_bit_sec,
46   isa_bit_sb,
47   isa_bit_bf16,
48   isa_bit_predres,
49   isa_bit_armv4,
50   isa_bit_quirk_cm3_ldrd,
51   isa_bit_smallmul,
52   isa_bit_armv5t,
53   isa_bit_armv8_1m_main,
54   isa_bit_armv6,
55   isa_bit_thumb,
56   isa_bit_quirk_no_asmcpu,
57   isa_bit_armv7,
58   isa_bit_armv8,
59   isa_bit_i8mm,
60   isa_bit_fp_dbl,
61   isa_bit_armv5te,
62   isa_bit_fpv5,
63   isa_bit_iwmmxt2,
64   isa_bit_notm,
65   isa_bit_cdecp0,
66   isa_bit_cdecp1,
67   isa_bit_cdecp2,
68   isa_bit_cdecp3,
69   isa_bit_iwmmxt,
70   isa_bit_cdecp4,
71   isa_bit_cdecp5,
72   isa_bit_cdecp6,
73   isa_bit_cdecp7,
74   isa_bit_mve_float,
75   isa_bit_armv8_1,
76   isa_bit_armv8_2,
77   isa_bit_armv8_3,
78   isa_bit_tdiv,
79   isa_bit_armv8_4,
80   isa_bit_armv8_5,
81   isa_bit_armv8_6,
82   isa_bit_neon,
83   isa_bit_quirk_no_volatile_ce,
84   isa_bit_armv6k,
85   isa_bit_vfp_base,
86   isa_num_bits
87 };
88 
89 #define ISA_ARMv8_6a \
90   isa_bit_tdiv, \
91   isa_bit_notm, \
92   isa_bit_mp, \
93   isa_bit_armv5t, \
94   isa_bit_thumb2, \
95   isa_bit_crc32, \
96   isa_bit_armv6k, \
97   isa_bit_armv5te, \
98   isa_bit_sec, \
99   isa_bit_be8, \
100   isa_bit_sb, \
101   isa_bit_armv4, \
102   isa_bit_armv6, \
103   isa_bit_armv7, \
104   isa_bit_armv8, \
105   isa_bit_adiv, \
106   isa_bit_armv8_1, \
107   isa_bit_armv8_2, \
108   isa_bit_armv8_3, \
109   isa_bit_armv8_4, \
110   isa_bit_armv8_5, \
111   isa_bit_armv8_6, \
112   isa_bit_lpae, \
113   isa_bit_thumb, \
114   isa_bit_predres
115 
116 #define ISA_ARMv8r \
117   isa_bit_adiv, \
118   isa_bit_mp, \
119   isa_bit_lpae, \
120   isa_bit_armv5te, \
121   isa_bit_tdiv, \
122   isa_bit_thumb2, \
123   isa_bit_notm, \
124   isa_bit_armv5t, \
125   isa_bit_armv4, \
126   isa_bit_armv6, \
127   isa_bit_armv7, \
128   isa_bit_armv8, \
129   isa_bit_thumb, \
130   isa_bit_armv6k, \
131   isa_bit_sec, \
132   isa_bit_be8
133 
134 #define ISA_ARMv6z \
135   isa_bit_armv4, \
136   isa_bit_armv6, \
137   isa_bit_be8, \
138   isa_bit_thumb, \
139   isa_bit_armv5te, \
140   isa_bit_armv5t, \
141   isa_bit_notm
142 
143 #define ISA_DOTPROD \
144   isa_bit_dotprod, \
145   isa_bit_neon, \
146   isa_bit_fp_dbl, \
147   isa_bit_fp_d32
148 
149 #define ISA_ALL_CRYPTO \
150   isa_bit_crypto
151 
152 #define ISA_ALL_FPU_EXTERNAL \
153   isa_bit_fp16, \
154   isa_bit_bf16
155 
156 #define ISA_ALL_SIMD \
157   isa_bit_fp_d32, \
158   isa_bit_fp16fml, \
159   isa_bit_dotprod, \
160   isa_bit_neon, \
161   isa_bit_crypto, \
162   isa_bit_i8mm
163 
164 #define ISA_ALL_QUIRKS \
165   isa_bit_quirk_no_asmcpu, \
166   isa_bit_xscale, \
167   isa_bit_quirk_cm3_ldrd, \
168   isa_bit_quirk_no_volatile_ce, \
169   isa_bit_quirk_armv6kz
170 
171 #define ISA_CRYPTO \
172   isa_bit_neon, \
173   isa_bit_fp_dbl, \
174   isa_bit_fp_d32, \
175   isa_bit_crypto
176 
177 #define ISA_ARMv8m_base \
178   isa_bit_be8, \
179   isa_bit_thumb, \
180   isa_bit_tdiv, \
181   isa_bit_armv5t, \
182   isa_bit_armv5te, \
183   isa_bit_cmse, \
184   isa_bit_armv4, \
185   isa_bit_armv6, \
186   isa_bit_armv8
187 
188 #define ISA_ARMv6zk \
189   isa_bit_armv4, \
190   isa_bit_armv6, \
191   isa_bit_thumb, \
192   isa_bit_notm, \
193   isa_bit_armv5t, \
194   isa_bit_armv5te, \
195   isa_bit_armv6k, \
196   isa_bit_be8
197 
198 #define ISA_VFPv2 \
199   isa_bit_vfpv2
200 
201 #define ISA_VFPv3 \
202   isa_bit_vfpv2, \
203   isa_bit_vfpv3
204 
205 #define ISA_VFPv4 \
206   isa_bit_fp16conv, \
207   isa_bit_vfpv2, \
208   isa_bit_vfpv3, \
209   isa_bit_vfpv4
210 
211 #define ISA_FP_D32 \
212   isa_bit_fp_dbl, \
213   isa_bit_fp_d32
214 
215 #define ISA_ARMv7ve \
216   isa_bit_armv5te, \
217   isa_bit_be8, \
218   isa_bit_thumb2, \
219   isa_bit_armv5t, \
220   isa_bit_adiv, \
221   isa_bit_lpae, \
222   isa_bit_tdiv, \
223   isa_bit_armv6k, \
224   isa_bit_notm, \
225   isa_bit_mp, \
226   isa_bit_armv4, \
227   isa_bit_armv6, \
228   isa_bit_armv7, \
229   isa_bit_thumb, \
230   isa_bit_sec
231 
232 #define ISA_ARMv7a \
233   isa_bit_armv5te, \
234   isa_bit_armv4, \
235   isa_bit_armv6, \
236   isa_bit_armv7, \
237   isa_bit_thumb, \
238   isa_bit_be8, \
239   isa_bit_thumb2, \
240   isa_bit_armv5t, \
241   isa_bit_notm, \
242   isa_bit_armv6k
243 
244 #define ISA_ALL_SIMD_INTERNAL \
245   isa_bit_fp_d32, \
246   isa_bit_crypto, \
247   isa_bit_neon
248 
249 #define ISA_ARMv8_1a \
250   isa_bit_crc32, \
251   isa_bit_tdiv, \
252   isa_bit_armv8_1, \
253   isa_bit_armv5t, \
254   isa_bit_notm, \
255   isa_bit_thumb2, \
256   isa_bit_armv4, \
257   isa_bit_armv6, \
258   isa_bit_armv7, \
259   isa_bit_armv8, \
260   isa_bit_armv6k, \
261   isa_bit_thumb, \
262   isa_bit_armv5te, \
263   isa_bit_sec, \
264   isa_bit_be8, \
265   isa_bit_adiv, \
266   isa_bit_lpae, \
267   isa_bit_mp
268 
269 #define ISA_ARMv7em \
270   isa_bit_armv5te, \
271   isa_bit_be8, \
272   isa_bit_armv4, \
273   isa_bit_armv6, \
274   isa_bit_armv7, \
275   isa_bit_thumb2, \
276   isa_bit_armv5t, \
277   isa_bit_thumb, \
278   isa_bit_armv7em, \
279   isa_bit_tdiv
280 
281 #define ISA_FP_DBL \
282   isa_bit_fp_dbl
283 
284 #define ISA_ARMv8_3a \
285   isa_bit_armv5te, \
286   isa_bit_thumb2, \
287   isa_bit_armv5t, \
288   isa_bit_sec, \
289   isa_bit_mp, \
290   isa_bit_be8, \
291   isa_bit_crc32, \
292   isa_bit_armv6k, \
293   isa_bit_adiv, \
294   isa_bit_lpae, \
295   isa_bit_armv8_1, \
296   isa_bit_armv8_2, \
297   isa_bit_armv8_3, \
298   isa_bit_tdiv, \
299   isa_bit_notm, \
300   isa_bit_armv4, \
301   isa_bit_armv6, \
302   isa_bit_armv7, \
303   isa_bit_armv8, \
304   isa_bit_thumb
305 
306 #define ISA_ARMv5t \
307   isa_bit_thumb, \
308   isa_bit_notm, \
309   isa_bit_armv5t, \
310   isa_bit_armv4
311 
312 #define ISA_ARMv7m \
313   isa_bit_be8, \
314   isa_bit_armv5te, \
315   isa_bit_tdiv, \
316   isa_bit_armv4, \
317   isa_bit_armv6, \
318   isa_bit_armv7, \
319   isa_bit_thumb2, \
320   isa_bit_armv5t, \
321   isa_bit_thumb
322 
323 #define ISA_ARMv4 \
324   isa_bit_notm, \
325   isa_bit_armv4
326 
327 #define ISA_ARMv6kz \
328   isa_bit_be8, \
329   isa_bit_armv5te, \
330   isa_bit_armv4, \
331   isa_bit_armv6, \
332   isa_bit_armv5t, \
333   isa_bit_quirk_armv6kz, \
334   isa_bit_notm, \
335   isa_bit_thumb, \
336   isa_bit_armv6k
337 
338 #define ISA_ARMv6 \
339   isa_bit_armv5t, \
340   isa_bit_armv4, \
341   isa_bit_armv6, \
342   isa_bit_thumb, \
343   isa_bit_armv5te, \
344   isa_bit_notm, \
345   isa_bit_be8
346 
347 #define ISA_ALL_FP \
348   isa_bit_fp_dbl, \
349   isa_bit_fp16conv, \
350   isa_bit_fp16, \
351   isa_bit_fp_d32, \
352   isa_bit_bf16, \
353   isa_bit_fpv5, \
354   isa_bit_neon, \
355   isa_bit_fp16fml, \
356   isa_bit_crypto, \
357   isa_bit_i8mm, \
358   isa_bit_dotprod, \
359   isa_bit_vfpv2, \
360   isa_bit_vfpv3, \
361   isa_bit_vfpv4
362 
363 #define ISA_ARMv7 \
364   isa_bit_armv4, \
365   isa_bit_armv6, \
366   isa_bit_armv7, \
367   isa_bit_thumb, \
368   isa_bit_be8, \
369   isa_bit_armv5te, \
370   isa_bit_thumb2, \
371   isa_bit_armv5t
372 
373 #define ISA_ARMv8_5a \
374   isa_bit_adiv, \
375   isa_bit_armv4, \
376   isa_bit_armv6, \
377   isa_bit_armv7, \
378   isa_bit_armv8, \
379   isa_bit_lpae, \
380   isa_bit_armv8_1, \
381   isa_bit_armv8_2, \
382   isa_bit_armv8_3, \
383   isa_bit_armv8_4, \
384   isa_bit_armv8_5, \
385   isa_bit_thumb2, \
386   isa_bit_armv5t, \
387   isa_bit_thumb, \
388   isa_bit_predres, \
389   isa_bit_tdiv, \
390   isa_bit_notm, \
391   isa_bit_armv6k, \
392   isa_bit_mp, \
393   isa_bit_armv5te, \
394   isa_bit_crc32, \
395   isa_bit_sec, \
396   isa_bit_be8, \
397   isa_bit_sb
398 
399 #define ISA_ARMv7r \
400   isa_bit_be8, \
401   isa_bit_thumb2, \
402   isa_bit_armv5t, \
403   isa_bit_tdiv, \
404   isa_bit_armv5te, \
405   isa_bit_notm, \
406   isa_bit_armv6k, \
407   isa_bit_armv4, \
408   isa_bit_armv6, \
409   isa_bit_armv7, \
410   isa_bit_thumb
411 
412 #define ISA_ALL_FPU_INTERNAL \
413   isa_bit_fp16conv, \
414   isa_bit_crypto, \
415   isa_bit_vfpv2, \
416   isa_bit_vfpv3, \
417   isa_bit_vfpv4, \
418   isa_bit_fpv5, \
419   isa_bit_neon, \
420   isa_bit_fp_dbl, \
421   isa_bit_fp_d32
422 
423 #define ISA_FPv5 \
424   isa_bit_fpv5, \
425   isa_bit_fp16conv, \
426   isa_bit_vfpv2, \
427   isa_bit_vfpv3, \
428   isa_bit_vfpv4
429 
430 #define ISA_ARMv6t2 \
431   isa_bit_armv5te, \
432   isa_bit_thumb2, \
433   isa_bit_armv5t, \
434   isa_bit_armv4, \
435   isa_bit_armv6, \
436   isa_bit_notm, \
437   isa_bit_thumb, \
438   isa_bit_be8
439 
440 #define ISA_ARMv8m_main \
441   isa_bit_tdiv, \
442   isa_bit_armv4, \
443   isa_bit_armv6, \
444   isa_bit_armv7, \
445   isa_bit_armv8, \
446   isa_bit_be8, \
447   isa_bit_armv5t, \
448   isa_bit_thumb2, \
449   isa_bit_thumb, \
450   isa_bit_cmse, \
451   isa_bit_armv5te
452 
453 #define ISA_ARMv8_1m_main \
454   isa_bit_be8, \
455   isa_bit_armv5te, \
456   isa_bit_cmse, \
457   isa_bit_armv8_1m_main, \
458   isa_bit_armv4, \
459   isa_bit_armv6, \
460   isa_bit_armv7, \
461   isa_bit_armv8, \
462   isa_bit_thumb2, \
463   isa_bit_armv5t, \
464   isa_bit_thumb, \
465   isa_bit_tdiv
466 
467 #define ISA_NEON \
468   isa_bit_fp_d32, \
469   isa_bit_neon, \
470   isa_bit_fp_dbl
471 
472 #define ISA_ARMv5te \
473   isa_bit_armv4, \
474   isa_bit_thumb, \
475   isa_bit_notm, \
476   isa_bit_armv5te, \
477   isa_bit_armv5t
478 
479 #define ISA_FP_ARMv8 \
480   isa_bit_fp_dbl, \
481   isa_bit_fp_d32, \
482   isa_bit_vfpv2, \
483   isa_bit_vfpv3, \
484   isa_bit_vfpv4, \
485   isa_bit_fp16conv, \
486   isa_bit_fpv5
487 
488 #define ISA_ARMv8a \
489   isa_bit_armv5te, \
490   isa_bit_thumb, \
491   isa_bit_sec, \
492   isa_bit_adiv, \
493   isa_bit_be8, \
494   isa_bit_lpae, \
495   isa_bit_tdiv, \
496   isa_bit_notm, \
497   isa_bit_thumb2, \
498   isa_bit_armv5t, \
499   isa_bit_armv4, \
500   isa_bit_armv6, \
501   isa_bit_armv7, \
502   isa_bit_armv8, \
503   isa_bit_mp, \
504   isa_bit_armv6k
505 
506 #define ISA_MVE \
507   isa_bit_armv7em, \
508   isa_bit_mve
509 
510 #define ISA_ALL_SIMD_EXTERNAL \
511   isa_bit_fp16fml, \
512   isa_bit_dotprod, \
513   isa_bit_i8mm
514 
515 #define ISA_ARMv8_2a \
516   isa_bit_armv5t, \
517   isa_bit_thumb, \
518   isa_bit_thumb2, \
519   isa_bit_armv6k, \
520   isa_bit_armv5te, \
521   isa_bit_sec, \
522   isa_bit_be8, \
523   isa_bit_mp, \
524   isa_bit_crc32, \
525   isa_bit_adiv, \
526   isa_bit_lpae, \
527   isa_bit_tdiv, \
528   isa_bit_armv8_1, \
529   isa_bit_armv8_2, \
530   isa_bit_notm, \
531   isa_bit_armv4, \
532   isa_bit_armv6, \
533   isa_bit_armv7, \
534   isa_bit_armv8
535 
536 #define ISA_ARMv6j \
537   isa_bit_be8, \
538   isa_bit_armv5te, \
539   isa_bit_armv4, \
540   isa_bit_armv6, \
541   isa_bit_notm, \
542   isa_bit_thumb, \
543   isa_bit_armv5t
544 
545 #define ISA_ARMv6k \
546   isa_bit_be8, \
547   isa_bit_notm, \
548   isa_bit_armv4, \
549   isa_bit_armv6, \
550   isa_bit_armv5t, \
551   isa_bit_armv5te, \
552   isa_bit_thumb, \
553   isa_bit_armv6k
554 
555 #define ISA_ARMv4t \
556   isa_bit_armv4, \
557   isa_bit_thumb, \
558   isa_bit_notm
559 
560 #define ISA_ARMv6m \
561   isa_bit_armv4, \
562   isa_bit_armv6, \
563   isa_bit_be8, \
564   isa_bit_thumb, \
565   isa_bit_armv5te, \
566   isa_bit_armv5t
567 
568 #define ISA_IGNORE_FOR_MULTILIB \
569   isa_bit_cdecp0, \
570   isa_bit_cdecp1, \
571   isa_bit_cdecp2, \
572   isa_bit_cdecp3, \
573   isa_bit_cdecp4, \
574   isa_bit_cdecp5, \
575   isa_bit_cdecp6, \
576   isa_bit_cdecp7
577 
578 #define ISA_MVE_FP \
579   isa_bit_fp16, \
580   isa_bit_armv7em, \
581   isa_bit_mve, \
582   isa_bit_fpv5, \
583   isa_bit_vfpv2, \
584   isa_bit_vfpv3, \
585   isa_bit_vfpv4, \
586   isa_bit_fp16conv, \
587   isa_bit_mve_float
588 
589 #define ISA_ARMv5tej \
590   isa_bit_armv4, \
591   isa_bit_armv5te, \
592   isa_bit_thumb, \
593   isa_bit_notm, \
594   isa_bit_armv5t
595 
596 #define ISA_ARMv8_4a \
597   isa_bit_sec, \
598   isa_bit_crc32, \
599   isa_bit_be8, \
600   isa_bit_thumb2, \
601   isa_bit_armv5t, \
602   isa_bit_adiv, \
603   isa_bit_lpae, \
604   isa_bit_armv4, \
605   isa_bit_armv6, \
606   isa_bit_armv7, \
607   isa_bit_armv8, \
608   isa_bit_tdiv, \
609   isa_bit_armv8_1, \
610   isa_bit_armv8_2, \
611   isa_bit_armv8_3, \
612   isa_bit_armv8_4, \
613   isa_bit_armv6k, \
614   isa_bit_notm, \
615   isa_bit_thumb, \
616   isa_bit_mp, \
617   isa_bit_armv5te
618 
619 struct fbit_implication {
620   /* Represents a feature implication, where:
621      ante IMPLIES cons
622      meaning that if ante is enabled then we should
623      also implicitly enable cons.  */
624   enum isa_feature ante;
625   enum isa_feature cons;
626 };
627 
628 static const struct fbit_implication all_implied_fbits[] =
629 {
630   { isa_bit_neon, isa_bit_vfp_base },
631   { isa_bit_vfpv4, isa_bit_vfp_base },
632   { isa_bit_fp_d32, isa_bit_vfp_base },
633   { isa_bit_fp_dbl, isa_bit_vfp_base },
634   { isa_bit_mve_float, isa_bit_vfp_base },
635   { isa_bit_mve, isa_bit_vfp_base },
636   { isa_bit_dotprod, isa_bit_vfp_base },
637   { isa_bit_crypto, isa_bit_vfp_base },
638   { isa_bit_fp16, isa_bit_vfp_base },
639   { isa_bit_armv7em, isa_bit_vfp_base },
640   { isa_bit_i8mm, isa_bit_vfp_base },
641   { isa_bit_fp16conv, isa_bit_vfp_base },
642   { isa_bit_fpv5, isa_bit_vfp_base },
643   { isa_bit_fp16fml, isa_bit_vfp_base },
644   { isa_bit_bf16, isa_bit_vfp_base },
645   { isa_bit_vfpv2, isa_bit_vfp_base },
646   { isa_bit_vfpv3, isa_bit_vfp_base },
647   { isa_nobit, isa_nobit }
648 };
649 
650