PING
> -----Original Message-----
> From: Claudiu Zissulescu
> Sent: Thursday, May 19, 2016 1:58 PM
> To: gcc-patches@gcc.gnu.org
> Cc: Claudiu Zissulescu <claz...@synopsys.com>; g...@amylaar.uk;
> francois.bed...@synopsys.com
> Subject: [PATCH] [ARC] New CPU C-define handler.
>
> This patch refactors how we handle the built-in preprocessor macros and
> assertions for ARC.
>
> OK to apply?
> Claudiu
>
> gcc/
> 2016-05-02 Claudiu Zissulescu <claz...@synopsys.com>
>
> * config/arc/arc-c.c: New file.
> * config/arc/arc-c.def: Likewise.
> * config/arc/t-arc: Likewise.
> * config.gcc: Include arc-c.o as c and cpp object.
> * config/arc/arc-protos.h (arc_cpu_cpp_builtins): Add prototype.
> * config/arc/arc.h (TARGET_CPU_CPP_BUILTINS): Use
> arc_cpu_cpp_builtins.
> ---
> gcc/config.gcc | 2 ++
> gcc/config/arc/arc-c.c | 69
> +++++++++++++++++++++++++++++++++++++++++++++
> gcc/config/arc/arc-c.def | 68
> ++++++++++++++++++++++++++++++++++++++++++++
> gcc/config/arc/arc-protos.h | 1 +
> gcc/config/arc/arc.h | 56 +-----------------------------------
> gcc/config/arc/t-arc | 29 +++++++++++++++++++
> 6 files changed, 170 insertions(+), 55 deletions(-)
> create mode 100644 gcc/config/arc/arc-c.c
> create mode 100644 gcc/config/arc/arc-c.def
> create mode 100644 gcc/config/arc/t-arc
>
> diff --git a/gcc/config.gcc b/gcc/config.gcc
> index 4e98df7..148e020 100644
> --- a/gcc/config.gcc
> +++ b/gcc/config.gcc
> @@ -323,6 +323,8 @@ am33_2.0-*-linux*)
> ;;
> arc*-*-*)
> cpu_type=arc
> + c_target_objs="arc-c.o"
> + cxx_target_objs="arc-c.o"
> ;;
> arm*-*-*)
> cpu_type=arm
> diff --git a/gcc/config/arc/arc-c.c b/gcc/config/arc/arc-c.c
> new file mode 100644
> index 0000000..3bf3fd2
> --- /dev/null
> +++ b/gcc/config/arc/arc-c.c
> @@ -0,0 +1,69 @@
> +/* Copyright (C) 2016 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/>.
> +*/
> +
> +#include "config.h"
> +#include "system.h"
> +#include "coretypes.h"
> +#include "tm.h"
> +#include "tree.h"
> +#include "tm_p.h"
> +#include "cpplib.h"
> +#include "c-family/c-common.h"
> +#include "target.h"
> +
> +#define builtin_define(TXT) cpp_define (pfile, TXT)
> +#define builtin_assert(TXT) cpp_assert (pfile, TXT)
> +
> +/* Define or undefine macros based on the current target. */
> +
> +static void
> +def_or_undef_macro (cpp_reader* pfile, const char *name, bool def_p)
> +{
> + if (def_p)
> + cpp_define (pfile, name);
> + else
> + cpp_undef (pfile, name);
> +}
> +
> +/* Helper for TARGET_CPU_CPP_BUILTINS hook. */
> +
> +void
> +arc_cpu_cpp_builtins (cpp_reader * pfile)
> +{
> + builtin_assert ("cpu=arc");
> + builtin_assert ("machine=arc");
> +
> + builtin_define ("__arc__");
> +
> +#undef ARC_C_DEF
> +#define ARC_C_DEF(NAME, CONDITION) \
> + def_or_undef_macro (pfile, NAME, CONDITION);
> +
> +#include "arc-c.def"
> +#undef ARC_C_DEF
> +
> + builtin_define_with_int_value ("__ARC_TLS_REGNO__",
> + arc_tp_regno);
> +
> + builtin_define (TARGET_BIG_ENDIAN
> + ? "__BIG_ENDIAN__" : "__LITTLE_ENDIAN__");
> + if (TARGET_BIG_ENDIAN)
> + builtin_define ("__big_endian__");
> +
> +}
> diff --git a/gcc/config/arc/arc-c.def b/gcc/config/arc/arc-c.def
> new file mode 100644
> index 0000000..88c65ac
> --- /dev/null
> +++ b/gcc/config/arc/arc-c.def
> @@ -0,0 +1,68 @@
> +/* Copyright (C) 2016 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 ("__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_BARREL_SHIFTER__", TARGET_BARREL_SHIFTER)
> +
> +ARC_C_DEF ("__ARC_LL64__", TARGET_LL64)
> +ARC_C_DEF ("__ARC_MPY__", !TARGET_NOMPY_SET)
> +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)
> +
> +/* 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)
> diff --git a/gcc/config/arc/arc-protos.h b/gcc/config/arc/arc-protos.h
> index 8630e2d..b6ed392 100644
> --- a/gcc/config/arc/arc-protos.h
> +++ b/gcc/config/arc/arc-protos.h
> @@ -123,3 +123,4 @@ extern int arc_return_slot_offset (void);
> extern bool arc_legitimize_reload_address (rtx *, machine_mode, int, int);
> extern void arc_secondary_reload_conv (rtx, rtx, rtx, bool);
> extern bool insn_is_tls_gd_dispatch (rtx_insn *);
> +extern void arc_cpu_cpp_builtins (cpp_reader *);
> diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h
> index f6b85ea..c02e1cd 100644
> --- a/gcc/config/arc/arc.h
> +++ b/gcc/config/arc/arc.h
> @@ -64,61 +64,7 @@ along with GCC; see the file COPYING3. If not see
> #undef CC1_SPEC
>
> /* Names to predefine in the preprocessor for this target machine. */
> -#define TARGET_CPU_CPP_BUILTINS() \
> - do { \
> - builtin_define ("__arc__"); \
> - if (TARGET_ARC600) \
> - { \
> - builtin_define ("__A6__"); \
> - builtin_define ("__ARC600__"); \
> - } \
> - else if (TARGET_ARC601) \
> - { \
> - builtin_define ("__ARC601__"); \
> - } \
> - else if (TARGET_ARC700) \
> - { \
> - builtin_define ("__A7__"); \
> - builtin_define ("__ARC700__"); \
> - } \
> - else if (TARGET_EM) \
> - { \
> - builtin_define ("__EM__"); \
> - } \
> - else if (TARGET_HS) \
> - { \
> - builtin_define ("__HS__"); \
> - } \
> - if (TARGET_ATOMIC) \
> - { \
> - builtin_define ("__ARC_ATOMIC__"); \
> - } \
> - if (TARGET_NORM) \
> - { \
> - builtin_define ("__ARC_NORM__");\
> - builtin_define ("__Xnorm"); \
> - } \
> - if (TARGET_LL64) \
> - { \
> - builtin_define ("__ARC_LL64__");\
> - } \
> - if (TARGET_MUL64_SET) \
> - builtin_define ("__ARC_MUL64__");\
> - if (TARGET_MULMAC_32BY16_SET) \
> - builtin_define ("__ARC_MUL32BY16__");\
> - if (TARGET_SIMD_SET) \
> - builtin_define ("__ARC_SIMD__"); \
> - if (TARGET_BARREL_SHIFTER) \
> - builtin_define ("__Xbarrel_shifter");\
> - builtin_define_with_int_value ("__ARC_TLS_REGNO__", \
> - arc_tp_regno); \
> - builtin_assert ("cpu=arc"); \
> - builtin_assert ("machine=arc"); \
> - builtin_define (TARGET_BIG_ENDIAN \
> - ? "__BIG_ENDIAN__" : "__LITTLE_ENDIAN__"); \
> - if (TARGET_BIG_ENDIAN) \
> - builtin_define ("__big_endian__"); \
> -} while(0)
> +#define TARGET_CPU_CPP_BUILTINS() arc_cpu_cpp_builtins (pfile)
>
> #if DEFAULT_LIBC == LIBC_UCLIBC
>
> diff --git a/gcc/config/arc/t-arc b/gcc/config/arc/t-arc
> new file mode 100644
> index 0000000..4252e73
> --- /dev/null
> +++ b/gcc/config/arc/t-arc
> @@ -0,0 +1,29 @@
> +# GCC Makefile fragment for Synopsys DesignWare ARC.
> +#
> +# Copyright (C) 2016 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/>.
> +
> +TM_H += $(srcdir)/config/arc/arc-c.def
> +
> +arc-c.o: $(srcdir)/config/arc/arc-c.c $(CONFIG_H) $(SYSTEM_H) \
> +$(TREE_H) $(TM_H) $(TM_P_H) coretypes.h
> + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS)
> $(INCLUDES) \
> + $(srcdir)/config/arc/arc-c.c
> +
> +# Local Variables:
> +# mode: Makefile
> +# End:
> --
> 1.9.1