xref: /netbsd-src/external/gpl3/binutils/dist/include/xtensa-dynconfig.h (revision cb63e24e8d6aae7ddac1859a9015f48b1d8bd90e)
1*cb63e24eSchristos /* Xtensa configuration settings.
2*cb63e24eSchristos    Copyright (C) 2022-2024 Free Software Foundation, Inc.
3*cb63e24eSchristos 
4*cb63e24eSchristos    This program is free software; you can redistribute it and/or modify
5*cb63e24eSchristos    it under the terms of the GNU General Public License as published by
6*cb63e24eSchristos    the Free Software Foundation; either version 2, or (at your option)
7*cb63e24eSchristos    any later version.
8*cb63e24eSchristos 
9*cb63e24eSchristos    This program is distributed in the hope that it will be useful, but
10*cb63e24eSchristos    WITHOUT ANY WARRANTY; without even the implied warranty of
11*cb63e24eSchristos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12*cb63e24eSchristos    General Public License for more details.
13*cb63e24eSchristos 
14*cb63e24eSchristos    You should have received a copy of the GNU General Public License
15*cb63e24eSchristos    along with this program; if not, write to the Free Software
16*cb63e24eSchristos    Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
17*cb63e24eSchristos 
18*cb63e24eSchristos #ifndef XTENSA_DYNCONFIG_H
19*cb63e24eSchristos #define XTENSA_DYNCONFIG_H
20*cb63e24eSchristos 
21*cb63e24eSchristos #ifdef __cplusplus
22*cb63e24eSchristos extern "C" {
23*cb63e24eSchristos #endif
24*cb63e24eSchristos 
25*cb63e24eSchristos /*
26*cb63e24eSchristos  * Config versioning.
27*cb63e24eSchristos  *
28*cb63e24eSchristos  * When new config entries need to be passed through dynconfig
29*cb63e24eSchristos  * create new xtensa_config_v<N> structure and put them there.
30*cb63e24eSchristos  * Declare new function xtensa_get_config_v<N> (void).
31*cb63e24eSchristos  * Define corresponding X*HAL_* macros by accessing xtensa_get_config_v<N> ().
32*cb63e24eSchristos  * Define macro XTENSA_CONFIG_V<N>_ENTRY_LIST by listing
33*cb63e24eSchristos  * XTENSA_CONFIG_ENTRY for every entry in the new structure.
34*cb63e24eSchristos  * Add constant definition for the new xtensa_config_v<N> to the
35*cb63e24eSchristos  * XTENSA_CONFIG_INSTANCE_LIST.
36*cb63e24eSchristos  * Add XTENSA_CONFIG_V<N>_ENTRY_LIST to the XTENSA_CONFIG_ENTRY_LIST.
37*cb63e24eSchristos  *
38*cb63e24eSchristos  * On the user side (gcc/binutils/...) add definition for the function
39*cb63e24eSchristos  * xtensa_get_config_v<N> (void).
40*cb63e24eSchristos  */
41*cb63e24eSchristos 
42*cb63e24eSchristos struct xtensa_config_v1
43*cb63e24eSchristos {
44*cb63e24eSchristos   int xchal_have_be;
45*cb63e24eSchristos   int xchal_have_density;
46*cb63e24eSchristos   int xchal_have_const16;
47*cb63e24eSchristos   int xchal_have_abs;
48*cb63e24eSchristos   int xchal_have_addx;
49*cb63e24eSchristos   int xchal_have_l32r;
50*cb63e24eSchristos   int xshal_use_absolute_literals;
51*cb63e24eSchristos   int xshal_have_text_section_literals;
52*cb63e24eSchristos   int xchal_have_mac16;
53*cb63e24eSchristos   int xchal_have_mul16;
54*cb63e24eSchristos   int xchal_have_mul32;
55*cb63e24eSchristos   int xchal_have_mul32_high;
56*cb63e24eSchristos   int xchal_have_div32;
57*cb63e24eSchristos   int xchal_have_nsa;
58*cb63e24eSchristos   int xchal_have_minmax;
59*cb63e24eSchristos   int xchal_have_sext;
60*cb63e24eSchristos   int xchal_have_loops;
61*cb63e24eSchristos   int xchal_have_threadptr;
62*cb63e24eSchristos   int xchal_have_release_sync;
63*cb63e24eSchristos   int xchal_have_s32c1i;
64*cb63e24eSchristos   int xchal_have_booleans;
65*cb63e24eSchristos   int xchal_have_fp;
66*cb63e24eSchristos   int xchal_have_fp_div;
67*cb63e24eSchristos   int xchal_have_fp_recip;
68*cb63e24eSchristos   int xchal_have_fp_sqrt;
69*cb63e24eSchristos   int xchal_have_fp_rsqrt;
70*cb63e24eSchristos   int xchal_have_fp_postinc;
71*cb63e24eSchristos   int xchal_have_dfp;
72*cb63e24eSchristos   int xchal_have_dfp_div;
73*cb63e24eSchristos   int xchal_have_dfp_recip;
74*cb63e24eSchristos   int xchal_have_dfp_sqrt;
75*cb63e24eSchristos   int xchal_have_dfp_rsqrt;
76*cb63e24eSchristos   int xchal_have_windowed;
77*cb63e24eSchristos   int xchal_num_aregs;
78*cb63e24eSchristos   int xchal_have_wide_branches;
79*cb63e24eSchristos   int xchal_have_predicted_branches;
80*cb63e24eSchristos   int xchal_icache_size;
81*cb63e24eSchristos   int xchal_dcache_size;
82*cb63e24eSchristos   int xchal_icache_linesize;
83*cb63e24eSchristos   int xchal_dcache_linesize;
84*cb63e24eSchristos   int xchal_icache_linewidth;
85*cb63e24eSchristos   int xchal_dcache_linewidth;
86*cb63e24eSchristos   int xchal_dcache_is_writeback;
87*cb63e24eSchristos   int xchal_have_mmu;
88*cb63e24eSchristos   int xchal_mmu_min_pte_page_size;
89*cb63e24eSchristos   int xchal_have_debug;
90*cb63e24eSchristos   int xchal_num_ibreak;
91*cb63e24eSchristos   int xchal_num_dbreak;
92*cb63e24eSchristos   int xchal_debuglevel;
93*cb63e24eSchristos   int xchal_max_instruction_size;
94*cb63e24eSchristos   int xchal_inst_fetch_width;
95*cb63e24eSchristos   int xshal_abi;
96*cb63e24eSchristos   int xthal_abi_windowed;
97*cb63e24eSchristos   int xthal_abi_call0;
98*cb63e24eSchristos };
99*cb63e24eSchristos 
100*cb63e24eSchristos struct xtensa_config_v2
101*cb63e24eSchristos {
102*cb63e24eSchristos   int xchal_m_stage;
103*cb63e24eSchristos   int xtensa_march_latest;
104*cb63e24eSchristos   int xtensa_march_earliest;
105*cb63e24eSchristos };
106*cb63e24eSchristos 
107*cb63e24eSchristos struct xtensa_config_v3
108*cb63e24eSchristos {
109*cb63e24eSchristos   int xchal_have_clamps;
110*cb63e24eSchristos   int xchal_have_depbits;
111*cb63e24eSchristos   int xchal_have_exclusive;
112*cb63e24eSchristos   int xchal_have_xea3;
113*cb63e24eSchristos };
114*cb63e24eSchristos 
115*cb63e24eSchristos struct xtensa_config_v4
116*cb63e24eSchristos {
117*cb63e24eSchristos   int xchal_data_width;
118*cb63e24eSchristos   int xchal_unaligned_load_exception;
119*cb63e24eSchristos   int xchal_unaligned_store_exception;
120*cb63e24eSchristos   int xchal_unaligned_load_hw;
121*cb63e24eSchristos   int xchal_unaligned_store_hw;
122*cb63e24eSchristos };
123*cb63e24eSchristos 
124*cb63e24eSchristos extern const void *xtensa_load_config (const char *name,
125*cb63e24eSchristos 				       const void *no_plugin_def,
126*cb63e24eSchristos 				       const void *no_name_def);
127*cb63e24eSchristos extern const struct xtensa_config_v1 *xtensa_get_config_v1 (void);
128*cb63e24eSchristos extern const struct xtensa_config_v2 *xtensa_get_config_v2 (void);
129*cb63e24eSchristos extern const struct xtensa_config_v3 *xtensa_get_config_v3 (void);
130*cb63e24eSchristos extern const struct xtensa_config_v4 *xtensa_get_config_v4 (void);
131*cb63e24eSchristos 
132*cb63e24eSchristos #ifdef XTENSA_CONFIG_DEFINITION
133*cb63e24eSchristos 
134*cb63e24eSchristos #ifndef XCHAL_HAVE_MUL32_HIGH
135*cb63e24eSchristos #define XCHAL_HAVE_MUL32_HIGH 0
136*cb63e24eSchristos #endif
137*cb63e24eSchristos 
138*cb63e24eSchristos #ifndef XCHAL_HAVE_RELEASE_SYNC
139*cb63e24eSchristos #define XCHAL_HAVE_RELEASE_SYNC 0
140*cb63e24eSchristos #endif
141*cb63e24eSchristos 
142*cb63e24eSchristos #ifndef XCHAL_HAVE_S32C1I
143*cb63e24eSchristos #define XCHAL_HAVE_S32C1I 0
144*cb63e24eSchristos #endif
145*cb63e24eSchristos 
146*cb63e24eSchristos #ifndef XCHAL_HAVE_THREADPTR
147*cb63e24eSchristos #define XCHAL_HAVE_THREADPTR 0
148*cb63e24eSchristos #endif
149*cb63e24eSchristos 
150*cb63e24eSchristos #ifndef XCHAL_HAVE_FP_POSTINC
151*cb63e24eSchristos #define XCHAL_HAVE_FP_POSTINC 0
152*cb63e24eSchristos #endif
153*cb63e24eSchristos 
154*cb63e24eSchristos #ifndef XCHAL_HAVE_DFP
155*cb63e24eSchristos #define XCHAL_HAVE_DFP 0
156*cb63e24eSchristos #endif
157*cb63e24eSchristos 
158*cb63e24eSchristos #ifndef XCHAL_HAVE_DFP_DIV
159*cb63e24eSchristos #define XCHAL_HAVE_DFP_DIV 0
160*cb63e24eSchristos #endif
161*cb63e24eSchristos 
162*cb63e24eSchristos #ifndef XCHAL_HAVE_DFP_RECIP
163*cb63e24eSchristos #define XCHAL_HAVE_DFP_RECIP 0
164*cb63e24eSchristos #endif
165*cb63e24eSchristos 
166*cb63e24eSchristos #ifndef XCHAL_HAVE_DFP_SQRT
167*cb63e24eSchristos #define XCHAL_HAVE_DFP_SQRT 0
168*cb63e24eSchristos #endif
169*cb63e24eSchristos 
170*cb63e24eSchristos #ifndef XCHAL_HAVE_DFP_RSQRT
171*cb63e24eSchristos #define XCHAL_HAVE_DFP_RSQRT 0
172*cb63e24eSchristos #endif
173*cb63e24eSchristos 
174*cb63e24eSchristos #ifndef XSHAL_HAVE_TEXT_SECTION_LITERALS
175*cb63e24eSchristos #define XSHAL_HAVE_TEXT_SECTION_LITERALS 0
176*cb63e24eSchristos #endif
177*cb63e24eSchristos 
178*cb63e24eSchristos #ifndef XCHAL_MMU_MIN_PTE_PAGE_SIZE
179*cb63e24eSchristos #define XCHAL_MMU_MIN_PTE_PAGE_SIZE 1
180*cb63e24eSchristos #endif
181*cb63e24eSchristos 
182*cb63e24eSchristos #ifndef XTHAL_ABI_WINDOWED
183*cb63e24eSchristos #define XTHAL_ABI_WINDOWED 0
184*cb63e24eSchristos #endif
185*cb63e24eSchristos 
186*cb63e24eSchristos #ifndef XTHAL_ABI_CALL0
187*cb63e24eSchristos #define XTHAL_ABI_CALL0 1
188*cb63e24eSchristos #endif
189*cb63e24eSchristos 
190*cb63e24eSchristos #ifndef XCHAL_M_STAGE
191*cb63e24eSchristos #define XCHAL_M_STAGE 0
192*cb63e24eSchristos #endif
193*cb63e24eSchristos 
194*cb63e24eSchristos #ifndef XTENSA_MARCH_LATEST
195*cb63e24eSchristos #define XTENSA_MARCH_LATEST 0
196*cb63e24eSchristos #endif
197*cb63e24eSchristos 
198*cb63e24eSchristos #ifndef XTENSA_MARCH_EARLIEST
199*cb63e24eSchristos #define XTENSA_MARCH_EARLIEST 0
200*cb63e24eSchristos #endif
201*cb63e24eSchristos 
202*cb63e24eSchristos #ifndef XCHAL_HAVE_CLAMPS
203*cb63e24eSchristos #define XCHAL_HAVE_CLAMPS 0
204*cb63e24eSchristos #endif
205*cb63e24eSchristos 
206*cb63e24eSchristos #ifndef XCHAL_HAVE_DEPBITS
207*cb63e24eSchristos #define XCHAL_HAVE_DEPBITS 0
208*cb63e24eSchristos #endif
209*cb63e24eSchristos 
210*cb63e24eSchristos #ifndef XCHAL_HAVE_EXCLUSIVE
211*cb63e24eSchristos #define XCHAL_HAVE_EXCLUSIVE 0
212*cb63e24eSchristos #endif
213*cb63e24eSchristos 
214*cb63e24eSchristos #ifndef XCHAL_HAVE_XEA3
215*cb63e24eSchristos #define XCHAL_HAVE_XEA3 0
216*cb63e24eSchristos #endif
217*cb63e24eSchristos 
218*cb63e24eSchristos #ifndef XCHAL_DATA_WIDTH
219*cb63e24eSchristos #define XCHAL_DATA_WIDTH 16
220*cb63e24eSchristos #endif
221*cb63e24eSchristos 
222*cb63e24eSchristos #ifndef XCHAL_UNALIGNED_LOAD_EXCEPTION
223*cb63e24eSchristos #define XCHAL_UNALIGNED_LOAD_EXCEPTION 1
224*cb63e24eSchristos #endif
225*cb63e24eSchristos 
226*cb63e24eSchristos #ifndef XCHAL_UNALIGNED_STORE_EXCEPTION
227*cb63e24eSchristos #define XCHAL_UNALIGNED_STORE_EXCEPTION 1
228*cb63e24eSchristos #endif
229*cb63e24eSchristos 
230*cb63e24eSchristos #ifndef XCHAL_UNALIGNED_LOAD_HW
231*cb63e24eSchristos #define XCHAL_UNALIGNED_LOAD_HW 0
232*cb63e24eSchristos #endif
233*cb63e24eSchristos 
234*cb63e24eSchristos #ifndef XCHAL_UNALIGNED_STORE_HW
235*cb63e24eSchristos #define XCHAL_UNALIGNED_STORE_HW 0
236*cb63e24eSchristos #endif
237*cb63e24eSchristos 
238*cb63e24eSchristos #define XTENSA_CONFIG_ENTRY(a) a
239*cb63e24eSchristos 
240*cb63e24eSchristos #define XTENSA_CONFIG_V1_ENTRY_LIST \
241*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_BE), \
242*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DENSITY), \
243*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_CONST16), \
244*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_ABS), \
245*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_ADDX), \
246*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_L32R), \
247*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XSHAL_USE_ABSOLUTE_LITERALS), \
248*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XSHAL_HAVE_TEXT_SECTION_LITERALS), \
249*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_MAC16), \
250*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_MUL16), \
251*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_MUL32), \
252*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_MUL32_HIGH), \
253*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DIV32), \
254*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_NSA), \
255*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_MINMAX), \
256*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_SEXT), \
257*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_LOOPS), \
258*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_THREADPTR), \
259*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_RELEASE_SYNC), \
260*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_S32C1I), \
261*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_BOOLEANS), \
262*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_FP), \
263*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_FP_DIV), \
264*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_FP_RECIP), \
265*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_FP_SQRT), \
266*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_FP_RSQRT), \
267*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_FP_POSTINC), \
268*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DFP), \
269*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DFP_DIV), \
270*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DFP_RECIP), \
271*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DFP_SQRT), \
272*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DFP_RSQRT), \
273*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_WINDOWED), \
274*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_NUM_AREGS), \
275*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_WIDE_BRANCHES), \
276*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_PREDICTED_BRANCHES), \
277*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_ICACHE_SIZE), \
278*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_DCACHE_SIZE), \
279*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_ICACHE_LINESIZE), \
280*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_DCACHE_LINESIZE), \
281*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_ICACHE_LINEWIDTH), \
282*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_DCACHE_LINEWIDTH), \
283*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_DCACHE_IS_WRITEBACK), \
284*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_MMU), \
285*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_MMU_MIN_PTE_PAGE_SIZE), \
286*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DEBUG), \
287*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_NUM_IBREAK), \
288*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_NUM_DBREAK), \
289*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_DEBUGLEVEL), \
290*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_MAX_INSTRUCTION_SIZE), \
291*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_INST_FETCH_WIDTH), \
292*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XSHAL_ABI), \
293*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XTHAL_ABI_WINDOWED), \
294*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XTHAL_ABI_CALL0)
295*cb63e24eSchristos 
296*cb63e24eSchristos #define XTENSA_CONFIG_V2_ENTRY_LIST \
297*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_M_STAGE), \
298*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XTENSA_MARCH_LATEST), \
299*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XTENSA_MARCH_EARLIEST)
300*cb63e24eSchristos 
301*cb63e24eSchristos #define XTENSA_CONFIG_V3_ENTRY_LIST \
302*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_CLAMPS), \
303*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DEPBITS), \
304*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_EXCLUSIVE), \
305*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_HAVE_XEA3)
306*cb63e24eSchristos 
307*cb63e24eSchristos #define XTENSA_CONFIG_V4_ENTRY_LIST \
308*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_DATA_WIDTH), \
309*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_UNALIGNED_LOAD_EXCEPTION), \
310*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_UNALIGNED_STORE_EXCEPTION), \
311*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_UNALIGNED_LOAD_HW), \
312*cb63e24eSchristos     XTENSA_CONFIG_ENTRY(XCHAL_UNALIGNED_STORE_HW)
313*cb63e24eSchristos 
314*cb63e24eSchristos #define XTENSA_CONFIG_INSTANCE_LIST \
315*cb63e24eSchristos const struct xtensa_config_v1 xtensa_config_v1 = { \
316*cb63e24eSchristos     XTENSA_CONFIG_V1_ENTRY_LIST, \
317*cb63e24eSchristos }; \
318*cb63e24eSchristos const struct xtensa_config_v2 xtensa_config_v2 = { \
319*cb63e24eSchristos     XTENSA_CONFIG_V2_ENTRY_LIST, \
320*cb63e24eSchristos }; \
321*cb63e24eSchristos const struct xtensa_config_v3 xtensa_config_v3 = { \
322*cb63e24eSchristos     XTENSA_CONFIG_V3_ENTRY_LIST, \
323*cb63e24eSchristos }; \
324*cb63e24eSchristos const struct xtensa_config_v4 xtensa_config_v4 = { \
325*cb63e24eSchristos     XTENSA_CONFIG_V4_ENTRY_LIST, \
326*cb63e24eSchristos }
327*cb63e24eSchristos 
328*cb63e24eSchristos #define XTENSA_CONFIG_ENTRY_LIST \
329*cb63e24eSchristos     XTENSA_CONFIG_V1_ENTRY_LIST, \
330*cb63e24eSchristos     XTENSA_CONFIG_V2_ENTRY_LIST, \
331*cb63e24eSchristos     XTENSA_CONFIG_V3_ENTRY_LIST, \
332*cb63e24eSchristos     XTENSA_CONFIG_V4_ENTRY_LIST
333*cb63e24eSchristos 
334*cb63e24eSchristos #else /* XTENSA_CONFIG_DEFINITION */
335*cb63e24eSchristos 
336*cb63e24eSchristos #undef XCHAL_HAVE_BE
337*cb63e24eSchristos #define XCHAL_HAVE_BE			(xtensa_get_config_v1 ()->xchal_have_be)
338*cb63e24eSchristos 
339*cb63e24eSchristos #undef XCHAL_HAVE_DENSITY
340*cb63e24eSchristos #define XCHAL_HAVE_DENSITY		(xtensa_get_config_v1 ()->xchal_have_density)
341*cb63e24eSchristos 
342*cb63e24eSchristos #undef XCHAL_HAVE_CONST16
343*cb63e24eSchristos #define XCHAL_HAVE_CONST16		(xtensa_get_config_v1 ()->xchal_have_const16)
344*cb63e24eSchristos 
345*cb63e24eSchristos #undef XCHAL_HAVE_ABS
346*cb63e24eSchristos #define XCHAL_HAVE_ABS			(xtensa_get_config_v1 ()->xchal_have_abs)
347*cb63e24eSchristos 
348*cb63e24eSchristos #undef XCHAL_HAVE_ADDX
349*cb63e24eSchristos #define XCHAL_HAVE_ADDX			(xtensa_get_config_v1 ()->xchal_have_addx)
350*cb63e24eSchristos 
351*cb63e24eSchristos #undef XCHAL_HAVE_L32R
352*cb63e24eSchristos #define XCHAL_HAVE_L32R			(xtensa_get_config_v1 ()->xchal_have_l32r)
353*cb63e24eSchristos 
354*cb63e24eSchristos #undef XSHAL_USE_ABSOLUTE_LITERALS
355*cb63e24eSchristos #define XSHAL_USE_ABSOLUTE_LITERALS	(xtensa_get_config_v1 ()->xshal_use_absolute_literals)
356*cb63e24eSchristos 
357*cb63e24eSchristos #undef XSHAL_HAVE_TEXT_SECTION_LITERALS
358*cb63e24eSchristos #define XSHAL_HAVE_TEXT_SECTION_LITERALS (xtensa_get_config_v1 ()->xshal_have_text_section_literals)
359*cb63e24eSchristos 
360*cb63e24eSchristos #undef XCHAL_HAVE_MAC16
361*cb63e24eSchristos #define XCHAL_HAVE_MAC16		(xtensa_get_config_v1 ()->xchal_have_mac16)
362*cb63e24eSchristos 
363*cb63e24eSchristos #undef XCHAL_HAVE_MUL16
364*cb63e24eSchristos #define XCHAL_HAVE_MUL16		(xtensa_get_config_v1 ()->xchal_have_mul16)
365*cb63e24eSchristos 
366*cb63e24eSchristos #undef XCHAL_HAVE_MUL32
367*cb63e24eSchristos #define XCHAL_HAVE_MUL32		(xtensa_get_config_v1 ()->xchal_have_mul32)
368*cb63e24eSchristos 
369*cb63e24eSchristos #undef XCHAL_HAVE_MUL32_HIGH
370*cb63e24eSchristos #define XCHAL_HAVE_MUL32_HIGH		(xtensa_get_config_v1 ()->xchal_have_mul32_high)
371*cb63e24eSchristos 
372*cb63e24eSchristos #undef XCHAL_HAVE_DIV32
373*cb63e24eSchristos #define XCHAL_HAVE_DIV32		(xtensa_get_config_v1 ()->xchal_have_div32)
374*cb63e24eSchristos 
375*cb63e24eSchristos #undef XCHAL_HAVE_NSA
376*cb63e24eSchristos #define XCHAL_HAVE_NSA			(xtensa_get_config_v1 ()->xchal_have_nsa)
377*cb63e24eSchristos 
378*cb63e24eSchristos #undef XCHAL_HAVE_MINMAX
379*cb63e24eSchristos #define XCHAL_HAVE_MINMAX		(xtensa_get_config_v1 ()->xchal_have_minmax)
380*cb63e24eSchristos 
381*cb63e24eSchristos #undef XCHAL_HAVE_SEXT
382*cb63e24eSchristos #define XCHAL_HAVE_SEXT			(xtensa_get_config_v1 ()->xchal_have_sext)
383*cb63e24eSchristos 
384*cb63e24eSchristos #undef XCHAL_HAVE_LOOPS
385*cb63e24eSchristos #define XCHAL_HAVE_LOOPS		(xtensa_get_config_v1 ()->xchal_have_loops)
386*cb63e24eSchristos 
387*cb63e24eSchristos #undef XCHAL_HAVE_THREADPTR
388*cb63e24eSchristos #define XCHAL_HAVE_THREADPTR		(xtensa_get_config_v1 ()->xchal_have_threadptr)
389*cb63e24eSchristos 
390*cb63e24eSchristos #undef XCHAL_HAVE_RELEASE_SYNC
391*cb63e24eSchristos #define XCHAL_HAVE_RELEASE_SYNC		(xtensa_get_config_v1 ()->xchal_have_release_sync)
392*cb63e24eSchristos 
393*cb63e24eSchristos #undef XCHAL_HAVE_S32C1I
394*cb63e24eSchristos #define XCHAL_HAVE_S32C1I		(xtensa_get_config_v1 ()->xchal_have_s32c1i)
395*cb63e24eSchristos 
396*cb63e24eSchristos #undef XCHAL_HAVE_BOOLEANS
397*cb63e24eSchristos #define XCHAL_HAVE_BOOLEANS		(xtensa_get_config_v1 ()->xchal_have_booleans)
398*cb63e24eSchristos 
399*cb63e24eSchristos #undef XCHAL_HAVE_FP
400*cb63e24eSchristos #define XCHAL_HAVE_FP			(xtensa_get_config_v1 ()->xchal_have_fp)
401*cb63e24eSchristos 
402*cb63e24eSchristos #undef XCHAL_HAVE_FP_DIV
403*cb63e24eSchristos #define XCHAL_HAVE_FP_DIV		(xtensa_get_config_v1 ()->xchal_have_fp_div)
404*cb63e24eSchristos 
405*cb63e24eSchristos #undef XCHAL_HAVE_FP_RECIP
406*cb63e24eSchristos #define XCHAL_HAVE_FP_RECIP		(xtensa_get_config_v1 ()->xchal_have_fp_recip)
407*cb63e24eSchristos 
408*cb63e24eSchristos #undef XCHAL_HAVE_FP_SQRT
409*cb63e24eSchristos #define XCHAL_HAVE_FP_SQRT		(xtensa_get_config_v1 ()->xchal_have_fp_sqrt)
410*cb63e24eSchristos 
411*cb63e24eSchristos #undef XCHAL_HAVE_FP_RSQRT
412*cb63e24eSchristos #define XCHAL_HAVE_FP_RSQRT		(xtensa_get_config_v1 ()->xchal_have_fp_rsqrt)
413*cb63e24eSchristos 
414*cb63e24eSchristos #undef XCHAL_HAVE_FP_POSTINC
415*cb63e24eSchristos #define XCHAL_HAVE_FP_POSTINC		(xtensa_get_config_v1 ()->xchal_have_fp_postinc)
416*cb63e24eSchristos 
417*cb63e24eSchristos #undef XCHAL_HAVE_DFP
418*cb63e24eSchristos #define XCHAL_HAVE_DFP			(xtensa_get_config_v1 ()->xchal_have_dfp)
419*cb63e24eSchristos 
420*cb63e24eSchristos #undef XCHAL_HAVE_DFP_DIV
421*cb63e24eSchristos #define XCHAL_HAVE_DFP_DIV		(xtensa_get_config_v1 ()->xchal_have_dfp_div)
422*cb63e24eSchristos 
423*cb63e24eSchristos #undef XCHAL_HAVE_DFP_RECIP
424*cb63e24eSchristos #define XCHAL_HAVE_DFP_RECIP		(xtensa_get_config_v1 ()->xchal_have_dfp_recip)
425*cb63e24eSchristos 
426*cb63e24eSchristos #undef XCHAL_HAVE_DFP_SQRT
427*cb63e24eSchristos #define XCHAL_HAVE_DFP_SQRT		(xtensa_get_config_v1 ()->xchal_have_dfp_sqrt)
428*cb63e24eSchristos 
429*cb63e24eSchristos #undef XCHAL_HAVE_DFP_RSQRT
430*cb63e24eSchristos #define XCHAL_HAVE_DFP_RSQRT		(xtensa_get_config_v1 ()->xchal_have_dfp_rsqrt)
431*cb63e24eSchristos 
432*cb63e24eSchristos #undef XCHAL_HAVE_WINDOWED
433*cb63e24eSchristos #define XCHAL_HAVE_WINDOWED		(xtensa_get_config_v1 ()->xchal_have_windowed)
434*cb63e24eSchristos 
435*cb63e24eSchristos #undef XCHAL_NUM_AREGS
436*cb63e24eSchristos #define XCHAL_NUM_AREGS			(xtensa_get_config_v1 ()->xchal_num_aregs)
437*cb63e24eSchristos 
438*cb63e24eSchristos #undef XCHAL_HAVE_WIDE_BRANCHES
439*cb63e24eSchristos #define XCHAL_HAVE_WIDE_BRANCHES	(xtensa_get_config_v1 ()->xchal_have_wide_branches)
440*cb63e24eSchristos 
441*cb63e24eSchristos #undef XCHAL_HAVE_PREDICTED_BRANCHES
442*cb63e24eSchristos #define XCHAL_HAVE_PREDICTED_BRANCHES	(xtensa_get_config_v1 ()->xchal_have_predicted_branches)
443*cb63e24eSchristos 
444*cb63e24eSchristos 
445*cb63e24eSchristos #undef XCHAL_ICACHE_SIZE
446*cb63e24eSchristos #define XCHAL_ICACHE_SIZE		(xtensa_get_config_v1 ()->xchal_icache_size)
447*cb63e24eSchristos 
448*cb63e24eSchristos #undef XCHAL_DCACHE_SIZE
449*cb63e24eSchristos #define XCHAL_DCACHE_SIZE		(xtensa_get_config_v1 ()->xchal_dcache_size)
450*cb63e24eSchristos 
451*cb63e24eSchristos #undef XCHAL_ICACHE_LINESIZE
452*cb63e24eSchristos #define XCHAL_ICACHE_LINESIZE		(xtensa_get_config_v1 ()->xchal_icache_linesize)
453*cb63e24eSchristos 
454*cb63e24eSchristos #undef XCHAL_DCACHE_LINESIZE
455*cb63e24eSchristos #define XCHAL_DCACHE_LINESIZE		(xtensa_get_config_v1 ()->xchal_dcache_linesize)
456*cb63e24eSchristos 
457*cb63e24eSchristos #undef XCHAL_ICACHE_LINEWIDTH
458*cb63e24eSchristos #define XCHAL_ICACHE_LINEWIDTH		(xtensa_get_config_v1 ()->xchal_icache_linewidth)
459*cb63e24eSchristos 
460*cb63e24eSchristos #undef XCHAL_DCACHE_LINEWIDTH
461*cb63e24eSchristos #define XCHAL_DCACHE_LINEWIDTH		(xtensa_get_config_v1 ()->xchal_dcache_linewidth)
462*cb63e24eSchristos 
463*cb63e24eSchristos #undef XCHAL_DCACHE_IS_WRITEBACK
464*cb63e24eSchristos #define XCHAL_DCACHE_IS_WRITEBACK	(xtensa_get_config_v1 ()->xchal_dcache_is_writeback)
465*cb63e24eSchristos 
466*cb63e24eSchristos 
467*cb63e24eSchristos #undef XCHAL_HAVE_MMU
468*cb63e24eSchristos #define XCHAL_HAVE_MMU			(xtensa_get_config_v1 ()->xchal_have_mmu)
469*cb63e24eSchristos 
470*cb63e24eSchristos #undef XCHAL_MMU_MIN_PTE_PAGE_SIZE
471*cb63e24eSchristos #define XCHAL_MMU_MIN_PTE_PAGE_SIZE	(xtensa_get_config_v1 ()->xchal_mmu_min_pte_page_size)
472*cb63e24eSchristos 
473*cb63e24eSchristos 
474*cb63e24eSchristos #undef XCHAL_HAVE_DEBUG
475*cb63e24eSchristos #define XCHAL_HAVE_DEBUG		(xtensa_get_config_v1 ()->xchal_have_debug)
476*cb63e24eSchristos 
477*cb63e24eSchristos #undef XCHAL_NUM_IBREAK
478*cb63e24eSchristos #define XCHAL_NUM_IBREAK		(xtensa_get_config_v1 ()->xchal_num_ibreak)
479*cb63e24eSchristos 
480*cb63e24eSchristos #undef XCHAL_NUM_DBREAK
481*cb63e24eSchristos #define XCHAL_NUM_DBREAK		(xtensa_get_config_v1 ()->xchal_num_dbreak)
482*cb63e24eSchristos 
483*cb63e24eSchristos #undef XCHAL_DEBUGLEVEL
484*cb63e24eSchristos #define XCHAL_DEBUGLEVEL		(xtensa_get_config_v1 ()->xchal_debuglevel)
485*cb63e24eSchristos 
486*cb63e24eSchristos 
487*cb63e24eSchristos #undef XCHAL_MAX_INSTRUCTION_SIZE
488*cb63e24eSchristos #define XCHAL_MAX_INSTRUCTION_SIZE	(xtensa_get_config_v1 ()->xchal_max_instruction_size)
489*cb63e24eSchristos 
490*cb63e24eSchristos #undef XCHAL_INST_FETCH_WIDTH
491*cb63e24eSchristos #define XCHAL_INST_FETCH_WIDTH		(xtensa_get_config_v1 ()->xchal_inst_fetch_width)
492*cb63e24eSchristos 
493*cb63e24eSchristos 
494*cb63e24eSchristos #undef XSHAL_ABI
495*cb63e24eSchristos #undef XTHAL_ABI_WINDOWED
496*cb63e24eSchristos #undef XTHAL_ABI_CALL0
497*cb63e24eSchristos #define XSHAL_ABI			(xtensa_get_config_v1 ()->xshal_abi)
498*cb63e24eSchristos #define XTHAL_ABI_WINDOWED		(xtensa_get_config_v1 ()->xthal_abi_windowed)
499*cb63e24eSchristos #define XTHAL_ABI_CALL0			(xtensa_get_config_v1 ()->xthal_abi_call0)
500*cb63e24eSchristos 
501*cb63e24eSchristos 
502*cb63e24eSchristos #undef XCHAL_M_STAGE
503*cb63e24eSchristos #define XCHAL_M_STAGE			(xtensa_get_config_v2 ()->xchal_m_stage)
504*cb63e24eSchristos 
505*cb63e24eSchristos #undef XTENSA_MARCH_LATEST
506*cb63e24eSchristos #define XTENSA_MARCH_LATEST		(xtensa_get_config_v2 ()->xtensa_march_latest)
507*cb63e24eSchristos 
508*cb63e24eSchristos #undef XTENSA_MARCH_EARLIEST
509*cb63e24eSchristos #define XTENSA_MARCH_EARLIEST		(xtensa_get_config_v2 ()->xtensa_march_earliest)
510*cb63e24eSchristos 
511*cb63e24eSchristos 
512*cb63e24eSchristos #undef XCHAL_HAVE_CLAMPS
513*cb63e24eSchristos #define XCHAL_HAVE_CLAMPS		(xtensa_get_config_v3 ()->xchal_have_clamps)
514*cb63e24eSchristos 
515*cb63e24eSchristos #undef XCHAL_HAVE_DEPBITS
516*cb63e24eSchristos #define XCHAL_HAVE_DEPBITS		(xtensa_get_config_v3 ()->xchal_have_depbits)
517*cb63e24eSchristos 
518*cb63e24eSchristos #undef XCHAL_HAVE_EXCLUSIVE
519*cb63e24eSchristos #define XCHAL_HAVE_EXCLUSIVE		(xtensa_get_config_v3 ()->xchal_have_exclusive)
520*cb63e24eSchristos 
521*cb63e24eSchristos #undef XCHAL_HAVE_XEA3
522*cb63e24eSchristos #define XCHAL_HAVE_XEA3			(xtensa_get_config_v3 ()->xchal_have_xea3)
523*cb63e24eSchristos 
524*cb63e24eSchristos 
525*cb63e24eSchristos #undef XCHAL_DATA_WIDTH
526*cb63e24eSchristos #define XCHAL_DATA_WIDTH		(xtensa_get_config_v4 ()->xchal_data_width)
527*cb63e24eSchristos 
528*cb63e24eSchristos #undef XCHAL_UNALIGNED_LOAD_EXCEPTION
529*cb63e24eSchristos #define XCHAL_UNALIGNED_LOAD_EXCEPTION	(xtensa_get_config_v4 ()->xchal_unaligned_load_exception)
530*cb63e24eSchristos 
531*cb63e24eSchristos #undef XCHAL_UNALIGNED_STORE_EXCEPTION
532*cb63e24eSchristos #define XCHAL_UNALIGNED_STORE_EXCEPTION	(xtensa_get_config_v4 ()->xchal_unaligned_store_exception)
533*cb63e24eSchristos 
534*cb63e24eSchristos #undef XCHAL_UNALIGNED_LOAD_HW
535*cb63e24eSchristos #define XCHAL_UNALIGNED_LOAD_HW		(xtensa_get_config_v4 ()->xchal_unaligned_load_hw)
536*cb63e24eSchristos 
537*cb63e24eSchristos #undef XCHAL_UNALIGNED_STORE_HW
538*cb63e24eSchristos #define XCHAL_UNALIGNED_STORE_HW	(xtensa_get_config_v4 ()->xchal_unaligned_store_hw)
539*cb63e24eSchristos 
540*cb63e24eSchristos #endif /* XTENSA_CONFIG_DEFINITION */
541*cb63e24eSchristos 
542*cb63e24eSchristos #ifdef __cplusplus
543*cb63e24eSchristos }
544*cb63e24eSchristos #endif
545*cb63e24eSchristos #endif /* !XTENSA_DYNCONFIG_H */
546