microblaze-c.c revision 1.6
1/* Subroutines used for the C front end for Xilinx MicroBlaze.
2   Copyright (C) 2010-2017 Free Software Foundation, Inc.
3
4   Contributed by Michael Eager <eager@eagercon.com>.
5
6   This file is part of GCC.
7
8   GCC is free software; you can redistribute it and/or modify it
9   under the terms of the GNU General Public License as published
10   by the Free Software Foundation; either version 3, or (at your
11   option) any later version.
12
13   GCC is distributed in the hope that it will be useful, but WITHOUT
14   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
16   License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with GCC; see the file COPYING3.  If not see
20   <http://www.gnu.org/licenses/>.  */
21
22#include "config.h"
23#include "system.h"
24#include "coretypes.h"
25#include "target.h"
26#include "c-family/c-common.h"
27
28#define builtin_define(TXT) cpp_define (pfile, TXT)
29#define builtin_assert(TXT) cpp_assert (pfile, TXT)
30
31/* Define preprocessor symbols for MicroBlaze.
32   Symbols which do not start with __ are deprecated.  */
33
34void
35microblaze_cpp_define (cpp_reader *pfile)
36{
37  builtin_assert ("cpu=microblaze");
38  builtin_assert ("machine=microblaze");
39  builtin_define ("__MICROBLAZE__");
40  builtin_define ("__microblaze__");
41  if (TARGET_LITTLE_ENDIAN)
42    {
43      builtin_define ("_LITTLE_ENDIAN");
44      builtin_define ("__LITTLE_ENDIAN__");
45      builtin_define ("__MICROBLAZEEL__");
46    }
47  else
48    {
49      builtin_define ("_BIG_ENDIAN");
50      builtin_define ("__BIG_ENDIAN__");
51      builtin_define ("__MICROBLAZEEB__");
52    }
53  if (!TARGET_SOFT_MUL)
54    {
55      if (!flag_iso)
56        builtin_define ("HAVE_HW_MUL");
57      builtin_define ("__HAVE_HW_MUL__");
58    }
59  if (TARGET_MULTIPLY_HIGH)
60    {
61      if (!flag_iso)
62        builtin_define ("HAVE_HW_MUL_HIGH");
63      builtin_define ("__HAVE_HW_MUL_HIGH__");
64    }
65  if (!TARGET_SOFT_DIV)
66    {
67      if (!flag_iso)
68        builtin_define ("HAVE_HW_DIV");
69      builtin_define ("__HAVE_HW_DIV__");
70    }
71  if (TARGET_BARREL_SHIFT)
72    {
73      if (!flag_iso)
74        builtin_define ("HAVE_HW_BSHIFT");
75      builtin_define ("__HAVE_HW_BSHIFT__");
76    }
77  if (TARGET_PATTERN_COMPARE)
78    {
79      if (!flag_iso)
80        builtin_define ("HAVE_HW_PCMP");
81      builtin_define ("__HAVE_HW_PCMP__");
82    }
83  if (TARGET_HARD_FLOAT)
84    {
85      if (!flag_iso)
86        builtin_define ("HAVE_HW_FPU");
87      builtin_define ("__HAVE_HW_FPU__");
88    }
89  if (TARGET_FLOAT_CONVERT)
90    {
91      if (!flag_iso)
92        builtin_define ("HAVE_HW_FPU_CONVERT");
93      builtin_define ("__HAVE_HW_FPU_CONVERT__");
94    }
95  if (TARGET_FLOAT_SQRT)
96    {
97      if (!flag_iso)
98        builtin_define ("HAVE_HW_FPU_SQRT");
99      builtin_define ("__HAVE_HW_FPU_SQRT__");
100    }
101}
102