]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/powerpcspe/powerpcspe-opts.h
Update copyright years.
[thirdparty/gcc.git] / gcc / config / powerpcspe / powerpcspe-opts.h
CommitLineData
83349046
SB
1/* Definitions of target machine needed for option handling for GNU compiler,
2 for IBM RS/6000.
85ec4feb 3 Copyright (C) 2010-2018 Free Software Foundation, Inc.
83349046
SB
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 {
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. */
74enum 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. */
85enum 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. */
95enum 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. */
103enum group_termination
104{
105 current_group,
106 previous_group
107};
108
109/* Enumeration to give which calling sequence to use. */
110enum 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. */
119enum 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. */
127enum 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. */
138enum 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. */
147enum 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. */
158enum 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