xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/config/rs6000/rs6000-opts.h (revision 16dce51364ebe8aeafbae46bc5aa167b8115bc45)
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)
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 
64    PROCESSOR_RS64A,
65    PROCESSOR_MPCCORE,
66    PROCESSOR_CELL,
67    PROCESSOR_PPCA2,
68    PROCESSOR_TITAN
69 };
70 
71 
72 /* FP processor type.  */
73 enum fpu_type_t
74 {
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 */
80 };
81 
82 /* Types of costly dependences.  */
83 enum rs6000_dependence_cost
84 {
85   max_dep_latency = 1000,
86   no_dep_costly,
87   all_deps_costly,
88   true_store_to_load_dep_costly,
89   store_to_load_dep_costly
90 };
91 
92 /* Types of nop insertion schemes in sched target hook sched_finish.  */
93 enum rs6000_nop_insertion
94 {
95   sched_finish_regroup_exact = 1000,
96   sched_finish_pad_groups,
97   sched_finish_none
98 };
99 
100 /* Dispatch group termination caused by an insn.  */
101 enum group_termination
102 {
103   current_group,
104   previous_group
105 };
106 
107 /* Enumeration to give which calling sequence to use.  */
108 enum rs6000_abi {
109   ABI_NONE,
110   ABI_AIX,			/* IBM's AIX, or Linux ELFv1 */
111   ABI_ELFv2,			/* Linux ELFv2 ABI */
112   ABI_V4,			/* System V.4/eabi */
113   ABI_DARWIN			/* Apple's Darwin (OS X kernel) */
114 };
115 
116 /* Small data support types.  */
117 enum rs6000_sdata_type {
118   SDATA_NONE,			/* No small data support.  */
119   SDATA_DATA,			/* Just put data in .sbss/.sdata, don't use relocs.  */
120   SDATA_SYSV,			/* Use r13 to point to .sdata/.sbss.  */
121   SDATA_EABI			/* Use r13 like above, r2 points to .sdata2/.sbss2.  */
122 };
123 
124 /* Type of traceback to use.  */
125 enum  rs6000_traceback_type {
126   traceback_default = 0,
127   traceback_none,
128   traceback_part,
129   traceback_full
130 };
131 
132 /* Code model for 64-bit linux.
133    small: 16-bit toc offsets.
134    medium: 32-bit toc offsets, static data and code within 2G of TOC pointer.
135    large: 32-bit toc offsets, no limit on static data and code.  */
136 enum rs6000_cmodel {
137   CMODEL_SMALL,
138   CMODEL_MEDIUM,
139   CMODEL_LARGE
140 };
141 
142 /* Describe which vector unit to use for a given machine mode.  The
143    VECTOR_MEM_* and VECTOR_UNIT_* macros assume that Altivec, VSX, and
144    P8_VECTOR are contiguous.  */
145 enum rs6000_vector {
146   VECTOR_NONE,			/* Type is not  a vector or not supported */
147   VECTOR_ALTIVEC,		/* Use altivec for vector processing */
148   VECTOR_VSX,			/* Use VSX for vector processing */
149   VECTOR_P8_VECTOR,		/* Use ISA 2.07 VSX for vector processing */
150   VECTOR_PAIRED,		/* Use paired floating point for vectors */
151   VECTOR_SPE,			/* Use SPE for vector processing */
152   VECTOR_OTHER			/* Some other vector unit */
153 };
154 
155 /* No enumeration is defined to index the -mcpu= values (entries in
156    processor_target_table), with the type int being used instead, but
157    we need to distinguish the special "native" value.  */
158 #define RS6000_CPU_OPTION_NATIVE -1
159 
160 #endif
161