]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/config/arm/arm-cpus.in
3a55f6ac6d2b104400554a7b05cf8d7791341461
[thirdparty/gcc.git] / gcc / config / arm / arm-cpus.in
1 # CPU, FPU and architecture specifications for ARM.
2 #
3 # Copyright (C) 2011-2019 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 ALL_SIMD_INTERNAL dotprod fp16fml
217
218 # List of all FPU bits to strip out if -mfpu is used to override the
219 # default. fp16 is deliberately missing from this list.
220 define fgroup ALL_FPU_INTERNAL vfpv2 vfpv3 vfpv4 fpv5 fp16conv fp_dbl ALL_SIMD_INTERNAL
221
222 # Similarly, but including fp16 and other extensions that aren't part of
223 # -mfpu support.
224 define fgroup ALL_FP fp16 ALL_FPU_INTERNAL
225
226 define fgroup ARMv4 armv4 notm
227 define fgroup ARMv4t ARMv4 thumb
228 define fgroup ARMv5t ARMv4t armv5t
229 define fgroup ARMv5te ARMv5t armv5te
230 define fgroup ARMv5tej ARMv5te
231 define fgroup ARMv6 ARMv5te armv6 be8
232 define fgroup ARMv6j ARMv6
233 define fgroup ARMv6k ARMv6 armv6k
234 define fgroup ARMv6z ARMv6
235 define fgroup ARMv6kz ARMv6k quirk_armv6kz
236 define fgroup ARMv6zk ARMv6k
237 define fgroup ARMv6t2 ARMv6 thumb2
238 # This is suspect. ARMv6-m doesn't really pull in any useful features
239 # from ARMv5* or ARMv6.
240 define fgroup ARMv6m armv4 thumb armv5t armv5te armv6 be8
241 # This is suspect, the 'common' ARMv7 subset excludes the thumb2 'DSP' and
242 # integer SIMD instructions that are in ARMv6T2. */
243 define fgroup ARMv7 ARMv6m thumb2 armv7
244
245 define fgroup ARMv7a ARMv7 notm armv6k
246 define fgroup ARMv7ve ARMv7a adiv tdiv lpae mp sec
247 define fgroup ARMv7r ARMv7a tdiv
248 define fgroup ARMv7m ARMv7 tdiv
249 define fgroup ARMv7em ARMv7m armv7em
250 define fgroup ARMv8a ARMv7ve armv8
251 define fgroup ARMv8_1a ARMv8a crc32 armv8_1
252 define fgroup ARMv8_2a ARMv8_1a armv8_2
253 define fgroup ARMv8_3a ARMv8_2a armv8_3
254 define fgroup ARMv8_4a ARMv8_3a armv8_4
255 define fgroup ARMv8_5a ARMv8_4a armv8_5 sb predres
256 define fgroup ARMv8m_base ARMv6m armv8 cmse tdiv
257 define fgroup ARMv8m_main ARMv7m armv8 cmse
258 define fgroup ARMv8r ARMv8a
259
260 # Useful combinations.
261 define fgroup VFPv2 vfpv2
262 define fgroup VFPv3 VFPv2 vfpv3
263 define fgroup VFPv4 VFPv3 vfpv4 fp16conv
264 define fgroup FPv5 VFPv4 fpv5
265
266 define fgroup FP_DBL fp_dbl
267 define fgroup FP_D32 FP_DBL fp_d32
268 define fgroup FP_ARMv8 FPv5 FP_D32
269 define fgroup NEON FP_D32 neon
270 define fgroup CRYPTO NEON crypto
271 define fgroup DOTPROD NEON dotprod
272
273 # List of all quirk bits to strip out when comparing CPU features with
274 # architectures.
275 # xscale isn't really a 'quirk', but it isn't an architecture either and we
276 # need to ignore it for matching purposes.
277 define fgroup ALL_QUIRKS quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd xscale
278
279 # Architecture entries
280 # format:
281 # begin arch <name>
282 # tune for <cpu>
283 # [tune flags <list>]
284 # base <name>
285 # [profile <A|R|M>]
286 # isa <isa-flags-list>
287 # end arch <name>
288 #
289
290 begin arch armv4
291 tune for arm7tdmi
292 tune flags CO_PROC
293 base 4
294 isa ARMv4
295 end arch armv4
296
297 begin arch armv4t
298 tune for arm7tdmi
299 tune flags CO_PROC
300 base 4T
301 isa ARMv4t
302 end arch armv4t
303
304 begin arch armv5t
305 tune for arm10tdmi
306 tune flags CO_PROC
307 base 5T
308 isa ARMv5t
309 end arch armv5t
310
311 begin arch armv5te
312 tune for arm1026ej-s
313 tune flags CO_PROC
314 base 5TE
315 isa ARMv5te
316 option fp add VFPv2 FP_DBL
317 optalias vfpv2 fp
318 option nofp remove ALL_FP
319 end arch armv5te
320
321 begin arch armv5tej
322 tune for arm1026ej-s
323 tune flags CO_PROC
324 base 5TEJ
325 isa ARMv5tej
326 option fp add VFPv2 FP_DBL
327 optalias vfpv2 fp
328 option nofp remove ALL_FP
329 end arch armv5tej
330
331 begin arch armv6
332 tune for arm1136j-s
333 tune flags CO_PROC
334 base 6
335 isa ARMv6
336 option fp add VFPv2 FP_DBL
337 optalias vfpv2 fp
338 option nofp remove ALL_FP
339 end arch armv6
340
341 begin arch armv6j
342 tune for arm1136j-s
343 tune flags CO_PROC
344 base 6J
345 isa ARMv6j
346 option fp add VFPv2 FP_DBL
347 optalias vfpv2 fp
348 option nofp remove ALL_FP
349 end arch armv6j
350
351 begin arch armv6k
352 tune for mpcore
353 tune flags CO_PROC
354 base 6K
355 isa ARMv6k
356 option fp add VFPv2 FP_DBL
357 optalias vfpv2 fp
358 option nofp remove ALL_FP
359 end arch armv6k
360
361 begin arch armv6z
362 tune for arm1176jz-s
363 tune flags CO_PROC
364 base 6Z
365 isa ARMv6z
366 option fp add VFPv2 FP_DBL
367 optalias vfpv2 fp
368 option nofp remove ALL_FP
369 end arch armv6z
370
371 begin arch armv6kz
372 tune for arm1176jz-s
373 tune flags CO_PROC
374 base 6KZ
375 isa ARMv6kz
376 option fp add VFPv2 FP_DBL
377 optalias vfpv2 fp
378 option nofp remove ALL_FP
379 end arch armv6kz
380
381 begin arch armv6zk
382 tune for arm1176jz-s
383 tune flags CO_PROC
384 base 6KZ
385 isa ARMv6kz
386 option fp add VFPv2 FP_DBL
387 optalias vfpv2 fp
388 option nofp remove ALL_FP
389 end arch armv6zk
390
391 begin arch armv6t2
392 tune for arm1156t2-s
393 tune flags CO_PROC
394 base 6T2
395 isa ARMv6t2
396 option fp add VFPv2 FP_DBL
397 optalias vfpv2 fp
398 option nofp remove ALL_FP
399 end arch armv6t2
400
401 begin arch armv6-m
402 tune for cortex-m1
403 base 6M
404 profile M
405 isa ARMv6m
406 end arch armv6-m
407
408 # This is now equivalent to armv6-m, but we keep it because some
409 # versions of GAS still distinguish between the two.
410 begin arch armv6s-m
411 tune for cortex-m1
412 base 6M
413 profile M
414 isa ARMv6m
415 end arch armv6s-m
416
417 begin arch armv7
418 tune for cortex-a8
419 tune flags CO_PROC
420 base 7
421 isa ARMv7
422 # fp => VFPv3-d16 (only useful for the A+R profile subset).
423 option fp add VFPv3 FP_DBL
424 optalias vfpv3-d16 fp
425 option nofp remove ALL_FP
426 end arch armv7
427
428 begin arch armv7-a
429 tune for cortex-a8
430 tune flags CO_PROC
431 base 7A
432 profile A
433 isa ARMv7a
434 option mp add mp
435 option sec add sec
436 # fp => VFPv3-d16, simd => neon-vfpv3
437 option fp add VFPv3 FP_DBL
438 optalias vfpv3-d16 fp
439 option vfpv3 add VFPv3 FP_D32
440 option vfpv3-d16-fp16 add VFPv3 FP_DBL fp16conv
441 option vfpv3-fp16 add VFPv3 FP_DBL FP_D32 fp16conv
442 option vfpv4-d16 add VFPv4 FP_DBL
443 option vfpv4 add VFPv4 FP_D32
444 option simd add VFPv3 NEON
445 optalias neon simd
446 optalias neon-vfpv3 simd
447 option neon-fp16 add VFPv3 NEON fp16conv
448 option neon-vfpv4 add VFPv4 NEON
449 option nosimd remove ALL_SIMD
450 option nofp remove ALL_FP
451 end arch armv7-a
452
453 begin arch armv7ve
454 tune for cortex-a8
455 tune flags CO_PROC
456 base 7A
457 profile A
458 isa ARMv7ve
459 # fp => VFPv4-d16, simd => neon-vfpv4
460 option vfpv3-d16 add VFPv3 FP_DBL
461 option vfpv3 add VFPv3 FP_D32
462 option vfpv3-d16-fp16 add VFPv3 FP_DBL fp16conv
463 option vfpv3-fp16 add VFPv3 FP_DBL FP_D32 fp16conv
464 option fp add VFPv4 FP_DBL
465 optalias vfpv4-d16 fp
466 option vfpv4 add VFPv4 FP_D32
467 option neon add VFPv3 NEON
468 optalias neon-vfpv3 neon
469 option neon-fp16 add VFPv3 NEON fp16conv
470 option simd add VFPv4 NEON
471 optalias neon-vfpv4 simd
472 option nosimd remove ALL_SIMD
473 option nofp remove ALL_FP
474 end arch armv7ve
475
476 begin arch armv7-r
477 tune for cortex-r4
478 tune flags CO_PROC
479 base 7R
480 profile R
481 isa ARMv7r
482 # ARMv7-r uses VFPv3-d16
483 option fp.sp add VFPv3
484 optalias vfpv3xd fp.sp
485 option fp add VFPv3 FP_DBL
486 optalias vfpv3-d16 fp
487 option vfpv3xd-fp16 add VFPv3 fp16conv
488 option vfpv3-d16-fp16 add VFPv3 FP_DBL fp16conv
489 option idiv add adiv
490 option nofp remove ALL_FP
491 option noidiv remove adiv
492 end arch armv7-r
493
494 begin arch armv7-m
495 tune for cortex-m3
496 tune flags CO_PROC
497 base 7M
498 profile M
499 isa ARMv7m
500 # In theory FP is permitted in v7-m, but in practice no implementations exist.
501 # leave it out for now.
502 end arch armv7-m
503
504 begin arch armv7e-m
505 tune for cortex-m4
506 tune flags CO_PROC
507 base 7EM
508 profile M
509 isa ARMv7em
510 # fp => VFPv4-sp-d16; fpv5 => FPv5-sp-d16; fp.dp => FPv5-d16
511 option fp add VFPv4
512 optalias vfpv4-sp-d16 fp
513 option fpv5 add FPv5
514 option fp.dp add FPv5 FP_DBL
515 optalias fpv5-d16 fp.dp
516 option nofp remove ALL_FP
517 end arch armv7e-m
518
519 begin arch armv8-a
520 tune for cortex-a53
521 tune flags CO_PROC
522 base 8A
523 profile A
524 isa ARMv8a
525 option crc add crc32
526 option simd add FP_ARMv8 NEON
527 option crypto add FP_ARMv8 CRYPTO
528 option nocrypto remove ALL_CRYPTO
529 option nofp remove ALL_FP
530 option sb add sb
531 option predres add predres
532 end arch armv8-a
533
534 begin arch armv8.1-a
535 tune for cortex-a53
536 tune flags CO_PROC
537 base 8A
538 profile A
539 isa ARMv8_1a
540 option simd add FP_ARMv8 NEON
541 option crypto add FP_ARMv8 CRYPTO
542 option nocrypto remove ALL_CRYPTO
543 option nofp remove ALL_FP
544 option sb add sb
545 option predres add predres
546 end arch armv8.1-a
547
548 begin arch armv8.2-a
549 tune for cortex-a53
550 tune flags CO_PROC
551 base 8A
552 profile A
553 isa ARMv8_2a
554 option simd add FP_ARMv8 NEON
555 option fp16 add fp16 FP_ARMv8 NEON
556 option fp16fml add fp16fml fp16 FP_ARMv8 NEON
557 option crypto add FP_ARMv8 CRYPTO
558 option nocrypto remove ALL_CRYPTO
559 option nofp remove ALL_FP
560 option dotprod add FP_ARMv8 DOTPROD
561 option sb add sb
562 option predres add predres
563 end arch armv8.2-a
564
565 begin arch armv8.3-a
566 tune for cortex-a53
567 tune flags CO_PROC
568 base 8A
569 profile A
570 isa ARMv8_3a
571 option simd add FP_ARMv8 NEON
572 option fp16 add fp16 FP_ARMv8 NEON
573 option fp16fml add fp16fml fp16 FP_ARMv8 NEON
574 option crypto add FP_ARMv8 CRYPTO
575 option nocrypto remove ALL_CRYPTO
576 option nofp remove ALL_FP
577 option dotprod add FP_ARMv8 DOTPROD
578 option sb add sb
579 option predres add predres
580 end arch armv8.3-a
581
582 begin arch armv8.4-a
583 tune for cortex-a53
584 tune flags CO_PROC
585 base 8A
586 profile A
587 isa ARMv8_4a
588 option simd add FP_ARMv8 DOTPROD
589 option fp16 add fp16 fp16fml FP_ARMv8 DOTPROD
590 option crypto add FP_ARMv8 CRYPTO DOTPROD
591 option nocrypto remove ALL_CRYPTO
592 option nofp remove ALL_FP
593 option sb add sb
594 option predres add predres
595 end arch armv8.4-a
596
597 begin arch armv8.5-a
598 tune for cortex-a53
599 tune flags CO_PROC
600 base 8A
601 profile A
602 isa ARMv8_5a
603 option simd add FP_ARMv8 DOTPROD
604 option fp16 add fp16 fp16fml FP_ARMv8 DOTPROD
605 option crypto add FP_ARMv8 CRYPTO DOTPROD
606 option nocrypto remove ALL_CRYPTO
607 option nofp remove ALL_FP
608 end arch armv8.5-a
609
610 begin arch armv8-m.base
611 tune for cortex-m23
612 base 8M_BASE
613 profile M
614 isa ARMv8m_base
615 end arch armv8-m.base
616
617 begin arch armv8-m.main
618 tune for cortex-m7
619 tune flags CO_PROC
620 base 8M_MAIN
621 profile M
622 isa ARMv8m_main
623 option dsp add armv7em
624 # fp => FPv5-sp-d16; fp.dp => FPv5-d16
625 option fp add FPv5
626 option fp.dp add FPv5 FP_DBL
627 option nofp remove ALL_FP
628 option nodsp remove armv7em
629 end arch armv8-m.main
630
631 begin arch armv8-r
632 tune for cortex-r52
633 tune flags CO_PROC
634 base 8R
635 profile R
636 isa ARMv8r
637 option crc add crc32
638 # fp.sp => fp-armv8 (d16); simd => simd + fp-armv8 + d32 + double precision
639 # note: no fp option for fp-armv8 (d16) + double precision at the moment
640 option fp.sp add FPv5
641 option simd add FP_ARMv8 NEON
642 option crypto add FP_ARMv8 CRYPTO
643 option nocrypto remove ALL_CRYPTO
644 option nofp remove ALL_FP
645 end arch armv8-r
646
647 begin arch iwmmxt
648 tune for iwmmxt
649 tune flags LDSCHED STRONG XSCALE
650 base 5TE
651 isa ARMv5te xscale iwmmxt
652 end arch iwmmxt
653
654 begin arch iwmmxt2
655 tune for iwmmxt2
656 tune flags LDSCHED STRONG XSCALE
657 base 5TE
658 isa ARMv5te xscale iwmmxt iwmmxt2
659 end arch iwmmxt2
660
661 # CPU entries
662 # format:
663 # begin cpu <name>
664 # [cname <c-compatible-name>]
665 # [alias <name>+]
666 # [tune for <cpu-name>]
667 # [tune flags <list>]
668 # architecture <name>
669 # [isa <additional-isa-flags-list>]
670 # [option <name> add|remove <isa-list>]*
671 # [optalias <name> <optname>]*
672 # [costs <name>]
673 # [vendor <vendor-id>
674 # [part <part-id> [minrev [maxrev]]]
675 # end cpu <name>
676 #
677 # If omitted, cname is formed from transforming the cpuname to convert
678 # non-valid punctuation characters to '_'.
679 # Any number of alias names may be specified for a CPU. If the name starts
680 # with a '!' then it will be recognized as a valid name, but will not
681 # be printed in any help text listing permitted CPUs.
682 # If specified, tune for specifies a CPU target to use for tuning this core.
683 # isa flags are appended to those defined by the architecture.
684 # Each add option must have a distinct feature set and each remove
685 # option must similarly have a distinct feature set. Option aliases can be
686 # added with the optalias statement.
687 # Vendor, part and revision information is used for native CPU and architecture
688 # detection. All values must be in hex (lower case) with the leading '0x'
689 # omitted. For example the cortex-a9 will have vendor 41 and part c09.
690 # Revision information is used to match a subrange of part
691 # revisions: minrev <= detected <= maxrev.
692 # If a minrev or maxrev are omitted then minrev defaults to zero and maxrev
693 # to infinity.
694 # Revision information is not implemented yet; no part uses it.
695
696 # V4 Architecture Processors
697 begin cpu arm8
698 tune flags LDSCHED
699 architecture armv4
700 costs fastmul
701 end cpu arm8
702
703 begin cpu arm810
704 tune flags LDSCHED
705 architecture armv4
706 costs fastmul
707 end cpu arm810
708
709 begin cpu strongarm
710 alias strongarm110 !strongarm1100 !strongarm1110
711 tune flags LDSCHED STRONG
712 architecture armv4
713 costs strongarm
714 end cpu strongarm
715
716 begin cpu fa526
717 tune flags LDSCHED
718 architecture armv4
719 costs fastmul
720 end cpu fa526
721
722 begin cpu fa626
723 tune flags LDSCHED
724 architecture armv4
725 costs fastmul
726 end cpu fa626
727
728
729 # V4T Architecture Processors
730 begin cpu arm7tdmi
731 alias arm7tdmi-s
732 tune flags CO_PROC
733 architecture armv4t
734 costs fastmul
735 end cpu arm7tdmi
736
737 begin cpu arm710t
738 alias arm720t arm740t
739 tune flags WBUF
740 architecture armv4t
741 costs fastmul
742 end cpu arm710t
743
744 begin cpu arm9
745 tune flags LDSCHED
746 architecture armv4t
747 costs fastmul
748 end cpu arm9
749
750 begin cpu arm9tdmi
751 tune flags LDSCHED
752 architecture armv4t
753 costs fastmul
754 end cpu arm9tdmi
755
756 begin cpu arm920t
757 alias arm920 arm922t arm940t ep9312
758 tune flags LDSCHED
759 architecture armv4t
760 costs fastmul
761 end cpu arm920t
762
763
764 # V5T Architecture Processors
765 # These used VFPv1 which isn't supported by GCC
766 begin cpu arm10tdmi
767 alias arm1020t
768 tune flags LDSCHED
769 architecture armv5t
770 costs fastmul
771 end cpu arm10tdmi
772
773
774 # V5TE Architecture Processors
775 begin cpu arm9e
776 alias arm946e-s arm966e-s arm968e-s
777 tune flags LDSCHED
778 architecture armv5te+fp
779 option nofp remove ALL_FP
780 costs 9e
781 end cpu arm9e
782
783 begin cpu arm10e
784 alias arm1020e arm1022e
785 tune flags LDSCHED
786 architecture armv5te+fp
787 option nofp remove ALL_FP
788 costs fastmul
789 end cpu arm10e
790
791 begin cpu xscale
792 tune flags LDSCHED XSCALE
793 architecture armv5te
794 isa xscale
795 costs xscale
796 end cpu xscale
797
798 begin cpu iwmmxt
799 tune flags LDSCHED XSCALE
800 architecture iwmmxt
801 costs xscale
802 end cpu iwmmxt
803
804 begin cpu iwmmxt2
805 tune flags LDSCHED XSCALE
806 architecture iwmmxt2
807 costs xscale
808 end cpu iwmmxt2
809
810 begin cpu fa606te
811 tune flags LDSCHED
812 architecture armv5te
813 costs 9e
814 end cpu fa606te
815
816 begin cpu fa626te
817 tune flags LDSCHED
818 architecture armv5te
819 costs 9e
820 end cpu fa626te
821
822 begin cpu fmp626
823 tune flags LDSCHED
824 architecture armv5te
825 costs 9e
826 end cpu fmp626
827
828 begin cpu fa726te
829 tune flags LDSCHED
830 architecture armv5te
831 costs fa726te
832 end cpu fa726te
833
834
835 # V5TEJ Architecture Processors
836 begin cpu arm926ej-s
837 cname arm926ejs
838 tune flags LDSCHED
839 architecture armv5tej+fp
840 option nofp remove ALL_FP
841 costs 9e
842 vendor 41
843 part 926
844 end cpu arm926ej-s
845
846 begin cpu arm1026ej-s
847 cname arm1026ejs
848 tune flags LDSCHED
849 architecture armv5tej+fp
850 option nofp remove ALL_FP
851 costs 9e
852 vendor 41
853 part a26
854 end cpu arm1026ej-s
855
856
857 # V6 Architecture Processors
858 begin cpu arm1136j-s
859 cname arm1136js
860 tune flags LDSCHED
861 architecture armv6j
862 costs 9e
863 end cpu arm1136j-s
864
865 begin cpu arm1136jf-s
866 cname arm1136jfs
867 tune flags LDSCHED
868 architecture armv6j+fp
869 costs 9e
870 vendor 41
871 part b36
872 end cpu arm1136jf-s
873
874 begin cpu arm1176jz-s
875 cname arm1176jzs
876 tune flags LDSCHED
877 architecture armv6kz
878 costs 9e
879 end cpu arm1176jz-s
880
881 begin cpu arm1176jzf-s
882 cname arm1176jzfs
883 tune flags LDSCHED
884 architecture armv6kz+fp
885 costs 9e
886 vendor 41
887 part b76
888 end cpu arm1176jzf-s
889
890 begin cpu mpcorenovfp
891 tune flags LDSCHED
892 architecture armv6k
893 costs 9e
894 end cpu mpcorenovfp
895
896 begin cpu mpcore
897 tune flags LDSCHED
898 architecture armv6k+fp
899 costs 9e
900 vendor 41
901 part b02
902 end cpu mpcore
903
904 begin cpu arm1156t2-s
905 cname arm1156t2s
906 tune flags LDSCHED
907 architecture armv6t2
908 costs v6t2
909 end cpu arm1156t2-s
910
911 begin cpu arm1156t2f-s
912 cname arm1156t2fs
913 tune flags LDSCHED
914 architecture armv6t2+fp
915 costs v6t2
916 vendor 41
917 part b56
918 end cpu arm1156t2f-s
919
920
921 # V6M Architecture Processors
922 begin cpu cortex-m1
923 cname cortexm1
924 tune flags LDSCHED
925 architecture armv6s-m
926 costs v6m
927 vendor 41
928 part c21
929 end cpu cortex-m1
930
931 begin cpu cortex-m0
932 cname cortexm0
933 tune flags LDSCHED
934 architecture armv6s-m
935 costs v6m
936 vendor 41
937 part c20
938 end cpu cortex-m0
939
940 begin cpu cortex-m0plus
941 cname cortexm0plus
942 tune flags LDSCHED
943 architecture armv6s-m
944 costs v6m
945 end cpu cortex-m0plus
946
947
948 # V6M Architecture Processors for small-multiply implementations.
949 begin cpu cortex-m1.small-multiply
950 cname cortexm1smallmultiply
951 tune for cortex-m1
952 tune flags LDSCHED SMALLMUL
953 architecture armv6s-m
954 costs v6m
955 end cpu cortex-m1.small-multiply
956
957 begin cpu cortex-m0.small-multiply
958 cname cortexm0smallmultiply
959 tune for cortex-m0
960 tune flags LDSCHED SMALLMUL
961 architecture armv6s-m
962 costs v6m
963 end cpu cortex-m0.small-multiply
964
965 begin cpu cortex-m0plus.small-multiply
966 cname cortexm0plussmallmultiply
967 tune for cortex-m0plus
968 tune flags LDSCHED SMALLMUL
969 architecture armv6s-m
970 costs v6m
971 end cpu cortex-m0plus.small-multiply
972
973
974 # V7 Architecture Processors
975 begin cpu generic-armv7-a
976 cname genericv7a
977 tune flags LDSCHED
978 architecture armv7-a+fp
979 option mp add mp
980 option sec add sec
981 option vfpv3-d16 add VFPv3 FP_DBL
982 option vfpv3 add VFPv3 FP_D32
983 option vfpv3-d16-fp16 add VFPv3 FP_DBL fp16conv
984 option vfpv3-fp16 add VFPv3 FP_D32 fp16conv
985 option vfpv4-d16 add VFPv4 FP_DBL
986 option vfpv4 add VFPv4 FP_D32
987 option simd add VFPv3 NEON
988 optalias neon simd
989 optalias neon-vfpv3 simd
990 option neon-fp16 add VFPv3 NEON fp16conv
991 option neon-vfpv4 add VFPv4 NEON
992 option nosimd remove ALL_SIMD
993 option nofp remove ALL_FP
994 costs cortex
995 end cpu generic-armv7-a
996
997 begin cpu cortex-a5
998 cname cortexa5
999 tune flags LDSCHED
1000 architecture armv7-a+mp+sec+neon-fp16
1001 option nosimd remove ALL_SIMD
1002 option nofp remove ALL_FP
1003 costs cortex_a5
1004 vendor 41
1005 part c05
1006 end cpu cortex-a5
1007
1008 begin cpu cortex-a7
1009 cname cortexa7
1010 tune flags LDSCHED
1011 architecture armv7ve+simd
1012 option nosimd remove ALL_SIMD
1013 option nofp remove ALL_FP
1014 costs cortex_a7
1015 vendor 41
1016 part c07
1017 end cpu cortex-a7
1018
1019 begin cpu cortex-a8
1020 cname cortexa8
1021 tune flags LDSCHED
1022 architecture armv7-a+sec+simd
1023 option nofp remove ALL_FP
1024 costs cortex_a8
1025 vendor 41
1026 part c08
1027 end cpu cortex-a8
1028
1029 begin cpu cortex-a9
1030 cname cortexa9
1031 tune flags LDSCHED
1032 architecture armv7-a+mp+sec+neon-fp16
1033 option nosimd remove ALL_SIMD
1034 option nofp remove ALL_FP
1035 costs cortex_a9
1036 vendor 41
1037 part c09
1038 end cpu cortex-a9
1039
1040 begin cpu cortex-a12
1041 cname cortexa12
1042 tune for cortex-a17
1043 tune flags LDSCHED
1044 architecture armv7ve+simd
1045 option nofp remove ALL_FP
1046 costs cortex_a12
1047 vendor 41
1048 part c0d
1049 end cpu cortex-a12
1050
1051 begin cpu cortex-a15
1052 cname cortexa15
1053 tune flags LDSCHED
1054 architecture armv7ve+simd
1055 option nofp remove ALL_FP
1056 costs cortex_a15
1057 vendor 41
1058 part c0f
1059 end cpu cortex-a15
1060
1061 begin cpu cortex-a17
1062 cname cortexa17
1063 tune flags LDSCHED
1064 architecture armv7ve+simd
1065 option nofp remove ALL_FP
1066 costs cortex_a12
1067 vendor 41
1068 part c0e
1069 end cpu cortex-a17
1070
1071 begin cpu cortex-r4
1072 cname cortexr4
1073 tune flags LDSCHED
1074 architecture armv7-r
1075 costs cortex
1076 end cpu cortex-r4
1077
1078 begin cpu cortex-r4f
1079 cname cortexr4f
1080 tune flags LDSCHED
1081 architecture armv7-r+fp
1082 costs cortex
1083 vendor 41
1084 part c14
1085 end cpu cortex-r4f
1086
1087 begin cpu cortex-r5
1088 cname cortexr5
1089 tune flags LDSCHED
1090 architecture armv7-r+idiv+fp
1091 option nofp.dp remove FP_DBL
1092 option nofp remove ALL_FP
1093 costs cortex
1094 vendor 41
1095 part c15
1096 end cpu cortex-r5
1097
1098 begin cpu cortex-r7
1099 cname cortexr7
1100 tune flags LDSCHED
1101 architecture armv7-r+idiv+vfpv3-d16-fp16
1102 option nofp.dp remove FP_DBL
1103 option nofp remove ALL_FP
1104 costs cortex
1105 vendor 41
1106 part c17
1107 end cpu cortex-r7
1108
1109 begin cpu cortex-r8
1110 cname cortexr8
1111 tune for cortex-r7
1112 tune flags LDSCHED
1113 architecture armv7-r+idiv+vfpv3-d16-fp16
1114 option nofp.dp remove FP_DBL
1115 option nofp remove ALL_FP
1116 costs cortex
1117 vendor 41
1118 part c18
1119 end cpu cortex-r8
1120
1121 begin cpu cortex-m7
1122 cname cortexm7
1123 tune flags LDSCHED
1124 architecture armv7e-m+fp.dp
1125 isa quirk_no_volatile_ce
1126 option nofp.dp remove FP_DBL
1127 option nofp remove ALL_FP
1128 costs cortex_m7
1129 end cpu cortex-m7
1130
1131 begin cpu cortex-m4
1132 cname cortexm4
1133 tune flags LDSCHED
1134 architecture armv7e-m+fp
1135 option nofp remove ALL_FP
1136 costs v7m
1137 vendor 41
1138 part c24
1139 end cpu cortex-m4
1140
1141 begin cpu cortex-m3
1142 cname cortexm3
1143 tune flags LDSCHED
1144 architecture armv7-m
1145 isa quirk_cm3_ldrd
1146 costs v7m
1147 vendor 41
1148 part c23
1149 end cpu cortex-m3
1150
1151 begin cpu marvell-pj4
1152 tune flags LDSCHED
1153 architecture armv7-a+mp+sec
1154 costs marvell_pj4
1155 end cpu marvell-pj4
1156
1157
1158 # V7 big.LITTLE implementations
1159 begin cpu cortex-a15.cortex-a7
1160 cname cortexa15cortexa7
1161 tune for cortex-a7
1162 tune flags LDSCHED
1163 architecture armv7ve+simd
1164 option nofp remove ALL_FP
1165 costs cortex_a15
1166 end cpu cortex-a15.cortex-a7
1167
1168 begin cpu cortex-a17.cortex-a7
1169 cname cortexa17cortexa7
1170 tune for cortex-a7
1171 tune flags LDSCHED
1172 architecture armv7ve+simd
1173 option nofp remove ALL_FP
1174 costs cortex_a12
1175 end cpu cortex-a17.cortex-a7
1176
1177
1178 # V8 A-profile Architecture Processors
1179 begin cpu cortex-a32
1180 cname cortexa32
1181 tune for cortex-a53
1182 tune flags LDSCHED
1183 architecture armv8-a+crc+simd
1184 option crypto add FP_ARMv8 CRYPTO
1185 option nofp remove ALL_FP
1186 costs cortex_a35
1187 vendor 41
1188 part d01
1189 end cpu cortex-a32
1190
1191 begin cpu cortex-a35
1192 cname cortexa35
1193 tune for cortex-a53
1194 tune flags LDSCHED
1195 architecture armv8-a+crc+simd
1196 option crypto add FP_ARMv8 CRYPTO
1197 option nofp remove ALL_FP
1198 costs cortex_a35
1199 vendor 41
1200 part d04
1201 end cpu cortex-a35
1202
1203 begin cpu cortex-a53
1204 cname cortexa53
1205 tune flags LDSCHED
1206 architecture armv8-a+crc+simd
1207 option crypto add FP_ARMv8 CRYPTO
1208 option nofp remove ALL_FP
1209 costs cortex_a53
1210 vendor 41
1211 part d03
1212 end cpu cortex-a53
1213
1214 begin cpu cortex-a57
1215 cname cortexa57
1216 tune flags LDSCHED
1217 architecture armv8-a+crc+simd
1218 option crypto add FP_ARMv8 CRYPTO
1219 costs cortex_a57
1220 vendor 41
1221 part d07
1222 end cpu cortex-a57
1223
1224 begin cpu cortex-a72
1225 cname cortexa72
1226 tune for cortex-a57
1227 tune flags LDSCHED
1228 architecture armv8-a+crc+simd
1229 option crypto add FP_ARMv8 CRYPTO
1230 costs cortex_a57
1231 vendor 41
1232 part d08
1233 end cpu cortex-a72
1234
1235 begin cpu cortex-a73
1236 cname cortexa73
1237 tune for cortex-a57
1238 tune flags LDSCHED
1239 architecture armv8-a+crc+simd
1240 option crypto add FP_ARMv8 CRYPTO
1241 costs cortex_a73
1242 vendor 41
1243 part d09
1244 end cpu cortex-a73
1245
1246 begin cpu exynos-m1
1247 cname exynosm1
1248 tune flags LDSCHED
1249 architecture armv8-a+crc+simd
1250 option crypto add FP_ARMv8 CRYPTO
1251 costs exynosm1
1252 end cpu exynos-m1
1253
1254 begin cpu xgene1
1255 tune flags LDSCHED
1256 architecture armv8-a+simd
1257 option crypto add FP_ARMv8 CRYPTO
1258 costs xgene1
1259 end cpu xgene1
1260
1261 # V8 A-profile big.LITTLE implementations
1262 begin cpu cortex-a57.cortex-a53
1263 cname cortexa57cortexa53
1264 tune for cortex-a53
1265 tune flags LDSCHED
1266 architecture armv8-a+crc+simd
1267 option crypto add FP_ARMv8 CRYPTO
1268 costs cortex_a57
1269 end cpu cortex-a57.cortex-a53
1270
1271 begin cpu cortex-a72.cortex-a53
1272 cname cortexa72cortexa53
1273 tune for cortex-a53
1274 tune flags LDSCHED
1275 architecture armv8-a+crc+simd
1276 option crypto add FP_ARMv8 CRYPTO
1277 costs cortex_a57
1278 end cpu cortex-a72.cortex-a53
1279
1280 begin cpu cortex-a73.cortex-a35
1281 cname cortexa73cortexa35
1282 tune for cortex-a53
1283 tune flags LDSCHED
1284 architecture armv8-a+crc+simd
1285 option crypto add FP_ARMv8 CRYPTO
1286 costs cortex_a73
1287 end cpu cortex-a73.cortex-a35
1288
1289 begin cpu cortex-a73.cortex-a53
1290 cname cortexa73cortexa53
1291 tune for cortex-a53
1292 tune flags LDSCHED
1293 architecture armv8-a+crc+simd
1294 option crypto add FP_ARMv8 CRYPTO
1295 costs cortex_a73
1296 end cpu cortex-a73.cortex-a53
1297
1298
1299 # ARMv8.2 A-profile Architecture Processors
1300 begin cpu cortex-a55
1301 cname cortexa55
1302 tune for cortex-a53
1303 tune flags LDSCHED
1304 architecture armv8.2-a+fp16+dotprod+simd
1305 option crypto add FP_ARMv8 CRYPTO
1306 option nofp remove ALL_FP
1307 costs cortex_a53
1308 vendor 41
1309 part d05
1310 end cpu cortex-a55
1311
1312 begin cpu cortex-a75
1313 cname cortexa75
1314 tune for cortex-a57
1315 tune flags LDSCHED
1316 architecture armv8.2-a+fp16+dotprod+simd
1317 option crypto add FP_ARMv8 CRYPTO
1318 costs cortex_a73
1319 vendor 41
1320 part d0a
1321 end cpu cortex-a75
1322
1323 begin cpu cortex-a76
1324 cname cortexa76
1325 tune for cortex-a57
1326 tune flags LDSCHED
1327 architecture armv8.2-a+fp16+dotprod+simd
1328 option crypto add FP_ARMv8 CRYPTO
1329 costs cortex_a57
1330 vendor 41
1331 part d0b
1332 end cpu cortex-a76
1333
1334 begin cpu neoverse-n1
1335 cname neoversen1
1336 alias !ares
1337 tune for cortex-a57
1338 tune flags LDSCHED
1339 architecture armv8.2-a+fp16+dotprod+simd
1340 option crypto add FP_ARMv8 CRYPTO
1341 costs cortex_a57
1342 vendor 41
1343 part d0c
1344 end cpu neoverse-n1
1345
1346 # ARMv8.2 A-profile ARM DynamIQ big.LITTLE implementations
1347 begin cpu cortex-a75.cortex-a55
1348 cname cortexa75cortexa55
1349 tune for cortex-a53
1350 tune flags LDSCHED
1351 architecture armv8.2-a+fp16+dotprod+simd
1352 option crypto add FP_ARMv8 CRYPTO
1353 costs cortex_a73
1354 end cpu cortex-a75.cortex-a55
1355
1356 begin cpu cortex-a76.cortex-a55
1357 cname cortexa76cortexa55
1358 tune for cortex-a53
1359 tune flags LDSCHED
1360 architecture armv8.2-a+fp16+dotprod+simd
1361 option crypto add FP_ARMv8 CRYPTO
1362 costs cortex_a57
1363 end cpu cortex-a76.cortex-a55
1364
1365 # V8 M-profile implementations.
1366 begin cpu cortex-m23
1367 cname cortexm23
1368 tune flags LDSCHED
1369 architecture armv8-m.base
1370 costs v6m
1371 end cpu cortex-m23
1372
1373 begin cpu cortex-m33
1374 cname cortexm33
1375 tune flags LDSCHED
1376 architecture armv8-m.main+dsp+fp
1377 option nofp remove ALL_FP
1378 option nodsp remove armv7em
1379 costs v7m
1380 end cpu cortex-m33
1381
1382 # V8 R-profile implementations.
1383 begin cpu cortex-r52
1384 cname cortexr52
1385 tune flags LDSCHED
1386 architecture armv8-r+crc+simd
1387 option nofp.dp remove FP_DBL ALL_SIMD
1388 costs cortex
1389 vendor 41
1390 part d13
1391 end cpu cortex-r52
1392
1393 # FPU entries
1394 # format:
1395 # begin fpu <name>
1396 # isa <isa-flags-list>
1397 # end fpu <name>
1398
1399 begin fpu vfp
1400 isa VFPv2 FP_DBL
1401 end fpu vfp
1402
1403 begin fpu vfpv2
1404 isa VFPv2 FP_DBL
1405 end fpu vfpv2
1406
1407 begin fpu vfpv3
1408 isa VFPv3 FP_D32
1409 end fpu vfpv3
1410
1411 begin fpu vfpv3-fp16
1412 isa VFPv3 FP_D32 fp16conv
1413 end fpu vfpv3-fp16
1414
1415 begin fpu vfpv3-d16
1416 isa VFPv3 FP_DBL
1417 end fpu vfpv3-d16
1418
1419 begin fpu vfpv3-d16-fp16
1420 isa VFPv3 FP_DBL fp16conv
1421 end fpu vfpv3-d16-fp16
1422
1423 begin fpu vfpv3xd
1424 isa VFPv3
1425 end fpu vfpv3xd
1426
1427 begin fpu vfpv3xd-fp16
1428 isa VFPv3 fp16conv
1429 end fpu vfpv3xd-fp16
1430
1431 begin fpu neon
1432 isa VFPv3 NEON
1433 end fpu neon
1434
1435 begin fpu neon-vfpv3
1436 isa VFPv3 NEON
1437 end fpu neon-vfpv3
1438
1439 begin fpu neon-fp16
1440 isa VFPv3 NEON fp16conv
1441 end fpu neon-fp16
1442
1443 begin fpu vfpv4
1444 isa VFPv4 FP_D32
1445 end fpu vfpv4
1446
1447 begin fpu neon-vfpv4
1448 isa VFPv4 NEON
1449 end fpu neon-vfpv4
1450
1451 begin fpu vfpv4-d16
1452 isa VFPv4 FP_DBL
1453 end fpu vfpv4-d16
1454
1455 begin fpu fpv4-sp-d16
1456 isa VFPv4
1457 end fpu fpv4-sp-d16
1458
1459 begin fpu fpv5-sp-d16
1460 isa FPv5
1461 end fpu fpv5-sp-d16
1462
1463 begin fpu fpv5-d16
1464 isa FPv5 FP_DBL
1465 end fpu fpv5-d16
1466
1467 begin fpu fp-armv8
1468 isa FP_ARMv8
1469 end fpu fp-armv8
1470
1471 begin fpu neon-fp-armv8
1472 isa FP_ARMv8 NEON
1473 end fpu neon-fp-armv8
1474
1475 begin fpu crypto-neon-fp-armv8
1476 isa FP_ARMv8 CRYPTO
1477 end fpu crypto-neon-fp-armv8
1478
1479 # Compatibility aliases.
1480 begin fpu vfp3
1481 isa VFPv3 FP_D32
1482 end fpu vfp3