/* Xtensa configuration settings.
  Copyright (C) 2022-2025 Free Software Foundation, Inc.

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.

  This program is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */

#ifndef XTENSA_DYNCONFIG_H
#define XTENSA_DYNCONFIG_H

#ifdef __cplusplus
extern "C" {
#endif

/*
* Config versioning.
*
* When new config entries need to be passed through dynconfig
* create new xtensa_config_v<N> structure and put them there.
* Declare new function xtensa_get_config_v<N> (void).
* Define corresponding X*HAL_* macros by accessing xtensa_get_config_v<N> ().
* Define macro XTENSA_CONFIG_V<N>_ENTRY_LIST by listing
* XTENSA_CONFIG_ENTRY for every entry in the new structure.
* Add constant definition for the new xtensa_config_v<N> to the
* XTENSA_CONFIG_INSTANCE_LIST.
* Add XTENSA_CONFIG_V<N>_ENTRY_LIST to the XTENSA_CONFIG_ENTRY_LIST.
*
* On the user side (gcc/binutils/...) add definition for the function
* xtensa_get_config_v<N> (void).
*/

struct xtensa_config_v1
{
 int xchal_have_be;
 int xchal_have_density;
 int xchal_have_const16;
 int xchal_have_abs;
 int xchal_have_addx;
 int xchal_have_l32r;
 int xshal_use_absolute_literals;
 int xshal_have_text_section_literals;
 int xchal_have_mac16;
 int xchal_have_mul16;
 int xchal_have_mul32;
 int xchal_have_mul32_high;
 int xchal_have_div32;
 int xchal_have_nsa;
 int xchal_have_minmax;
 int xchal_have_sext;
 int xchal_have_loops;
 int xchal_have_threadptr;
 int xchal_have_release_sync;
 int xchal_have_s32c1i;
 int xchal_have_booleans;
 int xchal_have_fp;
 int xchal_have_fp_div;
 int xchal_have_fp_recip;
 int xchal_have_fp_sqrt;
 int xchal_have_fp_rsqrt;
 int xchal_have_fp_postinc;
 int xchal_have_dfp;
 int xchal_have_dfp_div;
 int xchal_have_dfp_recip;
 int xchal_have_dfp_sqrt;
 int xchal_have_dfp_rsqrt;
 int xchal_have_windowed;
 int xchal_num_aregs;
 int xchal_have_wide_branches;
 int xchal_have_predicted_branches;
 int xchal_icache_size;
 int xchal_dcache_size;
 int xchal_icache_linesize;
 int xchal_dcache_linesize;
 int xchal_icache_linewidth;
 int xchal_dcache_linewidth;
 int xchal_dcache_is_writeback;
 int xchal_have_mmu;
 int xchal_mmu_min_pte_page_size;
 int xchal_have_debug;
 int xchal_num_ibreak;
 int xchal_num_dbreak;
 int xchal_debuglevel;
 int xchal_max_instruction_size;
 int xchal_inst_fetch_width;
 int xshal_abi;
 int xthal_abi_windowed;
 int xthal_abi_call0;
};

struct xtensa_config_v2
{
 int xchal_m_stage;
 int xtensa_march_latest;
 int xtensa_march_earliest;
};

struct xtensa_config_v3
{
 int xchal_have_clamps;
 int xchal_have_depbits;
 int xchal_have_exclusive;
 int xchal_have_xea3;
};

struct xtensa_config_v4
{
 int xchal_data_width;
 int xchal_unaligned_load_exception;
 int xchal_unaligned_store_exception;
 int xchal_unaligned_load_hw;
 int xchal_unaligned_store_hw;
};

extern const void *xtensa_load_config (const char *name,
                                      const void *no_plugin_def,
                                      const void *no_name_def);
extern const struct xtensa_config_v1 *xtensa_get_config_v1 (void);
extern const struct xtensa_config_v2 *xtensa_get_config_v2 (void);
extern const struct xtensa_config_v3 *xtensa_get_config_v3 (void);
extern const struct xtensa_config_v4 *xtensa_get_config_v4 (void);

#ifdef XTENSA_CONFIG_DEFINITION

#ifndef XCHAL_HAVE_MUL32_HIGH
#define XCHAL_HAVE_MUL32_HIGH 0
#endif

#ifndef XCHAL_HAVE_RELEASE_SYNC
#define XCHAL_HAVE_RELEASE_SYNC 0
#endif

#ifndef XCHAL_HAVE_S32C1I
#define XCHAL_HAVE_S32C1I 0
#endif

#ifndef XCHAL_HAVE_THREADPTR
#define XCHAL_HAVE_THREADPTR 0
#endif

#ifndef XCHAL_HAVE_FP_POSTINC
#define XCHAL_HAVE_FP_POSTINC 0
#endif

#ifndef XCHAL_HAVE_DFP
#define XCHAL_HAVE_DFP 0
#endif

#ifndef XCHAL_HAVE_DFP_DIV
#define XCHAL_HAVE_DFP_DIV 0
#endif

#ifndef XCHAL_HAVE_DFP_RECIP
#define XCHAL_HAVE_DFP_RECIP 0
#endif

#ifndef XCHAL_HAVE_DFP_SQRT
#define XCHAL_HAVE_DFP_SQRT 0
#endif

#ifndef XCHAL_HAVE_DFP_RSQRT
#define XCHAL_HAVE_DFP_RSQRT 0
#endif

#ifndef XSHAL_HAVE_TEXT_SECTION_LITERALS
#define XSHAL_HAVE_TEXT_SECTION_LITERALS 0
#endif

#ifndef XCHAL_MMU_MIN_PTE_PAGE_SIZE
#define XCHAL_MMU_MIN_PTE_PAGE_SIZE 1
#endif

#ifndef XTHAL_ABI_WINDOWED
#define XTHAL_ABI_WINDOWED 0
#endif

#ifndef XTHAL_ABI_CALL0
#define XTHAL_ABI_CALL0 1
#endif

#ifndef XCHAL_M_STAGE
#define XCHAL_M_STAGE 0
#endif

#ifndef XTENSA_MARCH_LATEST
#define XTENSA_MARCH_LATEST 0
#endif

#ifndef XTENSA_MARCH_EARLIEST
#define XTENSA_MARCH_EARLIEST 0
#endif

#ifndef XCHAL_HAVE_CLAMPS
#define XCHAL_HAVE_CLAMPS 0
#endif

#ifndef XCHAL_HAVE_DEPBITS
#define XCHAL_HAVE_DEPBITS 0
#endif

#ifndef XCHAL_HAVE_EXCLUSIVE
#define XCHAL_HAVE_EXCLUSIVE 0
#endif

#ifndef XCHAL_HAVE_XEA3
#define XCHAL_HAVE_XEA3 0
#endif

#ifndef XCHAL_DATA_WIDTH
#define XCHAL_DATA_WIDTH 16
#endif

#ifndef XCHAL_UNALIGNED_LOAD_EXCEPTION
#define XCHAL_UNALIGNED_LOAD_EXCEPTION 1
#endif

#ifndef XCHAL_UNALIGNED_STORE_EXCEPTION
#define XCHAL_UNALIGNED_STORE_EXCEPTION 1
#endif

#ifndef XCHAL_UNALIGNED_LOAD_HW
#define XCHAL_UNALIGNED_LOAD_HW 0
#endif

#ifndef XCHAL_UNALIGNED_STORE_HW
#define XCHAL_UNALIGNED_STORE_HW 0
#endif

#define XTENSA_CONFIG_ENTRY(a) a

#define XTENSA_CONFIG_V1_ENTRY_LIST \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_BE), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DENSITY), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_CONST16), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_ABS), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_ADDX), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_L32R), \
   XTENSA_CONFIG_ENTRY(XSHAL_USE_ABSOLUTE_LITERALS), \
   XTENSA_CONFIG_ENTRY(XSHAL_HAVE_TEXT_SECTION_LITERALS), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_MAC16), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_MUL16), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_MUL32), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_MUL32_HIGH), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DIV32), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_NSA), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_MINMAX), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_SEXT), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_LOOPS), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_THREADPTR), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_RELEASE_SYNC), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_S32C1I), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_BOOLEANS), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_FP), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_FP_DIV), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_FP_RECIP), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_FP_SQRT), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_FP_RSQRT), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_FP_POSTINC), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DFP), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DFP_DIV), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DFP_RECIP), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DFP_SQRT), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DFP_RSQRT), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_WINDOWED), \
   XTENSA_CONFIG_ENTRY(XCHAL_NUM_AREGS), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_WIDE_BRANCHES), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_PREDICTED_BRANCHES), \
   XTENSA_CONFIG_ENTRY(XCHAL_ICACHE_SIZE), \
   XTENSA_CONFIG_ENTRY(XCHAL_DCACHE_SIZE), \
   XTENSA_CONFIG_ENTRY(XCHAL_ICACHE_LINESIZE), \
   XTENSA_CONFIG_ENTRY(XCHAL_DCACHE_LINESIZE), \
   XTENSA_CONFIG_ENTRY(XCHAL_ICACHE_LINEWIDTH), \
   XTENSA_CONFIG_ENTRY(XCHAL_DCACHE_LINEWIDTH), \
   XTENSA_CONFIG_ENTRY(XCHAL_DCACHE_IS_WRITEBACK), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_MMU), \
   XTENSA_CONFIG_ENTRY(XCHAL_MMU_MIN_PTE_PAGE_SIZE), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DEBUG), \
   XTENSA_CONFIG_ENTRY(XCHAL_NUM_IBREAK), \
   XTENSA_CONFIG_ENTRY(XCHAL_NUM_DBREAK), \
   XTENSA_CONFIG_ENTRY(XCHAL_DEBUGLEVEL), \
   XTENSA_CONFIG_ENTRY(XCHAL_MAX_INSTRUCTION_SIZE), \
   XTENSA_CONFIG_ENTRY(XCHAL_INST_FETCH_WIDTH), \
   XTENSA_CONFIG_ENTRY(XSHAL_ABI), \
   XTENSA_CONFIG_ENTRY(XTHAL_ABI_WINDOWED), \
   XTENSA_CONFIG_ENTRY(XTHAL_ABI_CALL0)

#define XTENSA_CONFIG_V2_ENTRY_LIST \
   XTENSA_CONFIG_ENTRY(XCHAL_M_STAGE), \
   XTENSA_CONFIG_ENTRY(XTENSA_MARCH_LATEST), \
   XTENSA_CONFIG_ENTRY(XTENSA_MARCH_EARLIEST)

#define XTENSA_CONFIG_V3_ENTRY_LIST \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_CLAMPS), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_DEPBITS), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_EXCLUSIVE), \
   XTENSA_CONFIG_ENTRY(XCHAL_HAVE_XEA3)

#define XTENSA_CONFIG_V4_ENTRY_LIST \
   XTENSA_CONFIG_ENTRY(XCHAL_DATA_WIDTH), \
   XTENSA_CONFIG_ENTRY(XCHAL_UNALIGNED_LOAD_EXCEPTION), \
   XTENSA_CONFIG_ENTRY(XCHAL_UNALIGNED_STORE_EXCEPTION), \
   XTENSA_CONFIG_ENTRY(XCHAL_UNALIGNED_LOAD_HW), \
   XTENSA_CONFIG_ENTRY(XCHAL_UNALIGNED_STORE_HW)

#define XTENSA_CONFIG_INSTANCE_LIST \
const struct xtensa_config_v1 xtensa_config_v1 = { \
   XTENSA_CONFIG_V1_ENTRY_LIST, \
}; \
const struct xtensa_config_v2 xtensa_config_v2 = { \
   XTENSA_CONFIG_V2_ENTRY_LIST, \
}; \
const struct xtensa_config_v3 xtensa_config_v3 = { \
   XTENSA_CONFIG_V3_ENTRY_LIST, \
}; \
const struct xtensa_config_v4 xtensa_config_v4 = { \
   XTENSA_CONFIG_V4_ENTRY_LIST, \
}

#define XTENSA_CONFIG_ENTRY_LIST \
   XTENSA_CONFIG_V1_ENTRY_LIST, \
   XTENSA_CONFIG_V2_ENTRY_LIST, \
   XTENSA_CONFIG_V3_ENTRY_LIST, \
   XTENSA_CONFIG_V4_ENTRY_LIST

#else /* XTENSA_CONFIG_DEFINITION */

#undef XCHAL_HAVE_BE
#define XCHAL_HAVE_BE                   (xtensa_get_config_v1 ()->xchal_have_be)

#undef XCHAL_HAVE_DENSITY
#define XCHAL_HAVE_DENSITY              (xtensa_get_config_v1 ()->xchal_have_density)

#undef XCHAL_HAVE_CONST16
#define XCHAL_HAVE_CONST16              (xtensa_get_config_v1 ()->xchal_have_const16)

#undef XCHAL_HAVE_ABS
#define XCHAL_HAVE_ABS                  (xtensa_get_config_v1 ()->xchal_have_abs)

#undef XCHAL_HAVE_ADDX
#define XCHAL_HAVE_ADDX                 (xtensa_get_config_v1 ()->xchal_have_addx)

#undef XCHAL_HAVE_L32R
#define XCHAL_HAVE_L32R                 (xtensa_get_config_v1 ()->xchal_have_l32r)

#undef XSHAL_USE_ABSOLUTE_LITERALS
#define XSHAL_USE_ABSOLUTE_LITERALS     (xtensa_get_config_v1 ()->xshal_use_absolute_literals)

#undef XSHAL_HAVE_TEXT_SECTION_LITERALS
#define XSHAL_HAVE_TEXT_SECTION_LITERALS (xtensa_get_config_v1 ()->xshal_have_text_section_literals)

#undef XCHAL_HAVE_MAC16
#define XCHAL_HAVE_MAC16                (xtensa_get_config_v1 ()->xchal_have_mac16)

#undef XCHAL_HAVE_MUL16
#define XCHAL_HAVE_MUL16                (xtensa_get_config_v1 ()->xchal_have_mul16)

#undef XCHAL_HAVE_MUL32
#define XCHAL_HAVE_MUL32                (xtensa_get_config_v1 ()->xchal_have_mul32)

#undef XCHAL_HAVE_MUL32_HIGH
#define XCHAL_HAVE_MUL32_HIGH           (xtensa_get_config_v1 ()->xchal_have_mul32_high)

#undef XCHAL_HAVE_DIV32
#define XCHAL_HAVE_DIV32                (xtensa_get_config_v1 ()->xchal_have_div32)

#undef XCHAL_HAVE_NSA
#define XCHAL_HAVE_NSA                  (xtensa_get_config_v1 ()->xchal_have_nsa)

#undef XCHAL_HAVE_MINMAX
#define XCHAL_HAVE_MINMAX               (xtensa_get_config_v1 ()->xchal_have_minmax)

#undef XCHAL_HAVE_SEXT
#define XCHAL_HAVE_SEXT                 (xtensa_get_config_v1 ()->xchal_have_sext)

#undef XCHAL_HAVE_LOOPS
#define XCHAL_HAVE_LOOPS                (xtensa_get_config_v1 ()->xchal_have_loops)

#undef XCHAL_HAVE_THREADPTR
#define XCHAL_HAVE_THREADPTR            (xtensa_get_config_v1 ()->xchal_have_threadptr)

#undef XCHAL_HAVE_RELEASE_SYNC
#define XCHAL_HAVE_RELEASE_SYNC         (xtensa_get_config_v1 ()->xchal_have_release_sync)

#undef XCHAL_HAVE_S32C1I
#define XCHAL_HAVE_S32C1I               (xtensa_get_config_v1 ()->xchal_have_s32c1i)

#undef XCHAL_HAVE_BOOLEANS
#define XCHAL_HAVE_BOOLEANS             (xtensa_get_config_v1 ()->xchal_have_booleans)

#undef XCHAL_HAVE_FP
#define XCHAL_HAVE_FP                   (xtensa_get_config_v1 ()->xchal_have_fp)

#undef XCHAL_HAVE_FP_DIV
#define XCHAL_HAVE_FP_DIV               (xtensa_get_config_v1 ()->xchal_have_fp_div)

#undef XCHAL_HAVE_FP_RECIP
#define XCHAL_HAVE_FP_RECIP             (xtensa_get_config_v1 ()->xchal_have_fp_recip)

#undef XCHAL_HAVE_FP_SQRT
#define XCHAL_HAVE_FP_SQRT              (xtensa_get_config_v1 ()->xchal_have_fp_sqrt)

#undef XCHAL_HAVE_FP_RSQRT
#define XCHAL_HAVE_FP_RSQRT             (xtensa_get_config_v1 ()->xchal_have_fp_rsqrt)

#undef XCHAL_HAVE_FP_POSTINC
#define XCHAL_HAVE_FP_POSTINC           (xtensa_get_config_v1 ()->xchal_have_fp_postinc)

#undef XCHAL_HAVE_DFP
#define XCHAL_HAVE_DFP                  (xtensa_get_config_v1 ()->xchal_have_dfp)

#undef XCHAL_HAVE_DFP_DIV
#define XCHAL_HAVE_DFP_DIV              (xtensa_get_config_v1 ()->xchal_have_dfp_div)

#undef XCHAL_HAVE_DFP_RECIP
#define XCHAL_HAVE_DFP_RECIP            (xtensa_get_config_v1 ()->xchal_have_dfp_recip)

#undef XCHAL_HAVE_DFP_SQRT
#define XCHAL_HAVE_DFP_SQRT             (xtensa_get_config_v1 ()->xchal_have_dfp_sqrt)

#undef XCHAL_HAVE_DFP_RSQRT
#define XCHAL_HAVE_DFP_RSQRT            (xtensa_get_config_v1 ()->xchal_have_dfp_rsqrt)

#undef XCHAL_HAVE_WINDOWED
#define XCHAL_HAVE_WINDOWED             (xtensa_get_config_v1 ()->xchal_have_windowed)

#undef XCHAL_NUM_AREGS
#define XCHAL_NUM_AREGS                 (xtensa_get_config_v1 ()->xchal_num_aregs)

#undef XCHAL_HAVE_WIDE_BRANCHES
#define XCHAL_HAVE_WIDE_BRANCHES        (xtensa_get_config_v1 ()->xchal_have_wide_branches)

#undef XCHAL_HAVE_PREDICTED_BRANCHES
#define XCHAL_HAVE_PREDICTED_BRANCHES   (xtensa_get_config_v1 ()->xchal_have_predicted_branches)


#undef XCHAL_ICACHE_SIZE
#define XCHAL_ICACHE_SIZE               (xtensa_get_config_v1 ()->xchal_icache_size)

#undef XCHAL_DCACHE_SIZE
#define XCHAL_DCACHE_SIZE               (xtensa_get_config_v1 ()->xchal_dcache_size)

#undef XCHAL_ICACHE_LINESIZE
#define XCHAL_ICACHE_LINESIZE           (xtensa_get_config_v1 ()->xchal_icache_linesize)

#undef XCHAL_DCACHE_LINESIZE
#define XCHAL_DCACHE_LINESIZE           (xtensa_get_config_v1 ()->xchal_dcache_linesize)

#undef XCHAL_ICACHE_LINEWIDTH
#define XCHAL_ICACHE_LINEWIDTH          (xtensa_get_config_v1 ()->xchal_icache_linewidth)

#undef XCHAL_DCACHE_LINEWIDTH
#define XCHAL_DCACHE_LINEWIDTH          (xtensa_get_config_v1 ()->xchal_dcache_linewidth)

#undef XCHAL_DCACHE_IS_WRITEBACK
#define XCHAL_DCACHE_IS_WRITEBACK       (xtensa_get_config_v1 ()->xchal_dcache_is_writeback)


#undef XCHAL_HAVE_MMU
#define XCHAL_HAVE_MMU                  (xtensa_get_config_v1 ()->xchal_have_mmu)

#undef XCHAL_MMU_MIN_PTE_PAGE_SIZE
#define XCHAL_MMU_MIN_PTE_PAGE_SIZE     (xtensa_get_config_v1 ()->xchal_mmu_min_pte_page_size)


#undef XCHAL_HAVE_DEBUG
#define XCHAL_HAVE_DEBUG                (xtensa_get_config_v1 ()->xchal_have_debug)

#undef XCHAL_NUM_IBREAK
#define XCHAL_NUM_IBREAK                (xtensa_get_config_v1 ()->xchal_num_ibreak)

#undef XCHAL_NUM_DBREAK
#define XCHAL_NUM_DBREAK                (xtensa_get_config_v1 ()->xchal_num_dbreak)

#undef XCHAL_DEBUGLEVEL
#define XCHAL_DEBUGLEVEL                (xtensa_get_config_v1 ()->xchal_debuglevel)


#undef XCHAL_MAX_INSTRUCTION_SIZE
#define XCHAL_MAX_INSTRUCTION_SIZE      (xtensa_get_config_v1 ()->xchal_max_instruction_size)

#undef XCHAL_INST_FETCH_WIDTH
#define XCHAL_INST_FETCH_WIDTH          (xtensa_get_config_v1 ()->xchal_inst_fetch_width)


#undef XSHAL_ABI
#undef XTHAL_ABI_WINDOWED
#undef XTHAL_ABI_CALL0
#define XSHAL_ABI                       (xtensa_get_config_v1 ()->xshal_abi)
#define XTHAL_ABI_WINDOWED              (xtensa_get_config_v1 ()->xthal_abi_windowed)
#define XTHAL_ABI_CALL0                 (xtensa_get_config_v1 ()->xthal_abi_call0)


#undef XCHAL_M_STAGE
#define XCHAL_M_STAGE                   (xtensa_get_config_v2 ()->xchal_m_stage)

#undef XTENSA_MARCH_LATEST
#define XTENSA_MARCH_LATEST             (xtensa_get_config_v2 ()->xtensa_march_latest)

#undef XTENSA_MARCH_EARLIEST
#define XTENSA_MARCH_EARLIEST           (xtensa_get_config_v2 ()->xtensa_march_earliest)


#undef XCHAL_HAVE_CLAMPS
#define XCHAL_HAVE_CLAMPS               (xtensa_get_config_v3 ()->xchal_have_clamps)

#undef XCHAL_HAVE_DEPBITS
#define XCHAL_HAVE_DEPBITS              (xtensa_get_config_v3 ()->xchal_have_depbits)

#undef XCHAL_HAVE_EXCLUSIVE
#define XCHAL_HAVE_EXCLUSIVE            (xtensa_get_config_v3 ()->xchal_have_exclusive)

#undef XCHAL_HAVE_XEA3
#define XCHAL_HAVE_XEA3                 (xtensa_get_config_v3 ()->xchal_have_xea3)


#undef XCHAL_DATA_WIDTH
#define XCHAL_DATA_WIDTH                (xtensa_get_config_v4 ()->xchal_data_width)

#undef XCHAL_UNALIGNED_LOAD_EXCEPTION
#define XCHAL_UNALIGNED_LOAD_EXCEPTION  (xtensa_get_config_v4 ()->xchal_unaligned_load_exception)

#undef XCHAL_UNALIGNED_STORE_EXCEPTION
#define XCHAL_UNALIGNED_STORE_EXCEPTION (xtensa_get_config_v4 ()->xchal_unaligned_store_exception)

#undef XCHAL_UNALIGNED_LOAD_HW
#define XCHAL_UNALIGNED_LOAD_HW         (xtensa_get_config_v4 ()->xchal_unaligned_load_hw)

#undef XCHAL_UNALIGNED_STORE_HW
#define XCHAL_UNALIGNED_STORE_HW        (xtensa_get_config_v4 ()->xchal_unaligned_store_hw)

#endif /* XTENSA_CONFIG_DEFINITION */

#ifdef __cplusplus
}
#endif
#endif /* !XTENSA_DYNCONFIG_H */