111
|
1 /* Definitions of target machine needed for option handling for GNU compiler,
|
|
2 for IBM RS/6000.
|
131
|
3 Copyright (C) 2010-2018 Free Software Foundation, Inc.
|
111
|
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. */
|
|
31 enum processor_type
|
|
32 {
|
|
33 PROCESSOR_PPC601,
|
|
34 PROCESSOR_PPC603,
|
|
35 PROCESSOR_PPC604,
|
|
36 PROCESSOR_PPC604e,
|
|
37 PROCESSOR_PPC620,
|
|
38 PROCESSOR_PPC630,
|
|
39
|
|
40 PROCESSOR_PPC750,
|
|
41 PROCESSOR_PPC7400,
|
|
42 PROCESSOR_PPC7450,
|
|
43
|
|
44 PROCESSOR_PPC403,
|
|
45 PROCESSOR_PPC405,
|
|
46 PROCESSOR_PPC440,
|
|
47 PROCESSOR_PPC476,
|
|
48
|
|
49 PROCESSOR_PPC8540,
|
|
50 PROCESSOR_PPC8548,
|
|
51 PROCESSOR_PPCE300C2,
|
|
52 PROCESSOR_PPCE300C3,
|
|
53 PROCESSOR_PPCE500MC,
|
|
54 PROCESSOR_PPCE500MC64,
|
|
55 PROCESSOR_PPCE5500,
|
|
56 PROCESSOR_PPCE6500,
|
|
57
|
|
58 PROCESSOR_POWER4,
|
|
59 PROCESSOR_POWER5,
|
|
60 PROCESSOR_POWER6,
|
|
61 PROCESSOR_POWER7,
|
|
62 PROCESSOR_POWER8,
|
|
63 PROCESSOR_POWER9,
|
|
64
|
|
65 PROCESSOR_RS64A,
|
|
66 PROCESSOR_MPCCORE,
|
|
67 PROCESSOR_CELL,
|
|
68 PROCESSOR_PPCA2,
|
|
69 PROCESSOR_TITAN
|
|
70 };
|
|
71
|
|
72
|
|
73 /* FP processor type. */
|
|
74 enum fpu_type_t
|
|
75 {
|
|
76 FPU_NONE, /* No FPU */
|
|
77 FPU_SF_LITE, /* Limited Single Precision FPU */
|
|
78 FPU_DF_LITE, /* Limited Double Precision FPU */
|
|
79 FPU_SF_FULL, /* Full Single Precision FPU */
|
|
80 FPU_DF_FULL /* Full Double Single Precision FPU */
|
|
81 };
|
|
82
|
|
83
|
|
84 /* Types of costly dependences. */
|
|
85 enum rs6000_dependence_cost
|
|
86 {
|
|
87 max_dep_latency = 1000,
|
|
88 no_dep_costly,
|
|
89 all_deps_costly,
|
|
90 true_store_to_load_dep_costly,
|
|
91 store_to_load_dep_costly
|
|
92 };
|
|
93
|
|
94 /* Types of nop insertion schemes in sched target hook sched_finish. */
|
|
95 enum rs6000_nop_insertion
|
|
96 {
|
|
97 sched_finish_regroup_exact = 1000,
|
|
98 sched_finish_pad_groups,
|
|
99 sched_finish_none
|
|
100 };
|
|
101
|
|
102 /* Dispatch group termination caused by an insn. */
|
|
103 enum group_termination
|
|
104 {
|
|
105 current_group,
|
|
106 previous_group
|
|
107 };
|
|
108
|
|
109 /* Enumeration to give which calling sequence to use. */
|
|
110 enum rs6000_abi {
|
|
111 ABI_NONE,
|
|
112 ABI_AIX, /* IBM's AIX, or Linux ELFv1 */
|
|
113 ABI_ELFv2, /* Linux ELFv2 ABI */
|
|
114 ABI_V4, /* System V.4/eabi */
|
|
115 ABI_DARWIN /* Apple's Darwin (OS X kernel) */
|
|
116 };
|
|
117
|
|
118 /* Small data support types. */
|
|
119 enum rs6000_sdata_type {
|
|
120 SDATA_NONE, /* No small data support. */
|
|
121 SDATA_DATA, /* Just put data in .sbss/.sdata, don't use relocs. */
|
|
122 SDATA_SYSV, /* Use r13 to point to .sdata/.sbss. */
|
|
123 SDATA_EABI /* Use r13 like above, r2 points to .sdata2/.sbss2. */
|
|
124 };
|
|
125
|
|
126 /* Type of traceback to use. */
|
|
127 enum rs6000_traceback_type {
|
|
128 traceback_default = 0,
|
|
129 traceback_none,
|
|
130 traceback_part,
|
|
131 traceback_full
|
|
132 };
|
|
133
|
|
134 /* Code model for 64-bit linux.
|
|
135 small: 16-bit toc offsets.
|
|
136 medium: 32-bit toc offsets, static data and code within 2G of TOC pointer.
|
|
137 large: 32-bit toc offsets, no limit on static data and code. */
|
|
138 enum rs6000_cmodel {
|
|
139 CMODEL_SMALL,
|
|
140 CMODEL_MEDIUM,
|
|
141 CMODEL_LARGE
|
|
142 };
|
|
143
|
|
144 /* Describe which vector unit to use for a given machine mode. The
|
|
145 VECTOR_MEM_* and VECTOR_UNIT_* macros assume that Altivec, VSX, and
|
|
146 P8_VECTOR are contiguous. */
|
|
147 enum rs6000_vector {
|
|
148 VECTOR_NONE, /* Type is not a vector or not supported */
|
|
149 VECTOR_ALTIVEC, /* Use altivec for vector processing */
|
|
150 VECTOR_VSX, /* Use VSX for vector processing */
|
|
151 VECTOR_P8_VECTOR, /* Use ISA 2.07 VSX for vector processing */
|
|
152 VECTOR_PAIRED, /* Use paired floating point for vectors */
|
|
153 VECTOR_SPE, /* Use SPE for vector processing */
|
|
154 VECTOR_OTHER /* Some other vector unit */
|
|
155 };
|
|
156
|
|
157 /* Where to get the canary for the stack protector. */
|
|
158 enum stack_protector_guard {
|
|
159 SSP_TLS, /* per-thread canary in TLS block */
|
|
160 SSP_GLOBAL /* global canary */
|
|
161 };
|
|
162
|
|
163 /* No enumeration is defined to index the -mcpu= values (entries in
|
|
164 processor_target_table), with the type int being used instead, but
|
|
165 we need to distinguish the special "native" value. */
|
|
166 #define RS6000_CPU_OPTION_NATIVE -1
|
|
167
|
|
168 #endif
|