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
|
------------------------------------------------------------------------------
-- --
-- GNAT COMPILER COMPONENTS --
-- --
-- S E M _ V F P T --
-- --
-- B o d y --
-- --
-- $Revision: 1.5 $ --
-- --
-- Copyright (C) 1997 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. --
-- --
-- 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). --
-- --
------------------------------------------------------------------------------
with Atree; use Atree;
with CStand; use CStand;
with Einfo; use Einfo;
with Opt; use Opt;
with Sinfo; use Sinfo;
with Stand; use Stand;
with Ttypef; use Ttypef;
with Uintp; use Uintp;
pragma Elaborate_All (Uintp);
package body Sem_VFpt is
F_Digits : constant Uint := UI_From_Int (VAXFF_Digits);
D_Digits : constant Uint := UI_From_Int (VAXDF_Digits);
G_Digits : constant Uint := UI_From_Int (VAXGF_Digits);
-- Digits for Vax formats
S_Digits : constant Uint := UI_From_Int (IEEES_Digits);
T_Digits : constant Uint := UI_From_Int (IEEEL_Digits);
-- Digits for IEEE formats
-----------------
-- Set_D_Float --
-----------------
procedure Set_D_Float (E : Entity_Id) is
begin
Set_Esize (Base_Type (E), Uint_64);
Set_Digits_Value (Base_Type (E), D_Digits);
Set_Vax_Float (Base_Type (E), True);
Set_Float_Bounds (Base_Type (E));
Set_Esize (E, Uint_64);
Set_Digits_Value (E, D_Digits);
Set_Scalar_Range (E, Scalar_Range (Base_Type (E)));
end Set_D_Float;
-----------------
-- Set_F_Float --
-----------------
procedure Set_F_Float (E : Entity_Id) is
begin
Set_Esize (Base_Type (E), Uint_32);
Set_Digits_Value (Base_Type (E), F_Digits);
Set_Vax_Float (Base_Type (E), True);
Set_Float_Bounds (Base_Type (E));
Set_Esize (E, Uint_32);
Set_Digits_Value (E, F_Digits);
Set_Scalar_Range (E, Scalar_Range (Base_Type (E)));
end Set_F_Float;
-----------------
-- Set_G_Float --
-----------------
procedure Set_G_Float (E : Entity_Id) is
begin
Set_Esize (Base_Type (E), Uint_64);
Set_Digits_Value (Base_Type (E), G_Digits);
Set_Vax_Float (Base_Type (E), True);
Set_Float_Bounds (Base_Type (E));
Set_Esize (E, Uint_64);
Set_Digits_Value (E, G_Digits);
Set_Scalar_Range (E, Scalar_Range (Base_Type (E)));
end Set_G_Float;
-------------------
-- Set_IEEE_Long --
-------------------
procedure Set_IEEE_Long (E : Entity_Id) is
begin
Set_Esize (Base_Type (E), Uint_64);
Set_Digits_Value (Base_Type (E), T_Digits);
Set_Vax_Float (Base_Type (E), False);
Set_Float_Bounds (Base_Type (E));
Set_Esize (E, Uint_64);
Set_Digits_Value (E, T_Digits);
Set_Scalar_Range (E, Scalar_Range (Base_Type (E)));
end Set_IEEE_Long;
--------------------
-- Set_IEEE_Short --
--------------------
procedure Set_IEEE_Short (E : Entity_Id) is
begin
Set_Esize (Base_Type (E), Uint_32);
Set_Digits_Value (Base_Type (E), S_Digits);
Set_Vax_Float (Base_Type (E), False);
Set_Float_Bounds (Base_Type (E));
Set_Esize (E, Uint_32);
Set_Digits_Value (E, S_Digits);
Set_Scalar_Range (E, Scalar_Range (Base_Type (E)));
end Set_IEEE_Short;
------------------------------
-- Set_Standard_Fpt_Formats --
------------------------------
procedure Set_Standard_Fpt_Formats is
begin
if Opt.Float_Format = 'I' then
Set_IEEE_Short (Standard_Float);
Set_IEEE_Long (Standard_Long_Float);
Set_IEEE_Long (Standard_Long_Long_Float);
else
if Opt.Float_Format_Long = 'D' then
Set_D_Float (Standard_Long_Float);
Set_G_Float (Standard_Long_Long_Float);
else
Set_G_Float (Standard_Long_Float);
Set_G_Float (Standard_Long_Long_Float);
end if;
Set_F_Float (Standard_Float);
end if;
end Set_Standard_Fpt_Formats;
end Sem_VFpt;
|