Implement TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS hook.
[official-gcc.git] / gcc / config / rs6000 / rs6000-opts.h
blob201081d9e3a561293ac22e4cd50255373e73f1a4
1 /* Definitions of target machine needed for option handling for GNU compiler,
2 for IBM RS/6000.
3 Copyright (C) 2010-2015 Free Software Foundation, Inc.
4 Contributed by Michael Meissner (meissner@linux.vnet.ibm.com)
6 This file is part of GCC.
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.
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.
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.
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/>. */
27 #ifndef RS6000_OPTS_H
28 #define RS6000_OPTS_H
30 /* Processor type. Order must match cpu attribute in MD file. */
31 enum processor_type
33 PROCESSOR_PPC601,
34 PROCESSOR_PPC603,
35 PROCESSOR_PPC604,
36 PROCESSOR_PPC604e,
37 PROCESSOR_PPC620,
38 PROCESSOR_PPC630,
40 PROCESSOR_PPC750,
41 PROCESSOR_PPC7400,
42 PROCESSOR_PPC7450,
44 PROCESSOR_PPC403,
45 PROCESSOR_PPC405,
46 PROCESSOR_PPC440,
47 PROCESSOR_PPC476,
49 PROCESSOR_PPC8540,
50 PROCESSOR_PPC8548,
51 PROCESSOR_PPCE300C2,
52 PROCESSOR_PPCE300C3,
53 PROCESSOR_PPCE500MC,
54 PROCESSOR_PPCE500MC64,
55 PROCESSOR_PPCE5500,
56 PROCESSOR_PPCE6500,
58 PROCESSOR_POWER4,
59 PROCESSOR_POWER5,
60 PROCESSOR_POWER6,
61 PROCESSOR_POWER7,
62 PROCESSOR_POWER8,
64 PROCESSOR_RS64A,
65 PROCESSOR_MPCCORE,
66 PROCESSOR_CELL,
67 PROCESSOR_PPCA2,
68 PROCESSOR_TITAN
72 /* FP processor type. */
73 enum fpu_type_t
75 FPU_NONE, /* No FPU */
76 FPU_SF_LITE, /* Limited Single Precision FPU */
77 FPU_DF_LITE, /* Limited Double Precision FPU */
78 FPU_SF_FULL, /* Full Single Precision FPU */
79 FPU_DF_FULL /* Full Double Single Precision FPU */
83 /* Float128 support. */
84 enum float128_type_t
86 FLOAT128_UNSET = -1, /* Initial value. */
87 FLOAT128_NONE, /* No __float128 support. */
88 FLOAT128_SW /* software __float128 support. */
91 /* Types of costly dependences. */
92 enum rs6000_dependence_cost
94 max_dep_latency = 1000,
95 no_dep_costly,
96 all_deps_costly,
97 true_store_to_load_dep_costly,
98 store_to_load_dep_costly
101 /* Types of nop insertion schemes in sched target hook sched_finish. */
102 enum rs6000_nop_insertion
104 sched_finish_regroup_exact = 1000,
105 sched_finish_pad_groups,
106 sched_finish_none
109 /* Dispatch group termination caused by an insn. */
110 enum group_termination
112 current_group,
113 previous_group
116 /* Enumeration to give which calling sequence to use. */
117 enum rs6000_abi {
118 ABI_NONE,
119 ABI_AIX, /* IBM's AIX, or Linux ELFv1 */
120 ABI_ELFv2, /* Linux ELFv2 ABI */
121 ABI_V4, /* System V.4/eabi */
122 ABI_DARWIN /* Apple's Darwin (OS X kernel) */
125 /* Small data support types. */
126 enum rs6000_sdata_type {
127 SDATA_NONE, /* No small data support. */
128 SDATA_DATA, /* Just put data in .sbss/.sdata, don't use relocs. */
129 SDATA_SYSV, /* Use r13 to point to .sdata/.sbss. */
130 SDATA_EABI /* Use r13 like above, r2 points to .sdata2/.sbss2. */
133 /* Type of traceback to use. */
134 enum rs6000_traceback_type {
135 traceback_default = 0,
136 traceback_none,
137 traceback_part,
138 traceback_full
141 /* Code model for 64-bit linux.
142 small: 16-bit toc offsets.
143 medium: 32-bit toc offsets, static data and code within 2G of TOC pointer.
144 large: 32-bit toc offsets, no limit on static data and code. */
145 enum rs6000_cmodel {
146 CMODEL_SMALL,
147 CMODEL_MEDIUM,
148 CMODEL_LARGE
151 /* Describe which vector unit to use for a given machine mode. The
152 VECTOR_MEM_* and VECTOR_UNIT_* macros assume that Altivec, VSX, and
153 P8_VECTOR are contiguous. */
154 enum rs6000_vector {
155 VECTOR_NONE, /* Type is not a vector or not supported */
156 VECTOR_ALTIVEC, /* Use altivec for vector processing */
157 VECTOR_VSX, /* Use VSX for vector processing */
158 VECTOR_P8_VECTOR, /* Use ISA 2.07 VSX for vector processing */
159 VECTOR_PAIRED, /* Use paired floating point for vectors */
160 VECTOR_SPE, /* Use SPE for vector processing */
161 VECTOR_OTHER /* Some other vector unit */
164 /* No enumeration is defined to index the -mcpu= values (entries in
165 processor_target_table), with the type int being used instead, but
166 we need to distinguish the special "native" value. */
167 #define RS6000_CPU_OPTION_NATIVE -1
169 #endif