]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/rs6000/rs6000-opts.h
Update copyright years.
[thirdparty/gcc.git] / gcc / config / rs6000 / rs6000-opts.h
CommitLineData
fd438373
MM
1/* Definitions of target machine needed for option handling for GNU compiler,
2 for IBM RS/6000.
a5544970 3 Copyright (C) 2010-2019 Free Software Foundation, Inc.
fd438373
MM
4 Contributed by Michael Meissner (meissner@linux.vnet.ibm.com)
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published
10 by the Free Software Foundation; either version 3, or (at your
11 option) any later version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 License for more details.
17
18 Under Section 7 of GPL version 3, you are granted additional
19 permissions described in the GCC Runtime Library Exception, version
20 3.1, as published by the Free Software Foundation.
21
22 You should have received a copy of the GNU General Public License and
23 a copy of the GCC Runtime Library Exception along with this program;
24 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
25 <http://www.gnu.org/licenses/>. */
26
27#ifndef RS6000_OPTS_H
28#define RS6000_OPTS_H
29
30/* Processor type. Order must match cpu attribute in MD file. */
31enum processor_type
32 {
fd438373
MM
33 PROCESSOR_PPC601,
34 PROCESSOR_PPC603,
35 PROCESSOR_PPC604,
36 PROCESSOR_PPC604e,
37 PROCESSOR_PPC620,
38 PROCESSOR_PPC630,
44626634 39
fd438373
MM
40 PROCESSOR_PPC750,
41 PROCESSOR_PPC7400,
42 PROCESSOR_PPC7450,
44626634
SB
43
44 PROCESSOR_PPC403,
45 PROCESSOR_PPC405,
46 PROCESSOR_PPC440,
47 PROCESSOR_PPC476,
48
fd438373 49 PROCESSOR_PPC8540,
a7c6c6d6 50 PROCESSOR_PPC8548,
fd438373
MM
51 PROCESSOR_PPCE300C2,
52 PROCESSOR_PPCE300C3,
53 PROCESSOR_PPCE500MC,
54 PROCESSOR_PPCE500MC64,
683ed19e
EW
55 PROCESSOR_PPCE5500,
56 PROCESSOR_PPCE6500,
44626634 57
fd438373
MM
58 PROCESSOR_POWER4,
59 PROCESSOR_POWER5,
60 PROCESSOR_POWER6,
61 PROCESSOR_POWER7,
44626634 62 PROCESSOR_POWER8,
d1f0d376 63 PROCESSOR_POWER9,
44626634
SB
64
65 PROCESSOR_RS64A,
66 PROCESSOR_MPCCORE,
fd438373
MM
67 PROCESSOR_CELL,
68 PROCESSOR_PPCA2,
44626634 69 PROCESSOR_TITAN
fd438373
MM
70};
71
44626634 72
fd438373
MM
73/* Types of costly dependences. */
74enum rs6000_dependence_cost
75{
76 max_dep_latency = 1000,
77 no_dep_costly,
78 all_deps_costly,
79 true_store_to_load_dep_costly,
80 store_to_load_dep_costly
81};
82
83/* Types of nop insertion schemes in sched target hook sched_finish. */
84enum rs6000_nop_insertion
85{
86 sched_finish_regroup_exact = 1000,
87 sched_finish_pad_groups,
88 sched_finish_none
89};
90
91/* Dispatch group termination caused by an insn. */
92enum group_termination
93{
94 current_group,
95 previous_group
96};
97
98/* Enumeration to give which calling sequence to use. */
99enum rs6000_abi {
100 ABI_NONE,
b54214fe
UW
101 ABI_AIX, /* IBM's AIX, or Linux ELFv1 */
102 ABI_ELFv2, /* Linux ELFv2 ABI */
fd438373
MM
103 ABI_V4, /* System V.4/eabi */
104 ABI_DARWIN /* Apple's Darwin (OS X kernel) */
105};
106
107/* Small data support types. */
108enum rs6000_sdata_type {
109 SDATA_NONE, /* No small data support. */
110 SDATA_DATA, /* Just put data in .sbss/.sdata, don't use relocs. */
111 SDATA_SYSV, /* Use r13 to point to .sdata/.sbss. */
112 SDATA_EABI /* Use r13 like above, r2 points to .sdata2/.sbss2. */
113};
114
115/* Type of traceback to use. */
116enum rs6000_traceback_type {
117 traceback_default = 0,
118 traceback_none,
119 traceback_part,
120 traceback_full
121};
122
123/* Code model for 64-bit linux.
124 small: 16-bit toc offsets.
125 medium: 32-bit toc offsets, static data and code within 2G of TOC pointer.
126 large: 32-bit toc offsets, no limit on static data and code. */
127enum rs6000_cmodel {
128 CMODEL_SMALL,
129 CMODEL_MEDIUM,
130 CMODEL_LARGE
131};
132
f62511da
MM
133/* Describe which vector unit to use for a given machine mode. The
134 VECTOR_MEM_* and VECTOR_UNIT_* macros assume that Altivec, VSX, and
135 P8_VECTOR are contiguous. */
fd438373
MM
136enum rs6000_vector {
137 VECTOR_NONE, /* Type is not a vector or not supported */
138 VECTOR_ALTIVEC, /* Use altivec for vector processing */
139 VECTOR_VSX, /* Use VSX for vector processing */
fbcf65f9 140 VECTOR_P8_VECTOR /* Use ISA 2.07 VSX for vector processing */
fd438373
MM
141};
142
1b3254e4
SB
143/* Where to get the canary for the stack protector. */
144enum stack_protector_guard {
145 SSP_TLS, /* per-thread canary in TLS block */
146 SSP_GLOBAL /* global canary */
147};
148
f10d3ac9
JM
149/* No enumeration is defined to index the -mcpu= values (entries in
150 processor_target_table), with the type int being used instead, but
151 we need to distinguish the special "native" value. */
152#define RS6000_CPU_OPTION_NATIVE -1
153
fd438373 154#endif