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