annotate gcc/config/nds32/nds32.h @ 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 /* Definitions of target machine 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
kono
parents:
diff changeset
22 /* ------------------------------------------------------------------------ */
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 /* The following are auxiliary macros or structure declarations
kono
parents:
diff changeset
25 that are used all over the nds32.c and nds32.h. */
kono
parents:
diff changeset
26
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
27 #define ADJUST_INSN_LENGTH(INSN, LENGTH) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
28 (LENGTH = nds32_adjust_insn_length (INSN, LENGTH))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
29
111
kono
parents:
diff changeset
30 /* Use SYMBOL_FLAG_MACH_DEP to define our own symbol_ref flag.
kono
parents:
diff changeset
31 It is used in nds32_encode_section_info() to store flag in symbol_ref
kono
parents:
diff changeset
32 in case the symbol should be placed in .rodata section.
kono
parents:
diff changeset
33 So that we can check it in nds32_legitimate_address_p(). */
kono
parents:
diff changeset
34 #define NDS32_SYMBOL_FLAG_RODATA \
kono
parents:
diff changeset
35 (SYMBOL_FLAG_MACH_DEP << 0)
kono
parents:
diff changeset
36 #define NDS32_SYMBOL_REF_RODATA_P(x) \
kono
parents:
diff changeset
37 ((SYMBOL_REF_FLAGS (x) & NDS32_SYMBOL_FLAG_RODATA) != 0)
kono
parents:
diff changeset
38
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
39 enum nds32_relax_insn_type
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
40 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
41 RELAX_ORI,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
42 RELAX_PLT_ADD,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
43 RELAX_TLS_ADD_or_LW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
44 RELAX_TLS_ADD_LW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
45 RELAX_TLS_LW_JRAL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
46 RELAX_DONE
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
47 };
111
kono
parents:
diff changeset
48
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
49 /* Classifies expand result for expand helper function. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
50 enum nds32_expand_result_type
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
51 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
52 EXPAND_DONE,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
53 EXPAND_FAIL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
54 EXPAND_CREATE_TEMPLATE
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
55 };
111
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 /* Classifies address type to distinguish 16-bit/32-bit format. */
kono
parents:
diff changeset
58 enum nds32_16bit_address_type
kono
parents:
diff changeset
59 {
kono
parents:
diff changeset
60 /* [reg]: 45 format address. */
kono
parents:
diff changeset
61 ADDRESS_REG,
kono
parents:
diff changeset
62 /* [lo_reg + imm3u]: 333 format address. */
kono
parents:
diff changeset
63 ADDRESS_LO_REG_IMM3U,
kono
parents:
diff changeset
64 /* post_inc [lo_reg + imm3u]: 333 format address. */
kono
parents:
diff changeset
65 ADDRESS_POST_INC_LO_REG_IMM3U,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
66 /* post_modify [lo_reg + imm3u]: 333 format address. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
67 ADDRESS_POST_MODIFY_LO_REG_IMM3U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
68 /* [$r8 + imm7u]: r8 imply address. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
69 ADDRESS_R8_IMM7U,
111
kono
parents:
diff changeset
70 /* [$fp + imm7u]: fp imply address. */
kono
parents:
diff changeset
71 ADDRESS_FP_IMM7U,
kono
parents:
diff changeset
72 /* [$sp + imm7u]: sp imply address. */
kono
parents:
diff changeset
73 ADDRESS_SP_IMM7U,
kono
parents:
diff changeset
74 /* Other address format. */
kono
parents:
diff changeset
75 ADDRESS_NOT_16BIT_FORMAT
kono
parents:
diff changeset
76 };
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 /* ------------------------------------------------------------------------ */
kono
parents:
diff changeset
80
kono
parents:
diff changeset
81 /* Define maximum numbers of registers for passing arguments. */
kono
parents:
diff changeset
82 #define NDS32_MAX_GPR_REGS_FOR_ARGS 6
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
83 #define NDS32_MAX_FPR_REGS_FOR_ARGS 6
111
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85 /* Define the register number for first argument. */
kono
parents:
diff changeset
86 #define NDS32_GPR_ARG_FIRST_REGNUM 0
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
87 #define NDS32_FPR_ARG_FIRST_REGNUM 34
111
kono
parents:
diff changeset
88
kono
parents:
diff changeset
89 /* Define the register number for return value. */
kono
parents:
diff changeset
90 #define NDS32_GPR_RET_FIRST_REGNUM 0
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
91 #define NDS32_FPR_RET_FIRST_REGNUM 34
111
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 /* Define the first integer register number. */
kono
parents:
diff changeset
94 #define NDS32_FIRST_GPR_REGNUM 0
kono
parents:
diff changeset
95 /* Define the last integer register number. */
kono
parents:
diff changeset
96 #define NDS32_LAST_GPR_REGNUM 31
kono
parents:
diff changeset
97
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
98 #define NDS32_FIRST_CALLEE_SAVE_GPR_REGNUM 6
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
99 #define NDS32_LAST_CALLEE_SAVE_GPR_REGNUM \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
100 (TARGET_REDUCED_REGS ? 10 : 14)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
101
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
102 /* Define the floating-point number of registers. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
103 #define NDS32_FLOAT_REGISTER_NUMBER \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
104 (((nds32_fp_regnum == NDS32_CONFIG_FPU_0) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
105 || (nds32_fp_regnum == NDS32_CONFIG_FPU_4)) ? 8 \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
106 : ((nds32_fp_regnum == NDS32_CONFIG_FPU_1) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
107 || (nds32_fp_regnum == NDS32_CONFIG_FPU_5)) ? 16 \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
108 : ((nds32_fp_regnum == NDS32_CONFIG_FPU_2) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
109 || (nds32_fp_regnum == NDS32_CONFIG_FPU_6)) ? 32 \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
110 : ((nds32_fp_regnum == NDS32_CONFIG_FPU_3) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
111 || (nds32_fp_regnum == NDS32_CONFIG_FPU_7)) ? 64 \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
112 : 32)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
113
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
114 #define NDS32_EXT_FPU_DOT_E (nds32_fp_regnum >= 4)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
115
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
116 /* Define the first floating-point register number. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
117 #define NDS32_FIRST_FPR_REGNUM 34
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
118 /* Define the last floating-point register number. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
119 #define NDS32_LAST_FPR_REGNUM \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
120 (NDS32_FIRST_FPR_REGNUM + NDS32_FLOAT_REGISTER_NUMBER - 1)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
121
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
122
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
123 #define NDS32_IS_EXT_FPR_REGNUM(regno) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
124 (((regno) >= NDS32_FIRST_FPR_REGNUM + 32) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
125 && ((regno) < NDS32_FIRST_FPR_REGNUM + 64))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
126
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
127 #define NDS32_IS_FPR_REGNUM(regno) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
128 (((regno) >= NDS32_FIRST_FPR_REGNUM) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
129 && ((regno) <= NDS32_LAST_FPR_REGNUM))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
130
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
131 #define NDS32_FPR_REGNO_OK_FOR_SINGLE(regno) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
132 ((regno) <= NDS32_LAST_FPR_REGNUM)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
133
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
134 #define NDS32_FPR_REGNO_OK_FOR_DOUBLE(regno) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
135 ((((regno) - NDS32_FIRST_FPR_REGNUM) & 1) == 0)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
136
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
137 #define NDS32_IS_GPR_REGNUM(regno) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
138 (((regno) <= NDS32_LAST_GPR_REGNUM))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
139
111
kono
parents:
diff changeset
140 /* Define double word alignment bits. */
kono
parents:
diff changeset
141 #define NDS32_DOUBLE_WORD_ALIGNMENT 64
kono
parents:
diff changeset
142
kono
parents:
diff changeset
143 /* Define alignment checking macros for convenience. */
kono
parents:
diff changeset
144 #define NDS32_HALF_WORD_ALIGN_P(value) (((value) & 0x01) == 0)
kono
parents:
diff changeset
145 #define NDS32_SINGLE_WORD_ALIGN_P(value) (((value) & 0x03) == 0)
kono
parents:
diff changeset
146 #define NDS32_DOUBLE_WORD_ALIGN_P(value) (((value) & 0x07) == 0)
kono
parents:
diff changeset
147
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
148 /* Determine whether we would like to have code generation strictly aligned.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
149 We set it strictly aligned when -malways-align is enabled.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
150 Check gcc/common/config/nds32/nds32-common.c for the optimizations that
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
151 apply -malways-align. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
152 #define NDS32_ALIGN_P() (TARGET_ALWAYS_ALIGN)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
153
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
154 #define NDS32_EXT_DSP_P() (TARGET_EXT_DSP && !TARGET_FORCE_NO_EXT_DSP)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
155
111
kono
parents:
diff changeset
156 /* Get alignment according to mode or type information.
kono
parents:
diff changeset
157 When 'type' is nonnull, there is no need to look at 'mode'. */
kono
parents:
diff changeset
158 #define NDS32_MODE_TYPE_ALIGN(mode, type) \
kono
parents:
diff changeset
159 (type ? TYPE_ALIGN (type) : GET_MODE_ALIGNMENT (mode))
kono
parents:
diff changeset
160
kono
parents:
diff changeset
161 /* Round X up to the nearest double word. */
kono
parents:
diff changeset
162 #define NDS32_ROUND_UP_DOUBLE_WORD(value) (((value) + 7) & ~7)
kono
parents:
diff changeset
163
kono
parents:
diff changeset
164
kono
parents:
diff changeset
165 /* This macro is used to calculate the numbers of registers for
kono
parents:
diff changeset
166 containing 'size' bytes of the argument.
kono
parents:
diff changeset
167 The size of a register is a word in nds32 target.
kono
parents:
diff changeset
168 So we use UNITS_PER_WORD to do the calculation. */
kono
parents:
diff changeset
169 #define NDS32_NEED_N_REGS_FOR_ARG(mode, type) \
kono
parents:
diff changeset
170 ((mode == BLKmode) \
kono
parents:
diff changeset
171 ? ((int_size_in_bytes (type) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) \
kono
parents:
diff changeset
172 : ((GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
kono
parents:
diff changeset
173
kono
parents:
diff changeset
174 /* This macro is used to return the register number for passing argument.
kono
parents:
diff changeset
175 We need to obey the following rules:
kono
parents:
diff changeset
176 1. If it is required MORE THAN one register,
kono
parents:
diff changeset
177 we need to further check if it really needs to be
kono
parents:
diff changeset
178 aligned on double words.
kono
parents:
diff changeset
179 a) If double word alignment is necessary,
kono
parents:
diff changeset
180 the register number must be even value.
kono
parents:
diff changeset
181 b) Otherwise, the register number can be odd or even value.
kono
parents:
diff changeset
182 2. If it is required ONLY one register,
kono
parents:
diff changeset
183 the register number can be odd or even value. */
kono
parents:
diff changeset
184 #define NDS32_AVAILABLE_REGNUM_FOR_GPR_ARG(reg_offset, mode, type) \
kono
parents:
diff changeset
185 ((NDS32_NEED_N_REGS_FOR_ARG (mode, type) > 1) \
kono
parents:
diff changeset
186 ? ((NDS32_MODE_TYPE_ALIGN (mode, type) > PARM_BOUNDARY) \
kono
parents:
diff changeset
187 ? (((reg_offset) + NDS32_GPR_ARG_FIRST_REGNUM + 1) & ~1) \
kono
parents:
diff changeset
188 : ((reg_offset) + NDS32_GPR_ARG_FIRST_REGNUM)) \
kono
parents:
diff changeset
189 : ((reg_offset) + NDS32_GPR_ARG_FIRST_REGNUM))
kono
parents:
diff changeset
190
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
191 #define NDS32_AVAILABLE_REGNUM_FOR_FPR_ARG(reg_offset, mode, type) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
192 ((NDS32_NEED_N_REGS_FOR_ARG (mode, type) > 1) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
193 ? ((NDS32_MODE_TYPE_ALIGN (mode, type) > PARM_BOUNDARY) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
194 ? (((reg_offset) + NDS32_FPR_ARG_FIRST_REGNUM + 1) & ~1) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
195 : ((reg_offset) + NDS32_FPR_ARG_FIRST_REGNUM)) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
196 : ((reg_offset) + NDS32_FPR_ARG_FIRST_REGNUM))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
197
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
198 /* These two macros are to check if there are still available registers
111
kono
parents:
diff changeset
199 for passing argument, which must be entirely in registers. */
kono
parents:
diff changeset
200 #define NDS32_ARG_ENTIRE_IN_GPR_REG_P(reg_offset, mode, type) \
kono
parents:
diff changeset
201 ((NDS32_AVAILABLE_REGNUM_FOR_GPR_ARG (reg_offset, mode, type) \
kono
parents:
diff changeset
202 + NDS32_NEED_N_REGS_FOR_ARG (mode, type)) \
kono
parents:
diff changeset
203 <= (NDS32_GPR_ARG_FIRST_REGNUM \
kono
parents:
diff changeset
204 + NDS32_MAX_GPR_REGS_FOR_ARGS))
kono
parents:
diff changeset
205
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
206 #define NDS32_ARG_ENTIRE_IN_FPR_REG_P(reg_offset, mode, type) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
207 ((NDS32_AVAILABLE_REGNUM_FOR_FPR_ARG (reg_offset, mode, type) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
208 + NDS32_NEED_N_REGS_FOR_ARG (mode, type)) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
209 <= (NDS32_FPR_ARG_FIRST_REGNUM \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
210 + NDS32_MAX_FPR_REGS_FOR_ARGS))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
211
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
212 /* These two macros are to check if there are still available registers
111
kono
parents:
diff changeset
213 for passing argument, either entirely in registers or partially
kono
parents:
diff changeset
214 in registers. */
kono
parents:
diff changeset
215 #define NDS32_ARG_PARTIAL_IN_GPR_REG_P(reg_offset, mode, type) \
kono
parents:
diff changeset
216 (NDS32_AVAILABLE_REGNUM_FOR_GPR_ARG (reg_offset, mode, type) \
kono
parents:
diff changeset
217 < NDS32_GPR_ARG_FIRST_REGNUM + NDS32_MAX_GPR_REGS_FOR_ARGS)
kono
parents:
diff changeset
218
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
219 #define NDS32_ARG_PARTIAL_IN_FPR_REG_P(reg_offset, mode, type) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
220 (NDS32_AVAILABLE_REGNUM_FOR_FPR_ARG (reg_offset, mode, type) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
221 < NDS32_FPR_ARG_FIRST_REGNUM + NDS32_MAX_FPR_REGS_FOR_ARGS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
222
111
kono
parents:
diff changeset
223 /* This macro is to check if the register is required to be saved on stack.
kono
parents:
diff changeset
224 If call_used_regs[regno] == 0, regno is the callee-saved register.
kono
parents:
diff changeset
225 If df_regs_ever_live_p(regno) == true, it is used in the current function.
kono
parents:
diff changeset
226 As long as the register satisfies both criteria above,
kono
parents:
diff changeset
227 it is required to be saved. */
kono
parents:
diff changeset
228 #define NDS32_REQUIRED_CALLEE_SAVED_P(regno) \
kono
parents:
diff changeset
229 ((!call_used_regs[regno]) && (df_regs_ever_live_p (regno)))
kono
parents:
diff changeset
230
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
231 /* This macro is to check if the push25/pop25 are available to be used
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
232 for code generation. Because pop25 also performs return behavior,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
233 the instructions may not be available for some cases.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
234 If we want to use push25/pop25, all the following conditions must
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
235 be satisfied:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
236 1. TARGET_V3PUSH is set.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
237 2. Current function is not an ISR function.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
238 3. Current function is not a variadic function.*/
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
239 #define NDS32_V3PUSH_AVAILABLE_P \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
240 (TARGET_V3PUSH \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
241 && !nds32_isr_function_p (current_function_decl) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
242 && (cfun->machine->va_args_size == 0))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
243
111
kono
parents:
diff changeset
244 /* ------------------------------------------------------------------------ */
kono
parents:
diff changeset
245
kono
parents:
diff changeset
246 /* A C structure for machine-specific, per-function data.
kono
parents:
diff changeset
247 This is added to the cfun structure. */
kono
parents:
diff changeset
248 struct GTY(()) machine_function
kono
parents:
diff changeset
249 {
kono
parents:
diff changeset
250 /* Number of bytes allocated on the stack for variadic args
kono
parents:
diff changeset
251 if we want to push them into stack as pretend arguments by ourself. */
kono
parents:
diff changeset
252 int va_args_size;
kono
parents:
diff changeset
253 /* Number of bytes reserved on the stack for
kono
parents:
diff changeset
254 local and temporary variables. */
kono
parents:
diff changeset
255 int local_size;
kono
parents:
diff changeset
256 /* Number of bytes allocated on the stack for outgoing arguments. */
kono
parents:
diff changeset
257 int out_args_size;
kono
parents:
diff changeset
258
kono
parents:
diff changeset
259 /* Number of bytes on the stack for saving $fp. */
kono
parents:
diff changeset
260 int fp_size;
kono
parents:
diff changeset
261 /* Number of bytes on the stack for saving $gp. */
kono
parents:
diff changeset
262 int gp_size;
kono
parents:
diff changeset
263 /* Number of bytes on the stack for saving $lp. */
kono
parents:
diff changeset
264 int lp_size;
kono
parents:
diff changeset
265
kono
parents:
diff changeset
266 /* Number of bytes on the stack for saving general purpose
kono
parents:
diff changeset
267 callee-saved registers. */
kono
parents:
diff changeset
268 int callee_saved_gpr_regs_size;
kono
parents:
diff changeset
269
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
270 /* Number of bytes on the stack for saving floating-point
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
271 callee-saved registers. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
272 int callee_saved_fpr_regs_size;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
273
111
kono
parents:
diff changeset
274 /* The padding bytes in callee-saved area may be required. */
kono
parents:
diff changeset
275 int callee_saved_area_gpr_padding_bytes;
kono
parents:
diff changeset
276
kono
parents:
diff changeset
277 /* The first required general purpose callee-saved register. */
kono
parents:
diff changeset
278 int callee_saved_first_gpr_regno;
kono
parents:
diff changeset
279 /* The last required general purpose callee-saved register. */
kono
parents:
diff changeset
280 int callee_saved_last_gpr_regno;
kono
parents:
diff changeset
281
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
282 /* The first required floating-point callee-saved register. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
283 int callee_saved_first_fpr_regno;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
284 /* The last required floating-point callee-saved register. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
285 int callee_saved_last_fpr_regno;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
286
111
kono
parents:
diff changeset
287 /* The padding bytes in varargs area may be required. */
kono
parents:
diff changeset
288 int va_args_area_padding_bytes;
kono
parents:
diff changeset
289
kono
parents:
diff changeset
290 /* The first required register that should be saved on stack for va_args. */
kono
parents:
diff changeset
291 int va_args_first_regno;
kono
parents:
diff changeset
292 /* The last required register that should be saved on stack for va_args. */
kono
parents:
diff changeset
293 int va_args_last_regno;
kono
parents:
diff changeset
294
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
295 /* Number of bytes on the stack for saving exception handling registers. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
296 int eh_return_data_regs_size;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
297 /* The first register of passing exception handling information. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
298 int eh_return_data_first_regno;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
299 /* The last register of passing exception handling information. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
300 int eh_return_data_last_regno;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
301
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
302 /* Indicate that whether this function
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
303 calls __builtin_eh_return. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
304 int use_eh_return_p;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
305
111
kono
parents:
diff changeset
306 /* Indicate that whether this function needs
kono
parents:
diff changeset
307 prologue/epilogue code generation. */
kono
parents:
diff changeset
308 int naked_p;
kono
parents:
diff changeset
309 /* Indicate that whether this function
kono
parents:
diff changeset
310 uses fp_as_gp optimization. */
kono
parents:
diff changeset
311 int fp_as_gp_p;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
312 /* Indicate that whether this function is under strictly aligned
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
313 situation for legitimate address checking. This flag informs
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
314 nds32_legitimate_address_p() how to treat offset alignment:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
315 1. The IVOPT phase needs to detect available range for memory access,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
316 such as checking [base + 32767] ~ [base + (-32768)].
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
317 For this case we do not want address to be strictly aligned.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
318 2. The rtl lowering and optimization are close to target code.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
319 For this case we need address to be strictly aligned. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
320 int strict_aligned_p;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
321
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
322 /* Record two similar attributes status. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
323 int attr_naked_p;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
324 int attr_no_prologue_p;
111
kono
parents:
diff changeset
325 };
kono
parents:
diff changeset
326
kono
parents:
diff changeset
327 /* A C structure that contains the arguments information. */
kono
parents:
diff changeset
328 typedef struct
kono
parents:
diff changeset
329 {
kono
parents:
diff changeset
330 unsigned int gpr_offset;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
331 unsigned int fpr_offset;
111
kono
parents:
diff changeset
332 } nds32_cumulative_args;
kono
parents:
diff changeset
333
kono
parents:
diff changeset
334 /* ------------------------------------------------------------------------ */
kono
parents:
diff changeset
335
kono
parents:
diff changeset
336 /* The following we define C-ISR related stuff.
kono
parents:
diff changeset
337 In nds32 architecture, we have 73 vectors for interrupt/exception.
kono
parents:
diff changeset
338 For each vector (except for vector 0, which is used for reset behavior),
kono
parents:
diff changeset
339 we allow users to set its register saving scheme and interrupt level. */
kono
parents:
diff changeset
340
kono
parents:
diff changeset
341 /* There are 73 vectors in nds32 architecture.
kono
parents:
diff changeset
342 0 for reset handler,
kono
parents:
diff changeset
343 1-8 for exception handler,
kono
parents:
diff changeset
344 and 9-72 for interrupt handler.
kono
parents:
diff changeset
345 We use an array, which is defined in nds32.c, to record
kono
parents:
diff changeset
346 essential information for each vector. */
kono
parents:
diff changeset
347 #define NDS32_N_ISR_VECTORS 73
kono
parents:
diff changeset
348
kono
parents:
diff changeset
349 /* Define possible isr category. */
kono
parents:
diff changeset
350 enum nds32_isr_category
kono
parents:
diff changeset
351 {
kono
parents:
diff changeset
352 NDS32_ISR_NONE,
kono
parents:
diff changeset
353 NDS32_ISR_INTERRUPT,
kono
parents:
diff changeset
354 NDS32_ISR_EXCEPTION,
kono
parents:
diff changeset
355 NDS32_ISR_RESET
kono
parents:
diff changeset
356 };
kono
parents:
diff changeset
357
kono
parents:
diff changeset
358 /* Define isr register saving scheme. */
kono
parents:
diff changeset
359 enum nds32_isr_save_reg
kono
parents:
diff changeset
360 {
kono
parents:
diff changeset
361 NDS32_SAVE_ALL,
kono
parents:
diff changeset
362 NDS32_PARTIAL_SAVE
kono
parents:
diff changeset
363 };
kono
parents:
diff changeset
364
kono
parents:
diff changeset
365 /* Define isr nested type. */
kono
parents:
diff changeset
366 enum nds32_isr_nested_type
kono
parents:
diff changeset
367 {
kono
parents:
diff changeset
368 NDS32_NESTED,
kono
parents:
diff changeset
369 NDS32_NOT_NESTED,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
370 NDS32_NESTED_READY,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
371 NDS32_CRITICAL
111
kono
parents:
diff changeset
372 };
kono
parents:
diff changeset
373
kono
parents:
diff changeset
374 /* Define structure to record isr information.
kono
parents:
diff changeset
375 The isr vector array 'isr_vectors[]' with this structure
kono
parents:
diff changeset
376 is defined in nds32.c. */
kono
parents:
diff changeset
377 struct nds32_isr_info
kono
parents:
diff changeset
378 {
kono
parents:
diff changeset
379 /* The field to identify isr category.
kono
parents:
diff changeset
380 It should be set to NDS32_ISR_NONE by default.
kono
parents:
diff changeset
381 If user specifies a function as isr by using attribute,
kono
parents:
diff changeset
382 this field will be set accordingly. */
kono
parents:
diff changeset
383 enum nds32_isr_category category;
kono
parents:
diff changeset
384
kono
parents:
diff changeset
385 /* A string for the applied function name.
kono
parents:
diff changeset
386 It should be set to empty string by default. */
kono
parents:
diff changeset
387 char func_name[100];
kono
parents:
diff changeset
388
kono
parents:
diff changeset
389 /* The register saving scheme.
kono
parents:
diff changeset
390 It should be set to NDS32_PARTIAL_SAVE by default
kono
parents:
diff changeset
391 unless user specifies attribute to change it. */
kono
parents:
diff changeset
392 enum nds32_isr_save_reg save_reg;
kono
parents:
diff changeset
393
kono
parents:
diff changeset
394 /* The nested type.
kono
parents:
diff changeset
395 It should be set to NDS32_NOT_NESTED by default
kono
parents:
diff changeset
396 unless user specifies attribute to change it. */
kono
parents:
diff changeset
397 enum nds32_isr_nested_type nested_type;
kono
parents:
diff changeset
398
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
399 /* Secure isr level.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
400 Currently we have 0-3 security level.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
401 It should be set to 0 by default.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
402 For security processors, this is determined by secure
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
403 attribute or compiler options. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
404 unsigned int security_level;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
405
111
kono
parents:
diff changeset
406 /* Total vectors.
kono
parents:
diff changeset
407 The total vectors = interrupt + exception numbers + reset.
kono
parents:
diff changeset
408 It should be set to 0 by default.
kono
parents:
diff changeset
409 This field is ONLY used in NDS32_ISR_RESET category. */
kono
parents:
diff changeset
410 unsigned int total_n_vectors;
kono
parents:
diff changeset
411
kono
parents:
diff changeset
412 /* A string for nmi handler name.
kono
parents:
diff changeset
413 It should be set to empty string by default.
kono
parents:
diff changeset
414 This field is ONLY used in NDS32_ISR_RESET category. */
kono
parents:
diff changeset
415 char nmi_name[100];
kono
parents:
diff changeset
416
kono
parents:
diff changeset
417 /* A string for warm handler name.
kono
parents:
diff changeset
418 It should be set to empty string by default.
kono
parents:
diff changeset
419 This field is ONLY used in NDS32_ISR_RESET category. */
kono
parents:
diff changeset
420 char warm_name[100];
kono
parents:
diff changeset
421 };
kono
parents:
diff changeset
422
kono
parents:
diff changeset
423 /* ------------------------------------------------------------------------ */
kono
parents:
diff changeset
424
kono
parents:
diff changeset
425 /* Define code for all nds32 builtins. */
kono
parents:
diff changeset
426 enum nds32_builtins
kono
parents:
diff changeset
427 {
kono
parents:
diff changeset
428 NDS32_BUILTIN_ISYNC,
kono
parents:
diff changeset
429 NDS32_BUILTIN_ISB,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
430 NDS32_BUILTIN_DSB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
431 NDS32_BUILTIN_MSYNC_ALL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
432 NDS32_BUILTIN_MSYNC_STORE,
111
kono
parents:
diff changeset
433 NDS32_BUILTIN_MFSR,
kono
parents:
diff changeset
434 NDS32_BUILTIN_MFUSR,
kono
parents:
diff changeset
435 NDS32_BUILTIN_MTSR,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
436 NDS32_BUILTIN_MTSR_ISB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
437 NDS32_BUILTIN_MTSR_DSB,
111
kono
parents:
diff changeset
438 NDS32_BUILTIN_MTUSR,
kono
parents:
diff changeset
439 NDS32_BUILTIN_SETGIE_EN,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
440 NDS32_BUILTIN_SETGIE_DIS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
441 NDS32_BUILTIN_FMFCFG,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
442 NDS32_BUILTIN_FMFCSR,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
443 NDS32_BUILTIN_FMTCSR,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
444 NDS32_BUILTIN_FCPYNSS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
445 NDS32_BUILTIN_FCPYSS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
446 NDS32_BUILTIN_FCPYNSD,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
447 NDS32_BUILTIN_FCPYSD,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
448 NDS32_BUILTIN_ABS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
449 NDS32_BUILTIN_AVE,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
450 NDS32_BUILTIN_BCLR,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
451 NDS32_BUILTIN_BSET,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
452 NDS32_BUILTIN_BTGL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
453 NDS32_BUILTIN_BTST,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
454 NDS32_BUILTIN_CLIP,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
455 NDS32_BUILTIN_CLIPS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
456 NDS32_BUILTIN_CLZ,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
457 NDS32_BUILTIN_CLO,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
458 NDS32_BUILTIN_MAX,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
459 NDS32_BUILTIN_MIN,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
460 NDS32_BUILTIN_PBSAD,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
461 NDS32_BUILTIN_PBSADA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
462 NDS32_BUILTIN_BSE,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
463 NDS32_BUILTIN_BSP,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
464 NDS32_BUILTIN_FFB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
465 NDS32_BUILTIN_FFMISM,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
466 NDS32_BUILTIN_FLMISM,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
467 NDS32_BUILTIN_KADDW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
468 NDS32_BUILTIN_KSUBW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
469 NDS32_BUILTIN_KADDH,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
470 NDS32_BUILTIN_KSUBH,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
471 NDS32_BUILTIN_KDMBB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
472 NDS32_BUILTIN_V_KDMBB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
473 NDS32_BUILTIN_KDMBT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
474 NDS32_BUILTIN_V_KDMBT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
475 NDS32_BUILTIN_KDMTB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
476 NDS32_BUILTIN_V_KDMTB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
477 NDS32_BUILTIN_KDMTT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
478 NDS32_BUILTIN_V_KDMTT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
479 NDS32_BUILTIN_KHMBB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
480 NDS32_BUILTIN_V_KHMBB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
481 NDS32_BUILTIN_KHMBT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
482 NDS32_BUILTIN_V_KHMBT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
483 NDS32_BUILTIN_KHMTB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
484 NDS32_BUILTIN_V_KHMTB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
485 NDS32_BUILTIN_KHMTT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
486 NDS32_BUILTIN_V_KHMTT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
487 NDS32_BUILTIN_KSLRAW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
488 NDS32_BUILTIN_KSLRAW_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
489 NDS32_BUILTIN_RDOV,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
490 NDS32_BUILTIN_CLROV,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
491 NDS32_BUILTIN_ROTR,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
492 NDS32_BUILTIN_SVA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
493 NDS32_BUILTIN_SVS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
494 NDS32_BUILTIN_WSBH,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
495 NDS32_BUILTIN_JR_ITOFF,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
496 NDS32_BUILTIN_JR_TOFF,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
497 NDS32_BUILTIN_JRAL_ITON,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
498 NDS32_BUILTIN_JRAL_TON,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
499 NDS32_BUILTIN_RET_ITOFF,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
500 NDS32_BUILTIN_RET_TOFF,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
501 NDS32_BUILTIN_STANDBY_NO_WAKE_GRANT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
502 NDS32_BUILTIN_STANDBY_WAKE_GRANT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
503 NDS32_BUILTIN_STANDBY_WAKE_DONE,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
504 NDS32_BUILTIN_TEQZ,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
505 NDS32_BUILTIN_TNEZ,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
506 NDS32_BUILTIN_TRAP,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
507 NDS32_BUILTIN_SETEND_BIG,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
508 NDS32_BUILTIN_SETEND_LITTLE,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
509 NDS32_BUILTIN_SYSCALL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
510 NDS32_BUILTIN_BREAK,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
511 NDS32_BUILTIN_NOP,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
512 NDS32_BUILTIN_SCHE_BARRIER,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
513 NDS32_BUILTIN_GET_CURRENT_SP,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
514 NDS32_BUILTIN_SET_CURRENT_SP,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
515 NDS32_BUILTIN_RETURN_ADDRESS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
516 NDS32_BUILTIN_LLW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
517 NDS32_BUILTIN_LWUP,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
518 NDS32_BUILTIN_LBUP,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
519 NDS32_BUILTIN_SCW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
520 NDS32_BUILTIN_SWUP,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
521 NDS32_BUILTIN_SBUP,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
522 NDS32_BUILTIN_CCTL_VA_LCK,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
523 NDS32_BUILTIN_CCTL_IDX_WBINVAL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
524 NDS32_BUILTIN_CCTL_VA_WBINVAL_L1,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
525 NDS32_BUILTIN_CCTL_VA_WBINVAL_LA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
526 NDS32_BUILTIN_CCTL_IDX_READ,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
527 NDS32_BUILTIN_CCTL_IDX_WRITE,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
528 NDS32_BUILTIN_CCTL_L1D_INVALALL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
529 NDS32_BUILTIN_CCTL_L1D_WBALL_ALVL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
530 NDS32_BUILTIN_CCTL_L1D_WBALL_ONE_LVL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
531 NDS32_BUILTIN_DPREF_QW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
532 NDS32_BUILTIN_DPREF_HW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
533 NDS32_BUILTIN_DPREF_W,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
534 NDS32_BUILTIN_DPREF_DW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
535 NDS32_BUILTIN_TLBOP_TRD,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
536 NDS32_BUILTIN_TLBOP_TWR,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
537 NDS32_BUILTIN_TLBOP_RWR,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
538 NDS32_BUILTIN_TLBOP_RWLK,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
539 NDS32_BUILTIN_TLBOP_UNLK,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
540 NDS32_BUILTIN_TLBOP_PB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
541 NDS32_BUILTIN_TLBOP_INV,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
542 NDS32_BUILTIN_TLBOP_FLUA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
543 NDS32_BUILTIN_UALOAD_HW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
544 NDS32_BUILTIN_UALOAD_W,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
545 NDS32_BUILTIN_UALOAD_DW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
546 NDS32_BUILTIN_UASTORE_HW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
547 NDS32_BUILTIN_UASTORE_W,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
548 NDS32_BUILTIN_UASTORE_DW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
549 NDS32_BUILTIN_GIE_DIS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
550 NDS32_BUILTIN_GIE_EN,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
551 NDS32_BUILTIN_ENABLE_INT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
552 NDS32_BUILTIN_DISABLE_INT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
553 NDS32_BUILTIN_SET_PENDING_SWINT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
554 NDS32_BUILTIN_CLR_PENDING_SWINT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
555 NDS32_BUILTIN_CLR_PENDING_HWINT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
556 NDS32_BUILTIN_GET_ALL_PENDING_INT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
557 NDS32_BUILTIN_GET_PENDING_INT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
558 NDS32_BUILTIN_SET_INT_PRIORITY,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
559 NDS32_BUILTIN_GET_INT_PRIORITY,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
560 NDS32_BUILTIN_SET_TRIG_LEVEL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
561 NDS32_BUILTIN_SET_TRIG_EDGE,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
562 NDS32_BUILTIN_GET_TRIG_TYPE,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
563 NDS32_BUILTIN_DSP_BEGIN,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
564 NDS32_BUILTIN_ADD16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
565 NDS32_BUILTIN_V_UADD16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
566 NDS32_BUILTIN_V_SADD16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
567 NDS32_BUILTIN_RADD16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
568 NDS32_BUILTIN_V_RADD16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
569 NDS32_BUILTIN_URADD16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
570 NDS32_BUILTIN_V_URADD16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
571 NDS32_BUILTIN_KADD16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
572 NDS32_BUILTIN_V_KADD16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
573 NDS32_BUILTIN_UKADD16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
574 NDS32_BUILTIN_V_UKADD16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
575 NDS32_BUILTIN_SUB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
576 NDS32_BUILTIN_V_USUB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
577 NDS32_BUILTIN_V_SSUB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
578 NDS32_BUILTIN_RSUB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
579 NDS32_BUILTIN_V_RSUB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
580 NDS32_BUILTIN_URSUB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
581 NDS32_BUILTIN_V_URSUB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
582 NDS32_BUILTIN_KSUB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
583 NDS32_BUILTIN_V_KSUB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
584 NDS32_BUILTIN_UKSUB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
585 NDS32_BUILTIN_V_UKSUB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
586 NDS32_BUILTIN_CRAS16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
587 NDS32_BUILTIN_V_UCRAS16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
588 NDS32_BUILTIN_V_SCRAS16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
589 NDS32_BUILTIN_RCRAS16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
590 NDS32_BUILTIN_V_RCRAS16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
591 NDS32_BUILTIN_URCRAS16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
592 NDS32_BUILTIN_V_URCRAS16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
593 NDS32_BUILTIN_KCRAS16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
594 NDS32_BUILTIN_V_KCRAS16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
595 NDS32_BUILTIN_UKCRAS16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
596 NDS32_BUILTIN_V_UKCRAS16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
597 NDS32_BUILTIN_CRSA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
598 NDS32_BUILTIN_V_UCRSA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
599 NDS32_BUILTIN_V_SCRSA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
600 NDS32_BUILTIN_RCRSA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
601 NDS32_BUILTIN_V_RCRSA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
602 NDS32_BUILTIN_URCRSA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
603 NDS32_BUILTIN_V_URCRSA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
604 NDS32_BUILTIN_KCRSA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
605 NDS32_BUILTIN_V_KCRSA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
606 NDS32_BUILTIN_UKCRSA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
607 NDS32_BUILTIN_V_UKCRSA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
608 NDS32_BUILTIN_ADD8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
609 NDS32_BUILTIN_V_UADD8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
610 NDS32_BUILTIN_V_SADD8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
611 NDS32_BUILTIN_RADD8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
612 NDS32_BUILTIN_V_RADD8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
613 NDS32_BUILTIN_URADD8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
614 NDS32_BUILTIN_V_URADD8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
615 NDS32_BUILTIN_KADD8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
616 NDS32_BUILTIN_V_KADD8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
617 NDS32_BUILTIN_UKADD8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
618 NDS32_BUILTIN_V_UKADD8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
619 NDS32_BUILTIN_SUB8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
620 NDS32_BUILTIN_V_USUB8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
621 NDS32_BUILTIN_V_SSUB8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
622 NDS32_BUILTIN_RSUB8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
623 NDS32_BUILTIN_V_RSUB8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
624 NDS32_BUILTIN_URSUB8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
625 NDS32_BUILTIN_V_URSUB8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
626 NDS32_BUILTIN_KSUB8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
627 NDS32_BUILTIN_V_KSUB8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
628 NDS32_BUILTIN_UKSUB8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
629 NDS32_BUILTIN_V_UKSUB8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
630 NDS32_BUILTIN_SRA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
631 NDS32_BUILTIN_V_SRA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
632 NDS32_BUILTIN_SRA16_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
633 NDS32_BUILTIN_V_SRA16_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
634 NDS32_BUILTIN_SRL16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
635 NDS32_BUILTIN_V_SRL16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
636 NDS32_BUILTIN_SRL16_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
637 NDS32_BUILTIN_V_SRL16_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
638 NDS32_BUILTIN_SLL16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
639 NDS32_BUILTIN_V_SLL16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
640 NDS32_BUILTIN_KSLL16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
641 NDS32_BUILTIN_V_KSLL16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
642 NDS32_BUILTIN_KSLRA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
643 NDS32_BUILTIN_V_KSLRA16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
644 NDS32_BUILTIN_KSLRA16_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
645 NDS32_BUILTIN_V_KSLRA16_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
646 NDS32_BUILTIN_CMPEQ16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
647 NDS32_BUILTIN_V_SCMPEQ16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
648 NDS32_BUILTIN_V_UCMPEQ16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
649 NDS32_BUILTIN_SCMPLT16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
650 NDS32_BUILTIN_V_SCMPLT16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
651 NDS32_BUILTIN_SCMPLE16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
652 NDS32_BUILTIN_V_SCMPLE16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
653 NDS32_BUILTIN_UCMPLT16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
654 NDS32_BUILTIN_V_UCMPLT16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
655 NDS32_BUILTIN_UCMPLE16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
656 NDS32_BUILTIN_V_UCMPLE16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
657 NDS32_BUILTIN_CMPEQ8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
658 NDS32_BUILTIN_V_SCMPEQ8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
659 NDS32_BUILTIN_V_UCMPEQ8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
660 NDS32_BUILTIN_SCMPLT8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
661 NDS32_BUILTIN_V_SCMPLT8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
662 NDS32_BUILTIN_SCMPLE8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
663 NDS32_BUILTIN_V_SCMPLE8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
664 NDS32_BUILTIN_UCMPLT8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
665 NDS32_BUILTIN_V_UCMPLT8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
666 NDS32_BUILTIN_UCMPLE8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
667 NDS32_BUILTIN_V_UCMPLE8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
668 NDS32_BUILTIN_SMIN16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
669 NDS32_BUILTIN_V_SMIN16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
670 NDS32_BUILTIN_UMIN16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
671 NDS32_BUILTIN_V_UMIN16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
672 NDS32_BUILTIN_SMAX16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
673 NDS32_BUILTIN_V_SMAX16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
674 NDS32_BUILTIN_UMAX16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
675 NDS32_BUILTIN_V_UMAX16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
676 NDS32_BUILTIN_SCLIP16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
677 NDS32_BUILTIN_V_SCLIP16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
678 NDS32_BUILTIN_UCLIP16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
679 NDS32_BUILTIN_V_UCLIP16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
680 NDS32_BUILTIN_KHM16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
681 NDS32_BUILTIN_V_KHM16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
682 NDS32_BUILTIN_KHMX16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
683 NDS32_BUILTIN_V_KHMX16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
684 NDS32_BUILTIN_KABS16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
685 NDS32_BUILTIN_V_KABS16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
686 NDS32_BUILTIN_SMIN8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
687 NDS32_BUILTIN_V_SMIN8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
688 NDS32_BUILTIN_UMIN8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
689 NDS32_BUILTIN_V_UMIN8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
690 NDS32_BUILTIN_SMAX8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
691 NDS32_BUILTIN_V_SMAX8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
692 NDS32_BUILTIN_UMAX8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
693 NDS32_BUILTIN_V_UMAX8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
694 NDS32_BUILTIN_KABS8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
695 NDS32_BUILTIN_V_KABS8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
696 NDS32_BUILTIN_SUNPKD810,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
697 NDS32_BUILTIN_V_SUNPKD810,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
698 NDS32_BUILTIN_SUNPKD820,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
699 NDS32_BUILTIN_V_SUNPKD820,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
700 NDS32_BUILTIN_SUNPKD830,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
701 NDS32_BUILTIN_V_SUNPKD830,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
702 NDS32_BUILTIN_SUNPKD831,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
703 NDS32_BUILTIN_V_SUNPKD831,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
704 NDS32_BUILTIN_ZUNPKD810,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
705 NDS32_BUILTIN_V_ZUNPKD810,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
706 NDS32_BUILTIN_ZUNPKD820,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
707 NDS32_BUILTIN_V_ZUNPKD820,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
708 NDS32_BUILTIN_ZUNPKD830,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
709 NDS32_BUILTIN_V_ZUNPKD830,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
710 NDS32_BUILTIN_ZUNPKD831,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
711 NDS32_BUILTIN_V_ZUNPKD831,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
712 NDS32_BUILTIN_RADDW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
713 NDS32_BUILTIN_URADDW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
714 NDS32_BUILTIN_RSUBW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
715 NDS32_BUILTIN_URSUBW,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
716 NDS32_BUILTIN_SRA_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
717 NDS32_BUILTIN_KSLL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
718 NDS32_BUILTIN_PKBB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
719 NDS32_BUILTIN_V_PKBB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
720 NDS32_BUILTIN_PKBT16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
721 NDS32_BUILTIN_V_PKBT16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
722 NDS32_BUILTIN_PKTB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
723 NDS32_BUILTIN_V_PKTB16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
724 NDS32_BUILTIN_PKTT16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
725 NDS32_BUILTIN_V_PKTT16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
726 NDS32_BUILTIN_SMMUL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
727 NDS32_BUILTIN_SMMUL_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
728 NDS32_BUILTIN_KMMAC,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
729 NDS32_BUILTIN_KMMAC_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
730 NDS32_BUILTIN_KMMSB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
731 NDS32_BUILTIN_KMMSB_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
732 NDS32_BUILTIN_KWMMUL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
733 NDS32_BUILTIN_KWMMUL_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
734 NDS32_BUILTIN_SMMWB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
735 NDS32_BUILTIN_V_SMMWB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
736 NDS32_BUILTIN_SMMWB_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
737 NDS32_BUILTIN_V_SMMWB_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
738 NDS32_BUILTIN_SMMWT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
739 NDS32_BUILTIN_V_SMMWT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
740 NDS32_BUILTIN_SMMWT_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
741 NDS32_BUILTIN_V_SMMWT_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
742 NDS32_BUILTIN_KMMAWB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
743 NDS32_BUILTIN_V_KMMAWB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
744 NDS32_BUILTIN_KMMAWB_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
745 NDS32_BUILTIN_V_KMMAWB_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
746 NDS32_BUILTIN_KMMAWT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
747 NDS32_BUILTIN_V_KMMAWT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
748 NDS32_BUILTIN_KMMAWT_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
749 NDS32_BUILTIN_V_KMMAWT_U,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
750 NDS32_BUILTIN_SMBB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
751 NDS32_BUILTIN_V_SMBB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
752 NDS32_BUILTIN_SMBT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
753 NDS32_BUILTIN_V_SMBT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
754 NDS32_BUILTIN_SMTT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
755 NDS32_BUILTIN_V_SMTT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
756 NDS32_BUILTIN_KMDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
757 NDS32_BUILTIN_V_KMDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
758 NDS32_BUILTIN_KMXDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
759 NDS32_BUILTIN_V_KMXDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
760 NDS32_BUILTIN_SMDS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
761 NDS32_BUILTIN_V_SMDS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
762 NDS32_BUILTIN_SMDRS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
763 NDS32_BUILTIN_V_SMDRS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
764 NDS32_BUILTIN_SMXDS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
765 NDS32_BUILTIN_V_SMXDS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
766 NDS32_BUILTIN_KMABB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
767 NDS32_BUILTIN_V_KMABB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
768 NDS32_BUILTIN_KMABT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
769 NDS32_BUILTIN_V_KMABT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
770 NDS32_BUILTIN_KMATT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
771 NDS32_BUILTIN_V_KMATT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
772 NDS32_BUILTIN_KMADA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
773 NDS32_BUILTIN_V_KMADA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
774 NDS32_BUILTIN_KMAXDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
775 NDS32_BUILTIN_V_KMAXDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
776 NDS32_BUILTIN_KMADS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
777 NDS32_BUILTIN_V_KMADS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
778 NDS32_BUILTIN_KMADRS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
779 NDS32_BUILTIN_V_KMADRS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
780 NDS32_BUILTIN_KMAXDS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
781 NDS32_BUILTIN_V_KMAXDS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
782 NDS32_BUILTIN_KMSDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
783 NDS32_BUILTIN_V_KMSDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
784 NDS32_BUILTIN_KMSXDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
785 NDS32_BUILTIN_V_KMSXDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
786 NDS32_BUILTIN_SMAL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
787 NDS32_BUILTIN_V_SMAL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
788 NDS32_BUILTIN_BITREV,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
789 NDS32_BUILTIN_WEXT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
790 NDS32_BUILTIN_BPICK,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
791 NDS32_BUILTIN_INSB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
792 NDS32_BUILTIN_SADD64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
793 NDS32_BUILTIN_UADD64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
794 NDS32_BUILTIN_RADD64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
795 NDS32_BUILTIN_URADD64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
796 NDS32_BUILTIN_KADD64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
797 NDS32_BUILTIN_UKADD64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
798 NDS32_BUILTIN_SSUB64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
799 NDS32_BUILTIN_USUB64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
800 NDS32_BUILTIN_RSUB64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
801 NDS32_BUILTIN_URSUB64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
802 NDS32_BUILTIN_KSUB64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
803 NDS32_BUILTIN_UKSUB64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
804 NDS32_BUILTIN_SMAR64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
805 NDS32_BUILTIN_SMSR64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
806 NDS32_BUILTIN_UMAR64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
807 NDS32_BUILTIN_UMSR64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
808 NDS32_BUILTIN_KMAR64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
809 NDS32_BUILTIN_KMSR64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
810 NDS32_BUILTIN_UKMAR64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
811 NDS32_BUILTIN_UKMSR64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
812 NDS32_BUILTIN_SMALBB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
813 NDS32_BUILTIN_V_SMALBB,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
814 NDS32_BUILTIN_SMALBT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
815 NDS32_BUILTIN_V_SMALBT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
816 NDS32_BUILTIN_SMALTT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
817 NDS32_BUILTIN_V_SMALTT,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
818 NDS32_BUILTIN_SMALDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
819 NDS32_BUILTIN_V_SMALDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
820 NDS32_BUILTIN_SMALXDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
821 NDS32_BUILTIN_V_SMALXDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
822 NDS32_BUILTIN_SMALDS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
823 NDS32_BUILTIN_V_SMALDS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
824 NDS32_BUILTIN_SMALDRS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
825 NDS32_BUILTIN_V_SMALDRS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
826 NDS32_BUILTIN_SMALXDS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
827 NDS32_BUILTIN_V_SMALXDS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
828 NDS32_BUILTIN_SMUL16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
829 NDS32_BUILTIN_V_SMUL16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
830 NDS32_BUILTIN_SMULX16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
831 NDS32_BUILTIN_V_SMULX16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
832 NDS32_BUILTIN_UMUL16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
833 NDS32_BUILTIN_V_UMUL16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
834 NDS32_BUILTIN_UMULX16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
835 NDS32_BUILTIN_V_UMULX16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
836 NDS32_BUILTIN_SMSLDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
837 NDS32_BUILTIN_V_SMSLDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
838 NDS32_BUILTIN_SMSLXDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
839 NDS32_BUILTIN_V_SMSLXDA,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
840 NDS32_BUILTIN_UCLIP32,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
841 NDS32_BUILTIN_SCLIP32,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
842 NDS32_BUILTIN_KABS,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
843 NDS32_BUILTIN_UALOAD_U16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
844 NDS32_BUILTIN_UALOAD_S16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
845 NDS32_BUILTIN_UALOAD_U8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
846 NDS32_BUILTIN_UALOAD_S8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
847 NDS32_BUILTIN_UASTORE_U16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
848 NDS32_BUILTIN_UASTORE_S16,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
849 NDS32_BUILTIN_UASTORE_U8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
850 NDS32_BUILTIN_UASTORE_S8,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
851 NDS32_BUILTIN_DSP_END,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
852 NDS32_BUILTIN_UNALIGNED_FEATURE,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
853 NDS32_BUILTIN_ENABLE_UNALIGNED,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
854 NDS32_BUILTIN_DISABLE_UNALIGNED,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
855 NDS32_BUILTIN_COUNT
111
kono
parents:
diff changeset
856 };
kono
parents:
diff changeset
857
kono
parents:
diff changeset
858 /* ------------------------------------------------------------------------ */
kono
parents:
diff changeset
859
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
860 #define TARGET_ISR_VECTOR_SIZE_4_BYTE \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
861 (nds32_isr_vector_size == 4)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
862
111
kono
parents:
diff changeset
863 #define TARGET_ISA_V2 (nds32_arch_option == ARCH_V2)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
864 #define TARGET_ISA_V3 \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
865 (nds32_arch_option == ARCH_V3 \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
866 || nds32_arch_option == ARCH_V3J \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
867 || nds32_arch_option == ARCH_V3F \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
868 || nds32_arch_option == ARCH_V3S)
111
kono
parents:
diff changeset
869 #define TARGET_ISA_V3M (nds32_arch_option == ARCH_V3M)
kono
parents:
diff changeset
870
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
871 #define TARGET_PIPELINE_N7 \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
872 (nds32_cpu_option == CPU_N7)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
873 #define TARGET_PIPELINE_N8 \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
874 (nds32_cpu_option == CPU_N6 \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
875 || nds32_cpu_option == CPU_N8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
876 #define TARGET_PIPELINE_N9 \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
877 (nds32_cpu_option == CPU_N9)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
878 #define TARGET_PIPELINE_N10 \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
879 (nds32_cpu_option == CPU_N10)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
880 #define TARGET_PIPELINE_N13 \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
881 (nds32_cpu_option == CPU_N12 || nds32_cpu_option == CPU_N13)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
882 #define TARGET_PIPELINE_GRAYWOLF \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
883 (nds32_cpu_option == CPU_GRAYWOLF)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
884 #define TARGET_PIPELINE_SIMPLE \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
885 (nds32_cpu_option == CPU_SIMPLE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
886
111
kono
parents:
diff changeset
887 #define TARGET_CMODEL_SMALL \
kono
parents:
diff changeset
888 (nds32_cmodel_option == CMODEL_SMALL)
kono
parents:
diff changeset
889 #define TARGET_CMODEL_MEDIUM \
kono
parents:
diff changeset
890 (nds32_cmodel_option == CMODEL_MEDIUM)
kono
parents:
diff changeset
891 #define TARGET_CMODEL_LARGE \
kono
parents:
diff changeset
892 (nds32_cmodel_option == CMODEL_LARGE)
kono
parents:
diff changeset
893
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
894 #define TARGET_ICT_MODEL_SMALL \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
895 (nds32_ict_model == ICT_MODEL_SMALL)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
896
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
897 #define TARGET_ICT_MODEL_LARGE \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
898 (nds32_ict_model == ICT_MODEL_LARGE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
899
111
kono
parents:
diff changeset
900 /* When -mcmodel=small or -mcmodel=medium,
kono
parents:
diff changeset
901 compiler may generate gp-base instruction directly. */
kono
parents:
diff changeset
902 #define TARGET_GP_DIRECT \
kono
parents:
diff changeset
903 (nds32_cmodel_option == CMODEL_SMALL\
kono
parents:
diff changeset
904 || nds32_cmodel_option == CMODEL_MEDIUM)
kono
parents:
diff changeset
905
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
906 #define TARGET_MUL_SLOW \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
907 (nds32_mul_config == MUL_TYPE_SLOW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
908
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
909 /* Run-time Target Specification. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
910 #define TARGET_SOFT_FLOAT (nds32_abi == NDS32_ABI_V2)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
911 /* Use hardware floating point calling convention. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
912 #define TARGET_HARD_FLOAT (nds32_abi == NDS32_ABI_V2_FP_PLUS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
913
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
914 /* Record arch version in TARGET_ARCH_DEFAULT. 0 means soft ABI,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
915 1 means hard ABI and using full floating-point instruction,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
916 2 means hard ABI and only using single-precision floating-point
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
917 instruction */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
918 #if TARGET_ARCH_DEFAULT == 1
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
919 # define TARGET_DEFAULT_ABI NDS32_ABI_V2_FP_PLUS
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
920 # define TARGET_DEFAULT_FPU_ISA MASK_FPU_DOUBLE | MASK_FPU_SINGLE
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
921 # define TARGET_DEFAULT_FPU_FMA 0
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
922 #else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
923 # if TARGET_ARCH_DEFAULT == 2
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
924 # define TARGET_DEFAULT_ABI NDS32_ABI_V2_FP_PLUS
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
925 # define TARGET_DEFAULT_FPU_ISA MASK_FPU_SINGLE
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
926 # define TARGET_DEFAULT_FPU_FMA 0
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
927 # else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
928 # define TARGET_DEFAULT_ABI NDS32_ABI_V2
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
929 # define TARGET_DEFAULT_FPU_ISA 0
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
930 # define TARGET_DEFAULT_FPU_FMA 0
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
931 # endif
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
932 #endif
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
933
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
934 #define TARGET_CONFIG_FPU_DEFAULT NDS32_CONFIG_FPU_2
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
935
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
936 /* ------------------------------------------------------------------------ */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
937
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
938 #ifdef TARGET_DEFAULT_RELAX
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
939 # define NDS32_RELAX_SPEC " %{!mno-relax:--relax}"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
940 #else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
941 # define NDS32_RELAX_SPEC " %{mrelax:--relax}"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
942 #endif
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
943
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
944 #ifdef TARGET_DEFAULT_EXT_DSP
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
945 # define NDS32_EXT_DSP_SPEC " %{!mno-ext-dsp:-mext-dsp}"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
946 #else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
947 # define NDS32_EXT_DSP_SPEC ""
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
948 #endif
111
kono
parents:
diff changeset
949
kono
parents:
diff changeset
950 /* ------------------------------------------------------------------------ */
kono
parents:
diff changeset
951
kono
parents:
diff changeset
952 /* Controlling the Compilation Driver. */
kono
parents:
diff changeset
953
kono
parents:
diff changeset
954 #define OPTION_DEFAULT_SPECS \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
955 {"arch", " %{!march=*:-march=%(VALUE)}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
956 " %{march=v3f:%{!mfloat-abi=*:-mfloat-abi=hard}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
957 " %{!mno-ext-fpu-sp:%{!mext-fpu-sp:-mext-fpu-sp}}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
958 " %{!mno-ext-fpu-dp:%{!mext-fpu-dp:-mext-fpu-dp}}}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
959 " %{march=v3s:%{!mfloat-abi=*:-mfloat-abi=hard}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
960 " %{!mno-ext-fpu-sp:%{!mext-fpu-sp:-mext-fpu-sp}}}" }, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
961 {"cpu", "%{!mcpu=*:-mcpu=%(VALUE)}" }, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
962 {"float", "%{!mfloat-abi=*:-mfloat-abi=%(VALUE)}" }
111
kono
parents:
diff changeset
963
kono
parents:
diff changeset
964 #define CC1_SPEC \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
965 NDS32_EXT_DSP_SPEC
111
kono
parents:
diff changeset
966
kono
parents:
diff changeset
967 #define ASM_SPEC \
kono
parents:
diff changeset
968 " %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
969 " %{march=*:-march=%*}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
970 " %{mno-16-bit|mno-16bit:-mno-16bit-ext}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
971 " %{march=v3m:%{!mfull-regs:%{!mreduced-regs:-mreduced-regs}}}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
972 " %{mfull-regs:-mno-reduced-regs}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
973 " %{mreduced-regs:-mreduced-regs}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
974 " %{mabi=*:-mabi=v%*}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
975 " %{mconfig-fpu=*:-mfpu-freg=%*}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
976 " %{mext-fpu-mac:-mmac}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
977 " %{mno-ext-fpu-mac:-mno-mac}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
978 " %{mext-fpu-sp:-mfpu-sp-ext}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
979 " %{mno-ext-fpu-sp:-mno-fpu-sp-ext}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
980 " %{mext-fpu-dp:-mfpu-dp-ext}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
981 " %{mno-ext-fpu-sp:-mno-fpu-dp-ext}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
982 " %{mext-dsp:-mdsp-ext}" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
983 " %{O|O1|O2|O3|Ofast:-O1;:-Os}"
111
kono
parents:
diff changeset
984
kono
parents:
diff changeset
985 /* The TARGET_BIG_ENDIAN_DEFAULT is defined if we
kono
parents:
diff changeset
986 configure gcc with --target=nds32be-* setting.
kono
parents:
diff changeset
987 Check gcc/config.gcc for more information. */
kono
parents:
diff changeset
988 #ifdef TARGET_BIG_ENDIAN_DEFAULT
kono
parents:
diff changeset
989 # define NDS32_ENDIAN_DEFAULT "mbig-endian"
kono
parents:
diff changeset
990 #else
kono
parents:
diff changeset
991 # define NDS32_ENDIAN_DEFAULT "mlittle-endian"
kono
parents:
diff changeset
992 #endif
kono
parents:
diff changeset
993
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
994 #if TARGET_ELF
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
995 # define NDS32_CMODEL_DEFAULT "mcmodel=medium"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
996 #else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
997 # define NDS32_CMODEL_DEFAULT "mcmodel=large"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
998 #endif
111
kono
parents:
diff changeset
999
kono
parents:
diff changeset
1000 #define MULTILIB_DEFAULTS \
kono
parents:
diff changeset
1001 { NDS32_ENDIAN_DEFAULT, NDS32_CMODEL_DEFAULT }
kono
parents:
diff changeset
1002
kono
parents:
diff changeset
1003
kono
parents:
diff changeset
1004 /* Run-time Target Specification. */
kono
parents:
diff changeset
1005
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1006 #define TARGET_CPU_CPP_BUILTINS() \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1007 nds32_cpu_cpp_builtins (pfile)
111
kono
parents:
diff changeset
1008
kono
parents:
diff changeset
1009
kono
parents:
diff changeset
1010 /* Defining Data Structures for Per-function Information. */
kono
parents:
diff changeset
1011
kono
parents:
diff changeset
1012 /* This macro is called once per function,
kono
parents:
diff changeset
1013 before generation of any RTL has begun. */
kono
parents:
diff changeset
1014 #define INIT_EXPANDERS nds32_init_expanders ()
kono
parents:
diff changeset
1015
kono
parents:
diff changeset
1016
kono
parents:
diff changeset
1017 /* Storage Layout. */
kono
parents:
diff changeset
1018
kono
parents:
diff changeset
1019 #define BITS_BIG_ENDIAN 0
kono
parents:
diff changeset
1020
kono
parents:
diff changeset
1021 #define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN)
kono
parents:
diff changeset
1022
kono
parents:
diff changeset
1023 #define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN)
kono
parents:
diff changeset
1024
kono
parents:
diff changeset
1025 #define UNITS_PER_WORD 4
kono
parents:
diff changeset
1026
kono
parents:
diff changeset
1027 #define PROMOTE_MODE(m, unsignedp, type) \
kono
parents:
diff changeset
1028 if (GET_MODE_CLASS (m) == MODE_INT && GET_MODE_SIZE (m) < UNITS_PER_WORD) \
kono
parents:
diff changeset
1029 { \
kono
parents:
diff changeset
1030 (m) = SImode; \
kono
parents:
diff changeset
1031 }
kono
parents:
diff changeset
1032
kono
parents:
diff changeset
1033 #define PARM_BOUNDARY 32
kono
parents:
diff changeset
1034
kono
parents:
diff changeset
1035 #define STACK_BOUNDARY 64
kono
parents:
diff changeset
1036
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1037 #define FUNCTION_BOUNDARY \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1038 ((NDS32_ALIGN_P () || TARGET_ALIGN_FUNCTION) ? 32 : 16)
111
kono
parents:
diff changeset
1039
kono
parents:
diff changeset
1040 #define BIGGEST_ALIGNMENT 64
kono
parents:
diff changeset
1041
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1042 #define DATA_ALIGNMENT(constant, basic_align) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1043 nds32_data_alignment (constant, basic_align)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1044
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1045 #define LOCAL_ALIGNMENT(type, basic_align) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1046 nds32_local_alignment (type, basic_align)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1047
111
kono
parents:
diff changeset
1048 #define EMPTY_FIELD_BOUNDARY 32
kono
parents:
diff changeset
1049
kono
parents:
diff changeset
1050 #define STRUCTURE_SIZE_BOUNDARY 8
kono
parents:
diff changeset
1051
kono
parents:
diff changeset
1052 #define STRICT_ALIGNMENT 1
kono
parents:
diff changeset
1053
kono
parents:
diff changeset
1054 #define PCC_BITFIELD_TYPE_MATTERS 1
kono
parents:
diff changeset
1055
kono
parents:
diff changeset
1056
kono
parents:
diff changeset
1057 /* Layout of Source Language Data Types. */
kono
parents:
diff changeset
1058
kono
parents:
diff changeset
1059 #define INT_TYPE_SIZE 32
kono
parents:
diff changeset
1060 #define SHORT_TYPE_SIZE 16
kono
parents:
diff changeset
1061 #define LONG_TYPE_SIZE 32
kono
parents:
diff changeset
1062 #define LONG_LONG_TYPE_SIZE 64
kono
parents:
diff changeset
1063
kono
parents:
diff changeset
1064 #define FLOAT_TYPE_SIZE 32
kono
parents:
diff changeset
1065 #define DOUBLE_TYPE_SIZE 64
kono
parents:
diff changeset
1066 #define LONG_DOUBLE_TYPE_SIZE 64
kono
parents:
diff changeset
1067
kono
parents:
diff changeset
1068 #define DEFAULT_SIGNED_CHAR 1
kono
parents:
diff changeset
1069
kono
parents:
diff changeset
1070 #define SIZE_TYPE "long unsigned int"
kono
parents:
diff changeset
1071 #define PTRDIFF_TYPE "long int"
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1072 #define WCHAR_TYPE "unsigned int"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1073 #define WCHAR_TYPE_SIZE 32
111
kono
parents:
diff changeset
1074
kono
parents:
diff changeset
1075
kono
parents:
diff changeset
1076 /* Register Usage. */
kono
parents:
diff changeset
1077
kono
parents:
diff changeset
1078 /* Number of actual hardware registers.
kono
parents:
diff changeset
1079 The hardware registers are assigned numbers for the compiler
kono
parents:
diff changeset
1080 from 0 to just below FIRST_PSEUDO_REGISTER.
kono
parents:
diff changeset
1081 All registers that the compiler knows about must be given numbers,
kono
parents:
diff changeset
1082 even those that are not normally considered general registers. */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1083 #define FIRST_PSEUDO_REGISTER 101
111
kono
parents:
diff changeset
1084
kono
parents:
diff changeset
1085 /* An initializer that says which registers are used for fixed
kono
parents:
diff changeset
1086 purposes all throughout the compiled code and are therefore
kono
parents:
diff changeset
1087 not available for general allocation.
kono
parents:
diff changeset
1088
kono
parents:
diff changeset
1089 $r28 : $fp
kono
parents:
diff changeset
1090 $r29 : $gp
kono
parents:
diff changeset
1091 $r30 : $lp
kono
parents:
diff changeset
1092 $r31 : $sp
kono
parents:
diff changeset
1093
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1094 caller-save registers: $r0 ~ $r5, $r16 ~ $r23, $fs0 ~ $fs5, $fs22 ~ $fs47
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1095 callee-save registers: $r6 ~ $r10, $r11 ~ $r14, $fs6 ~ $fs21, $fs48 ~ $fs63
111
kono
parents:
diff changeset
1096
kono
parents:
diff changeset
1097 reserved for assembler : $r15
kono
parents:
diff changeset
1098 reserved for other use : $r24, $r25, $r26, $r27 */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1099 #define FIXED_REGISTERS \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1100 { /* r0 r1 r2 r3 r4 r5 r6 r7 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1101 0, 0, 0, 0, 0, 0, 0, 0, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1102 /* r8 r9 r10 r11 r12 r13 r14 r15 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1103 0, 0, 0, 0, 0, 0, 0, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1104 /* r16 r17 r18 r19 r20 r21 r22 r23 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1105 0, 0, 0, 0, 0, 0, 0, 0, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1106 /* r24 r25 r26 r27 r28 r29 r30 r31 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1107 1, 1, 1, 1, 0, 1, 0, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1108 /* AP FP fs0 fs1 fs2 fs3 fs4 fs5 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1109 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1110 /* fs6 fs7 fs8 fs9 fs10 fs11 fs12 fs13 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1111 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1112 /* fs14 fs15 fs16 fs17 fs18 fs19 fs20 fs21 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1113 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1114 /* fs22 fs23 fs24 fs25 fs26 fs27 fs28 fs29 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1115 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1116 /* fs30 fs31 fd16 fd17 fd18 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1117 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1118 /* fd19 fd20 fd21 fd22 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1119 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1120 /* fd23 fd24 fd25 fd26 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1121 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1122 /* fd27 fd28 fd29 fd30 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1123 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1124 /* fd31 Reserved..................... */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1125 1, 1, 1, 1, 1 \
111
kono
parents:
diff changeset
1126 }
kono
parents:
diff changeset
1127
kono
parents:
diff changeset
1128 /* Identifies the registers that are not available for
kono
parents:
diff changeset
1129 general allocation of values that must live across
kono
parents:
diff changeset
1130 function calls -- so they are caller-save registers.
kono
parents:
diff changeset
1131
kono
parents:
diff changeset
1132 0 : callee-save registers
kono
parents:
diff changeset
1133 1 : caller-save registers */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1134 #define CALL_USED_REGISTERS \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1135 { /* r0 r1 r2 r3 r4 r5 r6 r7 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1136 1, 1, 1, 1, 1, 1, 0, 0, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1137 /* r8 r9 r10 r11 r12 r13 r14 r15 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1138 0, 0, 0, 0, 0, 0, 0, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1139 /* r16 r17 r18 r19 r20 r21 r22 r23 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1140 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1141 /* r24 r25 r26 r27 r28 r29 r30 r31 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1142 1, 1, 1, 1, 0, 1, 0, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1143 /* AP FP fs0 fs1 fs2 fs3 fs4 fs5 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1144 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1145 /* fs6 fs7 fs8 fs9 fs10 fs11 fs12 fs13 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1146 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1147 /* fs14 fs15 fs16 fs17 fs18 fs19 fs20 fs21 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1148 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1149 /* fs22 fs23 fs24 fs25 fs26 fs27 fs28 fs29 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1150 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1151 /* fs30 fs31 fd16 fd17 fd18 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1152 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1153 /* fd19 fd20 fd21 fd22 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1154 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1155 /* fd23 fd24 fd25 fd26 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1156 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1157 /* fd27 fd28 fd29 fd30 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1158 1, 1, 1, 1, 1, 1, 1, 1, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1159 /* fd31 Reserved..................... */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1160 1, 1, 1, 1, 1 \
111
kono
parents:
diff changeset
1161 }
kono
parents:
diff changeset
1162
kono
parents:
diff changeset
1163 /* In nds32 target, we have three levels of registers:
kono
parents:
diff changeset
1164 LOW_COST_REGS : $r0 ~ $r7
kono
parents:
diff changeset
1165 MIDDLE_COST_REGS : $r8 ~ $r11, $r16 ~ $r19
kono
parents:
diff changeset
1166 HIGH_COST_REGS : $r12 ~ $r14, $r20 ~ $r31 */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1167 #define REG_ALLOC_ORDER \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1168 { 0, 1, 2, 3, 4, 5, 6, 7, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1169 16, 17, 18, 19, 9, 10, 11, 12, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1170 13, 14, 8, 15, 20, 21, 22, 23, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1171 24, 25, 26, 27, 28, 29, 30, 31, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1172 32, 33, 34, 35, 36, 37, 38, 39, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1173 40, 41, 42, 43, 44, 45, 46, 47, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1174 48, 49, 50, 51, 52, 53, 54, 55, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1175 56, 57, 58, 59, 60, 61, 62, 63, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1176 64, 65, 66, 67, 68, 69, 70, 71, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1177 72, 73, 74, 75, 76, 77, 78, 79, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1178 80, 81, 82, 83, 84, 85, 86, 87, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1179 88, 89, 90, 91, 92, 93, 94, 95, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1180 96, 97, 98, 99, 100, \
111
kono
parents:
diff changeset
1181 }
kono
parents:
diff changeset
1182
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1183 /* ADJUST_REG_ALLOC_ORDER is a macro which permits reg_alloc_order
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1184 to be rearranged based on optimizing for speed or size. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1185 #define ADJUST_REG_ALLOC_ORDER nds32_adjust_reg_alloc_order ()
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1186
111
kono
parents:
diff changeset
1187 /* Tell IRA to use the order we define rather than messing it up with its
kono
parents:
diff changeset
1188 own cost calculations. */
kono
parents:
diff changeset
1189 #define HONOR_REG_ALLOC_ORDER optimize_size
kono
parents:
diff changeset
1190
kono
parents:
diff changeset
1191
kono
parents:
diff changeset
1192 /* Register Classes. */
kono
parents:
diff changeset
1193
kono
parents:
diff changeset
1194 /* In nds32 target, we have three levels of registers:
kono
parents:
diff changeset
1195 Low cost regsiters : $r0 ~ $r7
kono
parents:
diff changeset
1196 Middle cost registers : $r8 ~ $r11, $r16 ~ $r19
kono
parents:
diff changeset
1197 High cost registers : $r12 ~ $r14, $r20 ~ $r31
kono
parents:
diff changeset
1198
kono
parents:
diff changeset
1199 In practice, we have MIDDLE_REGS cover LOW_REGS register class contents
kono
parents:
diff changeset
1200 so that it provides more chance to use low cost registers. */
kono
parents:
diff changeset
1201 enum reg_class
kono
parents:
diff changeset
1202 {
kono
parents:
diff changeset
1203 NO_REGS,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1204 R5_REG,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1205 R8_REG,
111
kono
parents:
diff changeset
1206 R15_TA_REG,
kono
parents:
diff changeset
1207 STACK_REG,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1208 FRAME_POINTER_REG,
111
kono
parents:
diff changeset
1209 LOW_REGS,
kono
parents:
diff changeset
1210 MIDDLE_REGS,
kono
parents:
diff changeset
1211 HIGH_REGS,
kono
parents:
diff changeset
1212 GENERAL_REGS,
kono
parents:
diff changeset
1213 FRAME_REGS,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1214 FP_REGS,
111
kono
parents:
diff changeset
1215 ALL_REGS,
kono
parents:
diff changeset
1216 LIM_REG_CLASSES
kono
parents:
diff changeset
1217 };
kono
parents:
diff changeset
1218
kono
parents:
diff changeset
1219 #define N_REG_CLASSES (int) LIM_REG_CLASSES
kono
parents:
diff changeset
1220
kono
parents:
diff changeset
1221 #define REG_CLASS_NAMES \
kono
parents:
diff changeset
1222 { \
kono
parents:
diff changeset
1223 "NO_REGS", \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1224 "R5_REG", \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1225 "R8_REG", \
111
kono
parents:
diff changeset
1226 "R15_TA_REG", \
kono
parents:
diff changeset
1227 "STACK_REG", \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1228 "FRAME_POINTER_REG", \
111
kono
parents:
diff changeset
1229 "LOW_REGS", \
kono
parents:
diff changeset
1230 "MIDDLE_REGS", \
kono
parents:
diff changeset
1231 "HIGH_REGS", \
kono
parents:
diff changeset
1232 "GENERAL_REGS", \
kono
parents:
diff changeset
1233 "FRAME_REGS", \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1234 "FP_REGS", \
111
kono
parents:
diff changeset
1235 "ALL_REGS" \
kono
parents:
diff changeset
1236 }
kono
parents:
diff changeset
1237
kono
parents:
diff changeset
1238 #define REG_CLASS_CONTENTS \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1239 { /* NO_REGS */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1240 {0x00000000, 0x00000000, 0x00000000, 0x00000000}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1241 /* R5_REG : 5 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1242 {0x00000020, 0x00000000, 0x00000000, 0x00000000}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1243 /* R8_REG : 8 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1244 {0x00000100, 0x00000000, 0x00000000, 0x00000000}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1245 /* R15_TA_REG : 15 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1246 {0x00008000, 0x00000000, 0x00000000, 0x00000000}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1247 /* STACK_REG : 31 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1248 {0x80000000, 0x00000000, 0x00000000, 0x00000000}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1249 /* FRAME_POINTER_REG : 28 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1250 {0x10000000, 0x00000000, 0x00000000, 0x00000000}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1251 /* LOW_REGS : 0-7 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1252 {0x000000ff, 0x00000000, 0x00000000, 0x00000000}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1253 /* MIDDLE_REGS : 0-11, 16-19 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1254 {0x000f0fff, 0x00000000, 0x00000000, 0x00000000}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1255 /* HIGH_REGS : 12-14, 20-31 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1256 {0xfff07000, 0x00000000, 0x00000000, 0x00000000}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1257 /* GENERAL_REGS : 0-31 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1258 {0xffffffff, 0x00000000, 0x00000000, 0x00000000}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1259 /* FRAME_REGS : 32, 33 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1260 {0x00000000, 0x00000003, 0x00000000, 0x00000000}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1261 /* FP_REGS : 34-98 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1262 {0x00000000, 0xfffffffc, 0xffffffff, 0x00000003}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1263 /* ALL_REGS : 0-100 */ \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1264 {0xffffffff, 0xffffffff, 0xffffffff, 0x0000001f} \
111
kono
parents:
diff changeset
1265 }
kono
parents:
diff changeset
1266
kono
parents:
diff changeset
1267 #define REGNO_REG_CLASS(regno) nds32_regno_reg_class (regno)
kono
parents:
diff changeset
1268
kono
parents:
diff changeset
1269 #define BASE_REG_CLASS GENERAL_REGS
kono
parents:
diff changeset
1270 #define INDEX_REG_CLASS GENERAL_REGS
kono
parents:
diff changeset
1271
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1272 #define TEST_REGNO(R, TEST, VALUE) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1273 ((R TEST VALUE) || ((unsigned) reg_renumber[R] TEST VALUE))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1274
111
kono
parents:
diff changeset
1275 /* Return nonzero if it is suitable for use as a
kono
parents:
diff changeset
1276 base register in operand addresses.
kono
parents:
diff changeset
1277 So far, we return nonzero only if "num" is a hard reg
kono
parents:
diff changeset
1278 of the suitable class or a pseudo register which is
kono
parents:
diff changeset
1279 allocated to a suitable hard reg. */
kono
parents:
diff changeset
1280 #define REGNO_OK_FOR_BASE_P(num) \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1281 (TEST_REGNO (num, <, 32) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1282 || TEST_REGNO (num, ==, FRAME_POINTER_REGNUM) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1283 || TEST_REGNO (num, ==, ARG_POINTER_REGNUM))
111
kono
parents:
diff changeset
1284
kono
parents:
diff changeset
1285 /* Return nonzero if it is suitable for use as a
kono
parents:
diff changeset
1286 index register in operand addresses.
kono
parents:
diff changeset
1287 So far, we return nonzero only if "num" is a hard reg
kono
parents:
diff changeset
1288 of the suitable class or a pseudo register which is
kono
parents:
diff changeset
1289 allocated to a suitable hard reg.
kono
parents:
diff changeset
1290 The difference between an index register and a base register is that
kono
parents:
diff changeset
1291 the index register may be scaled. */
kono
parents:
diff changeset
1292 #define REGNO_OK_FOR_INDEX_P(num) \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1293 (TEST_REGNO (num, <, 32) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1294 || TEST_REGNO (num, ==, FRAME_POINTER_REGNUM) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1295 || TEST_REGNO (num, ==, ARG_POINTER_REGNUM))
111
kono
parents:
diff changeset
1296
kono
parents:
diff changeset
1297
kono
parents:
diff changeset
1298 /* Obsolete Macros for Defining Constraints. */
kono
parents:
diff changeset
1299
kono
parents:
diff changeset
1300
kono
parents:
diff changeset
1301 /* Stack Layout and Calling Conventions. */
kono
parents:
diff changeset
1302
kono
parents:
diff changeset
1303 #define STACK_GROWS_DOWNWARD 1
kono
parents:
diff changeset
1304
kono
parents:
diff changeset
1305 #define FRAME_GROWS_DOWNWARD 1
kono
parents:
diff changeset
1306
kono
parents:
diff changeset
1307 #define STACK_POINTER_OFFSET 0
kono
parents:
diff changeset
1308
kono
parents:
diff changeset
1309 #define FIRST_PARM_OFFSET(fundecl) \
kono
parents:
diff changeset
1310 (NDS32_DOUBLE_WORD_ALIGN_P (crtl->args.pretend_args_size) ? 0 : 4)
kono
parents:
diff changeset
1311
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1312 /* A C expression whose value is RTL representing the address in a stack frame
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1313 where the pointer to the caller's frame is stored. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1314 #define DYNAMIC_CHAIN_ADDRESS(frameaddr) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1315 nds32_dynamic_chain_address (frameaddr)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1316
111
kono
parents:
diff changeset
1317 #define RETURN_ADDR_RTX(count, frameaddr) \
kono
parents:
diff changeset
1318 nds32_return_addr_rtx (count, frameaddr)
kono
parents:
diff changeset
1319
kono
parents:
diff changeset
1320 /* A C expression whose value is RTL representing the location
kono
parents:
diff changeset
1321 of the incoming return address at the beginning of any function
kono
parents:
diff changeset
1322 before the prologue.
kono
parents:
diff changeset
1323 If this RTL is REG, you should also define
kono
parents:
diff changeset
1324 DWARF_FRAME_RETURN_COLUMN to DWARF_FRAME_REGNUM (REGNO). */
kono
parents:
diff changeset
1325 #define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, LP_REGNUM)
kono
parents:
diff changeset
1326 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (LP_REGNUM)
kono
parents:
diff changeset
1327
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1328 /* Use $r0 $r1 to pass exception handling information. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1329 #define EH_RETURN_DATA_REGNO(N) (((N) < 2) ? (N) : INVALID_REGNUM)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1330 /* The register $r2 that represents a location in which to store a stack
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1331 adjustment to be applied before function return.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1332 This is used to unwind the stack to an exception handler's call frame. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1333 #define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 2)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1334
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1335 #define DBX_REGISTER_NUMBER(REGNO) nds32_dbx_register_number (REGNO)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1336
111
kono
parents:
diff changeset
1337 #define STACK_POINTER_REGNUM SP_REGNUM
kono
parents:
diff changeset
1338
kono
parents:
diff changeset
1339 #define FRAME_POINTER_REGNUM 33
kono
parents:
diff changeset
1340
kono
parents:
diff changeset
1341 #define HARD_FRAME_POINTER_REGNUM FP_REGNUM
kono
parents:
diff changeset
1342
kono
parents:
diff changeset
1343 #define ARG_POINTER_REGNUM 32
kono
parents:
diff changeset
1344
kono
parents:
diff changeset
1345 #define STATIC_CHAIN_REGNUM 16
kono
parents:
diff changeset
1346
kono
parents:
diff changeset
1347 #define ELIMINABLE_REGS \
kono
parents:
diff changeset
1348 { { ARG_POINTER_REGNUM, STACK_POINTER_REGNUM }, \
kono
parents:
diff changeset
1349 { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM }, \
kono
parents:
diff changeset
1350 { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM }, \
kono
parents:
diff changeset
1351 { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM } }
kono
parents:
diff changeset
1352
kono
parents:
diff changeset
1353 #define INITIAL_ELIMINATION_OFFSET(from_reg, to_reg, offset_var) \
kono
parents:
diff changeset
1354 (offset_var) = nds32_initial_elimination_offset (from_reg, to_reg)
kono
parents:
diff changeset
1355
kono
parents:
diff changeset
1356 #define ACCUMULATE_OUTGOING_ARGS 1
kono
parents:
diff changeset
1357
kono
parents:
diff changeset
1358 #define OUTGOING_REG_PARM_STACK_SPACE(fntype) 1
kono
parents:
diff changeset
1359
kono
parents:
diff changeset
1360 #define CUMULATIVE_ARGS nds32_cumulative_args
kono
parents:
diff changeset
1361
kono
parents:
diff changeset
1362 #define INIT_CUMULATIVE_ARGS(cum, fntype, libname, fndecl, n_named_args) \
kono
parents:
diff changeset
1363 nds32_init_cumulative_args (&cum, fntype, libname, fndecl, n_named_args)
kono
parents:
diff changeset
1364
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1365 #define FUNCTION_ARG_REGNO_P(regno) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1366 (IN_RANGE ((regno), NDS32_FIRST_GPR_REGNUM, NDS32_MAX_GPR_REGS_FOR_ARGS - 1) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1367 || ((TARGET_FPU_SINGLE || TARGET_FPU_DOUBLE) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1368 && IN_RANGE ((regno), NDS32_FPR_ARG_FIRST_REGNUM, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1369 NDS32_FIRST_FPR_REGNUM + NDS32_MAX_FPR_REGS_FOR_ARGS - 1)))
111
kono
parents:
diff changeset
1370
kono
parents:
diff changeset
1371 #define DEFAULT_PCC_STRUCT_RETURN 0
kono
parents:
diff changeset
1372
kono
parents:
diff changeset
1373 /* EXIT_IGNORE_STACK should be nonzero if, when returning
kono
parents:
diff changeset
1374 from a function, the stack pointer does not matter.
kono
parents:
diff changeset
1375 The value is tested only in functions that have frame pointers.
kono
parents:
diff changeset
1376 In nds32 target, the function epilogue recovers the
kono
parents:
diff changeset
1377 stack pointer from the frame. */
kono
parents:
diff changeset
1378 #define EXIT_IGNORE_STACK 1
kono
parents:
diff changeset
1379
kono
parents:
diff changeset
1380 #define FUNCTION_PROFILER(file, labelno) \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1381 fprintf (file, "/* profiler %d */\n", (labelno))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1382
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1383 #define PROFILE_HOOK(LABEL) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1384 { \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1385 rtx fun, lp; \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1386 lp = get_hard_reg_initial_val (Pmode, LP_REGNUM); \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1387 fun = gen_rtx_SYMBOL_REF (Pmode, "_mcount"); \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1388 emit_library_call (fun, LCT_NORMAL, VOIDmode, lp, Pmode); \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1389 }
111
kono
parents:
diff changeset
1390
kono
parents:
diff changeset
1391
kono
parents:
diff changeset
1392 /* Implementing the Varargs Macros. */
kono
parents:
diff changeset
1393
kono
parents:
diff changeset
1394
kono
parents:
diff changeset
1395 /* Trampolines for Nested Functions. */
kono
parents:
diff changeset
1396
kono
parents:
diff changeset
1397 /* Giving A-function and B-function,
kono
parents:
diff changeset
1398 if B-function wants to call A-function's nested function,
kono
parents:
diff changeset
1399 we need to fill trampoline code into A-function's stack
kono
parents:
diff changeset
1400 so that B-function can execute the code in stack to indirectly
kono
parents:
diff changeset
1401 jump to (like 'trampoline' action) desired nested function.
kono
parents:
diff changeset
1402
kono
parents:
diff changeset
1403 The trampoline code for nds32 target must contains following parts:
kono
parents:
diff changeset
1404
kono
parents:
diff changeset
1405 1. instructions (4 * 4 = 16 bytes):
kono
parents:
diff changeset
1406 get $pc first
kono
parents:
diff changeset
1407 load chain_value to static chain register via $pc
kono
parents:
diff changeset
1408 load nested function address to $r15 via $pc
kono
parents:
diff changeset
1409 jump to desired nested function via $r15
kono
parents:
diff changeset
1410 2. data (4 * 2 = 8 bytes):
kono
parents:
diff changeset
1411 chain_value
kono
parents:
diff changeset
1412 nested function address
kono
parents:
diff changeset
1413
kono
parents:
diff changeset
1414 Please check nds32.c implementation for more information. */
kono
parents:
diff changeset
1415 #define TRAMPOLINE_SIZE 24
kono
parents:
diff changeset
1416
kono
parents:
diff changeset
1417 /* Because all instructions/data in trampoline template are 4-byte size,
kono
parents:
diff changeset
1418 we set trampoline alignment 8*4=32 bits. */
kono
parents:
diff changeset
1419 #define TRAMPOLINE_ALIGNMENT 32
kono
parents:
diff changeset
1420
kono
parents:
diff changeset
1421
kono
parents:
diff changeset
1422 /* Implicit Calls to Library Routines. */
kono
parents:
diff changeset
1423
kono
parents:
diff changeset
1424
kono
parents:
diff changeset
1425 /* Addressing Modes. */
kono
parents:
diff changeset
1426
kono
parents:
diff changeset
1427 /* We can use "LWI.bi Rt, [Ra], 4" to support post increment. */
kono
parents:
diff changeset
1428 #define HAVE_POST_INCREMENT 1
kono
parents:
diff changeset
1429 /* We can use "LWI.bi Rt, [Ra], -4" to support post decrement. */
kono
parents:
diff changeset
1430 #define HAVE_POST_DECREMENT 1
kono
parents:
diff changeset
1431
kono
parents:
diff changeset
1432 /* We have "LWI.bi Rt, [Ra], imm" instruction form. */
kono
parents:
diff changeset
1433 #define HAVE_POST_MODIFY_DISP 1
kono
parents:
diff changeset
1434 /* We have "LW.bi Rt, [Ra], Rb" instruction form. */
kono
parents:
diff changeset
1435 #define HAVE_POST_MODIFY_REG 1
kono
parents:
diff changeset
1436
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1437 #define USE_LOAD_POST_INCREMENT(mode) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1438 nds32_use_load_post_increment(mode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1439 #define USE_LOAD_POST_DECREMENT(mode) USE_LOAD_POST_INCREMENT(mode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1440 #define USE_STORE_POST_DECREMENT(mode) USE_LOAD_POST_DECREMENT(mode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1441 #define USE_STORE_POST_INCREMENT(mode) USE_LOAD_POST_INCREMENT(mode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1442
111
kono
parents:
diff changeset
1443 #define CONSTANT_ADDRESS_P(x) (CONSTANT_P (x) && GET_CODE (x) != CONST_DOUBLE)
kono
parents:
diff changeset
1444
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1445 #define MAX_REGS_PER_ADDRESS 3
111
kono
parents:
diff changeset
1446
kono
parents:
diff changeset
1447
kono
parents:
diff changeset
1448 /* Anchored Addresses. */
kono
parents:
diff changeset
1449
kono
parents:
diff changeset
1450
kono
parents:
diff changeset
1451 /* Condition Code Status. */
kono
parents:
diff changeset
1452
kono
parents:
diff changeset
1453
kono
parents:
diff changeset
1454 /* Describing Relative Costs of Operations. */
kono
parents:
diff changeset
1455
kono
parents:
diff changeset
1456 /* A C expression for the cost of a branch instruction.
kono
parents:
diff changeset
1457 A value of 1 is the default;
kono
parents:
diff changeset
1458 other values are interpreted relative to that. */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1459 #define BRANCH_COST(speed_p, predictable_p) ((speed_p) ? 2 : 1)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1460
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1461 /* Override BRANCH_COST heuristic which empirically produces worse
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1462 performance for removing short circuiting from the logical ops. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1463 #define LOGICAL_OP_NON_SHORT_CIRCUIT 0
111
kono
parents:
diff changeset
1464
kono
parents:
diff changeset
1465 #define SLOW_BYTE_ACCESS 1
kono
parents:
diff changeset
1466
kono
parents:
diff changeset
1467 #define NO_FUNCTION_CSE 1
kono
parents:
diff changeset
1468
kono
parents:
diff changeset
1469
kono
parents:
diff changeset
1470 /* Adjusting the Instruction Scheduler. */
kono
parents:
diff changeset
1471
kono
parents:
diff changeset
1472
kono
parents:
diff changeset
1473 /* Dividing the Output into Sections (Texts, Data, . . . ). */
kono
parents:
diff changeset
1474
kono
parents:
diff changeset
1475 #define TEXT_SECTION_ASM_OP "\t.text"
kono
parents:
diff changeset
1476 #define DATA_SECTION_ASM_OP "\t.data"
kono
parents:
diff changeset
1477
kono
parents:
diff changeset
1478 /* Currently, nds32 assembler does NOT handle '.bss' pseudo-op.
kono
parents:
diff changeset
1479 So we use '.section .bss' alternatively. */
kono
parents:
diff changeset
1480 #define BSS_SECTION_ASM_OP "\t.section\t.bss"
kono
parents:
diff changeset
1481
kono
parents:
diff changeset
1482 /* Define this macro to be an expression with a nonzero value if jump tables
kono
parents:
diff changeset
1483 (for tablejump insns) should be output in the text section,
kono
parents:
diff changeset
1484 along with the assembler instructions.
kono
parents:
diff changeset
1485 Otherwise, the readonly data section is used. */
kono
parents:
diff changeset
1486 #define JUMP_TABLES_IN_TEXT_SECTION 1
kono
parents:
diff changeset
1487
kono
parents:
diff changeset
1488
kono
parents:
diff changeset
1489 /* Position Independent Code. */
kono
parents:
diff changeset
1490
kono
parents:
diff changeset
1491 #define PIC_OFFSET_TABLE_REGNUM GP_REGNUM
kono
parents:
diff changeset
1492
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1493 #define SYMBOLIC_CONST_P(X) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1494 (GET_CODE (X) == SYMBOL_REF \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1495 || GET_CODE (X) == LABEL_REF \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1496 || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X)))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1497
111
kono
parents:
diff changeset
1498
kono
parents:
diff changeset
1499 /* Defining the Output Assembler Language. */
kono
parents:
diff changeset
1500
kono
parents:
diff changeset
1501 #define ASM_COMMENT_START "!"
kono
parents:
diff changeset
1502
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1503 #define ASM_APP_ON "! #APP\n"
111
kono
parents:
diff changeset
1504
kono
parents:
diff changeset
1505 #define ASM_APP_OFF "! #NO_APP\n"
kono
parents:
diff changeset
1506
kono
parents:
diff changeset
1507 #define ASM_OUTPUT_LABELREF(stream, name) \
kono
parents:
diff changeset
1508 asm_fprintf (stream, "%U%s", (*targetm.strip_name_encoding) (name))
kono
parents:
diff changeset
1509
kono
parents:
diff changeset
1510 #define ASM_OUTPUT_SYMBOL_REF(stream, sym) \
kono
parents:
diff changeset
1511 assemble_name (stream, XSTR (sym, 0))
kono
parents:
diff changeset
1512
kono
parents:
diff changeset
1513 #define ASM_OUTPUT_LABEL_REF(stream, buf) \
kono
parents:
diff changeset
1514 assemble_name (stream, buf)
kono
parents:
diff changeset
1515
kono
parents:
diff changeset
1516 #define LOCAL_LABEL_PREFIX "."
kono
parents:
diff changeset
1517
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1518 #define REGISTER_NAMES \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1519 { "$r0", "$r1", "$r2", "$r3", "$r4", "$r5", "$r6", "$r7", \
111
kono
parents:
diff changeset
1520 "$r8", "$r9", "$r10", "$r11", "$r12", "$r13", "$r14", "$ta", \
kono
parents:
diff changeset
1521 "$r16", "$r17", "$r18", "$r19", "$r20", "$r21", "$r22", "$r23", \
kono
parents:
diff changeset
1522 "$r24", "$r25", "$r26", "$r27", "$fp", "$gp", "$lp", "$sp", \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1523 "$AP", "$SFP", "$fs0", "$fs1", "$fs2", "$fs3", "$fs4", "$fs5", \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1524 "$fs6", "$fs7", "$fs8", "$fs9", "$fs10","$fs11","$fs12","$fs13",\
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1525 "$fs14","$fs15","$fs16","$fs17","$fs18","$fs19","$fs20","$fs21",\
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1526 "$fs22","$fs23","$fs24","$fs25","$fs26","$fs27","$fs28","$fs29",\
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1527 "$fs30","$fs31","$fs32","$fs33","$fs34","$fs35","$fs36","$fs37",\
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1528 "$fs38","$fs39","$fs40","$fs41","$fs42","$fs43","$fs44","$fs45",\
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1529 "$fs46","$fs47","$fs48","$fs49","$fs50","$fs51","$fs52","$fs53",\
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1530 "$fs54","$fs55","$fs56","$fs57","$fs58","$fs59","$fs60","$fs61",\
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1531 "$fs62","$fs63", "LB", "LE", "LC" \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1532 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1533
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1534 #define ADDITIONAL_REGISTER_NAMES \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1535 { \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1536 {"$r15", 15}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1537 {"$r28", 28}, {"$r29", 29}, {"$r30", 30}, {"$r31", 31}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1538 {"$a0", 0}, {"$a1", 1}, {"$a2", 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1539 {"$a3", 3}, {"$a4", 4}, {"$a5", 5}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1540 {"$s0", 6}, {"$s1", 7}, {"$s2", 8}, {"$s3", 9}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1541 {"$s4", 10}, {"$s5", 11}, {"$s6", 12}, {"$s7", 13}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1542 {"$s8", 14}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1543 {"$t0", 16}, {"$t1", 17}, {"$t2", 18}, {"$t3", 19}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1544 {"$t4", 20}, {"$t5", 21}, {"$t6", 22}, {"$t7", 23}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1545 {"$t8", 24}, {"$t9", 25}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1546 {"$p0", 26}, {"$p1", 27}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1547 {"$h0", 0}, {"$h1", 1}, {"$h2", 2}, {"$h3", 3}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1548 {"$h4", 4}, {"$h5", 5}, {"$h6", 6}, {"$h7", 7}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1549 {"$h8", 8}, {"$h9", 9}, {"$h10", 10}, {"$h11", 11}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1550 {"$h12", 16}, {"$h13", 17}, {"$h14", 18}, {"$h15", 19}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1551 {"$o0", 0}, {"$o1", 1}, {"$o2", 2}, {"$o3", 3}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1552 {"$o4", 4}, {"$o5", 5}, {"$o6", 6}, {"$o7", 7}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1553 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1554
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1555 #define OVERLAPPING_REGISTER_NAMES \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1556 { \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1557 {"$fd0", NDS32_FIRST_FPR_REGNUM + 0, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1558 {"$fd1", NDS32_FIRST_FPR_REGNUM + 2, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1559 {"$fd2", NDS32_FIRST_FPR_REGNUM + 4, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1560 {"$fd3", NDS32_FIRST_FPR_REGNUM + 6, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1561 {"$fd4", NDS32_FIRST_FPR_REGNUM + 8, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1562 {"$fd5", NDS32_FIRST_FPR_REGNUM + 10, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1563 {"$fd6", NDS32_FIRST_FPR_REGNUM + 12, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1564 {"$fd7", NDS32_FIRST_FPR_REGNUM + 14, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1565 {"$fd8", NDS32_FIRST_FPR_REGNUM + 16, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1566 {"$fd9", NDS32_FIRST_FPR_REGNUM + 18, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1567 {"$fd10", NDS32_FIRST_FPR_REGNUM + 20, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1568 {"$fd11", NDS32_FIRST_FPR_REGNUM + 22, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1569 {"$fd12", NDS32_FIRST_FPR_REGNUM + 24, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1570 {"$fd13", NDS32_FIRST_FPR_REGNUM + 26, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1571 {"$fd14", NDS32_FIRST_FPR_REGNUM + 28, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1572 {"$fd15", NDS32_FIRST_FPR_REGNUM + 30, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1573 {"$fd16", NDS32_FIRST_FPR_REGNUM + 32, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1574 {"$fd17", NDS32_FIRST_FPR_REGNUM + 34, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1575 {"$fd18", NDS32_FIRST_FPR_REGNUM + 36, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1576 {"$fd19", NDS32_FIRST_FPR_REGNUM + 38, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1577 {"$fd20", NDS32_FIRST_FPR_REGNUM + 40, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1578 {"$fd21", NDS32_FIRST_FPR_REGNUM + 42, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1579 {"$fd22", NDS32_FIRST_FPR_REGNUM + 44, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1580 {"$fd23", NDS32_FIRST_FPR_REGNUM + 46, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1581 {"$fd24", NDS32_FIRST_FPR_REGNUM + 48, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1582 {"$fd25", NDS32_FIRST_FPR_REGNUM + 50, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1583 {"$fd26", NDS32_FIRST_FPR_REGNUM + 52, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1584 {"$fd27", NDS32_FIRST_FPR_REGNUM + 54, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1585 {"$fd28", NDS32_FIRST_FPR_REGNUM + 56, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1586 {"$fd29", NDS32_FIRST_FPR_REGNUM + 58, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1587 {"$fd30", NDS32_FIRST_FPR_REGNUM + 60, 2}, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1588 {"$fd31", NDS32_FIRST_FPR_REGNUM + 62, 2}, \
111
kono
parents:
diff changeset
1589 }
kono
parents:
diff changeset
1590
kono
parents:
diff changeset
1591 /* Output normal jump table entry. */
kono
parents:
diff changeset
1592 #define ASM_OUTPUT_ADDR_VEC_ELT(stream, value) \
kono
parents:
diff changeset
1593 asm_fprintf (stream, "\t.word\t%LL%d\n", value)
kono
parents:
diff changeset
1594
kono
parents:
diff changeset
1595 /* Output pc relative jump table entry. */
kono
parents:
diff changeset
1596 #define ASM_OUTPUT_ADDR_DIFF_ELT(stream, body, value, rel) \
kono
parents:
diff changeset
1597 do \
kono
parents:
diff changeset
1598 { \
kono
parents:
diff changeset
1599 switch (GET_MODE (body)) \
kono
parents:
diff changeset
1600 { \
kono
parents:
diff changeset
1601 case E_QImode: \
kono
parents:
diff changeset
1602 asm_fprintf (stream, "\t.byte\t.L%d-.L%d\n", value, rel); \
kono
parents:
diff changeset
1603 break; \
kono
parents:
diff changeset
1604 case E_HImode: \
kono
parents:
diff changeset
1605 asm_fprintf (stream, "\t.short\t.L%d-.L%d\n", value, rel); \
kono
parents:
diff changeset
1606 break; \
kono
parents:
diff changeset
1607 case E_SImode: \
kono
parents:
diff changeset
1608 asm_fprintf (stream, "\t.word\t.L%d-.L%d\n", value, rel); \
kono
parents:
diff changeset
1609 break; \
kono
parents:
diff changeset
1610 default: \
kono
parents:
diff changeset
1611 gcc_unreachable(); \
kono
parents:
diff changeset
1612 } \
kono
parents:
diff changeset
1613 } while (0)
kono
parents:
diff changeset
1614
kono
parents:
diff changeset
1615 /* We have to undef it first because elfos.h formerly define it
kono
parents:
diff changeset
1616 check gcc/config.gcc and gcc/config/elfos.h for more information. */
kono
parents:
diff changeset
1617 #undef ASM_OUTPUT_CASE_LABEL
kono
parents:
diff changeset
1618 #define ASM_OUTPUT_CASE_LABEL(stream, prefix, num, table) \
kono
parents:
diff changeset
1619 do \
kono
parents:
diff changeset
1620 { \
kono
parents:
diff changeset
1621 asm_fprintf (stream, "\t! Jump Table Begin\n"); \
kono
parents:
diff changeset
1622 (*targetm.asm_out.internal_label) (stream, prefix, num); \
kono
parents:
diff changeset
1623 } while (0)
kono
parents:
diff changeset
1624
kono
parents:
diff changeset
1625 #define ASM_OUTPUT_CASE_END(stream, num, table) \
kono
parents:
diff changeset
1626 do \
kono
parents:
diff changeset
1627 { \
kono
parents:
diff changeset
1628 /* Because our jump table is in text section, \
kono
parents:
diff changeset
1629 we need to make sure 2-byte alignment after \
kono
parents:
diff changeset
1630 the jump table for instructions fetch. */ \
kono
parents:
diff changeset
1631 if (GET_MODE (PATTERN (table)) == QImode) \
kono
parents:
diff changeset
1632 ASM_OUTPUT_ALIGN (stream, 1); \
kono
parents:
diff changeset
1633 asm_fprintf (stream, "\t! Jump Table End\n"); \
kono
parents:
diff changeset
1634 } while (0)
kono
parents:
diff changeset
1635
kono
parents:
diff changeset
1636 /* This macro is not documented yet.
kono
parents:
diff changeset
1637 But we do need it to make jump table vector aligned. */
kono
parents:
diff changeset
1638 #define ADDR_VEC_ALIGN(JUMPTABLE) 2
kono
parents:
diff changeset
1639
kono
parents:
diff changeset
1640 #define DWARF2_UNWIND_INFO 1
kono
parents:
diff changeset
1641
kono
parents:
diff changeset
1642 #define JUMP_ALIGN(x) \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1643 (align_jumps.levels[0].log \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1644 ? align_jumps : align_flags (nds32_target_alignment (x)))
111
kono
parents:
diff changeset
1645
kono
parents:
diff changeset
1646 #define LOOP_ALIGN(x) \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1647 (align_loops.levels[0].log \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1648 ? align_loops : align_flags (nds32_target_alignment (x)))
111
kono
parents:
diff changeset
1649
kono
parents:
diff changeset
1650 #define LABEL_ALIGN(x) \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1651 (align_labels.levels[0].log \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1652 ? align_labels : align_flags (nds32_target_alignment (x)))
111
kono
parents:
diff changeset
1653
kono
parents:
diff changeset
1654 #define ASM_OUTPUT_ALIGN(stream, power) \
kono
parents:
diff changeset
1655 fprintf (stream, "\t.align\t%d\n", power)
kono
parents:
diff changeset
1656
kono
parents:
diff changeset
1657
kono
parents:
diff changeset
1658 /* Controlling Debugging Information Format. */
kono
parents:
diff changeset
1659
kono
parents:
diff changeset
1660 #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
kono
parents:
diff changeset
1661
kono
parents:
diff changeset
1662 #define DWARF2_DEBUGGING_INFO 1
kono
parents:
diff changeset
1663
kono
parents:
diff changeset
1664 #define DWARF2_ASM_LINE_DEBUG_INFO 1
kono
parents:
diff changeset
1665
kono
parents:
diff changeset
1666
kono
parents:
diff changeset
1667 /* Cross Compilation and Floating Point. */
kono
parents:
diff changeset
1668
kono
parents:
diff changeset
1669
kono
parents:
diff changeset
1670 /* Mode Switching Instructions. */
kono
parents:
diff changeset
1671
kono
parents:
diff changeset
1672
kono
parents:
diff changeset
1673 /* Defining target-specific uses of __attribute__. */
kono
parents:
diff changeset
1674
kono
parents:
diff changeset
1675
kono
parents:
diff changeset
1676 /* Emulating TLS. */
kono
parents:
diff changeset
1677
kono
parents:
diff changeset
1678
kono
parents:
diff changeset
1679 /* Defining coprocessor specifics for MIPS targets. */
kono
parents:
diff changeset
1680
kono
parents:
diff changeset
1681
kono
parents:
diff changeset
1682 /* Parameters for Precompiled Header Validity Checking. */
kono
parents:
diff changeset
1683
kono
parents:
diff changeset
1684
kono
parents:
diff changeset
1685 /* C++ ABI parameters. */
kono
parents:
diff changeset
1686
kono
parents:
diff changeset
1687
kono
parents:
diff changeset
1688 /* Adding support for named address spaces. */
kono
parents:
diff changeset
1689
kono
parents:
diff changeset
1690
kono
parents:
diff changeset
1691 /* Miscellaneous Parameters. */
kono
parents:
diff changeset
1692
kono
parents:
diff changeset
1693 /* This is the machine mode that elements of a jump-table should have. */
kono
parents:
diff changeset
1694 #define CASE_VECTOR_MODE Pmode
kono
parents:
diff changeset
1695
kono
parents:
diff changeset
1696 /* Return the preferred mode for and addr_diff_vec when the mininum
kono
parents:
diff changeset
1697 and maximum offset are known. */
kono
parents:
diff changeset
1698 #define CASE_VECTOR_SHORTEN_MODE(min_offset, max_offset, body) \
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1699 nds32_case_vector_shorten_mode (min_offset, max_offset, body)
111
kono
parents:
diff changeset
1700
kono
parents:
diff changeset
1701 /* Generate pc relative jump table when -fpic or -Os. */
kono
parents:
diff changeset
1702 #define CASE_VECTOR_PC_RELATIVE (flag_pic || optimize_size)
kono
parents:
diff changeset
1703
kono
parents:
diff changeset
1704 /* Define this macro if operations between registers with integral mode
kono
parents:
diff changeset
1705 smaller than a word are always performed on the entire register. */
kono
parents:
diff changeset
1706 #define WORD_REGISTER_OPERATIONS 1
kono
parents:
diff changeset
1707
kono
parents:
diff changeset
1708 /* A C expression indicating when insns that read memory in mem_mode,
kono
parents:
diff changeset
1709 an integral mode narrower than a word, set the bits outside of mem_mode
kono
parents:
diff changeset
1710 to be either the sign-extension or the zero-extension of the data read. */
kono
parents:
diff changeset
1711 #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
kono
parents:
diff changeset
1712
kono
parents:
diff changeset
1713 /* The maximum number of bytes that a single instruction can move quickly
kono
parents:
diff changeset
1714 between memory and registers or between two memory locations. */
kono
parents:
diff changeset
1715 #define MOVE_MAX 4
kono
parents:
diff changeset
1716
kono
parents:
diff changeset
1717 /* A C expression that is nonzero if on this machine the number of bits
kono
parents:
diff changeset
1718 actually used for the count of a shift operation is equal to the number
kono
parents:
diff changeset
1719 of bits needed to represent the size of the object being shifted. */
kono
parents:
diff changeset
1720 #define SHIFT_COUNT_TRUNCATED 1
kono
parents:
diff changeset
1721
kono
parents:
diff changeset
1722 /* A C expression describing the value returned by a comparison operator with
kono
parents:
diff changeset
1723 an integral mode and stored by a store-flag instruction ('cstoremode4')
kono
parents:
diff changeset
1724 when the condition is true. */
kono
parents:
diff changeset
1725 #define STORE_FLAG_VALUE 1
kono
parents:
diff changeset
1726
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1727 /* A C expression that indicates whether the architecture defines a value for
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1728 clz or ctz with a zero operand. In nds32 clz for 0 result 32 is defined
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1729 in ISA spec */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1730 #define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1731
111
kono
parents:
diff changeset
1732 /* An alias for the machine mode for pointers. */
kono
parents:
diff changeset
1733 #define Pmode SImode
kono
parents:
diff changeset
1734
kono
parents:
diff changeset
1735 /* An alias for the machine mode used for memory references to functions
kono
parents:
diff changeset
1736 being called, in call RTL expressions. */
kono
parents:
diff changeset
1737 #define FUNCTION_MODE SImode
kono
parents:
diff changeset
1738
kono
parents:
diff changeset
1739 /* ------------------------------------------------------------------------ */