aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorClaudiu Zissulescu <claziss@synopsys.com>2016-09-28 16:25:21 +0200
committerClaudiu Zissulescu <claziss@gcc.gnu.org>2016-09-28 16:25:21 +0200
commitcf07c3ded0fdfe4c73b2a83a78126cd60973e0ba (patch)
tree6d527035923803fbeb27167c72b4849a2d77152f /gcc/config
parentc6d66e907784830a1039d130ad35d500ea6dc005 (diff)
downloadgcc-cf07c3ded0fdfe4c73b2a83a78126cd60973e0ba.zip
gcc-cf07c3ded0fdfe4c73b2a83a78126cd60973e0ba.tar.gz
gcc-cf07c3ded0fdfe4c73b2a83a78126cd60973e0ba.tar.bz2
[ARC] New CPU C-define handler.
gcc/ 2016-09-29 Claudiu Zissulescu <claziss@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. From-SVN: r240577
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/arc/arc-c.c69
-rw-r--r--gcc/config/arc/arc-c.def68
-rw-r--r--gcc/config/arc/arc-protos.h1
-rw-r--r--gcc/config/arc/arc.h56
-rw-r--r--gcc/config/arc/t-arc29
5 files changed, 168 insertions, 55 deletions
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..065e973
--- /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_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)
+
+/* 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 73aacbc..ad5d4d3 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: