1/* Definitions of target machine needed for option handling for GNU compiler,
2   for IBM RS/6000.
3   Copyright (C) 2010-2020 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.  */
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   PROCESSOR_POWER10,
65
66   PROCESSOR_RS64A,
67   PROCESSOR_MPCCORE,
68   PROCESSOR_CELL,
69   PROCESSOR_PPCA2,
70   PROCESSOR_TITAN
71};
72
73
74/* Types of costly dependences.  */
75enum rs6000_dependence_cost
76{
77  max_dep_latency = 1000,
78  no_dep_costly,
79  all_deps_costly,
80  true_store_to_load_dep_costly,
81  store_to_load_dep_costly
82};
83
84/* Types of nop insertion schemes in sched target hook sched_finish.  */
85enum rs6000_nop_insertion
86{
87  sched_finish_regroup_exact = 1000,
88  sched_finish_pad_groups,
89  sched_finish_none
90};
91
92/* Dispatch group termination caused by an insn.  */
93enum group_termination
94{
95  current_group,
96  previous_group
97};
98
99/* Enumeration to give which calling sequence to use.  */
100enum rs6000_abi {
101  ABI_NONE,
102  ABI_AIX,			/* IBM's AIX, or Linux ELFv1 */
103  ABI_ELFv2,			/* Linux ELFv2 ABI */
104  ABI_V4,			/* System V.4/eabi */
105  ABI_DARWIN			/* Apple's Darwin (OS X kernel) */
106};
107
108/* Small data support types.  */
109enum 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.  */
117enum  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.  */
128enum 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.  The
135   VECTOR_MEM_* and VECTOR_UNIT_* macros assume that Altivec, VSX, and
136   P8_VECTOR are contiguous.  */
137enum rs6000_vector {
138  VECTOR_NONE,			/* Type is not  a vector or not supported */
139  VECTOR_ALTIVEC,		/* Use altivec for vector processing */
140  VECTOR_VSX,			/* Use VSX for vector processing */
141  VECTOR_P8_VECTOR		/* Use ISA 2.07 VSX for vector processing */
142};
143
144/* Where to get the canary for the stack protector.  */
145enum stack_protector_guard {
146  SSP_TLS,			/* per-thread canary in TLS block */
147  SSP_GLOBAL			/* global canary */
148};
149
150/* No enumeration is defined to index the -mcpu= values (entries in
151   processor_target_table), with the type int being used instead, but
152   we need to distinguish the special "native" value.  */
153#define RS6000_CPU_OPTION_NATIVE -1
154
155#endif
156