/* Copyright (C) 2016-2021 Free Software Foundation, Inc.

   This file is part of GCC.

   GCC 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 3, or (at your option)
   any later version.

   GCC 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 GCC; see the file COPYING3.  If not see
   <http://www.gnu.org/licenses/>.
*/

ARC_C_DEF ("__ARC600__",	TARGET_ARC600)
ARC_C_DEF ("__ARC601__",	TARGET_ARC601)
ARC_C_DEF ("__ARC700__",	TARGET_ARC700)
ARC_C_DEF ("__NPS400__",	TARGET_NPS400)
ARC_C_DEF ("__ARCEM__",		TARGET_EM)
ARC_C_DEF ("__ARCHS__",		TARGET_HS)
ARC_C_DEF ("__ARC_ATOMIC__",	TARGET_ATOMIC)
ARC_C_DEF ("__ARC_NORM__",	TARGET_NORM)
ARC_C_DEF ("__ARC_MUL64__",	TARGET_MUL64_SET)
ARC_C_DEF ("__ARC_MUL32BY16__", TARGET_MULMAC_32BY16_SET)
ARC_C_DEF ("__ARC_SIMD__",	TARGET_SIMD_SET)
ARC_C_DEF ("__ARC_RF16__",	TARGET_RF16)
ARC_C_DEF ("__ARC_UNALIGNED__", unaligned_access)

ARC_C_DEF ("__ARC_BARREL_SHIFTER__", TARGET_BARREL_SHIFTER)

ARC_C_DEF ("__ARC_LL64__",   TARGET_LL64)
ARC_C_DEF ("__ARC_MPY__",    TARGET_MPY)
ARC_C_DEF ("__ARC_SWAP__",   TARGET_SWAP)
ARC_C_DEF ("__ARC_EA__",     TARGET_EA_SET)
ARC_C_DEF ("__ARC_FPX_SP__", (TARGET_SPFP_FAST_SET || TARGET_SPFP_COMPACT_SET))
ARC_C_DEF ("__ARC_FPX_DP__", (TARGET_DPFP_FAST_SET || TARGET_DPFP_COMPACT_SET))
ARC_C_DEF ("__ARC_MULT32__", TARGET_MUL64_SET)
ARC_C_DEF ("__ARC_DIVREM__", TARGET_DIVREM)

ARC_C_DEF ("__ARC_CODE_DENSITY__", TARGET_CODE_DENSITY)

ARC_C_DEF ("__ARC_MPY_WLHX__",   (arc_mpy_option >= 2))
ARC_C_DEF ("__ARC_MPY_WLH1__",   (arc_mpy_option == 2))
ARC_C_DEF ("__ARC_MPY_WLH2__",   (arc_mpy_option == 3))
ARC_C_DEF ("__ARC_MPY_WLH3__",   (arc_mpy_option == 4))
ARC_C_DEF ("__ARC_MPY_WLH4__",   (arc_mpy_option == 5))
ARC_C_DEF ("__ARC_MPY_WLH5__",   (arc_mpy_option == 6))
ARC_C_DEF ("__ARC_MPY_DMPY__",   (arc_mpy_option == 7))
ARC_C_DEF ("__ARC_MPY_MACD__",   (arc_mpy_option == 8))
ARC_C_DEF ("__ARC_MPY_QMACW__",  (arc_mpy_option == 9))

ARC_C_DEF ("__ARC_FPU_SP__",     TARGET_FP_SP_BASE)
ARC_C_DEF ("__ARC_FPU_DP__",     TARGET_FP_DP_BASE)
ARC_C_DEF ("__ARC_FPU_SP_DIV__", TARGET_FP_SP_SQRT)
ARC_C_DEF ("__ARC_FPU_DP_DIV__", TARGET_FP_DP_SQRT)
ARC_C_DEF ("__ARC_FPU_SP_FMA__", TARGET_FP_SP_FUSED)
ARC_C_DEF ("__ARC_FPU_DP_FMA__", TARGET_FP_DP_FUSED)
ARC_C_DEF ("__ARC_FPU_ASSIST__", TARGET_FP_DP_AX)
ARC_C_DEF ("__ARC_FPX_QUARK__",  TARGET_FPX_QUARK)

/* To be deprecated.  */
ARC_C_DEF ("__A6__",     TARGET_ARC600)
ARC_C_DEF ("__A7__",     TARGET_ARC700)
ARC_C_DEF ("__EM__",     TARGET_EM)
ARC_C_DEF ("__HS__",     TARGET_HS)
ARC_C_DEF ("__Xnorm",    TARGET_NORM)
ARC_C_DEF ("__Xbarrel_shifter", TARGET_BARREL_SHIFTER)

/* Local Variables: */
/* mode: c */
/* End: */
