diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/ada/sem_vfpt.adb | |
download | cbb-gcc-4.6.4-15d2061ac0796199866debe9ac87130894b0cdd3.tar.bz2 cbb-gcc-4.6.4-15d2061ac0796199866debe9ac87130894b0cdd3.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'gcc/ada/sem_vfpt.adb')
-rw-r--r-- | gcc/ada/sem_vfpt.adb | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/gcc/ada/sem_vfpt.adb b/gcc/ada/sem_vfpt.adb new file mode 100644 index 000000000..5ea780a39 --- /dev/null +++ b/gcc/ada/sem_vfpt.adb @@ -0,0 +1,168 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S E M _ V F P T -- +-- -- +-- B o d y -- +-- -- +-- Copyright (C) 1997-2010, 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 3, 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 COPYING3. If not, go to -- +-- http://www.gnu.org/licenses for a complete copy of the license. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +with CStand; use CStand; +with Einfo; use Einfo; +with Opt; use Opt; +with Stand; use Stand; +with Targparm; use Targparm; + +package body Sem_VFpt is + + ----------------- + -- Set_D_Float -- + ----------------- + + procedure Set_D_Float (E : Entity_Id) is + VAXDF_Digits : constant := 9; + + begin + Init_Size (Base_Type (E), 64); + Init_Alignment (Base_Type (E)); + Init_Digits_Value (Base_Type (E), VAXDF_Digits); + Set_Float_Rep (Base_Type (E), VAX_Native); + Set_Float_Bounds (Base_Type (E)); + + Init_Size (E, 64); + Init_Alignment (E); + Init_Digits_Value (E, VAXDF_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 + VAXFF_Digits : constant := 6; + + begin + Init_Size (Base_Type (E), 32); + Init_Alignment (Base_Type (E)); + Init_Digits_Value (Base_Type (E), VAXFF_Digits); + Set_Float_Rep (Base_Type (E), VAX_Native); + Set_Float_Bounds (Base_Type (E)); + + Init_Size (E, 32); + Init_Alignment (E); + Init_Digits_Value (E, VAXFF_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 + VAXGF_Digits : constant := 15; + + begin + Init_Size (Base_Type (E), 64); + Init_Alignment (Base_Type (E)); + Init_Digits_Value (Base_Type (E), VAXGF_Digits); + Set_Float_Rep (Base_Type (E), VAX_Native); + Set_Float_Bounds (Base_Type (E)); + + Init_Size (E, 64); + Init_Alignment (E); + Init_Digits_Value (E, VAXGF_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 + IEEEL_Digits : constant := 15; + + begin + Init_Size (Base_Type (E), 64); + Init_Alignment (Base_Type (E)); + Init_Digits_Value (Base_Type (E), IEEEL_Digits); + Set_Float_Rep (Base_Type (E), IEEE_Binary); + Set_Float_Bounds (Base_Type (E)); + + Init_Size (E, 64); + Init_Alignment (E); + Init_Digits_Value (E, IEEEL_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 + IEEES_Digits : constant := 6; + + begin + Init_Size (Base_Type (E), 32); + Init_Alignment (Base_Type (E)); + Init_Digits_Value (Base_Type (E), IEEES_Digits); + Set_Float_Rep (Base_Type (E), IEEE_Binary); + Set_Float_Bounds (Base_Type (E)); + + Init_Size (E, 32); + Init_Alignment (E); + Init_Digits_Value (E, IEEES_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 + -- IEEE case + + if Opt.Float_Format = 'I' then + Set_IEEE_Short (Standard_Float); + Set_IEEE_Long (Standard_Long_Float); + Set_IEEE_Long (Standard_Long_Long_Float); + + -- Vax float case + + else + Set_F_Float (Standard_Float); + + if Opt.Float_Format_Long = 'D' then + Set_D_Float (Standard_Long_Float); + else + Set_G_Float (Standard_Long_Float); + end if; + + -- Note: Long_Long_Float gets set only in the real VMS case, + -- because this gives better results for testing out the use + -- of VAX float on non-VMS environments with the -gnatdm switch. + + if OpenVMS_On_Target then + Set_G_Float (Standard_Long_Long_Float); + end if; + end if; + end Set_Standard_Fpt_Formats; + +end Sem_VFpt; |