2 Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
24 #include "coretypes.h"
25 #include "diagnostic-core.h"
28 #include "common/common-target.h"
29 #include "common/common-target-def.h"
33 /* Define a set of ISAs which are available when a given ISA is
34 enabled. MMX and SSE ISAs are handled separately. */
36 #define OPTION_MASK_ISA_MMX_SET OPTION_MASK_ISA_MMX
37 #define OPTION_MASK_ISA_3DNOW_SET \
38 (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_MMX_SET)
40 #define OPTION_MASK_ISA_SSE_SET OPTION_MASK_ISA_SSE
41 #define OPTION_MASK_ISA_SSE2_SET \
42 (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE_SET)
43 #define OPTION_MASK_ISA_SSE3_SET \
44 (OPTION_MASK_ISA_SSE3 | OPTION_MASK_ISA_SSE2_SET)
45 #define OPTION_MASK_ISA_SSSE3_SET \
46 (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE3_SET)
47 #define OPTION_MASK_ISA_SSE4_1_SET \
48 (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSSE3_SET)
49 #define OPTION_MASK_ISA_SSE4_2_SET \
50 (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_SSE4_1_SET)
51 #define OPTION_MASK_ISA_AVX_SET \
52 (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_SSE4_2_SET)
53 #define OPTION_MASK_ISA_FMA_SET \
54 (OPTION_MASK_ISA_FMA | OPTION_MASK_ISA_AVX_SET)
55 #define OPTION_MASK_ISA_AVX2_SET \
56 (OPTION_MASK_ISA_AVX2 | OPTION_MASK_ISA_AVX_SET)
58 /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same
60 #define OPTION_MASK_ISA_SSE4_SET OPTION_MASK_ISA_SSE4_2_SET
62 #define OPTION_MASK_ISA_SSE4A_SET \
63 (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_SSE3_SET)
64 #define OPTION_MASK_ISA_FMA4_SET \
65 (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_SSE4A_SET \
66 | OPTION_MASK_ISA_AVX_SET)
67 #define OPTION_MASK_ISA_XOP_SET \
68 (OPTION_MASK_ISA_XOP | OPTION_MASK_ISA_FMA4_SET)
69 #define OPTION_MASK_ISA_LWP_SET \
72 /* AES and PCLMUL need SSE2 because they use xmm registers */
73 #define OPTION_MASK_ISA_AES_SET \
74 (OPTION_MASK_ISA_AES | OPTION_MASK_ISA_SSE2_SET)
75 #define OPTION_MASK_ISA_PCLMUL_SET \
76 (OPTION_MASK_ISA_PCLMUL | OPTION_MASK_ISA_SSE2_SET)
78 #define OPTION_MASK_ISA_ABM_SET \
79 (OPTION_MASK_ISA_ABM | OPTION_MASK_ISA_POPCNT)
81 #define OPTION_MASK_ISA_BMI_SET OPTION_MASK_ISA_BMI
82 #define OPTION_MASK_ISA_BMI2_SET OPTION_MASK_ISA_BMI2
83 #define OPTION_MASK_ISA_TBM_SET OPTION_MASK_ISA_TBM
84 #define OPTION_MASK_ISA_POPCNT_SET OPTION_MASK_ISA_POPCNT
85 #define OPTION_MASK_ISA_CX16_SET OPTION_MASK_ISA_CX16
86 #define OPTION_MASK_ISA_SAHF_SET OPTION_MASK_ISA_SAHF
87 #define OPTION_MASK_ISA_MOVBE_SET OPTION_MASK_ISA_MOVBE
88 #define OPTION_MASK_ISA_CRC32_SET OPTION_MASK_ISA_CRC32
90 #define OPTION_MASK_ISA_FSGSBASE_SET OPTION_MASK_ISA_FSGSBASE
91 #define OPTION_MASK_ISA_RDRND_SET OPTION_MASK_ISA_RDRND
92 #define OPTION_MASK_ISA_F16C_SET \
93 (OPTION_MASK_ISA_F16C | OPTION_MASK_ISA_AVX_SET)
95 /* Define a set of ISAs which aren't available when a given ISA is
96 disabled. MMX and SSE ISAs are handled separately. */
98 #define OPTION_MASK_ISA_MMX_UNSET \
99 (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_3DNOW_UNSET)
100 #define OPTION_MASK_ISA_3DNOW_UNSET \
101 (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_3DNOW_A_UNSET)
102 #define OPTION_MASK_ISA_3DNOW_A_UNSET OPTION_MASK_ISA_3DNOW_A
104 #define OPTION_MASK_ISA_SSE_UNSET \
105 (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_SSE2_UNSET)
106 #define OPTION_MASK_ISA_SSE2_UNSET \
107 (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE3_UNSET)
108 #define OPTION_MASK_ISA_SSE3_UNSET \
109 (OPTION_MASK_ISA_SSE3 \
110 | OPTION_MASK_ISA_SSSE3_UNSET \
111 | OPTION_MASK_ISA_SSE4A_UNSET )
112 #define OPTION_MASK_ISA_SSSE3_UNSET \
113 (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE4_1_UNSET)
114 #define OPTION_MASK_ISA_SSE4_1_UNSET \
115 (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSE4_2_UNSET)
116 #define OPTION_MASK_ISA_SSE4_2_UNSET \
117 (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_AVX_UNSET )
118 #define OPTION_MASK_ISA_AVX_UNSET \
119 (OPTION_MASK_ISA_AVX | OPTION_MASK_ISA_FMA_UNSET \
120 | OPTION_MASK_ISA_FMA4_UNSET | OPTION_MASK_ISA_F16C_UNSET \
121 | OPTION_MASK_ISA_AVX2_UNSET)
122 #define OPTION_MASK_ISA_FMA_UNSET OPTION_MASK_ISA_FMA
123 #define OPTION_MASK_ISA_AVX2_UNSET OPTION_MASK_ISA_AVX2
125 /* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same
127 #define OPTION_MASK_ISA_SSE4_UNSET OPTION_MASK_ISA_SSE4_1_UNSET
129 #define OPTION_MASK_ISA_SSE4A_UNSET \
130 (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_FMA4_UNSET)
132 #define OPTION_MASK_ISA_FMA4_UNSET \
133 (OPTION_MASK_ISA_FMA4 | OPTION_MASK_ISA_XOP_UNSET)
134 #define OPTION_MASK_ISA_XOP_UNSET OPTION_MASK_ISA_XOP
135 #define OPTION_MASK_ISA_LWP_UNSET OPTION_MASK_ISA_LWP
137 #define OPTION_MASK_ISA_AES_UNSET OPTION_MASK_ISA_AES
138 #define OPTION_MASK_ISA_PCLMUL_UNSET OPTION_MASK_ISA_PCLMUL
139 #define OPTION_MASK_ISA_ABM_UNSET OPTION_MASK_ISA_ABM
140 #define OPTION_MASK_ISA_BMI_UNSET OPTION_MASK_ISA_BMI
141 #define OPTION_MASK_ISA_BMI2_UNSET OPTION_MASK_ISA_BMI2
142 #define OPTION_MASK_ISA_TBM_UNSET OPTION_MASK_ISA_TBM
143 #define OPTION_MASK_ISA_POPCNT_UNSET OPTION_MASK_ISA_POPCNT
144 #define OPTION_MASK_ISA_CX16_UNSET OPTION_MASK_ISA_CX16
145 #define OPTION_MASK_ISA_SAHF_UNSET OPTION_MASK_ISA_SAHF
146 #define OPTION_MASK_ISA_MOVBE_UNSET OPTION_MASK_ISA_MOVBE
147 #define OPTION_MASK_ISA_CRC32_UNSET OPTION_MASK_ISA_CRC32
149 #define OPTION_MASK_ISA_FSGSBASE_UNSET OPTION_MASK_ISA_FSGSBASE
150 #define OPTION_MASK_ISA_RDRND_UNSET OPTION_MASK_ISA_RDRND
151 #define OPTION_MASK_ISA_F16C_UNSET OPTION_MASK_ISA_F16C
153 /* Implement TARGET_HANDLE_OPTION. */
156 ix86_handle_option (struct gcc_options *opts,
157 struct gcc_options *opts_set ATTRIBUTE_UNUSED,
158 const struct cl_decoded_option *decoded,
161 size_t code = decoded->opt_index;
162 int value = decoded->value;
169 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_MMX_SET;
170 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MMX_SET;
174 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_MMX_UNSET;
175 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MMX_UNSET;
182 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_3DNOW_SET;
183 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_SET;
187 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_3DNOW_UNSET;
188 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_UNSET;
198 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE_SET;
199 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE_SET;
203 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE_UNSET;
204 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE_UNSET;
211 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE2_SET;
212 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_SET;
216 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE2_UNSET;
217 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_UNSET;
224 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE3_SET;
225 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE3_SET;
229 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE3_UNSET;
230 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE3_UNSET;
237 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSSE3_SET;
238 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSSE3_SET;
242 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSSE3_UNSET;
243 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSSE3_UNSET;
250 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_1_SET;
251 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_1_SET;
255 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_1_UNSET;
256 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_1_UNSET;
263 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_2_SET;
264 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_2_SET;
268 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_2_UNSET;
269 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_2_UNSET;
276 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX_SET;
277 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_SET;
281 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX_UNSET;
282 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX_UNSET;
289 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX2_SET;
290 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_SET;
294 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AVX2_UNSET;
295 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_UNSET;
302 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FMA_SET;
303 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA_SET;
307 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA_UNSET;
308 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA_UNSET;
313 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4_SET;
314 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_SET;
318 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_UNSET;
319 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_UNSET;
325 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SSE4A_SET;
326 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4A_SET;
330 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4A_UNSET;
331 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4A_UNSET;
338 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FMA4_SET;
339 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA4_SET;
343 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FMA4_UNSET;
344 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FMA4_UNSET;
351 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_XOP_SET;
352 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XOP_SET;
356 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_XOP_UNSET;
357 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_XOP_UNSET;
364 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_LWP_SET;
365 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LWP_SET;
369 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_LWP_UNSET;
370 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_LWP_UNSET;
377 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_ABM_SET;
378 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ABM_SET;
382 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_ABM_UNSET;
383 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_ABM_UNSET;
390 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_BMI_SET;
391 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI_SET;
395 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_BMI_UNSET;
396 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI_UNSET;
403 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_BMI2_SET;
404 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI2_SET;
408 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_BMI2_UNSET;
409 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_BMI2_UNSET;
416 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_TBM_SET;
417 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_TBM_SET;
421 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_TBM_UNSET;
422 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_TBM_UNSET;
429 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_POPCNT_SET;
430 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_POPCNT_SET;
434 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_POPCNT_UNSET;
435 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_POPCNT_UNSET;
442 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_SAHF_SET;
443 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SAHF_SET;
447 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_SAHF_UNSET;
448 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_SAHF_UNSET;
455 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_CX16_SET;
456 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CX16_SET;
460 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_CX16_UNSET;
461 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CX16_UNSET;
468 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_MOVBE_SET;
469 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MOVBE_SET;
473 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_MOVBE_UNSET;
474 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_MOVBE_UNSET;
481 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_CRC32_SET;
482 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CRC32_SET;
486 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_CRC32_UNSET;
487 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CRC32_UNSET;
494 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AES_SET;
495 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AES_SET;
499 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_AES_UNSET;
500 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AES_UNSET;
507 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_PCLMUL_SET;
508 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PCLMUL_SET;
512 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_PCLMUL_UNSET;
513 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_PCLMUL_UNSET;
520 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_FSGSBASE_SET;
521 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FSGSBASE_SET;
525 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_FSGSBASE_UNSET;
526 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_FSGSBASE_UNSET;
533 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_RDRND_SET;
534 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDRND_SET;
538 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_RDRND_UNSET;
539 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_RDRND_UNSET;
546 opts->x_ix86_isa_flags |= OPTION_MASK_ISA_F16C_SET;
547 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_F16C_SET;
551 opts->x_ix86_isa_flags &= ~OPTION_MASK_ISA_F16C_UNSET;
552 opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_F16C_UNSET;
556 /* Comes from final.c -- no real reason to change it. */
557 #define MAX_CODE_ALIGN 16
559 case OPT_malign_loops_:
560 warning_at (loc, 0, "-malign-loops is obsolete, use -falign-loops");
561 if (value > MAX_CODE_ALIGN)
562 error_at (loc, "-malign-loops=%d is not between 0 and %d",
563 value, MAX_CODE_ALIGN);
565 opts->x_align_loops = 1 << value;
568 case OPT_malign_jumps_:
569 warning_at (loc, 0, "-malign-jumps is obsolete, use -falign-jumps");
570 if (value > MAX_CODE_ALIGN)
571 error_at (loc, "-malign-jumps=%d is not between 0 and %d",
572 value, MAX_CODE_ALIGN);
574 opts->x_align_jumps = 1 << value;
577 case OPT_malign_functions_:
579 "-malign-functions is obsolete, use -falign-functions");
580 if (value > MAX_CODE_ALIGN)
581 error_at (loc, "-malign-functions=%d is not between 0 and %d",
582 value, MAX_CODE_ALIGN);
584 opts->x_align_functions = 1 << value;
587 case OPT_mbranch_cost_:
590 error_at (loc, "-mbranch-cost=%d is not between 0 and 5", value);
591 opts->x_ix86_branch_cost = 5;
600 static const struct default_options ix86_option_optimization_table[] =
602 /* Turn off -fschedule-insns by default. It tends to make the
603 problem with not enough registers even worse. */
604 { OPT_LEVELS_ALL, OPT_fschedule_insns, NULL, 0 },
606 #ifdef SUBTARGET_OPTIMIZATION_OPTIONS
607 SUBTARGET_OPTIMIZATION_OPTIONS,
609 { OPT_LEVELS_NONE, 0, NULL, 0 }
612 /* Implement TARGET_OPTION_INIT_STRUCT. */
615 ix86_option_init_struct (struct gcc_options *opts)
618 /* The Darwin libraries never set errno, so we might as well
619 avoid calling them when that's the only reason we would. */
620 opts->x_flag_errno_math = 0;
622 opts->x_flag_pcc_struct_return = 2;
623 opts->x_flag_asynchronous_unwind_tables = 2;
624 opts->x_flag_vect_cost_model = 1;
627 /* On the x86 -fsplit-stack and -fstack-protector both use the same
628 field in the TCB, so they can not be used together. */
631 ix86_supports_split_stack (bool report ATTRIBUTE_UNUSED,
632 struct gcc_options *opts ATTRIBUTE_UNUSED)
636 #ifndef TARGET_THREAD_SPLIT_STACK_OFFSET
638 error ("%<-fsplit-stack%> currently only supported on GNU/Linux");
641 if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
644 error ("%<-fsplit-stack%> requires "
645 "assembler support for CFI directives");
653 #undef TARGET_DEFAULT_TARGET_FLAGS
654 #define TARGET_DEFAULT_TARGET_FLAGS \
656 | TARGET_SUBTARGET_DEFAULT \
657 | TARGET_TLS_DIRECT_SEG_REFS_DEFAULT)
659 #undef TARGET_HANDLE_OPTION
660 #define TARGET_HANDLE_OPTION ix86_handle_option
662 #undef TARGET_OPTION_OPTIMIZATION_TABLE
663 #define TARGET_OPTION_OPTIMIZATION_TABLE ix86_option_optimization_table
664 #undef TARGET_OPTION_INIT_STRUCT
665 #define TARGET_OPTION_INIT_STRUCT ix86_option_init_struct
667 #undef TARGET_SUPPORTS_SPLIT_STACK
668 #define TARGET_SUPPORTS_SPLIT_STACK ix86_supports_split_stack
670 struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;