]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/config/arm/arm-cpus.in
Update copyright years.
[thirdparty/gcc.git] / gcc / config / arm / arm-cpus.in
1 # CPU, FPU and architecture specifications for ARM.
2 #
3 # Copyright (C) 2011-2020 Free Software Foundation, Inc.
4 #
5 # This file is part of GCC.
6 #
7 # GCC is free software; you can redistribute it and/or modify it under
8 # the terms of the GNU General Public License as published by the Free
9 # Software Foundation; either version 3, or (at your option) any later
10 # version.
11 #
12 # GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 # for more details.
16 #
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/>.
20
21 # This file describes all the various CPUs, FPUs and architectures supported
22 # by the compiler. It is pre-processed by parsecpu.awk for a number of
23 # purposes.
24 #
25 # The general form is a sequence of begin..end blocks with the following
26 # syntax:
27 # begin <object-type> <name>
28 # attribute-statement*
29 # end <object-type> <name>
30 #
31 # where object type is one of "cpu" "arch" "fpu". Each object type has
32 # a specific set of permitted attributes, some of which are optional; further
33 # details can be found below.
34 #
35 # Some objects cross-reference other objects by name. Objects are permitted
36 # in any order and it is not necessary to place a cross-referenced object
37 # earlier in the file.
38 #
39 # The object names for cpu, arch and fpu objects are used for the public option
40 # names in the final compiler. The order within each group is preserved and
41 # forms the order for the list within the compiler.
42
43 # Most objects in this file support forward references. The major
44 # exception is feature groups, which may only refer to previously
45 # defined features or feature groups. This is done to avoid the risk
46 # of feature groups recursively referencing each other and causing
47 # the parser to hang.
48
49 # Features - general convention: all lower case.
50
51 # Architecture rel 4
52 define feature armv4
53
54 # Thumb aware.
55 define feature thumb
56
57 # Architecture rel 5t.
58 define feature armv5t
59
60 # Architecture rel 5te.
61 define feature armv5te
62
63 # XScale.
64 define feature xscale
65
66 # Architecture rel 6.
67 define feature armv6
68
69 # Architecture rel 6k.
70 define feature armv6k
71
72 # Thumb-2.
73 define feature thumb2
74
75 # Instructions not present in 'M' profile.
76 define feature notm
77
78 # Architecture uses be8 mode in big-endian.
79 define feature be8
80
81 # Thumb division instructions.
82 define feature tdiv
83
84 # Architecture rel 7e-m.
85 define feature armv7em
86
87 # Architecture rel 7.
88 define feature armv7
89
90 # MP extension to ArmV7-A
91 define feature mp
92
93 # SEC extension to ArmV7-A
94 define feature sec
95
96 # ARM division instructions.
97 define feature adiv
98
99 # Architecture rel 8.
100 define feature armv8
101
102 # ARMv8 CRC32 instructions.
103 define feature crc32
104
105 # XScale v2 (Wireless MMX).
106 define feature iwmmxt
107
108 # XScale Wireless MMX2.
109 define feature iwmmxt2
110
111 # Architecture rel 8.1.
112 define feature armv8_1
113
114 # Architecture rel 8.2.
115 define feature armv8_2
116
117 # Architecture rel 8.3.
118 define feature armv8_3
119
120 # Architecture rel 8.4.
121 define feature armv8_4
122
123 # Architecture rel 8.5.
124 define feature armv8_5
125
126 # M-Profile security extensions.
127 define feature cmse
128
129 # Floating point and Neon extensions.
130 # VFPv1 is not supported in GCC.
131
132 # Vector floating point v2.
133 define feature vfpv2
134
135 # Vector floating point v3.
136 define feature vfpv3
137
138 # Vector floating point v4.
139 define feature vfpv4
140
141 # Floating point v5.
142 define feature fpv5
143
144 # ARMv7-A LPAE.
145 define feature lpae
146
147 # Advanced SIMD instructions.
148 define feature neon
149
150 # Conversions to/from fp16 (VFPv3 extension).
151 define feature fp16conv
152
153 # Double precision operations supported.
154 define feature fp_dbl
155
156 # 32 Double precision registers.
157 define feature fp_d32
158
159 # Crypto extension to ARMv8.
160 define feature crypto
161
162 # FP16 data processing (half-precision float).
163 define feature fp16
164
165 # Dot Product instructions extension to ARMv8.2-a.
166 define feature dotprod
167
168 # Half-precision floating-point instructions in ARMv8.4-A.
169 define feature fp16fml
170
171 # ISA Quirks (errata?). Don't forget to add this to the fgroup
172 # ALL_QUIRKS below.
173
174 # No volatile memory in IT blocks.
175 define feature quirk_no_volatile_ce
176
177 # Previously mis-identified by GCC.
178 define feature quirk_armv6kz
179
180 # Cortex-M3 LDRD quirk.
181 define feature quirk_cm3_ldrd
182
183 # (Very) slow multiply operations. Should probably be a tuning bit.
184 define feature smallmul
185
186 # Speculation Barrier Instruction for v8-A architectures, added by
187 # default to v8.5-A
188 define feature sb
189
190 # Execution and Data Prediction Restriction Instruction for
191 # v8-A architectures, added by default from v8.5-A
192 define feature predres
193
194 # Feature groups. Conventionally all (or mostly) upper case.
195 # ALL_FPU lists all the feature bits associated with the floating-point
196 # unit; these will all be removed if the floating-point unit is disabled
197 # (eg -mfloat-abi=soft). ALL_FPU_INTERNAL must ONLY contain features that
198 # form part of a named -mfpu option; it is used to map the capabilities
199 # back to a named FPU for the benefit of the assembler.
200 #
201 # ALL_SIMD_INTERNAL and ALL_SIMD are similarly defined to help with the
202 # construction of ALL_FPU and ALL_FPU_INTERNAL; they describe the SIMD
203 # extensions that are either part of a named FPU or optional extensions
204 # respectively.
205
206
207 # List of all cryptographic extensions to stripout if crypto is
208 # disabled. Currently, that's trivial, but we define it anyway for
209 # consistency with the SIMD and FP disable lists.
210 define fgroup ALL_CRYPTO crypto
211
212 # List of all SIMD bits to strip out if SIMD is disabled. This does
213 # strip off 32 D-registers, but does not remove support for
214 # double-precision FP.
215 define fgroup ALL_SIMD_INTERNAL fp_d32 neon ALL_CRYPTO
216 define fgroup ALL_SIMD_EXTERNAL dotprod fp16fml
217 define fgroup ALL_SIMD ALL_SIMD_INTERNAL ALL_SIMD_EXTERNAL
218
219 # List of all FPU bits to strip out if -mfpu is used to override the
220 # default. fp16 is deliberately missing from this list.
221 define fgroup ALL_FPU_INTERNAL vfpv2 vfpv3 vfpv4 fpv5 fp16conv fp_dbl ALL_SIMD_INTERNAL
222 # Similarly, but including fp16 and other extensions that aren't part of
223 # -mfpu support.
224 define fgroup ALL_FPU_EXTERNAL fp16
225
226 # Everything related to the FPU extensions (FP or SIMD).
227 define fgroup ALL_FP ALL_FPU_EXTERNAL ALL_FPU_INTERNAL ALL_SIMD
228
229 define fgroup ARMv4 armv4 notm
230 define fgroup ARMv4t ARMv4 thumb
231 define fgroup ARMv5t ARMv4t armv5t
232 define fgroup ARMv5te ARMv5t armv5te
233 define fgroup ARMv5tej ARMv5te
234 define fgroup ARMv6 ARMv5te armv6 be8
235 define fgroup ARMv6j ARMv6
236 define fgroup ARMv6k ARMv6 armv6k
237 define fgroup ARMv6z ARMv6
238 define fgroup ARMv6kz ARMv6k quirk_armv6kz
239 define fgroup ARMv6zk ARMv6k
240 define fgroup ARMv6t2 ARMv6 thumb2
241 # This is suspect. ARMv6-m doesn't really pull in any useful features
242 # from ARMv5* or ARMv6.
243 define fgroup ARMv6m armv4 thumb armv5t armv5te armv6 be8
244 # This is suspect, the 'common' ARMv7 subset excludes the thumb2 'DSP' and
245 # integer SIMD instructions that are in ARMv6T2. */
246 define fgroup ARMv7 ARMv6m thumb2 armv7
247
248 define fgroup ARMv7a ARMv7 notm armv6k
249 define fgroup ARMv7ve ARMv7a adiv tdiv lpae mp sec
250 define fgroup ARMv7r ARMv7a tdiv
251 define fgroup ARMv7m ARMv7 tdiv
252 define fgroup ARMv7em ARMv7m armv7em
253 define fgroup ARMv8a ARMv7ve armv8
254 define fgroup ARMv8_1a ARMv8a crc32 armv8_1
255 define fgroup ARMv8_2a ARMv8_1a armv8_2
256 define fgroup ARMv8_3a ARMv8_2a armv8_3
257 define fgroup ARMv8_4a ARMv8_3a armv8_4
258 define fgroup ARMv8_5a ARMv8_4a armv8_5 sb predres
259 define fgroup ARMv8m_base ARMv6m armv8 cmse tdiv
260 define fgroup ARMv8m_main ARMv7m armv8 cmse
261 define fgroup ARMv8r ARMv8a
262
263 # Useful combinations.
264 define fgroup VFPv2 vfpv2
265 define fgroup VFPv3 VFPv2 vfpv3
266 define fgroup VFPv4 VFPv3 vfpv4 fp16conv
267 define fgroup FPv5 VFPv4 fpv5
268
269 define fgroup FP_DBL fp_dbl
270 define fgroup FP_D32 FP_DBL fp_d32
271 define fgroup FP_ARMv8 FPv5 FP_D32
272 define fgroup NEON FP_D32 neon
273 define fgroup CRYPTO NEON crypto
274 define fgroup DOTPROD NEON dotprod
275
276 # List of all quirk bits to strip out when comparing CPU features with
277 # architectures.
278 # xscale isn't really a 'quirk', but it isn't an architecture either and we
279 # need to ignore it for matching purposes.
280 define fgroup ALL_QUIRKS quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd xscale
281
282 # Architecture entries
283 # format:
284 # begin arch <name>
285 # tune for <cpu>
286 # [tune flags <list>]
287 # base <name>
288 # [profile <A|R|M>]
289 # isa <isa-flags-list>
290 # end arch <name>
291 #
292
293 begin arch armv4
294 tune for arm7tdmi
295 tune flags CO_PROC
296 base 4
297 isa ARMv4
298 end arch armv4
299
300 begin arch armv4t
301 tune for arm7tdmi
302 tune flags CO_PROC
303 base 4T
304 isa ARMv4t
305 end arch armv4t
306
307 begin arch armv5t
308 tune for arm10tdmi
309 tune flags CO_PROC
310 base 5T
311 isa ARMv5t
312 end arch armv5t
313
314 begin arch armv5te
315 tune for arm1026ej-s
316 tune flags CO_PROC
317 base 5TE
318 isa ARMv5te
319 option fp add VFPv2 FP_DBL
320 optalias vfpv2 fp
321 option nofp remove ALL_FP
322 end arch armv5te
323
324 begin arch armv5tej
325 tune for arm1026ej-s
326 tune flags CO_PROC
327 base 5TEJ
328 isa ARMv5tej
329 option fp add VFPv2 FP_DBL
330 optalias vfpv2 fp
331 option nofp remove ALL_FP
332 end arch armv5tej
333
334 begin arch armv6
335 tune for arm1136j-s
336 tune flags CO_PROC
337 base 6
338 isa ARMv6
339 option fp add VFPv2 FP_DBL
340 optalias vfpv2 fp
341 option nofp remove ALL_FP
342 end arch armv6
343
344 begin arch armv6j
345 tune for arm1136j-s
346 tune flags CO_PROC
347 base 6J
348 isa ARMv6j
349 option fp add VFPv2 FP_DBL
350 optalias vfpv2 fp
351 option nofp remove ALL_FP
352 end arch armv6j
353
354 begin arch armv6k
355 tune for mpcore
356 tune flags CO_PROC
357 base 6K
358 isa ARMv6k
359 option fp add VFPv2 FP_DBL
360 optalias vfpv2 fp
361 option nofp remove ALL_FP
362 end arch armv6k
363
364 begin arch armv6z
365 tune for arm1176jz-s
366 tune flags CO_PROC
367 base 6Z
368 isa ARMv6z
369 option fp add VFPv2 FP_DBL
370 optalias vfpv2 fp
371 option nofp remove ALL_FP
372 end arch armv6z
373
374 begin arch armv6kz
375 tune for arm1176jz-s
376 tune flags CO_PROC
377 base 6KZ
378 isa ARMv6kz
379 option fp add VFPv2 FP_DBL
380 optalias vfpv2 fp
381 option nofp remove ALL_FP
382 end arch armv6kz
383
384 begin arch armv6zk
385 tune for arm1176jz-s
386 tune flags CO_PROC
387 base 6KZ
388 isa ARMv6kz
389 option fp add VFPv2 FP_DBL
390 optalias vfpv2 fp
391 option nofp remove ALL_FP
392 end arch armv6zk
393
394 begin arch armv6t2
395 tune for arm1156t2-s
396 tune flags CO_PROC
397 base 6T2
398 isa ARMv6t2
399 option fp add VFPv2 FP_DBL
400 optalias vfpv2 fp
401 option nofp remove ALL_FP
402 end arch armv6t2
403
404 begin arch armv6-m
405 tune for cortex-m1
406 base 6M
407 profile M
408 isa ARMv6m
409 end arch armv6-m
410
411 # This is now equivalent to armv6-m, but we keep it because some
412 # versions of GAS still distinguish between the two.
413 begin arch armv6s-m
414 tune for cortex-m1
415 base 6M
416 profile M
417 isa ARMv6m
418 end arch armv6s-m
419
420 begin arch armv7
421 tune for cortex-a53
422 tune flags CO_PROC
423 base 7
424 isa ARMv7
425 # fp => VFPv3-d16 (only useful for the A+R profile subset).
426 option fp add VFPv3 FP_DBL
427 optalias vfpv3-d16 fp
428 option nofp remove ALL_FP
429 end arch armv7
430
431 begin arch armv7-a
432 tune for cortex-a53
433 tune flags CO_PROC
434 base 7A
435 profile A
436 isa ARMv7a
437 option mp add mp
438 option sec add sec
439 # fp => VFPv3-d16, simd => neon-vfpv3
440 option fp add VFPv3 FP_DBL
441 optalias vfpv3-d16 fp
442 option vfpv3 add VFPv3 FP_D32
443 option vfpv3-d16-fp16 add VFPv3 FP_DBL fp16conv
444 option vfpv3-fp16 add VFPv3 FP_DBL FP_D32 fp16conv
445 option vfpv4-d16 add VFPv4 FP_DBL
446 option vfpv4 add VFPv4 FP_D32
447 option simd add VFPv3 NEON
448 optalias neon simd
449 optalias neon-vfpv3 simd
450 option neon-fp16 add VFPv3 NEON fp16conv
451 option neon-vfpv4 add VFPv4 NEON
452 option nosimd remove ALL_SIMD
453 option nofp remove ALL_FP
454 end arch armv7-a
455
456 begin arch armv7ve
457 tune for cortex-a53
458 tune flags CO_PROC
459 base 7A
460 profile A
461 isa ARMv7ve
462 # fp => VFPv4-d16, simd => neon-vfpv4
463 option vfpv3-d16 add VFPv3 FP_DBL
464 option vfpv3 add VFPv3 FP_D32
465 option vfpv3-d16-fp16 add VFPv3 FP_DBL fp16conv
466 option vfpv3-fp16 add VFPv3 FP_DBL FP_D32 fp16conv
467 option fp add VFPv4 FP_DBL
468 optalias vfpv4-d16 fp
469 option vfpv4 add VFPv4 FP_D32
470 option neon add VFPv3 NEON
471 optalias neon-vfpv3 neon
472 option neon-fp16 add VFPv3 NEON fp16conv
473 option simd add VFPv4 NEON
474 optalias neon-vfpv4 simd
475 option nosimd remove ALL_SIMD
476 option nofp remove ALL_FP
477 end arch armv7ve
478
479 begin arch armv7-r
480 tune for cortex-r4
481 tune flags CO_PROC
482 base 7R
483 profile R
484 isa ARMv7r
485 # ARMv7-r uses VFPv3-d16
486 option fp.sp add VFPv3
487 optalias vfpv3xd fp.sp
488 option fp add VFPv3 FP_DBL
489 optalias vfpv3-d16 fp
490 option vfpv3xd-fp16 add VFPv3 fp16conv
491 option vfpv3-d16-fp16 add VFPv3 FP_DBL fp16conv
492 option idiv add adiv
493 option nofp remove ALL_FP
494 option noidiv remove adiv
495 end arch armv7-r
496
497 begin arch armv7-m
498 tune for cortex-m3
499 tune flags CO_PROC
500 base 7M
501 profile M
502 isa ARMv7m
503 # In theory FP is permitted in v7-m, but in practice no implementations exist.
504 # leave it out for now.
505 end arch armv7-m
506
507 begin arch armv7e-m
508 tune for cortex-m4
509 tune flags CO_PROC
510 base 7EM
511 profile M
512 isa ARMv7em
513 # fp => VFPv4-sp-d16; fpv5 => FPv5-sp-d16; fp.dp => FPv5-d16
514 option fp add VFPv4
515 optalias vfpv4-sp-d16 fp
516 option fpv5 add FPv5
517 option fp.dp add FPv5 FP_DBL
518 optalias fpv5-d16 fp.dp
519 option nofp remove ALL_FP
520 end arch armv7e-m
521
522 begin arch armv8-a
523 tune for cortex-a53
524 tune flags CO_PROC
525 base 8A
526 profile A
527 isa ARMv8a
528 option crc add crc32
529 option simd add FP_ARMv8 NEON
530 option crypto add FP_ARMv8 CRYPTO
531 option nocrypto remove ALL_CRYPTO
532 option nofp remove ALL_FP
533 option sb add sb
534 option predres add predres
535 end arch armv8-a
536
537 begin arch armv8.1-a
538 tune for cortex-a53
539 tune flags CO_PROC
540 base 8A
541 profile A
542 isa ARMv8_1a
543 option simd add FP_ARMv8 NEON
544 option crypto add FP_ARMv8 CRYPTO
545 option nocrypto remove ALL_CRYPTO
546 option nofp remove ALL_FP
547 option sb add sb
548 option predres add predres
549 end arch armv8.1-a
550
551 begin arch armv8.2-a
552 tune for cortex-a53
553 tune flags CO_PROC
554 base 8A
555 profile A
556 isa ARMv8_2a
557 option simd add FP_ARMv8 NEON
558 option fp16 add fp16 FP_ARMv8 NEON
559 option fp16fml add fp16fml fp16 FP_ARMv8 NEON
560 option crypto add FP_ARMv8 CRYPTO
561 option nocrypto remove ALL_CRYPTO
562 option nofp remove ALL_FP
563 option dotprod add FP_ARMv8 DOTPROD
564 option sb add sb
565 option predres add predres
566 end arch armv8.2-a
567
568 begin arch armv8.3-a
569 tune for cortex-a53
570 tune flags CO_PROC
571 base 8A
572 profile A
573 isa ARMv8_3a
574 option simd add FP_ARMv8 NEON
575 option fp16 add fp16 FP_ARMv8 NEON
576 option fp16fml add fp16fml fp16 FP_ARMv8 NEON
577 option crypto add FP_ARMv8 CRYPTO
578 option nocrypto remove ALL_CRYPTO
579 option nofp remove ALL_FP
580 option dotprod add FP_ARMv8 DOTPROD
581 option sb add sb
582 option predres add predres
583 end arch armv8.3-a
584
585 begin arch armv8.4-a
586 tune for cortex-a53
587 tune flags CO_PROC
588 base 8A
589 profile A
590 isa ARMv8_4a
591 option simd add FP_ARMv8 DOTPROD
592 option fp16 add fp16 fp16fml FP_ARMv8 DOTPROD
593 option crypto add FP_ARMv8 CRYPTO DOTPROD
594 option nocrypto remove ALL_CRYPTO
595 option nofp remove ALL_FP
596 option sb add sb
597 option predres add predres
598 end arch armv8.4-a
599
600 begin arch armv8.5-a
601 tune for cortex-a53
602 tune flags CO_PROC
603 base 8A
604 profile A
605 isa ARMv8_5a
606 option simd add FP_ARMv8 DOTPROD
607 option fp16 add fp16 fp16fml FP_ARMv8 DOTPROD
608 option crypto add FP_ARMv8 CRYPTO DOTPROD
609 option nocrypto remove ALL_CRYPTO
610 option nofp remove ALL_FP
611 end arch armv8.5-a
612
613 begin arch armv8-m.base
614 tune for cortex-m23
615 base 8M_BASE
616 profile M
617 isa ARMv8m_base
618 end arch armv8-m.base
619
620 begin arch armv8-m.main
621 tune for cortex-m7
622 tune flags CO_PROC
623 base 8M_MAIN
624 profile M
625 isa ARMv8m_main
626 option dsp add armv7em
627 # fp => FPv5-sp-d16; fp.dp => FPv5-d16
628 option fp add FPv5
629 option fp.dp add FPv5 FP_DBL
630 option nofp remove ALL_FP
631 option nodsp remove armv7em
632 end arch armv8-m.main
633
634 begin arch armv8-r
635 tune for cortex-r52
636 tune flags CO_PROC
637 base 8R
638 profile R
639 isa ARMv8r
640 option crc add crc32
641 # fp.sp => fp-armv8 (d16); simd => simd + fp-armv8 + d32 + double precision
642 # note: no fp option for fp-armv8 (d16) + double precision at the moment
643 option fp.sp add FPv5
644 option simd add FP_ARMv8 NEON
645 option crypto add FP_ARMv8 CRYPTO
646 option nocrypto remove ALL_CRYPTO
647 option nofp remove ALL_FP
648 end arch armv8-r
649
650 begin arch iwmmxt
651 tune for iwmmxt
652 tune flags LDSCHED STRONG XSCALE
653 base 5TE
654 isa ARMv5te xscale iwmmxt
655 end arch iwmmxt
656
657 begin arch iwmmxt2
658 tune for iwmmxt2
659 tune flags LDSCHED STRONG XSCALE
660 base 5TE
661 isa ARMv5te xscale iwmmxt iwmmxt2
662 end arch iwmmxt2
663
664 # CPU entries
665 # format:
666 # begin cpu <name>
667 # [cname <c-compatible-name>]
668 # [alias <name>+]
669 # [tune for <cpu-name>]
670 # [tune flags <list>]
671 # architecture <name>
672 # [isa <additional-isa-flags-list>]
673 # [option <name> add|remove <isa-list>]*
674 # [optalias <name> <optname>]*
675 # [costs <name>]
676 # [vendor <vendor-id>
677 # [part <part-id> [minrev [maxrev]]]
678 # end cpu <name>
679 #
680 # If omitted, cname is formed from transforming the cpuname to convert
681 # non-valid punctuation characters to '_'.
682 # Any number of alias names may be specified for a CPU. If the name starts
683 # with a '!' then it will be recognized as a valid name, but will not
684 # be printed in any help text listing permitted CPUs.
685 # If specified, tune for specifies a CPU target to use for tuning this core.
686 # isa flags are appended to those defined by the architecture.
687 # Each add option must have a distinct feature set and each remove
688 # option must similarly have a distinct feature set. Option aliases can be
689 # added with the optalias statement.
690 # Vendor, part and revision information is used for native CPU and architecture
691 # detection. All values must be in hex (lower case) with the leading '0x'
692 # omitted. For example the cortex-a9 will have vendor 41 and part c09.
693 # Revision information is used to match a subrange of part
694 # revisions: minrev <= detected <= maxrev.
695 # If a minrev or maxrev are omitted then minrev defaults to zero and maxrev
696 # to infinity.
697 # Revision information is not implemented yet; no part uses it.
698
699 # V4 Architecture Processors
700 begin cpu arm8
701 tune flags LDSCHED
702 architecture armv4
703 costs fastmul
704 end cpu arm8
705
706 begin cpu arm810
707 tune flags LDSCHED
708 architecture armv4
709 costs fastmul
710 end cpu arm810
711
712 begin cpu strongarm
713 alias strongarm110 !strongarm1100 !strongarm1110
714 tune flags LDSCHED STRONG
715 architecture armv4
716 costs strongarm
717 end cpu strongarm
718
719 begin cpu fa526
720 tune flags LDSCHED
721 architecture armv4
722 costs fastmul
723 end cpu fa526
724
725 begin cpu fa626
726 tune flags LDSCHED
727 architecture armv4
728 costs fastmul
729 end cpu fa626
730
731
732 # V4T Architecture Processors
733 begin cpu arm7tdmi
734 alias arm7tdmi-s
735 tune flags CO_PROC
736 architecture armv4t
737 costs fastmul
738 end cpu arm7tdmi
739
740 begin cpu arm710t
741 alias arm720t arm740t
742 tune flags WBUF
743 architecture armv4t
744 costs fastmul
745 end cpu arm710t
746
747 begin cpu arm9
748 tune flags LDSCHED
749 architecture armv4t
750 costs fastmul
751 end cpu arm9
752
753 begin cpu arm9tdmi
754 tune flags LDSCHED
755 architecture armv4t
756 costs fastmul
757 end cpu arm9tdmi
758
759 begin cpu arm920t
760 alias arm920 arm922t arm940t ep9312
761 tune flags LDSCHED
762 architecture armv4t
763 costs fastmul
764 end cpu arm920t
765
766
767 # V5T Architecture Processors
768 # These used VFPv1 which isn't supported by GCC
769 begin cpu arm10tdmi
770 alias arm1020t
771 tune flags LDSCHED
772 architecture armv5t
773 costs fastmul
774 end cpu arm10tdmi
775
776
777 # V5TE Architecture Processors
778 begin cpu arm9e
779 alias arm946e-s arm966e-s arm968e-s
780 tune flags LDSCHED
781 architecture armv5te+fp
782 option nofp remove ALL_FP
783 costs 9e
784 end cpu arm9e
785
786 begin cpu arm10e
787 alias arm1020e arm1022e
788 tune flags LDSCHED
789 architecture armv5te+fp
790 option nofp remove ALL_FP
791 costs fastmul
792 end cpu arm10e
793
794 begin cpu xscale
795 tune flags LDSCHED XSCALE
796 architecture armv5te
797 isa xscale
798 costs xscale
799 end cpu xscale
800
801 begin cpu iwmmxt
802 tune flags LDSCHED XSCALE
803 architecture iwmmxt
804 costs xscale
805 end cpu iwmmxt
806
807 begin cpu iwmmxt2
808 tune flags LDSCHED XSCALE
809 architecture iwmmxt2
810 costs xscale
811 end cpu iwmmxt2
812
813 begin cpu fa606te
814 tune flags LDSCHED
815 architecture armv5te
816 costs 9e
817 end cpu fa606te
818
819 begin cpu fa626te
820 tune flags LDSCHED
821 architecture armv5te
822 costs 9e
823 end cpu fa626te
824
825 begin cpu fmp626
826 tune flags LDSCHED
827 architecture armv5te
828 costs 9e
829 end cpu fmp626
830
831 begin cpu fa726te
832 tune flags LDSCHED
833 architecture armv5te
834 costs fa726te
835 end cpu fa726te
836
837
838 # V5TEJ Architecture Processors
839 begin cpu arm926ej-s
840 cname arm926ejs
841 tune flags LDSCHED
842 architecture armv5tej+fp
843 option nofp remove ALL_FP
844 costs 9e
845 vendor 41
846 part 926
847 end cpu arm926ej-s
848
849 begin cpu arm1026ej-s
850 cname arm1026ejs
851 tune flags LDSCHED
852 architecture armv5tej+fp
853 option nofp remove ALL_FP
854 costs 9e
855 vendor 41
856 part a26
857 end cpu arm1026ej-s
858
859
860 # V6 Architecture Processors
861 begin cpu arm1136j-s
862 cname arm1136js
863 tune flags LDSCHED
864 architecture armv6j
865 costs 9e
866 end cpu arm1136j-s
867
868 begin cpu arm1136jf-s
869 cname arm1136jfs
870 tune flags LDSCHED
871 architecture armv6j+fp
872 costs 9e
873 vendor 41
874 part b36
875 end cpu arm1136jf-s
876
877 begin cpu arm1176jz-s
878 cname arm1176jzs
879 tune flags LDSCHED
880 architecture armv6kz
881 costs 9e
882 end cpu arm1176jz-s
883
884 begin cpu arm1176jzf-s
885 cname arm1176jzfs
886 tune flags LDSCHED
887 architecture armv6kz+fp
888 costs 9e
889 vendor 41
890 part b76
891 end cpu arm1176jzf-s
892
893 begin cpu mpcorenovfp
894 tune flags LDSCHED
895 architecture armv6k
896 costs 9e
897 end cpu mpcorenovfp
898
899 begin cpu mpcore
900 tune flags LDSCHED
901 architecture armv6k+fp
902 costs 9e
903 vendor 41
904 part b02
905 end cpu mpcore
906
907 begin cpu arm1156t2-s
908 cname arm1156t2s
909 tune flags LDSCHED
910 architecture armv6t2
911 costs v6t2
912 end cpu arm1156t2-s
913
914 begin cpu arm1156t2f-s
915 cname arm1156t2fs
916 tune flags LDSCHED
917 architecture armv6t2+fp
918 costs v6t2
919 vendor 41
920 part b56
921 end cpu arm1156t2f-s
922
923
924 # V6M Architecture Processors
925 begin cpu cortex-m1
926 cname cortexm1
927 tune flags LDSCHED
928 architecture armv6s-m
929 costs v6m
930 vendor 41
931 part c21
932 end cpu cortex-m1
933
934 begin cpu cortex-m0
935 cname cortexm0
936 tune flags LDSCHED
937 architecture armv6s-m
938 costs v6m
939 vendor 41
940 part c20
941 end cpu cortex-m0
942
943 begin cpu cortex-m0plus
944 cname cortexm0plus
945 tune flags LDSCHED
946 architecture armv6s-m
947 costs v6m
948 end cpu cortex-m0plus
949
950
951 # V6M Architecture Processors for small-multiply implementations.
952 begin cpu cortex-m1.small-multiply
953 cname cortexm1smallmultiply
954 tune for cortex-m1
955 tune flags LDSCHED SMALLMUL
956 architecture armv6s-m
957 costs v6m
958 end cpu cortex-m1.small-multiply
959
960 begin cpu cortex-m0.small-multiply
961 cname cortexm0smallmultiply
962 tune for cortex-m0
963 tune flags LDSCHED SMALLMUL
964 architecture armv6s-m
965 costs v6m
966 end cpu cortex-m0.small-multiply
967
968 begin cpu cortex-m0plus.small-multiply
969 cname cortexm0plussmallmultiply
970 tune for cortex-m0plus
971 tune flags LDSCHED SMALLMUL
972 architecture armv6s-m
973 costs v6m
974 end cpu cortex-m0plus.small-multiply
975
976
977 # V7 Architecture Processors
978 begin cpu generic-armv7-a
979 cname genericv7a
980 tune flags LDSCHED
981 architecture armv7-a+fp
982 option mp add mp
983 option sec add sec
984 option vfpv3-d16 add VFPv3 FP_DBL
985 option vfpv3 add VFPv3 FP_D32
986 option vfpv3-d16-fp16 add VFPv3 FP_DBL fp16conv
987 option vfpv3-fp16 add VFPv3 FP_D32 fp16conv
988 option vfpv4-d16 add VFPv4 FP_DBL
989 option vfpv4 add VFPv4 FP_D32
990 option simd add VFPv3 NEON
991 optalias neon simd
992 optalias neon-vfpv3 simd
993 option neon-fp16 add VFPv3 NEON fp16conv
994 option neon-vfpv4 add VFPv4 NEON
995 option nosimd remove ALL_SIMD
996 option nofp remove ALL_FP
997 costs cortex
998 end cpu generic-armv7-a
999
1000 begin cpu cortex-a5
1001 cname cortexa5
1002 tune flags LDSCHED
1003 architecture armv7-a+mp+sec+neon-fp16
1004 option nosimd remove ALL_SIMD
1005 option nofp remove ALL_FP
1006 costs cortex_a5
1007 vendor 41
1008 part c05
1009 end cpu cortex-a5
1010
1011 begin cpu cortex-a7
1012 cname cortexa7
1013 tune flags LDSCHED
1014 architecture armv7ve+simd
1015 option nosimd remove ALL_SIMD
1016 option nofp remove ALL_FP
1017 costs cortex_a7
1018 vendor 41
1019 part c07
1020 end cpu cortex-a7
1021
1022 begin cpu cortex-a8
1023 cname cortexa8
1024 tune flags LDSCHED
1025 architecture armv7-a+sec+simd
1026 option nofp remove ALL_FP
1027 costs cortex_a8
1028 vendor 41
1029 part c08
1030 end cpu cortex-a8
1031
1032 begin cpu cortex-a9
1033 cname cortexa9
1034 tune flags LDSCHED
1035 architecture armv7-a+mp+sec+neon-fp16
1036 option nosimd remove ALL_SIMD
1037 option nofp remove ALL_FP
1038 costs cortex_a9
1039 vendor 41
1040 part c09
1041 end cpu cortex-a9
1042
1043 begin cpu cortex-a12
1044 cname cortexa12
1045 tune for cortex-a17
1046 tune flags LDSCHED
1047 architecture armv7ve+simd
1048 option nofp remove ALL_FP
1049 costs cortex_a12
1050 vendor 41
1051 part c0d
1052 end cpu cortex-a12
1053
1054 begin cpu cortex-a15
1055 cname cortexa15
1056 tune flags LDSCHED
1057 architecture armv7ve+simd
1058 option nofp remove ALL_FP
1059 costs cortex_a15
1060 vendor 41
1061 part c0f
1062 end cpu cortex-a15
1063
1064 begin cpu cortex-a17
1065 cname cortexa17
1066 tune flags LDSCHED
1067 architecture armv7ve+simd
1068 option nofp remove ALL_FP
1069 costs cortex_a12
1070 vendor 41
1071 part c0e
1072 end cpu cortex-a17
1073
1074 begin cpu cortex-r4
1075 cname cortexr4
1076 tune flags LDSCHED
1077 architecture armv7-r
1078 costs cortex
1079 end cpu cortex-r4
1080
1081 begin cpu cortex-r4f
1082 cname cortexr4f
1083 tune flags LDSCHED
1084 architecture armv7-r+fp
1085 costs cortex
1086 vendor 41
1087 part c14
1088 end cpu cortex-r4f
1089
1090 begin cpu cortex-r5
1091 cname cortexr5
1092 tune flags LDSCHED
1093 architecture armv7-r+idiv+fp
1094 option nofp.dp remove FP_DBL
1095 option nofp remove ALL_FP
1096 costs cortex
1097 vendor 41
1098 part c15
1099 end cpu cortex-r5
1100
1101 begin cpu cortex-r7
1102 cname cortexr7
1103 tune flags LDSCHED
1104 architecture armv7-r+idiv+vfpv3-d16-fp16
1105 option nofp.dp remove FP_DBL
1106 option nofp remove ALL_FP
1107 costs cortex
1108 vendor 41
1109 part c17
1110 end cpu cortex-r7
1111
1112 begin cpu cortex-r8
1113 cname cortexr8
1114 tune for cortex-r7
1115 tune flags LDSCHED
1116 architecture armv7-r+idiv+vfpv3-d16-fp16
1117 option nofp.dp remove FP_DBL
1118 option nofp remove ALL_FP
1119 costs cortex
1120 vendor 41
1121 part c18
1122 end cpu cortex-r8
1123
1124 begin cpu cortex-m7
1125 cname cortexm7
1126 tune flags LDSCHED
1127 architecture armv7e-m+fp.dp
1128 isa quirk_no_volatile_ce
1129 option nofp.dp remove FP_DBL
1130 option nofp remove ALL_FP
1131 costs cortex_m7
1132 end cpu cortex-m7
1133
1134 begin cpu cortex-m4
1135 cname cortexm4
1136 tune flags LDSCHED
1137 architecture armv7e-m+fp
1138 option nofp remove ALL_FP
1139 costs v7m
1140 vendor 41
1141 part c24
1142 end cpu cortex-m4
1143
1144 begin cpu cortex-m3
1145 cname cortexm3
1146 tune flags LDSCHED
1147 architecture armv7-m
1148 isa quirk_cm3_ldrd
1149 costs v7m
1150 vendor 41
1151 part c23
1152 end cpu cortex-m3
1153
1154 begin cpu marvell-pj4
1155 tune flags LDSCHED
1156 architecture armv7-a+mp+sec+fp
1157 costs marvell_pj4
1158 end cpu marvell-pj4
1159
1160
1161 # V7 big.LITTLE implementations
1162 begin cpu cortex-a15.cortex-a7
1163 cname cortexa15cortexa7
1164 tune for cortex-a7
1165 tune flags LDSCHED
1166 architecture armv7ve+simd
1167 option nofp remove ALL_FP
1168 costs cortex_a15
1169 end cpu cortex-a15.cortex-a7
1170
1171 begin cpu cortex-a17.cortex-a7
1172 cname cortexa17cortexa7
1173 tune for cortex-a7
1174 tune flags LDSCHED
1175 architecture armv7ve+simd
1176 option nofp remove ALL_FP
1177 costs cortex_a12
1178 end cpu cortex-a17.cortex-a7
1179
1180
1181 # V8 A-profile Architecture Processors
1182 begin cpu cortex-a32
1183 cname cortexa32
1184 tune for cortex-a53
1185 tune flags LDSCHED
1186 architecture armv8-a+crc+simd
1187 option crypto add FP_ARMv8 CRYPTO
1188 option nofp remove ALL_FP
1189 costs cortex_a35
1190 vendor 41
1191 part d01
1192 end cpu cortex-a32
1193
1194 begin cpu cortex-a35
1195 cname cortexa35
1196 tune for cortex-a53
1197 tune flags LDSCHED
1198 architecture armv8-a+crc+simd
1199 option crypto add FP_ARMv8 CRYPTO
1200 option nofp remove ALL_FP
1201 costs cortex_a35
1202 vendor 41
1203 part d04
1204 end cpu cortex-a35
1205
1206 begin cpu cortex-a53
1207 cname cortexa53
1208 tune flags LDSCHED
1209 architecture armv8-a+crc+simd
1210 option crypto add FP_ARMv8 CRYPTO
1211 option nofp remove ALL_FP
1212 costs cortex_a53
1213 vendor 41
1214 part d03
1215 end cpu cortex-a53
1216
1217 begin cpu cortex-a57
1218 cname cortexa57
1219 tune flags LDSCHED
1220 architecture armv8-a+crc+simd
1221 option crypto add FP_ARMv8 CRYPTO
1222 costs cortex_a57
1223 vendor 41
1224 part d07
1225 end cpu cortex-a57
1226
1227 begin cpu cortex-a72
1228 cname cortexa72
1229 tune for cortex-a57
1230 tune flags LDSCHED
1231 architecture armv8-a+crc+simd
1232 option crypto add FP_ARMv8 CRYPTO
1233 costs cortex_a57
1234 vendor 41
1235 part d08
1236 end cpu cortex-a72
1237
1238 begin cpu cortex-a73
1239 cname cortexa73
1240 tune for cortex-a57
1241 tune flags LDSCHED
1242 architecture armv8-a+crc+simd
1243 option crypto add FP_ARMv8 CRYPTO
1244 costs cortex_a73
1245 vendor 41
1246 part d09
1247 end cpu cortex-a73
1248
1249 begin cpu exynos-m1
1250 cname exynosm1
1251 tune flags LDSCHED
1252 architecture armv8-a+crc+simd
1253 option crypto add FP_ARMv8 CRYPTO
1254 costs exynosm1
1255 end cpu exynos-m1
1256
1257 begin cpu xgene1
1258 tune flags LDSCHED
1259 architecture armv8-a+simd
1260 option crypto add FP_ARMv8 CRYPTO
1261 costs xgene1
1262 end cpu xgene1
1263
1264 # V8 A-profile big.LITTLE implementations
1265 begin cpu cortex-a57.cortex-a53
1266 cname cortexa57cortexa53
1267 tune for cortex-a53
1268 tune flags LDSCHED
1269 architecture armv8-a+crc+simd
1270 option crypto add FP_ARMv8 CRYPTO
1271 costs cortex_a57
1272 end cpu cortex-a57.cortex-a53
1273
1274 begin cpu cortex-a72.cortex-a53
1275 cname cortexa72cortexa53
1276 tune for cortex-a53
1277 tune flags LDSCHED
1278 architecture armv8-a+crc+simd
1279 option crypto add FP_ARMv8 CRYPTO
1280 costs cortex_a57
1281 end cpu cortex-a72.cortex-a53
1282
1283 begin cpu cortex-a73.cortex-a35
1284 cname cortexa73cortexa35
1285 tune for cortex-a53
1286 tune flags LDSCHED
1287 architecture armv8-a+crc+simd
1288 option crypto add FP_ARMv8 CRYPTO
1289 costs cortex_a73
1290 end cpu cortex-a73.cortex-a35
1291
1292 begin cpu cortex-a73.cortex-a53
1293 cname cortexa73cortexa53
1294 tune for cortex-a53
1295 tune flags LDSCHED
1296 architecture armv8-a+crc+simd
1297 option crypto add FP_ARMv8 CRYPTO
1298 costs cortex_a73
1299 end cpu cortex-a73.cortex-a53
1300
1301
1302 # ARMv8.2 A-profile Architecture Processors
1303 begin cpu cortex-a55
1304 cname cortexa55
1305 tune for cortex-a53
1306 tune flags LDSCHED
1307 architecture armv8.2-a+fp16+dotprod
1308 option crypto add FP_ARMv8 CRYPTO
1309 option nofp remove ALL_FP
1310 costs cortex_a53
1311 vendor 41
1312 part d05
1313 end cpu cortex-a55
1314
1315 begin cpu cortex-a75
1316 cname cortexa75
1317 tune for cortex-a57
1318 tune flags LDSCHED
1319 architecture armv8.2-a+fp16+dotprod
1320 option crypto add FP_ARMv8 CRYPTO
1321 costs cortex_a73
1322 vendor 41
1323 part d0a
1324 end cpu cortex-a75
1325
1326 begin cpu cortex-a76
1327 cname cortexa76
1328 tune for cortex-a57
1329 tune flags LDSCHED
1330 architecture armv8.2-a+fp16+dotprod
1331 option crypto add FP_ARMv8 CRYPTO
1332 costs cortex_a57
1333 vendor 41
1334 part d0b
1335 end cpu cortex-a76
1336
1337 begin cpu cortex-a76ae
1338 cname cortexa76ae
1339 tune for cortex-a57
1340 tune flags LDSCHED
1341 architecture armv8.2-a+fp16+dotprod
1342 option crypto add FP_ARMv8 CRYPTO
1343 costs cortex_a57
1344 vendor 41
1345 part d0e
1346 end cpu cortex-a76ae
1347
1348 begin cpu cortex-a77
1349 cname cortexa77
1350 tune for cortex-a57
1351 tune flags LDSCHED
1352 architecture armv8.2-a+fp16+dotprod
1353 option crypto add FP_ARMv8 CRYPTO
1354 costs cortex_a57
1355 vendor 41
1356 part d0d
1357 end cpu cortex-a77
1358
1359 begin cpu neoverse-n1
1360 cname neoversen1
1361 alias !ares
1362 tune for cortex-a57
1363 tune flags LDSCHED
1364 architecture armv8.2-a+fp16+dotprod
1365 option crypto add FP_ARMv8 CRYPTO
1366 costs cortex_a57
1367 vendor 41
1368 part d0c
1369 end cpu neoverse-n1
1370
1371 # ARMv8.2 A-profile ARM DynamIQ big.LITTLE implementations
1372 begin cpu cortex-a75.cortex-a55
1373 cname cortexa75cortexa55
1374 tune for cortex-a53
1375 tune flags LDSCHED
1376 architecture armv8.2-a+fp16+dotprod
1377 option crypto add FP_ARMv8 CRYPTO
1378 costs cortex_a73
1379 end cpu cortex-a75.cortex-a55
1380
1381 begin cpu cortex-a76.cortex-a55
1382 cname cortexa76cortexa55
1383 tune for cortex-a53
1384 tune flags LDSCHED
1385 architecture armv8.2-a+fp16+dotprod
1386 option crypto add FP_ARMv8 CRYPTO
1387 costs cortex_a57
1388 end cpu cortex-a76.cortex-a55
1389
1390 # V8 M-profile implementations.
1391 begin cpu cortex-m23
1392 cname cortexm23
1393 tune flags LDSCHED
1394 architecture armv8-m.base
1395 costs v6m
1396 end cpu cortex-m23
1397
1398 begin cpu cortex-m33
1399 cname cortexm33
1400 tune flags LDSCHED
1401 architecture armv8-m.main+dsp+fp
1402 option nofp remove ALL_FP
1403 option nodsp remove armv7em
1404 costs v7m
1405 end cpu cortex-m33
1406
1407 begin cpu cortex-m35p
1408 cname cortexm35p
1409 tune flags LDSCHED
1410 architecture armv8-m.main+dsp+fp
1411 option nofp remove ALL_FP
1412 option nodsp remove armv7em
1413 costs v7m
1414 end cpu cortex-m35p
1415
1416 # V8 R-profile implementations.
1417 begin cpu cortex-r52
1418 cname cortexr52
1419 tune flags LDSCHED
1420 architecture armv8-r+crc+simd
1421 option nofp.dp remove FP_DBL ALL_SIMD
1422 costs cortex
1423 vendor 41
1424 part d13
1425 end cpu cortex-r52
1426
1427 # FPU entries
1428 # format:
1429 # begin fpu <name>
1430 # isa <isa-flags-list>
1431 # end fpu <name>
1432
1433 begin fpu vfp
1434 isa VFPv2 FP_DBL
1435 end fpu vfp
1436
1437 begin fpu vfpv2
1438 isa VFPv2 FP_DBL
1439 end fpu vfpv2
1440
1441 begin fpu vfpv3
1442 isa VFPv3 FP_D32
1443 end fpu vfpv3
1444
1445 begin fpu vfpv3-fp16
1446 isa VFPv3 FP_D32 fp16conv
1447 end fpu vfpv3-fp16
1448
1449 begin fpu vfpv3-d16
1450 isa VFPv3 FP_DBL
1451 end fpu vfpv3-d16
1452
1453 begin fpu vfpv3-d16-fp16
1454 isa VFPv3 FP_DBL fp16conv
1455 end fpu vfpv3-d16-fp16
1456
1457 begin fpu vfpv3xd
1458 isa VFPv3
1459 end fpu vfpv3xd
1460
1461 begin fpu vfpv3xd-fp16
1462 isa VFPv3 fp16conv
1463 end fpu vfpv3xd-fp16
1464
1465 begin fpu neon
1466 isa VFPv3 NEON
1467 end fpu neon
1468
1469 begin fpu neon-vfpv3
1470 isa VFPv3 NEON
1471 end fpu neon-vfpv3
1472
1473 begin fpu neon-fp16
1474 isa VFPv3 NEON fp16conv
1475 end fpu neon-fp16
1476
1477 begin fpu vfpv4
1478 isa VFPv4 FP_D32
1479 end fpu vfpv4
1480
1481 begin fpu neon-vfpv4
1482 isa VFPv4 NEON
1483 end fpu neon-vfpv4
1484
1485 begin fpu vfpv4-d16
1486 isa VFPv4 FP_DBL
1487 end fpu vfpv4-d16
1488
1489 begin fpu fpv4-sp-d16
1490 isa VFPv4
1491 end fpu fpv4-sp-d16
1492
1493 begin fpu fpv5-sp-d16
1494 isa FPv5
1495 end fpu fpv5-sp-d16
1496
1497 begin fpu fpv5-d16
1498 isa FPv5 FP_DBL
1499 end fpu fpv5-d16
1500
1501 begin fpu fp-armv8
1502 isa FP_ARMv8
1503 end fpu fp-armv8
1504
1505 begin fpu neon-fp-armv8
1506 isa FP_ARMv8 NEON
1507 end fpu neon-fp-armv8
1508
1509 begin fpu crypto-neon-fp-armv8
1510 isa FP_ARMv8 CRYPTO
1511 end fpu crypto-neon-fp-armv8
1512
1513 # Compatibility aliases.
1514 begin fpu vfp3
1515 isa VFPv3 FP_D32
1516 end fpu vfp3