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