microblaze-c.c revision 1.1.1.1
1/* Subroutines used for the C front end for Xilinx MicroBlaze.
2   Copyright (C) 2010-2013 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 "tm.h"
26#include "cpplib.h"
27#include "tree.h"
28#include "c-family/c-common.h"
29#include "tm_p.h"
30#include "target.h"
31
32#define builtin_define(TXT) cpp_define (pfile, TXT)
33#define builtin_assert(TXT) cpp_assert (pfile, TXT)
34
35/* Define preprocessor symbols for MicroBlaze.
36   Symbols which do not start with __ are deprecated.  */
37
38void
39microblaze_cpp_define (cpp_reader *pfile)
40{
41  builtin_assert ("cpu=microblaze");
42  builtin_assert ("machine=microblaze");
43  builtin_define ("__MICROBLAZE__");
44  builtin_define ("__microblaze__");
45  if (TARGET_LITTLE_ENDIAN)
46    {
47      builtin_define ("_LITTLE_ENDIAN");
48      builtin_define ("__LITTLE_ENDIAN__");
49      builtin_define ("__MICROBLAZEEL__");
50    }
51  else
52    {
53      builtin_define ("_BIG_ENDIAN");
54      builtin_define ("__BIG_ENDIAN__");
55      builtin_define ("__MICROBLAZEEB__");
56    }
57  if (!TARGET_SOFT_MUL)
58    {
59      if (!flag_iso)
60        builtin_define ("HAVE_HW_MUL");
61      builtin_define ("__HAVE_HW_MUL__");
62    }
63  if (TARGET_MULTIPLY_HIGH)
64    {
65      if (!flag_iso)
66        builtin_define ("HAVE_HW_MUL_HIGH");
67      builtin_define ("__HAVE_HW_MUL_HIGH__");
68    }
69  if (!TARGET_SOFT_DIV)
70    {
71      if (!flag_iso)
72        builtin_define ("HAVE_HW_DIV");
73      builtin_define ("__HAVE_HW_DIV__");
74    }
75  if (TARGET_BARREL_SHIFT)
76    {
77      if (!flag_iso)
78        builtin_define ("HAVE_HW_BSHIFT");
79      builtin_define ("__HAVE_HW_BSHIFT__");
80    }
81  if (TARGET_PATTERN_COMPARE)
82    {
83      if (!flag_iso)
84        builtin_define ("HAVE_HW_PCMP");
85      builtin_define ("__HAVE_HW_PCMP__");
86    }
87  if (TARGET_HARD_FLOAT)
88    {
89      if (!flag_iso)
90        builtin_define ("HAVE_HW_FPU");
91      builtin_define ("__HAVE_HW_FPU__");
92    }
93  if (TARGET_FLOAT_CONVERT)
94    {
95      if (!flag_iso)
96        builtin_define ("HAVE_HW_FPU_CONVERT");
97      builtin_define ("__HAVE_HW_FPU_CONVERT__");
98    }
99  if (TARGET_FLOAT_SQRT)
100    {
101      if (!flag_iso)
102        builtin_define ("HAVE_HW_FPU_SQRT");
103      builtin_define ("__HAVE_HW_FPU_SQRT__");
104    }
105}
106