annotate gcc/common/config/nds32/nds32-common.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* Common hooks of Andes NDS32 cpu for GNU compiler
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2 Copyright (C) 2012-2018 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
3 Contributed by Andes Technology Corporation.
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 This file is part of GCC.
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 GCC is free software; you can redistribute it and/or modify it
kono
parents:
diff changeset
8 under the terms of the GNU General Public License as published
kono
parents:
diff changeset
9 by the Free Software Foundation; either version 3, or (at your
kono
parents:
diff changeset
10 option) any later version.
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 GCC is distributed in the hope that it will be useful, but WITHOUT
kono
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
kono
parents:
diff changeset
14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
kono
parents:
diff changeset
15 License for more details.
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
18 along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
19 <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 #include "config.h"
kono
parents:
diff changeset
22 #include "system.h"
kono
parents:
diff changeset
23 #include "coretypes.h"
kono
parents:
diff changeset
24 #include "diagnostic-core.h"
kono
parents:
diff changeset
25 #include "tm.h"
kono
parents:
diff changeset
26 #include "common/common-target.h"
kono
parents:
diff changeset
27 #include "common/common-target-def.h"
kono
parents:
diff changeset
28 #include "opts.h"
kono
parents:
diff changeset
29 #include "flags.h"
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 /* ------------------------------------------------------------------------ */
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 /* Implement TARGET_HANDLE_OPTION. */
kono
parents:
diff changeset
34 static bool
kono
parents:
diff changeset
35 nds32_handle_option (struct gcc_options *opts ATTRIBUTE_UNUSED,
kono
parents:
diff changeset
36 struct gcc_options *opts_set ATTRIBUTE_UNUSED,
kono
parents:
diff changeset
37 const struct cl_decoded_option *decoded,
kono
parents:
diff changeset
38 location_t loc)
kono
parents:
diff changeset
39 {
kono
parents:
diff changeset
40 size_t code = decoded->opt_index;
kono
parents:
diff changeset
41 int value = decoded->value;
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 switch (code)
kono
parents:
diff changeset
44 {
kono
parents:
diff changeset
45 case OPT_misr_vector_size_:
kono
parents:
diff changeset
46 /* Check the valid vector size: 4 or 16. */
kono
parents:
diff changeset
47 if (value != 4 && value != 16)
kono
parents:
diff changeset
48 {
kono
parents:
diff changeset
49 error_at (loc, "for the option -misr-vector-size=X, the valid X "
kono
parents:
diff changeset
50 "must be: 4 or 16");
kono
parents:
diff changeset
51 return false;
kono
parents:
diff changeset
52 }
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 return true;
kono
parents:
diff changeset
55
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
56 case OPT_misr_secure_:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
57 /* Check the valid security level: 0 1 2 3. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
58 if (value < 0 || value > 3)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
59 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
60 error_at (loc, "for the option -misr-secure=X, the valid X "
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
61 "must be: 0, 1, 2, or 3");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
62 return false;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
63 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
64 return true;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
65
111
kono
parents:
diff changeset
66 case OPT_mcache_block_size_:
kono
parents:
diff changeset
67 /* Check valid value: 4 8 16 32 64 128 256 512. */
kono
parents:
diff changeset
68 if (exact_log2 (value) < 2 || exact_log2 (value) > 9)
kono
parents:
diff changeset
69 {
kono
parents:
diff changeset
70 error_at (loc, "for the option -mcache-block-size=X, the valid X "
kono
parents:
diff changeset
71 "must be: 4, 8, 16, 32, 64, 128, 256, or 512");
kono
parents:
diff changeset
72 return false;
kono
parents:
diff changeset
73 }
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 return true;
kono
parents:
diff changeset
76
kono
parents:
diff changeset
77 default:
kono
parents:
diff changeset
78 return true;
kono
parents:
diff changeset
79 }
kono
parents:
diff changeset
80 }
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 /* ------------------------------------------------------------------------ */
kono
parents:
diff changeset
83
kono
parents:
diff changeset
84 /* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */
kono
parents:
diff changeset
85 static const struct default_options nds32_option_optimization_table[] =
kono
parents:
diff changeset
86 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
87 #if TARGET_LINUX_ABI == 0
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
88 /* Disable -fdelete-null-pointer-checks by default in ELF toolchain. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
89 { OPT_LEVELS_ALL, OPT_fdelete_null_pointer_checks,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
90 NULL, 0 },
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
91 #endif
111
kono
parents:
diff changeset
92 /* Enable -fsched-pressure by default at -O1 and above. */
kono
parents:
diff changeset
93 { OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 },
kono
parents:
diff changeset
94 /* Enable -fomit-frame-pointer by default at all optimization levels. */
kono
parents:
diff changeset
95 { OPT_LEVELS_ALL, OPT_fomit_frame_pointer, NULL, 1 },
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
96 /* Enable -mrelax-hint by default at all optimization levels. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
97 { OPT_LEVELS_ALL, OPT_mrelax_hint, NULL, 1 },
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
98 /* Enalbe -malways-align by default at -O1 and above, but not -Os or -Og. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
99 { OPT_LEVELS_1_PLUS_SPEED_ONLY, OPT_malways_align, NULL, 1 },
111
kono
parents:
diff changeset
100 /* Enable -mv3push by default at -Os, but it is useless under V2 ISA. */
kono
parents:
diff changeset
101 { OPT_LEVELS_SIZE, OPT_mv3push, NULL, 1 },
kono
parents:
diff changeset
102
kono
parents:
diff changeset
103 { OPT_LEVELS_NONE, 0, NULL, 0 }
kono
parents:
diff changeset
104 };
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106 /* ------------------------------------------------------------------------ */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
107
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
108 /* Implement TARGET_EXCEPT_UNWIND_INFO. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
109 static enum unwind_info_type
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
110 nds32_except_unwind_info (struct gcc_options *opts ATTRIBUTE_UNUSED)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
111 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
112 if (TARGET_LINUX_ABI)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
113 return UI_DWARF2;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
114
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
115 return UI_SJLJ;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
116 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
117
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
118 /* ------------------------------------------------------------------------ */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
119
111
kono
parents:
diff changeset
120
kono
parents:
diff changeset
121 /* Run-time Target Specification. */
kono
parents:
diff changeset
122
kono
parents:
diff changeset
123 /* The default target flags consist of
kono
parents:
diff changeset
124 TARGET_CPU_DEFAULT and other MASK_XXX flags.
kono
parents:
diff changeset
125
kono
parents:
diff changeset
126 The value of TARGET_CPU_DEFAULT is set by
kono
parents:
diff changeset
127 the process of 'configure' and 'make' stage.
kono
parents:
diff changeset
128 Please check gcc/config.gcc for more implementation detail.
kono
parents:
diff changeset
129
kono
parents:
diff changeset
130 Other MASK_XXX flags are set individually.
kono
parents:
diff changeset
131 By default we enable
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
132 TARGET_16_BIT : Generate 16/32 bit mixed length instruction.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
133 TARGET_EXT_PERF : Generate performance extention instrcution.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
134 TARGET_EXT_PERF2 : Generate performance extention version 2 instrcution.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
135 TARGET_EXT_STRING : Generate string extention instrcution.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
136 TARGET_HW_ABS : Generate hardware abs instruction.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
137 TARGET_CMOV : Generate conditional move instruction. */
111
kono
parents:
diff changeset
138 #undef TARGET_DEFAULT_TARGET_FLAGS
kono
parents:
diff changeset
139 #define TARGET_DEFAULT_TARGET_FLAGS \
kono
parents:
diff changeset
140 (TARGET_CPU_DEFAULT \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
141 | TARGET_DEFAULT_FPU_ISA \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
142 | TARGET_DEFAULT_FPU_FMA \
111
kono
parents:
diff changeset
143 | MASK_16_BIT \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
144 | MASK_EXT_PERF \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
145 | MASK_EXT_PERF2 \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
146 | MASK_EXT_STRING \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
147 | MASK_HW_ABS \
111
kono
parents:
diff changeset
148 | MASK_CMOV)
kono
parents:
diff changeset
149
kono
parents:
diff changeset
150 #undef TARGET_HANDLE_OPTION
kono
parents:
diff changeset
151 #define TARGET_HANDLE_OPTION nds32_handle_option
kono
parents:
diff changeset
152
kono
parents:
diff changeset
153 #undef TARGET_OPTION_OPTIMIZATION_TABLE
kono
parents:
diff changeset
154 #define TARGET_OPTION_OPTIMIZATION_TABLE nds32_option_optimization_table
kono
parents:
diff changeset
155
kono
parents:
diff changeset
156
kono
parents:
diff changeset
157 /* Defining the Output Assembler Language. */
kono
parents:
diff changeset
158
kono
parents:
diff changeset
159 #undef TARGET_EXCEPT_UNWIND_INFO
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
160 #define TARGET_EXCEPT_UNWIND_INFO nds32_except_unwind_info
111
kono
parents:
diff changeset
161
kono
parents:
diff changeset
162 /* ------------------------------------------------------------------------ */
kono
parents:
diff changeset
163
kono
parents:
diff changeset
164 struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
kono
parents:
diff changeset
165
kono
parents:
diff changeset
166 /* ------------------------------------------------------------------------ */