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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [ada/] [gcc-interface/] [targtyps.c] - Blame information for rev 706

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 706 jeremybenn
/****************************************************************************
2
 *                                                                          *
3
 *                         GNAT COMPILER COMPONENTS                         *
4
 *                                                                          *
5
 *                            T A R G T Y P S                               *
6
 *                                                                          *
7
 *                                  Body                                    *
8
 *                                                                          *
9
 *          Copyright (C) 1992-2011, Free Software Foundation, Inc.         *
10
 *                                                                          *
11
 * GNAT is free software;  you can  redistribute it  and/or modify it under *
12
 * terms of the  GNU General Public License as published  by the Free Soft- *
13
 * ware  Foundation;  either version 3,  or (at your option) any later ver- *
14
 * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
15
 * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
16
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
17
 * for  more details.  You should have  received  a copy of the GNU General *
18
 * Public License  distributed  with GNAT;  see file  COPYING3.  If not see *
19
 * <http://www.gnu.org/licenses/>.                                          *
20
 *                                                                          *
21
 * GNAT was originally developed  by the GNAT team at  New York University. *
22
 * Extensive contributions were provided by Ada Core Technologies Inc.      *
23
 *                                                                          *
24
 ****************************************************************************/
25
 
26
/* Functions for retrieving target types. See Ada package Get_Targ */
27
 
28
#include "config.h"
29
#include "system.h"
30
#include "coretypes.h"
31
#include "tree.h"
32
#include "tm.h"
33
#include "tm_p.h"
34
 
35
#include "ada.h"
36
#include "types.h"
37
#include "atree.h"
38
#include "elists.h"
39
#include "namet.h"
40
#include "nlists.h"
41
#include "snames.h"
42
#include "stringt.h"
43
#include "uintp.h"
44
#include "urealp.h"
45
#include "fe.h"
46
#include "sinfo.h"
47
#include "einfo.h"
48
#include "ada-tree.h"
49
#include "gigi.h"
50
 
51
/* If we don't have a specific size for Ada's equivalent of `long', use that
52
   of C.  */
53
#ifndef ADA_LONG_TYPE_SIZE
54
#define ADA_LONG_TYPE_SIZE LONG_TYPE_SIZE
55
#endif
56
 
57
#ifndef WIDEST_HARDWARE_FP_SIZE
58
#define WIDEST_HARDWARE_FP_SIZE LONG_DOUBLE_TYPE_SIZE
59
#endif
60
 
61
/* The following provide a functional interface for the front end Ada code
62
   to determine the sizes that are used for various C types. */
63
 
64
Pos
65
get_target_bits_per_unit (void)
66
{
67
  return BITS_PER_UNIT;
68
}
69
 
70
Pos
71
get_target_bits_per_word (void)
72
{
73
  return BITS_PER_WORD;
74
}
75
 
76
Pos
77
get_target_char_size (void)
78
{
79
  return CHAR_TYPE_SIZE;
80
}
81
 
82
Pos
83
get_target_wchar_t_size (void)
84
{
85
  /* We never want wide characters less than "short" in Ada.  */
86
  return MAX (SHORT_TYPE_SIZE, WCHAR_TYPE_SIZE);
87
}
88
 
89
Pos
90
get_target_short_size (void)
91
{
92
  return SHORT_TYPE_SIZE;
93
}
94
 
95
Pos
96
get_target_int_size (void)
97
{
98
  return INT_TYPE_SIZE;
99
}
100
 
101
Pos
102
get_target_long_size (void)
103
{
104
  return ADA_LONG_TYPE_SIZE;
105
}
106
 
107
Pos
108
get_target_long_long_size (void)
109
{
110
  return LONG_LONG_TYPE_SIZE;
111
}
112
 
113
Pos
114
get_target_float_size (void)
115
{
116
  return fp_prec_to_size (FLOAT_TYPE_SIZE);
117
}
118
 
119
Pos
120
get_target_double_size (void)
121
{
122
  return fp_prec_to_size (DOUBLE_TYPE_SIZE);
123
}
124
 
125
Pos
126
get_target_long_double_size (void)
127
{
128
  return fp_prec_to_size (WIDEST_HARDWARE_FP_SIZE);
129
}
130
 
131
Pos
132
get_target_pointer_size (void)
133
{
134
  return POINTER_SIZE;
135
}
136
 
137
/* Alignment related values, mapped to attributes for functional and
138
   documentation purposes.  */
139
 
140
/* Standard'Maximum_Default_Alignment.  Maximum alignment that the compiler
141
   might choose by default for a type or object.
142
 
143
   Stricter alignment requests trigger gigi's aligning_type circuitry for
144
   stack objects or objects allocated by the default allocator.  */
145
 
146
Pos
147
get_target_maximum_default_alignment (void)
148
{
149
  return BIGGEST_ALIGNMENT / BITS_PER_UNIT;
150
}
151
 
152
/* Standard'System_Allocator_Alignment.  Alignment guaranteed to be honored
153
   by the default allocator (System.Memory.Alloc or malloc if we have no
154
   run-time library at hand).
155
 
156
   Stricter alignment requests trigger gigi's aligning_type circuitry for
157
   objects allocated by the default allocator.  */
158
 
159
/* ??? Need a way to get info about __gnat_malloc from here (whether it is
160
   handy and what alignment it honors).  In the meantime, resort to malloc
161
   considerations only.  */
162
 
163
/* Account for MALLOC_OBSERVABLE_ALIGNMENTs here.  Use this or the ABI
164
   guaranteed alignment if greater.  */
165
 
166
#ifdef MALLOC_OBSERVABLE_ALIGNMENT
167
#define MALLOC_ALIGNMENT MALLOC_OBSERVABLE_ALIGNMENT
168
#else
169
#define MALLOC_OBSERVABLE_ALIGNMENT (2 * LONG_TYPE_SIZE)
170
#define MALLOC_ALIGNMENT \
171
  MAX (MALLOC_ABI_ALIGNMENT, MALLOC_OBSERVABLE_ALIGNMENT)
172
#endif
173
 
174
Pos
175
get_target_system_allocator_alignment (void)
176
{
177
  return MALLOC_ALIGNMENT / BITS_PER_UNIT;
178
}
179
 
180
/* Standard'Maximum_Allowed_Alignment.  Maximum alignment that we may
181
   accept for any type or object.  */
182
 
183
#ifndef MAX_OFILE_ALIGNMENT
184
#define MAX_OFILE_ALIGNMENT BIGGEST_ALIGNMENT
185
#endif
186
 
187
Pos
188
get_target_maximum_allowed_alignment (void)
189
{
190
  return MAX_OFILE_ALIGNMENT / BITS_PER_UNIT;
191
}
192
 
193
/* Standard'Maximum_Alignment.  The single attribute initially made
194
   available, now a synonym of Standard'Maximum_Default_Alignment.  */
195
 
196
Pos
197
get_target_maximum_alignment (void)
198
{
199
  return get_target_maximum_default_alignment ();
200
}
201
 
202
#ifndef FLOAT_WORDS_BIG_ENDIAN
203
#define FLOAT_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
204
#endif
205
 
206
Nat
207
get_float_words_be (void)
208
{
209
  return FLOAT_WORDS_BIG_ENDIAN;
210
}
211
 
212
Nat
213
get_words_be (void)
214
{
215
  return WORDS_BIG_ENDIAN;
216
}
217
 
218
Nat
219
get_bytes_be (void)
220
{
221
  return BYTES_BIG_ENDIAN;
222
}
223
 
224
Nat
225
get_bits_be (void)
226
{
227
  return BITS_BIG_ENDIAN;
228
}
229
 
230
Nat
231
get_target_strict_alignment (void)
232
{
233
  return STRICT_ALIGNMENT;
234
}
235
 
236
Nat
237
get_target_double_float_alignment (void)
238
{
239
#ifdef TARGET_ALIGN_NATURAL
240
  /* This macro is only defined by the rs6000 port.  */
241
  if (!TARGET_ALIGN_NATURAL
242
      && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN))
243
    return 32 / BITS_PER_UNIT;
244
#endif
245
  return 0;
246
}
247
 
248
Nat
249
get_target_double_scalar_alignment (void)
250
{
251
#ifdef TARGET_ALIGN_DOUBLE
252
  /* This macro is only defined by the i386 and sh ports.  */
253
  if (!TARGET_ALIGN_DOUBLE
254
#ifdef TARGET_64BIT
255
      && !TARGET_64BIT
256
#endif
257
     )
258
    return 32 / BITS_PER_UNIT;
259
#endif
260
  return 0;
261
}

powered by: WebSVN 2.1.0

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