Mercurial > hg > CbC > CbC_gcc
comparison gcc/common/config/s390/s390-common.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /* Common hooks for IBM S/390 and zSeries. | |
2 Copyright (C) 1999-2017 Free Software Foundation, Inc. | |
3 | |
4 This file is part of GCC. | |
5 | |
6 GCC is free software; you can redistribute it and/or modify it under | |
7 the terms of the GNU General Public License as published by the Free | |
8 Software Foundation; either version 3, or (at your option) any later | |
9 version. | |
10 | |
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GCC; see the file COPYING3. If not see | |
18 <http://www.gnu.org/licenses/>. */ | |
19 | |
20 #include "config.h" | |
21 #include "system.h" | |
22 #include "coretypes.h" | |
23 #include "diagnostic-core.h" | |
24 #include "tm.h" | |
25 #include "common/common-target.h" | |
26 #include "common/common-target-def.h" | |
27 #include "opts.h" | |
28 #include "flags.h" | |
29 | |
30 EXPORTED_CONST int processor_flags_table[] = | |
31 { | |
32 /* g5 */ PF_IEEE_FLOAT, | |
33 /* g6 */ PF_IEEE_FLOAT, | |
34 /* z900 */ PF_IEEE_FLOAT | PF_ZARCH, | |
35 /* z990 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT, | |
36 /* z9-109 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT | |
37 | PF_EXTIMM, | |
38 /* z9-ec */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT | |
39 | PF_EXTIMM | PF_DFP, | |
40 /* z10 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT | |
41 | PF_EXTIMM | PF_DFP | PF_Z10, | |
42 /* z196 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT | |
43 | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196, | |
44 /* zEC12 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT | |
45 | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 | PF_ZEC12 | PF_TX, | |
46 /* z13 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT | |
47 | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 | PF_ZEC12 | PF_TX | |
48 | PF_Z13 | PF_VX, | |
49 /* arch12 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT | |
50 | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 | PF_ZEC12 | PF_TX | |
51 | PF_Z13 | PF_VX | PF_VXE | PF_ARCH12 | |
52 }; | |
53 | |
54 /* Change optimizations to be performed, depending on the | |
55 optimization level. */ | |
56 | |
57 static const struct default_options s390_option_optimization_table[] = | |
58 { | |
59 { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, | |
60 | |
61 /* Enable -fsched-pressure by default when optimizing. */ | |
62 { OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 }, | |
63 | |
64 /* ??? There are apparently still problems with -fcaller-saves. */ | |
65 { OPT_LEVELS_ALL, OPT_fcaller_saves, NULL, 0 }, | |
66 | |
67 /* Use MVCLE instructions to decrease code size if requested. */ | |
68 { OPT_LEVELS_SIZE, OPT_mmvcle, NULL, 1 }, | |
69 | |
70 { OPT_LEVELS_NONE, 0, NULL, 0 } | |
71 }; | |
72 | |
73 /* Implement TARGET_OPTION_INIT_STRUCT. */ | |
74 | |
75 static void | |
76 s390_option_init_struct (struct gcc_options *opts) | |
77 { | |
78 /* By default, always emit DWARF-2 unwind info. This allows debugging | |
79 without maintaining a stack frame back-chain. */ | |
80 opts->x_flag_asynchronous_unwind_tables = 1; | |
81 } | |
82 | |
83 /* Implement TARGET_HANDLE_OPTION. */ | |
84 | |
85 bool | |
86 s390_handle_option (struct gcc_options *opts ATTRIBUTE_UNUSED, | |
87 struct gcc_options *opts_set ATTRIBUTE_UNUSED, | |
88 const struct cl_decoded_option *decoded, | |
89 location_t loc) | |
90 { | |
91 size_t code = decoded->opt_index; | |
92 int value = decoded->value; | |
93 | |
94 switch (code) | |
95 { | |
96 case OPT_mstack_guard_: | |
97 if (value != 0 && exact_log2 (value) == -1) | |
98 error_at (loc, "stack guard value must be an exact power of 2"); | |
99 return true; | |
100 | |
101 case OPT_mstack_size_: | |
102 if (value != 0 && exact_log2 (value) == -1) | |
103 error_at (loc, "stack size must be an exact power of 2"); | |
104 return true; | |
105 | |
106 default: | |
107 return true; | |
108 } | |
109 } | |
110 | |
111 /* -fsplit-stack uses a field in the TCB, available with glibc-2.23. | |
112 We don't verify it, since earlier versions just have padding at | |
113 its place, which works just as well. */ | |
114 | |
115 static bool | |
116 s390_supports_split_stack (bool report ATTRIBUTE_UNUSED, | |
117 struct gcc_options *opts ATTRIBUTE_UNUSED) | |
118 { | |
119 return true; | |
120 } | |
121 | |
122 #undef TARGET_DEFAULT_TARGET_FLAGS | |
123 #define TARGET_DEFAULT_TARGET_FLAGS (TARGET_DEFAULT) | |
124 | |
125 #undef TARGET_HANDLE_OPTION | |
126 #define TARGET_HANDLE_OPTION s390_handle_option | |
127 | |
128 #undef TARGET_OPTION_OPTIMIZATION_TABLE | |
129 #define TARGET_OPTION_OPTIMIZATION_TABLE s390_option_optimization_table | |
130 | |
131 #undef TARGET_OPTION_INIT_STRUCT | |
132 #define TARGET_OPTION_INIT_STRUCT s390_option_init_struct | |
133 | |
134 #undef TARGET_SUPPORTS_SPLIT_STACK | |
135 #define TARGET_SUPPORTS_SPLIT_STACK s390_supports_split_stack | |
136 | |
137 struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER; |