1*e4b17023SJohn Marino /* IA-32 common hooks.
2*e4b17023SJohn Marino Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3*e4b17023SJohn Marino 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4*e4b17023SJohn Marino Free Software Foundation, Inc.
5*e4b17023SJohn Marino
6*e4b17023SJohn Marino This file is part of GCC.
7*e4b17023SJohn Marino
8*e4b17023SJohn Marino GCC is free software; you can redistribute it and/or modify
9*e4b17023SJohn Marino it under the terms of the GNU General Public License as published by
10*e4b17023SJohn Marino the Free Software Foundation; either version 3, or (at your option)
11*e4b17023SJohn Marino any later version.
12*e4b17023SJohn Marino
13*e4b17023SJohn Marino GCC is distributed in the hope that it will be useful,
14*e4b17023SJohn Marino but WITHOUT ANY WARRANTY; without even the implied warranty of
15*e4b17023SJohn Marino MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16*e4b17023SJohn Marino GNU General Public License for more details.
17*e4b17023SJohn Marino
18*e4b17023SJohn Marino You should have received a copy of the GNU General Public License
19*e4b17023SJohn Marino along with GCC; see the file COPYING3. If not see
20*e4b17023SJohn Marino <http://www.gnu.org/licenses/>. */
21*e4b17023SJohn Marino
22*e4b17023SJohn Marino #include "config.h"
23*e4b17023SJohn Marino #include "system.h"
24*e4b17023SJohn Marino #include "coretypes.h"
25*e4b17023SJohn Marino #include "diagnostic-core.h"
26*e4b17023SJohn Marino #include "tm.h"
27*e4b17023SJohn Marino #include "tm_p.h"
28*e4b17023SJohn Marino #include "common/common-target.h"
29*e4b17023SJohn Marino #include "common/common-target-def.h"
30*e4b17023SJohn Marino #include "opts.h"
31*e4b17023SJohn Marino #include "flags.h"
32*e4b17023SJohn Marino
33*e4b17023SJohn Marino /* Define a set of ISAs which are available when a given ISA is
34*e4b17023SJohn Marino enabled. MMX and SSE ISAs are handled separately. */
35*e4b17023SJohn Marino
36*e4b17023SJohn Marino #define OPTION_MASK_ISA_MMX_SET OPTION_MASK_ISA_MMX
37*e4b17023SJohn Marino #define OPTION_MASK_ISA_3DNOW_SET \
38*e4b17023SJohn Marino (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_MMX_SET)
39*e4b17023SJohn Marino
40*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE_SET OPTION_MASK_ISA_SSE
41*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE2_SET \
42*e4b17023SJohn Marino (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE_SET)
43*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE3_SET \
44*e4b17023SJohn Marino (OPTION_MASK_ISA_SSE3 | OPTION_MASK_ISA_SSE2_SET)
45*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSSE3_SET \
46*e4b17023SJohn Marino (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE3_SET)
47*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE4_1_SET \
48*e4b17023SJohn Marino (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSSE3_SET)
49*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE4_2_SET \
50*e4b17023SJohn Marino (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_SSE4_1_SET)
51*e4b17023SJohn Marino #define OPTION_MASK_ISA_AVX_SET \
52*e4b17023SJohn Marino (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_SSE4_2_SET)
53*e4b17023SJohn Marino #define OPTION_MASK_ISA_FMA_SET \
54*e4b17023SJohn Marino (OPTION_MASK_ISA_FMA | OPTION_MASK_ISA_AVX_SET)
55*e4b17023SJohn Marino #define OPTION_MASK_ISA_AVX2_SET \
56*e4b17023SJohn Marino (OPTION_MASK_ISA_AVX2 | OPTION_MASK_ISA_AVX_SET)
57*e4b17023SJohn Marino
58*e4b17023SJohn Marino /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same
59*e4b17023SJohn Marino as -msse4.2. */
60*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE4_SET OPTION_MASK_ISA_SSE4_2_SET
61*e4b17023SJohn Marino
62*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE4A_SET \
63*e4b17023SJohn Marino (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_SSE3_SET)
64*e4b17023SJohn Marino #define OPTION_MASK_ISA_FMA4_SET \
65*e4b17023SJohn Marino (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_SSE4A_SET \
66*e4b17023SJohn Marino | OPTION_MASK_ISA_AVX_SET)
67*e4b17023SJohn Marino #define OPTION_MASK_ISA_XOP_SET \
68*e4b17023SJohn Marino (OPTION_MASK_ISA_XOP | OPTION_MASK_ISA_FMA4_SET)
69*e4b17023SJohn Marino #define OPTION_MASK_ISA_LWP_SET \
70*e4b17023SJohn Marino OPTION_MASK_ISA_LWP
71*e4b17023SJohn Marino
72*e4b17023SJohn Marino /* AES and PCLMUL need SSE2 because they use xmm registers */
73*e4b17023SJohn Marino #define OPTION_MASK_ISA_AES_SET \
74*e4b17023SJohn Marino (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2_SET)
75*e4b17023SJohn Marino #define OPTION_MASK_ISA_PCLMUL_SET \
76*e4b17023SJohn Marino (OPTION_MASK_ISA_PCLMUL | OPTION_MASK_ISA_SSE2_SET)
77*e4b17023SJohn Marino
78*e4b17023SJohn Marino #define OPTION_MASK_ISA_ABM_SET \
79*e4b17023SJohn Marino (OPTION_MASK_ISA_ABM | OPTION_MASK_ISA_POPCNT)
80*e4b17023SJohn Marino
81*e4b17023SJohn Marino #define OPTION_MASK_ISA_BMI_SET OPTION_MASK_ISA_BMI
82*e4b17023SJohn Marino #define OPTION_MASK_ISA_BMI2_SET OPTION_MASK_ISA_BMI2
83*e4b17023SJohn Marino #define OPTION_MASK_ISA_TBM_SET OPTION_MASK_ISA_TBM
84*e4b17023SJohn Marino #define OPTION_MASK_ISA_POPCNT_SET OPTION_MASK_ISA_POPCNT
85*e4b17023SJohn Marino #define OPTION_MASK_ISA_CX16_SET OPTION_MASK_ISA_CX16
86*e4b17023SJohn Marino #define OPTION_MASK_ISA_SAHF_SET OPTION_MASK_ISA_SAHF
87*e4b17023SJohn Marino #define OPTION_MASK_ISA_MOVBE_SET OPTION_MASK_ISA_MOVBE
88*e4b17023SJohn Marino #define OPTION_MASK_ISA_CRC32_SET OPTION_MASK_ISA_CRC32
89*e4b17023SJohn Marino
90*e4b17023SJohn Marino #define OPTION_MASK_ISA_FSGSBASE_SET OPTION_MASK_ISA_FSGSBASE
91*e4b17023SJohn Marino #define OPTION_MASK_ISA_RDRND_SET OPTION_MASK_ISA_RDRND
92*e4b17023SJohn Marino #define OPTION_MASK_ISA_F16C_SET \
93*e4b17023SJohn Marino (OPTION_MASK_ISA_F16C | OPTION_MASK_ISA_AVX_SET)
94*e4b17023SJohn Marino
95*e4b17023SJohn Marino /* Define a set of ISAs which aren't available when a given ISA is
96*e4b17023SJohn Marino disabled. MMX and SSE ISAs are handled separately. */
97*e4b17023SJohn Marino
98*e4b17023SJohn Marino #define OPTION_MASK_ISA_MMX_UNSET \
99*e4b17023SJohn Marino (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_3DNOW_UNSET)
100*e4b17023SJohn Marino #define OPTION_MASK_ISA_3DNOW_UNSET \
101*e4b17023SJohn Marino (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_3DNOW_A_UNSET)
102*e4b17023SJohn Marino #define OPTION_MASK_ISA_3DNOW_A_UNSET OPTION_MASK_ISA_3DNOW_A
103*e4b17023SJohn Marino
104*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE_UNSET \
105*e4b17023SJohn Marino (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_SSE2_UNSET)
106*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE2_UNSET \
107*e4b17023SJohn Marino (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE3_UNSET)
108*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE3_UNSET \
109*e4b17023SJohn Marino (OPTION_MASK_ISA_SSE3 \
110*e4b17023SJohn Marino | OPTION_MASK_ISA_SSSE3_UNSET \
111*e4b17023SJohn Marino | OPTION_MASK_ISA_SSE4A_UNSET )
112*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSSE3_UNSET \
113*e4b17023SJohn Marino (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE4_1_UNSET)
114*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE4_1_UNSET \
115*e4b17023SJohn Marino (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSE4_2_UNSET)
116*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE4_2_UNSET \
117*e4b17023SJohn Marino (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_AVX_UNSET )
118*e4b17023SJohn Marino #define OPTION_MASK_ISA_AVX_UNSET \
119*e4b17023SJohn Marino (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_FMA_UNSET \
120*e4b17023SJohn Marino | OPTION_MASK_ISA_FMA4_UNSET | OPTION_MASK_ISA_F16C_UNSET \
121*e4b17023SJohn Marino | OPTION_MASK_ISA_AVX2_UNSET)
122*e4b17023SJohn Marino #define OPTION_MASK_ISA_FMA_UNSET OPTION_MASK_ISA_FMA
123*e4b17023SJohn Marino #define OPTION_MASK_ISA_AVX2_UNSET OPTION_MASK_ISA_AVX2
124*e4b17023SJohn Marino
125*e4b17023SJohn Marino /* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same
126*e4b17023SJohn Marino as -mno-sse4.1. */
127*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE4_UNSET OPTION_MASK_ISA_SSE4_1_UNSET
128*e4b17023SJohn Marino
129*e4b17023SJohn Marino #define OPTION_MASK_ISA_SSE4A_UNSET \
130*e4b17023SJohn Marino (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_FMA4_UNSET)
131*e4b17023SJohn Marino
132*e4b17023SJohn Marino #define OPTION_MASK_ISA_FMA4_UNSET \
133*e4b17023SJohn Marino (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_XOP_UNSET)
134*e4b17023SJohn Marino #define OPTION_MASK_ISA_XOP_UNSET OPTION_MASK_ISA_XOP
135*e4b17023SJohn Marino #define OPTION_MASK_ISA_LWP_UNSET OPTION_MASK_ISA_LWP
136*e4b17023SJohn Marino
137*e4b17023SJohn Marino #define OPTION_MASK_ISA_AES_UNSET OPTION_MASK_ISA_AES
138*e4b17023SJohn Marino #define OPTION_MASK_ISA_PCLMUL_UNSET OPTION_MASK_ISA_PCLMUL
139*e4b17023SJohn Marino #define OPTION_MASK_ISA_ABM_UNSET OPTION_MASK_ISA_ABM
140*e4b17023SJohn Marino #define OPTION_MASK_ISA_BMI_UNSET OPTION_MASK_ISA_BMI
141*e4b17023SJohn Marino #define OPTION_MASK_ISA_BMI2_UNSET OPTION_MASK_ISA_BMI2
142*e4b17023SJohn Marino #define OPTION_MASK_ISA_TBM_UNSET OPTION_MASK_ISA_TBM
143*e4b17023SJohn Marino #define OPTION_MASK_ISA_POPCNT_UNSET OPTION_MASK_ISA_POPCNT
144*e4b17023SJohn Marino #define OPTION_MASK_ISA_CX16_UNSET OPTION_MASK_ISA_CX16
145*e4b17023SJohn Marino #define OPTION_MASK_ISA_SAHF_UNSET OPTION_MASK_ISA_SAHF
146*e4b17023SJohn Marino #define OPTION_MASK_ISA_MOVBE_UNSET OPTION_MASK_ISA_MOVBE
147*e4b17023SJohn Marino #define OPTION_MASK_ISA_CRC32_UNSET OPTION_MASK_ISA_CRC32
148*e4b17023SJohn Marino
149*e4b17023SJohn Marino #define OPTION_MASK_ISA_FSGSBASE_UNSET OPTION_MASK_ISA_FSGSBASE
150*e4b17023SJohn Marino #define OPTION_MASK_ISA_RDRND_UNSET OPTION_MASK_ISA_RDRND
151*e4b17023SJohn Marino #define OPTION_MASK_ISA_F16C_UNSET OPTION_MASK_ISA_F16C
152*e4b17023SJohn Marino
153*e4b17023SJohn Marino /* Implement TARGET_HANDLE_OPTION. */
154*e4b17023SJohn Marino
155*e4b17023SJohn Marino bool
ix86_handle_option(struct gcc_options * opts,struct gcc_options * opts_set ATTRIBUTE_UNUSED,const struct cl_decoded_option * decoded,location_t loc)156*e4b17023SJohn Marino ix86_handle_option (struct gcc_options *opts,
157*e4b17023SJohn Marino struct gcc_options *opts_set ATTRIBUTE_UNUSED,
158*e4b17023SJohn Marino const struct cl_decoded_option *decoded,
159*e4b17023SJohn Marino location_t loc)
160*e4b17023SJohn Marino {
161*e4b17023SJohn Marino size_t code = decoded->opt_index;
162*e4b17023SJohn Marino int value = decoded->value;
163*e4b17023SJohn Marino
164*e4b17023SJohn Marino switch (code)
165*e4b17023SJohn Marino {
166*e4b17023SJohn Marino case OPT_mmmx:
167*e4b17023SJohn Marino if (value)
168*e4b17023SJohn Marino {
169*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_MMX_SET;
170*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MMX_SET;
171*e4b17023SJohn Marino }
172*e4b17023SJohn Marino else
173*e4b17023SJohn Marino {
174*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_MMX_UNSET;
175*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MMX_UNSET;
176*e4b17023SJohn Marino }
177*e4b17023SJohn Marino return true;
178*e4b17023SJohn Marino
179*e4b17023SJohn Marino case OPT_m3dnow:
180*e4b17023SJohn Marino if (value)
181*e4b17023SJohn Marino {
182*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_3DNOW_SET;
183*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_SET;
184*e4b17023SJohn Marino }
185*e4b17023SJohn Marino else
186*e4b17023SJohn Marino {
187*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_3DNOW_UNSET;
188*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_UNSET;
189*e4b17023SJohn Marino }
190*e4b17023SJohn Marino return true;
191*e4b17023SJohn Marino
192*e4b17023SJohn Marino case OPT_m3dnowa:
193*e4b17023SJohn Marino return false;
194*e4b17023SJohn Marino
195*e4b17023SJohn Marino case OPT_msse:
196*e4b17023SJohn Marino if (value)
197*e4b17023SJohn Marino {
198*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE_SET;
199*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE_SET;
200*e4b17023SJohn Marino }
201*e4b17023SJohn Marino else
202*e4b17023SJohn Marino {
203*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE_UNSET;
204*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE_UNSET;
205*e4b17023SJohn Marino }
206*e4b17023SJohn Marino return true;
207*e4b17023SJohn Marino
208*e4b17023SJohn Marino case OPT_msse2:
209*e4b17023SJohn Marino if (value)
210*e4b17023SJohn Marino {
211*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE2_SET;
212*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_SET;
213*e4b17023SJohn Marino }
214*e4b17023SJohn Marino else
215*e4b17023SJohn Marino {
216*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE2_UNSET;
217*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_UNSET;
218*e4b17023SJohn Marino }
219*e4b17023SJohn Marino return true;
220*e4b17023SJohn Marino
221*e4b17023SJohn Marino case OPT_msse3:
222*e4b17023SJohn Marino if (value)
223*e4b17023SJohn Marino {
224*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE3_SET;
225*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE3_SET;
226*e4b17023SJohn Marino }
227*e4b17023SJohn Marino else
228*e4b17023SJohn Marino {
229*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE3_UNSET;
230*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE3_UNSET;
231*e4b17023SJohn Marino }
232*e4b17023SJohn Marino return true;
233*e4b17023SJohn Marino
234*e4b17023SJohn Marino case OPT_mssse3:
235*e4b17023SJohn Marino if (value)
236*e4b17023SJohn Marino {
237*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSSE3_SET;
238*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSSE3_SET;
239*e4b17023SJohn Marino }
240*e4b17023SJohn Marino else
241*e4b17023SJohn Marino {
242*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSSE3_UNSET;
243*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSSE3_UNSET;
244*e4b17023SJohn Marino }
245*e4b17023SJohn Marino return true;
246*e4b17023SJohn Marino
247*e4b17023SJohn Marino case OPT_msse4_1:
248*e4b17023SJohn Marino if (value)
249*e4b17023SJohn Marino {
250*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_1_SET;
251*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_1_SET;
252*e4b17023SJohn Marino }
253*e4b17023SJohn Marino else
254*e4b17023SJohn Marino {
255*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_1_UNSET;
256*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_1_UNSET;
257*e4b17023SJohn Marino }
258*e4b17023SJohn Marino return true;
259*e4b17023SJohn Marino
260*e4b17023SJohn Marino case OPT_msse4_2:
261*e4b17023SJohn Marino if (value)
262*e4b17023SJohn Marino {
263*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_2_SET;
264*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_2_SET;
265*e4b17023SJohn Marino }
266*e4b17023SJohn Marino else
267*e4b17023SJohn Marino {
268*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_2_UNSET;
269*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_2_UNSET;
270*e4b17023SJohn Marino }
271*e4b17023SJohn Marino return true;
272*e4b17023SJohn Marino
273*e4b17023SJohn Marino case OPT_mavx:
274*e4b17023SJohn Marino if (value)
275*e4b17023SJohn Marino {
276*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX_SET;
277*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_SET;
278*e4b17023SJohn Marino }
279*e4b17023SJohn Marino else
280*e4b17023SJohn Marino {
281*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX_UNSET;
282*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_UNSET;
283*e4b17023SJohn Marino }
284*e4b17023SJohn Marino return true;
285*e4b17023SJohn Marino
286*e4b17023SJohn Marino case OPT_mavx2:
287*e4b17023SJohn Marino if (value)
288*e4b17023SJohn Marino {
289*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX2_SET;
290*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_SET;
291*e4b17023SJohn Marino }
292*e4b17023SJohn Marino else
293*e4b17023SJohn Marino {
294*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX2_UNSET;
295*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_UNSET;
296*e4b17023SJohn Marino }
297*e4b17023SJohn Marino return true;
298*e4b17023SJohn Marino
299*e4b17023SJohn Marino case OPT_mfma:
300*e4b17023SJohn Marino if (value)
301*e4b17023SJohn Marino {
302*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FMA_SET;
303*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA_SET;
304*e4b17023SJohn Marino }
305*e4b17023SJohn Marino else
306*e4b17023SJohn Marino {
307*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA_UNSET;
308*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA_UNSET;
309*e4b17023SJohn Marino }
310*e4b17023SJohn Marino return true;
311*e4b17023SJohn Marino
312*e4b17023SJohn Marino case OPT_msse4:
313*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_SET;
314*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_SET;
315*e4b17023SJohn Marino return true;
316*e4b17023SJohn Marino
317*e4b17023SJohn Marino case OPT_mno_sse4:
318*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_UNSET;
319*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_UNSET;
320*e4b17023SJohn Marino return true;
321*e4b17023SJohn Marino
322*e4b17023SJohn Marino case OPT_msse4a:
323*e4b17023SJohn Marino if (value)
324*e4b17023SJohn Marino {
325*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4A_SET;
326*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4A_SET;
327*e4b17023SJohn Marino }
328*e4b17023SJohn Marino else
329*e4b17023SJohn Marino {
330*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4A_UNSET;
331*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4A_UNSET;
332*e4b17023SJohn Marino }
333*e4b17023SJohn Marino return true;
334*e4b17023SJohn Marino
335*e4b17023SJohn Marino case OPT_mfma4:
336*e4b17023SJohn Marino if (value)
337*e4b17023SJohn Marino {
338*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FMA4_SET;
339*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA4_SET;
340*e4b17023SJohn Marino }
341*e4b17023SJohn Marino else
342*e4b17023SJohn Marino {
343*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA4_UNSET;
344*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA4_UNSET;
345*e4b17023SJohn Marino }
346*e4b17023SJohn Marino return true;
347*e4b17023SJohn Marino
348*e4b17023SJohn Marino case OPT_mxop:
349*e4b17023SJohn Marino if (value)
350*e4b17023SJohn Marino {
351*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XOP_SET;
352*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XOP_SET;
353*e4b17023SJohn Marino }
354*e4b17023SJohn Marino else
355*e4b17023SJohn Marino {
356*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XOP_UNSET;
357*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XOP_UNSET;
358*e4b17023SJohn Marino }
359*e4b17023SJohn Marino return true;
360*e4b17023SJohn Marino
361*e4b17023SJohn Marino case OPT_mlwp:
362*e4b17023SJohn Marino if (value)
363*e4b17023SJohn Marino {
364*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_LWP_SET;
365*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LWP_SET;
366*e4b17023SJohn Marino }
367*e4b17023SJohn Marino else
368*e4b17023SJohn Marino {
369*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_LWP_UNSET;
370*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LWP_UNSET;
371*e4b17023SJohn Marino }
372*e4b17023SJohn Marino return true;
373*e4b17023SJohn Marino
374*e4b17023SJohn Marino case OPT_mabm:
375*e4b17023SJohn Marino if (value)
376*e4b17023SJohn Marino {
377*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_ABM_SET;
378*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ABM_SET;
379*e4b17023SJohn Marino }
380*e4b17023SJohn Marino else
381*e4b17023SJohn Marino {
382*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_ABM_UNSET;
383*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ABM_UNSET;
384*e4b17023SJohn Marino }
385*e4b17023SJohn Marino return true;
386*e4b17023SJohn Marino
387*e4b17023SJohn Marino case OPT_mbmi:
388*e4b17023SJohn Marino if (value)
389*e4b17023SJohn Marino {
390*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_BMI_SET;
391*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI_SET;
392*e4b17023SJohn Marino }
393*e4b17023SJohn Marino else
394*e4b17023SJohn Marino {
395*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_BMI_UNSET;
396*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI_UNSET;
397*e4b17023SJohn Marino }
398*e4b17023SJohn Marino return true;
399*e4b17023SJohn Marino
400*e4b17023SJohn Marino case OPT_mbmi2:
401*e4b17023SJohn Marino if (value)
402*e4b17023SJohn Marino {
403*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_BMI2_SET;
404*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI2_SET;
405*e4b17023SJohn Marino }
406*e4b17023SJohn Marino else
407*e4b17023SJohn Marino {
408*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_BMI2_UNSET;
409*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI2_UNSET;
410*e4b17023SJohn Marino }
411*e4b17023SJohn Marino return true;
412*e4b17023SJohn Marino
413*e4b17023SJohn Marino case OPT_mtbm:
414*e4b17023SJohn Marino if (value)
415*e4b17023SJohn Marino {
416*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_TBM_SET;
417*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_TBM_SET;
418*e4b17023SJohn Marino }
419*e4b17023SJohn Marino else
420*e4b17023SJohn Marino {
421*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_TBM_UNSET;
422*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_TBM_UNSET;
423*e4b17023SJohn Marino }
424*e4b17023SJohn Marino return true;
425*e4b17023SJohn Marino
426*e4b17023SJohn Marino case OPT_mpopcnt:
427*e4b17023SJohn Marino if (value)
428*e4b17023SJohn Marino {
429*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_POPCNT_SET;
430*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_POPCNT_SET;
431*e4b17023SJohn Marino }
432*e4b17023SJohn Marino else
433*e4b17023SJohn Marino {
434*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_POPCNT_UNSET;
435*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_POPCNT_UNSET;
436*e4b17023SJohn Marino }
437*e4b17023SJohn Marino return true;
438*e4b17023SJohn Marino
439*e4b17023SJohn Marino case OPT_msahf:
440*e4b17023SJohn Marino if (value)
441*e4b17023SJohn Marino {
442*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SAHF_SET;
443*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SAHF_SET;
444*e4b17023SJohn Marino }
445*e4b17023SJohn Marino else
446*e4b17023SJohn Marino {
447*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SAHF_UNSET;
448*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SAHF_UNSET;
449*e4b17023SJohn Marino }
450*e4b17023SJohn Marino return true;
451*e4b17023SJohn Marino
452*e4b17023SJohn Marino case OPT_mcx16:
453*e4b17023SJohn Marino if (value)
454*e4b17023SJohn Marino {
455*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_CX16_SET;
456*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CX16_SET;
457*e4b17023SJohn Marino }
458*e4b17023SJohn Marino else
459*e4b17023SJohn Marino {
460*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_CX16_UNSET;
461*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CX16_UNSET;
462*e4b17023SJohn Marino }
463*e4b17023SJohn Marino return true;
464*e4b17023SJohn Marino
465*e4b17023SJohn Marino case OPT_mmovbe:
466*e4b17023SJohn Marino if (value)
467*e4b17023SJohn Marino {
468*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_MOVBE_SET;
469*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MOVBE_SET;
470*e4b17023SJohn Marino }
471*e4b17023SJohn Marino else
472*e4b17023SJohn Marino {
473*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_MOVBE_UNSET;
474*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MOVBE_UNSET;
475*e4b17023SJohn Marino }
476*e4b17023SJohn Marino return true;
477*e4b17023SJohn Marino
478*e4b17023SJohn Marino case OPT_mcrc32:
479*e4b17023SJohn Marino if (value)
480*e4b17023SJohn Marino {
481*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_CRC32_SET;
482*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CRC32_SET;
483*e4b17023SJohn Marino }
484*e4b17023SJohn Marino else
485*e4b17023SJohn Marino {
486*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_CRC32_UNSET;
487*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CRC32_UNSET;
488*e4b17023SJohn Marino }
489*e4b17023SJohn Marino return true;
490*e4b17023SJohn Marino
491*e4b17023SJohn Marino case OPT_maes:
492*e4b17023SJohn Marino if (value)
493*e4b17023SJohn Marino {
494*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AES_SET;
495*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AES_SET;
496*e4b17023SJohn Marino }
497*e4b17023SJohn Marino else
498*e4b17023SJohn Marino {
499*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AES_UNSET;
500*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AES_UNSET;
501*e4b17023SJohn Marino }
502*e4b17023SJohn Marino return true;
503*e4b17023SJohn Marino
504*e4b17023SJohn Marino case OPT_mpclmul:
505*e4b17023SJohn Marino if (value)
506*e4b17023SJohn Marino {
507*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_PCLMUL_SET;
508*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PCLMUL_SET;
509*e4b17023SJohn Marino }
510*e4b17023SJohn Marino else
511*e4b17023SJohn Marino {
512*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_PCLMUL_UNSET;
513*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PCLMUL_UNSET;
514*e4b17023SJohn Marino }
515*e4b17023SJohn Marino return true;
516*e4b17023SJohn Marino
517*e4b17023SJohn Marino case OPT_mfsgsbase:
518*e4b17023SJohn Marino if (value)
519*e4b17023SJohn Marino {
520*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FSGSBASE_SET;
521*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FSGSBASE_SET;
522*e4b17023SJohn Marino }
523*e4b17023SJohn Marino else
524*e4b17023SJohn Marino {
525*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FSGSBASE_UNSET;
526*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FSGSBASE_UNSET;
527*e4b17023SJohn Marino }
528*e4b17023SJohn Marino return true;
529*e4b17023SJohn Marino
530*e4b17023SJohn Marino case OPT_mrdrnd:
531*e4b17023SJohn Marino if (value)
532*e4b17023SJohn Marino {
533*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_RDRND_SET;
534*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDRND_SET;
535*e4b17023SJohn Marino }
536*e4b17023SJohn Marino else
537*e4b17023SJohn Marino {
538*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_RDRND_UNSET;
539*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDRND_UNSET;
540*e4b17023SJohn Marino }
541*e4b17023SJohn Marino return true;
542*e4b17023SJohn Marino
543*e4b17023SJohn Marino case OPT_mf16c:
544*e4b17023SJohn Marino if (value)
545*e4b17023SJohn Marino {
546*e4b17023SJohn Marino opts->x_ix86_isa_flags |= OPTION_MASK_ISA_F16C_SET;
547*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_F16C_SET;
548*e4b17023SJohn Marino }
549*e4b17023SJohn Marino else
550*e4b17023SJohn Marino {
551*e4b17023SJohn Marino opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_F16C_UNSET;
552*e4b17023SJohn Marino opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_F16C_UNSET;
553*e4b17023SJohn Marino }
554*e4b17023SJohn Marino return true;
555*e4b17023SJohn Marino
556*e4b17023SJohn Marino /* Comes from final.c -- no real reason to change it. */
557*e4b17023SJohn Marino #define MAX_CODE_ALIGN 16
558*e4b17023SJohn Marino
559*e4b17023SJohn Marino case OPT_malign_loops_:
560*e4b17023SJohn Marino warning_at (loc, 0, "-malign-loops is obsolete, use -falign-loops");
561*e4b17023SJohn Marino if (value > MAX_CODE_ALIGN)
562*e4b17023SJohn Marino error_at (loc, "-malign-loops=%d is not between 0 and %d",
563*e4b17023SJohn Marino value, MAX_CODE_ALIGN);
564*e4b17023SJohn Marino else
565*e4b17023SJohn Marino opts->x_align_loops = 1 << value;
566*e4b17023SJohn Marino return true;
567*e4b17023SJohn Marino
568*e4b17023SJohn Marino case OPT_malign_jumps_:
569*e4b17023SJohn Marino warning_at (loc, 0, "-malign-jumps is obsolete, use -falign-jumps");
570*e4b17023SJohn Marino if (value > MAX_CODE_ALIGN)
571*e4b17023SJohn Marino error_at (loc, "-malign-jumps=%d is not between 0 and %d",
572*e4b17023SJohn Marino value, MAX_CODE_ALIGN);
573*e4b17023SJohn Marino else
574*e4b17023SJohn Marino opts->x_align_jumps = 1 << value;
575*e4b17023SJohn Marino return true;
576*e4b17023SJohn Marino
577*e4b17023SJohn Marino case OPT_malign_functions_:
578*e4b17023SJohn Marino warning_at (loc, 0,
579*e4b17023SJohn Marino "-malign-functions is obsolete, use -falign-functions");
580*e4b17023SJohn Marino if (value > MAX_CODE_ALIGN)
581*e4b17023SJohn Marino error_at (loc, "-malign-functions=%d is not between 0 and %d",
582*e4b17023SJohn Marino value, MAX_CODE_ALIGN);
583*e4b17023SJohn Marino else
584*e4b17023SJohn Marino opts->x_align_functions = 1 << value;
585*e4b17023SJohn Marino return true;
586*e4b17023SJohn Marino
587*e4b17023SJohn Marino case OPT_mbranch_cost_:
588*e4b17023SJohn Marino if (value > 5)
589*e4b17023SJohn Marino {
590*e4b17023SJohn Marino error_at (loc, "-mbranch-cost=%d is not between 0 and 5", value);
591*e4b17023SJohn Marino opts->x_ix86_branch_cost = 5;
592*e4b17023SJohn Marino }
593*e4b17023SJohn Marino return true;
594*e4b17023SJohn Marino
595*e4b17023SJohn Marino default:
596*e4b17023SJohn Marino return true;
597*e4b17023SJohn Marino }
598*e4b17023SJohn Marino }
599*e4b17023SJohn Marino
600*e4b17023SJohn Marino static const struct default_options ix86_option_optimization_table[] =
601*e4b17023SJohn Marino {
602*e4b17023SJohn Marino /* Enable redundant extension instructions removal at -O2 and higher. */
603*e4b17023SJohn Marino { OPT_LEVELS_2_PLUS, OPT_free, NULL, 1 },
604*e4b17023SJohn Marino /* Turn off -fschedule-insns by default. It tends to make the
605*e4b17023SJohn Marino problem with not enough registers even worse. */
606*e4b17023SJohn Marino { OPT_LEVELS_ALL, OPT_fschedule_insns, NULL, 0 },
607*e4b17023SJohn Marino
608*e4b17023SJohn Marino #ifdef SUBTARGET_OPTIMIZATION_OPTIONS
609*e4b17023SJohn Marino SUBTARGET_OPTIMIZATION_OPTIONS,
610*e4b17023SJohn Marino #endif
611*e4b17023SJohn Marino { OPT_LEVELS_NONE, 0, NULL, 0 }
612*e4b17023SJohn Marino };
613*e4b17023SJohn Marino
614*e4b17023SJohn Marino /* Implement TARGET_OPTION_INIT_STRUCT. */
615*e4b17023SJohn Marino
616*e4b17023SJohn Marino static void
ix86_option_init_struct(struct gcc_options * opts)617*e4b17023SJohn Marino ix86_option_init_struct (struct gcc_options *opts)
618*e4b17023SJohn Marino {
619*e4b17023SJohn Marino if (TARGET_MACHO)
620*e4b17023SJohn Marino /* The Darwin libraries never set errno, so we might as well
621*e4b17023SJohn Marino avoid calling them when that's the only reason we would. */
622*e4b17023SJohn Marino opts->x_flag_errno_math = 0;
623*e4b17023SJohn Marino
624*e4b17023SJohn Marino opts->x_flag_pcc_struct_return = 2;
625*e4b17023SJohn Marino opts->x_flag_asynchronous_unwind_tables = 2;
626*e4b17023SJohn Marino opts->x_flag_vect_cost_model = 1;
627*e4b17023SJohn Marino }
628*e4b17023SJohn Marino
629*e4b17023SJohn Marino /* On the x86 -fsplit-stack and -fstack-protector both use the same
630*e4b17023SJohn Marino field in the TCB, so they can not be used together. */
631*e4b17023SJohn Marino
632*e4b17023SJohn Marino static bool
ix86_supports_split_stack(bool report ATTRIBUTE_UNUSED,struct gcc_options * opts ATTRIBUTE_UNUSED)633*e4b17023SJohn Marino ix86_supports_split_stack (bool report ATTRIBUTE_UNUSED,
634*e4b17023SJohn Marino struct gcc_options *opts ATTRIBUTE_UNUSED)
635*e4b17023SJohn Marino {
636*e4b17023SJohn Marino bool ret = true;
637*e4b17023SJohn Marino
638*e4b17023SJohn Marino #ifndef TARGET_THREAD_SPLIT_STACK_OFFSET
639*e4b17023SJohn Marino if (report)
640*e4b17023SJohn Marino error ("%<-fsplit-stack%> currently only supported on GNU/Linux");
641*e4b17023SJohn Marino ret = false;
642*e4b17023SJohn Marino #else
643*e4b17023SJohn Marino if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
644*e4b17023SJohn Marino {
645*e4b17023SJohn Marino if (report)
646*e4b17023SJohn Marino error ("%<-fsplit-stack%> requires "
647*e4b17023SJohn Marino "assembler support for CFI directives");
648*e4b17023SJohn Marino ret = false;
649*e4b17023SJohn Marino }
650*e4b17023SJohn Marino #endif
651*e4b17023SJohn Marino
652*e4b17023SJohn Marino return ret;
653*e4b17023SJohn Marino }
654*e4b17023SJohn Marino
655*e4b17023SJohn Marino #undef TARGET_DEFAULT_TARGET_FLAGS
656*e4b17023SJohn Marino #define TARGET_DEFAULT_TARGET_FLAGS \
657*e4b17023SJohn Marino (TARGET_DEFAULT \
658*e4b17023SJohn Marino | TARGET_SUBTARGET_DEFAULT \
659*e4b17023SJohn Marino | TARGET_TLS_DIRECT_SEG_REFS_DEFAULT)
660*e4b17023SJohn Marino
661*e4b17023SJohn Marino #undef TARGET_HANDLE_OPTION
662*e4b17023SJohn Marino #define TARGET_HANDLE_OPTION ix86_handle_option
663*e4b17023SJohn Marino
664*e4b17023SJohn Marino #undef TARGET_OPTION_OPTIMIZATION_TABLE
665*e4b17023SJohn Marino #define TARGET_OPTION_OPTIMIZATION_TABLE ix86_option_optimization_table
666*e4b17023SJohn Marino #undef TARGET_OPTION_INIT_STRUCT
667*e4b17023SJohn Marino #define TARGET_OPTION_INIT_STRUCT ix86_option_init_struct
668*e4b17023SJohn Marino
669*e4b17023SJohn Marino #undef TARGET_SUPPORTS_SPLIT_STACK
670*e4b17023SJohn Marino #define TARGET_SUPPORTS_SPLIT_STACK ix86_supports_split_stack
671*e4b17023SJohn Marino
672*e4b17023SJohn Marino struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
673