OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [gcc-x64/] [or1knd-elf/] [or1knd-elf/] [include/] [_ansi.h] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ultra_embe
/* Provide support for both ANSI and non-ANSI environments.  */
2
 
3
/* Some ANSI environments are "broken" in the sense that __STDC__ cannot be
4
   relied upon to have it's intended meaning.  Therefore we must use our own
5
   concoction: _HAVE_STDC.  Always use _HAVE_STDC instead of __STDC__ in newlib
6
   sources!
7
 
8
   To get a strict ANSI C environment, define macro __STRICT_ANSI__.  This will
9
   "comment out" the non-ANSI parts of the ANSI header files (non-ANSI header
10
   files aren't affected).  */
11
 
12
#ifndef _ANSIDECL_H_
13
#define _ANSIDECL_H_
14
 
15
#include <newlib.h>
16
#include <sys/config.h>
17
 
18
/* First try to figure out whether we really are in an ANSI C environment.  */
19
/* FIXME: This probably needs some work.  Perhaps sys/config.h can be
20
   prevailed upon to give us a clue.  */
21
 
22
#ifdef __STDC__
23
#define _HAVE_STDC
24
#endif
25
 
26
/*  ISO C++.  */
27
 
28
#ifdef __cplusplus
29
#if !(defined(_BEGIN_STD_C) && defined(_END_STD_C))
30
#ifdef _HAVE_STD_CXX
31
#define _BEGIN_STD_C namespace std { extern "C" {
32
#define _END_STD_C  } }
33
#else
34
#define _BEGIN_STD_C extern "C" {
35
#define _END_STD_C  }
36
#endif
37
#if __GNUC_PREREQ (3, 3)
38
#define _NOTHROW __attribute__ ((nothrow))
39
#else
40
#define _NOTHROW throw()
41
#endif
42
#endif
43
#else
44
#define _BEGIN_STD_C
45
#define _END_STD_C
46
#define _NOTHROW
47
#endif
48
 
49
#ifdef _HAVE_STDC
50
#define _PTR            void *
51
#define _AND            ,
52
#define _NOARGS         void
53
#define _CONST          const
54
#define _VOLATILE       volatile
55
#define _SIGNED         signed
56
#define _DOTS           , ...
57
#define _VOID void
58
#ifdef __CYGWIN__
59
#define _EXFUN_NOTHROW(name, proto)     __cdecl name proto _NOTHROW
60
#define _EXFUN(name, proto)             __cdecl name proto
61
#define _EXPARM(name, proto)            (* __cdecl name) proto
62
#define _EXFNPTR(name, proto)           (__cdecl * name) proto
63
#else
64
#define _EXFUN_NOTHROW(name, proto)     name proto _NOTHROW
65
#define _EXFUN(name, proto)             name proto
66
#define _EXPARM(name, proto)            (* name) proto
67
#define _EXFNPTR(name, proto)           (* name) proto
68
#endif
69
#define _DEFUN(name, arglist, args)     name(args)
70
#define _DEFUN_VOID(name)               name(_NOARGS)
71
#define _CAST_VOID (void)
72
#ifndef _LONG_DOUBLE
73
#define _LONG_DOUBLE long double
74
#endif
75
#ifndef _LONG_LONG_TYPE
76
#define _LONG_LONG_TYPE long long
77
#endif
78
#ifndef _PARAMS
79
#define _PARAMS(paramlist)              paramlist
80
#endif
81
#else   
82
#define _PTR            char *
83
#define _AND            ;
84
#define _NOARGS
85
#define _CONST
86
#define _VOLATILE
87
#define _SIGNED
88
#define _DOTS
89
#define _VOID void
90
#define _EXFUN(name, proto)             name()
91
#define _EXFUN_NOTHROW(name, proto)     name()
92
#define _DEFUN(name, arglist, args)     name arglist args;
93
#define _DEFUN_VOID(name)               name()
94
#define _CAST_VOID
95
#define _LONG_DOUBLE double
96
#define _LONG_LONG_TYPE long
97
#ifndef _PARAMS
98
#define _PARAMS(paramlist)              ()
99
#endif
100
#endif
101
 
102
/* Support gcc's __attribute__ facility.  */
103
 
104
#ifdef __GNUC__
105
#define _ATTRIBUTE(attrs) __attribute__ (attrs)
106
#else
107
#define _ATTRIBUTE(attrs)
108
#endif
109
 
110
/*  The traditional meaning of 'extern inline' for GCC is not
111
  to emit the function body unless the address is explicitly
112
  taken.  However this behaviour is changing to match the C99
113
  standard, which uses 'extern inline' to indicate that the
114
  function body *must* be emitted.  Likewise, a function declared
115
  without either 'extern' or 'static' defaults to extern linkage
116
  (C99 6.2.2p5), and the compiler may choose whether to use the
117
  inline version or call the extern linkage version (6.7.4p6).
118
  If we are using GCC, but do not have the new behaviour, we need
119
  to use extern inline; if we are using a new GCC with the
120
  C99-compatible behaviour, or a non-GCC compiler (which we will
121
  have to hope is C99, since there is no other way to achieve the
122
  effect of omitting the function if it isn't referenced) we use
123
  'static inline', which c99 defines to mean more-or-less the same
124
  as the Gnu C 'extern inline'.  */
125
#if defined(__GNUC__) && !defined(__GNUC_STDC_INLINE__)
126
/* We're using GCC, but without the new C99-compatible behaviour.  */
127
#define _ELIDABLE_INLINE extern __inline__ _ATTRIBUTE ((__always_inline__))
128
#else
129
/* We're using GCC in C99 mode, or an unknown compiler which
130
  we just have to hope obeys the C99 semantics of inline.  */
131
#define _ELIDABLE_INLINE static __inline__
132
#endif
133
 
134
#if __GNUC_PREREQ (3, 1)
135
#define _NOINLINE               __attribute__ ((__noinline__))
136
#define _NOINLINE_STATIC        _NOINLINE static
137
#else
138
/* On non-GNU compilers and GCC prior to version 3.1 the compiler can't be
139
   trusted not to inline if it is static. */
140
#define _NOINLINE
141
#define _NOINLINE_STATIC
142
#endif
143
 
144
#endif /* _ANSIDECL_H_ */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.