diff options
Diffstat (limited to 'gcc-4.9/gcc/ada/get_targ.adb')
-rw-r--r-- | gcc-4.9/gcc/ada/get_targ.adb | 356 |
1 files changed, 356 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/ada/get_targ.adb b/gcc-4.9/gcc/ada/get_targ.adb new file mode 100644 index 000000000..661f95b5a --- /dev/null +++ b/gcc-4.9/gcc/ada/get_targ.adb @@ -0,0 +1,356 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- G E T _ T A R G -- +-- -- +-- B o d y -- +-- -- +-- Copyright (C) 1992-2013, 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. -- +-- -- +------------------------------------------------------------------------------ + +-- Version for use with gcc + +package body Get_Targ is + + -- Functions returning individual runtime. For the standard (GCC) back + -- end these come from C interface functions (one for each value). + + ----------------------- + -- Get_Bits_Per_Unit -- + ----------------------- + + function Get_Bits_Per_Unit return Pos is + function C_Get_Bits_Per_Unit return Pos; + pragma Import (C, C_Get_Bits_Per_Unit, + "get_target_bits_per_unit"); + begin + return C_Get_Bits_Per_Unit; + end Get_Bits_Per_Unit; + + ----------------------- + -- Get_Bits_Per_Word -- + ----------------------- + + function Get_Bits_Per_Word return Pos is + function C_Get_Bits_Per_Word return Pos; + pragma Import (C, C_Get_Bits_Per_Word, + "get_target_bits_per_word"); + begin + return C_Get_Bits_Per_Word; + end Get_Bits_Per_Word; + + ------------------- + -- Get_Char_Size -- + ------------------- + + function Get_Char_Size return Pos is + function C_Get_Char_Size return Pos; + pragma Import (C, C_Get_Char_Size, + "get_target_char_size"); + begin + return C_Get_Char_Size; + end Get_Char_Size; + + ---------------------- + -- Get_Wchar_T_Size -- + ---------------------- + + function Get_Wchar_T_Size return Pos is + function C_Get_Wchar_T_Size return Pos; + pragma Import (C, C_Get_Wchar_T_Size, + "get_target_wchar_t_size"); + begin + return C_Get_Wchar_T_Size; + end Get_Wchar_T_Size; + + -------------------- + -- Get_Short_Size -- + -------------------- + + function Get_Short_Size return Pos is + function C_Get_Short_Size return Pos; + pragma Import (C, C_Get_Short_Size, + "get_target_short_size"); + begin + return C_Get_Short_Size; + end Get_Short_Size; + + ------------------ + -- Get_Int_Size -- + ------------------ + + function Get_Int_Size return Pos is + function C_Get_Int_Size return Pos; + pragma Import (C, C_Get_Int_Size, + "get_target_int_size"); + begin + return C_Get_Int_Size; + end Get_Int_Size; + + ------------------- + -- Get_Long_Size -- + ------------------- + + function Get_Long_Size return Pos is + function C_Get_Long_Size return Pos; + pragma Import (C, C_Get_Long_Size, + "get_target_long_size"); + begin + return C_Get_Long_Size; + end Get_Long_Size; + + ------------------------ + -- Get_Long_Long_Size -- + ------------------------ + + function Get_Long_Long_Size return Pos is + function C_Get_Long_Long_Size return Pos; + pragma Import (C, C_Get_Long_Long_Size, + "get_target_long_long_size"); + begin + return C_Get_Long_Long_Size; + end Get_Long_Long_Size; + + -------------------- + -- Get_Float_Size -- + -------------------- + + function Get_Float_Size return Pos is + function C_Get_Float_Size return Pos; + pragma Import (C, C_Get_Float_Size, + "get_target_float_size"); + begin + return C_Get_Float_Size; + end Get_Float_Size; + + --------------------- + -- Get_Double_Size -- + --------------------- + + function Get_Double_Size return Pos is + function C_Get_Double_Size return Pos; + pragma Import (C, C_Get_Double_Size, + "get_target_double_size"); + begin + return C_Get_Double_Size; + end Get_Double_Size; + + -------------------------- + -- Get_Long_Double_Size -- + -------------------------- + + function Get_Long_Double_Size return Pos is + function C_Get_Long_Double_Size return Pos; + pragma Import (C, C_Get_Long_Double_Size, + "get_target_long_double_size"); + begin + return C_Get_Long_Double_Size; + end Get_Long_Double_Size; + + ---------------------- + -- Get_Pointer_Size -- + ---------------------- + + function Get_Pointer_Size return Pos is + function C_Get_Pointer_Size return Pos; + pragma Import (C, C_Get_Pointer_Size, + "get_target_pointer_size"); + begin + return C_Get_Pointer_Size; + end Get_Pointer_Size; + + --------------------------- + -- Get_Maximum_Alignment -- + --------------------------- + + function Get_Maximum_Alignment return Pos is + function C_Get_Maximum_Alignment return Pos; + pragma Import (C, C_Get_Maximum_Alignment, + "get_target_maximum_alignment"); + begin + return C_Get_Maximum_Alignment; + end Get_Maximum_Alignment; + + ------------------------ + -- Get_Float_Words_BE -- + ------------------------ + + function Get_Float_Words_BE return Nat is + function C_Get_Float_Words_BE return Nat; + pragma Import (C, C_Get_Float_Words_BE, + "get_float_words_be"); + begin + return C_Get_Float_Words_BE; + end Get_Float_Words_BE; + + ------------------ + -- Get_Words_BE -- + ------------------ + + function Get_Words_BE return Nat is + function C_Get_Words_BE return Nat; + pragma Import (C, C_Get_Words_BE, + "get_words_be"); + begin + return C_Get_Words_BE; + end Get_Words_BE; + + ------------------ + -- Get_Bytes_BE -- + ------------------ + + function Get_Bytes_BE return Nat is + function C_Get_Bytes_BE return Nat; + pragma Import (C, C_Get_Bytes_BE, + "get_bytes_be"); + begin + return C_Get_Bytes_BE; + end Get_Bytes_BE; + + ----------------- + -- Get_Bits_BE -- + ----------------- + + function Get_Bits_BE return Nat is + function C_Get_Bits_BE return Nat; + pragma Import (C, C_Get_Bits_BE, + "get_bits_be"); + begin + return C_Get_Bits_BE; + end Get_Bits_BE; + + --------------------- + -- Get_Short_Enums -- + --------------------- + + function Get_Short_Enums return Int is + flag_short_enums : Int; + pragma Import (C, flag_short_enums); + begin + return flag_short_enums; + end Get_Short_Enums; + + -------------------------- + -- Get_Strict_Alignment -- + -------------------------- + + function Get_Strict_Alignment return Nat is + function C_Get_Strict_Alignment return Nat; + pragma Import (C, C_Get_Strict_Alignment, + "get_target_strict_alignment"); + begin + return C_Get_Strict_Alignment; + end Get_Strict_Alignment; + + ------------------------------------ + -- Get_System_Allocator_Alignment -- + ------------------------------------ + + function Get_System_Allocator_Alignment return Nat is + function C_Get_System_Allocator_Alignment return Nat; + pragma Import (C, C_Get_System_Allocator_Alignment, + "get_target_system_allocator_alignment"); + begin + return C_Get_System_Allocator_Alignment; + end Get_System_Allocator_Alignment; + + -------------------------------- + -- Get_Double_Float_Alignment -- + -------------------------------- + + function Get_Double_Float_Alignment return Nat is + function C_Get_Double_Float_Alignment return Nat; + pragma Import (C, C_Get_Double_Float_Alignment, + "get_target_double_float_alignment"); + begin + return C_Get_Double_Float_Alignment; + end Get_Double_Float_Alignment; + + --------------------------------- + -- Get_Double_Scalar_Alignment -- + --------------------------------- + + function Get_Double_Scalar_Alignment return Nat is + function C_Get_Double_Scalar_Alignment return Nat; + pragma Import (C, C_Get_Double_Scalar_Alignment, + "get_target_double_scalar_alignment"); + begin + return C_Get_Double_Scalar_Alignment; + end Get_Double_Scalar_Alignment; + + ---------------------- + -- Digits_From_Size -- + ---------------------- + + function Digits_From_Size (Size : Pos) return Pos is + begin + if Size = 32 then + return 6; + elsif Size = 48 then + return 9; + elsif Size = 64 then + return 15; + elsif Size = 96 then + return 18; + elsif Size = 128 then + return 18; + else + raise Program_Error; + end if; + end Digits_From_Size; + + ----------------------------- + -- Get_Max_Unaligned_Field -- + ----------------------------- + + function Get_Max_Unaligned_Field return Pos is + begin + return 64; -- Can be different on some targets (e.g., AAMP) + end Get_Max_Unaligned_Field; + + ----------------------------- + -- Register_Back_End_Types -- + ----------------------------- + + procedure Register_Back_End_Types (Call_Back : Register_Type_Proc) is + procedure Enumerate_Modes (Call_Back : Register_Type_Proc); + pragma Import (C, Enumerate_Modes, "enumerate_modes"); + begin + Enumerate_Modes (Call_Back); + end Register_Back_End_Types; + + --------------------- + -- Width_From_Size -- + --------------------- + + function Width_From_Size (Size : Pos) return Pos is + begin + if Size = 8 then + return 4; + elsif Size = 16 then + return 6; + elsif Size = 32 then + return 11; + elsif Size = 64 then + return 21; + else + raise Program_Error; + end if; + end Width_From_Size; + +end Get_Targ; |