1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
/****************************************************************************/
/* */
/* GNAT COMPILER COMPONENTS */
/* */
/* A - G E T T T Y */
/* */
/* Body */
/* */
/* $Revision: 1.8 $ */
/* */
/* Copyright (C) 1992-1996 Free Software Foundation, Inc. */
/* */
/* GNAT is free software; you can redistribute it and/or modify it under */
/* terms of the GNU General Public License as published by the Free Soft- */
/* ware Foundation; either version 2, or (at your option) any later ver- */
/* sion. GNAT is distributed in the hope that it will be useful, but WITH- */
/* OUT 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 distributed with GNAT; see file COPYING. If not, write */
/* to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, */
/* MA 02111-1307, USA. */
/* */
/* As a special exception, if you link this file with other files to */
/* produce an executable, this file does not by itself cause the resulting */
/* executable to be covered by the GNU General Public License. This except- */
/* ion does not however invalidate any other reasons why the executable */
/* file might be covered by the GNU Public License. */
/* */
/* GNAT was originally developed by the GNAT team at New York University. */
/* It is now maintained by Ada Core Technologies Inc (http://www.gnat.com). */
/* */
/****************************************************************************/
/* Functions for retrieving target types. See Ada package Get_Targ */
#include "config.h"
#include "a-ada.h"
#include "a-types.h"
#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
/* Standard data type sizes. Most of these are not used. */
#ifndef CHAR_TYPE_SIZE
#define CHAR_TYPE_SIZE BITS_PER_UNIT
#endif
#ifndef SHORT_TYPE_SIZE
#define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
#endif
#ifndef INT_TYPE_SIZE
#define INT_TYPE_SIZE BITS_PER_WORD
#endif
#ifndef LONG_TYPE_SIZE
#define LONG_TYPE_SIZE BITS_PER_WORD
#endif
#ifndef LONG_LONG_TYPE_SIZE
#define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
#endif
#ifndef FLOAT_TYPE_SIZE
#define FLOAT_TYPE_SIZE BITS_PER_WORD
#endif
#ifndef DOUBLE_TYPE_SIZE
#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
#endif
#ifndef LONG_DOUBLE_TYPE_SIZE
#define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
#endif
/* The choice of SIZE_TYPE here is very problematic. We need a signed
type whose bit width is Pmode. Assume "long" is such a type here. */
#undef SIZE_TYPE
#define SIZE_TYPE "long int"
/* The following provide a functional interface for the front end Ada code
to determine the sizes that are used for various C types. */
Pos
get_target_bits_per_unit ()
{
return BITS_PER_UNIT;
}
Pos
get_target_bits_per_word ()
{
return BITS_PER_WORD;
}
Pos
get_target_char_size ()
{
return CHAR_TYPE_SIZE;
}
Pos
get_target_short_size ()
{
return SHORT_TYPE_SIZE;
}
Pos
get_target_int_size ()
{
return INT_TYPE_SIZE;
}
Pos
get_target_long_size ()
{
return LONG_TYPE_SIZE;
}
Pos
get_target_long_long_size ()
{
return LONG_LONG_TYPE_SIZE;
}
Pos
get_target_float_size ()
{
return FLOAT_TYPE_SIZE;
}
Pos
get_target_double_size ()
{
return DOUBLE_TYPE_SIZE;
}
Pos
get_target_long_double_size ()
{
return LONG_DOUBLE_TYPE_SIZE;
}
Pos
get_target_pointer_size ()
{
return POINTER_SIZE;
}
Pos
get_target_maximum_alignment ()
{
return BIGGEST_ALIGNMENT / BITS_PER_UNIT;
}
#ifndef FLOAT_WORDS_BIG_ENDIAN
#define FLOAT_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
#endif
Nat get_float_words_be () {return FLOAT_WORDS_BIG_ENDIAN;}
Nat get_words_be () {return WORDS_BIG_ENDIAN;}
Nat get_bytes_be () {return BYTES_BIG_ENDIAN;}
Nat get_bits_be () {return BITS_BIG_ENDIAN;}
|