diff options
Diffstat (limited to 'src/translate/translation.ads')
-rw-r--r-- | src/translate/translation.ads | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/src/translate/translation.ads b/src/translate/translation.ads new file mode 100644 index 0000000..e779685 --- /dev/null +++ b/src/translate/translation.ads @@ -0,0 +1,120 @@ +-- Iir to ortho translator. +-- Copyright (C) 2002, 2003, 2004, 2005 Tristan Gingold +-- +-- GHDL is free software; you can redistribute it and/or modify it under +-- the terms of the GNU General Public License as published by the Free +-- Software Foundation; either version 2, or (at your option) any later +-- version. +-- +-- GHDL is distributed in the hope that it will be useful, but WITHOUT 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 +-- along with GCC; see the file COPYING. If not, write to the Free +-- Software Foundation, 59 Temple Place - Suite 330, Boston, MA +-- 02111-1307, USA. +with Iirs; use Iirs; +with Ortho_Nodes; + +package Translation is + -- Initialize the package: create internal nodes. + procedure Initialize; + + -- Translate (generate code) for design unit UNIT. + -- If MAIN is true, the unit is really the unit being compiled (not an + -- external unit). Code shouldn't be generated for external units. + procedure Translate (Unit : Iir_Design_Unit; Main : Boolean); + + -- Translate std.standard. + procedure Translate_Standard (Main : Boolean); + + -- Get the ortho node for subprogram declaration DECL. + function Get_Ortho_Decl (Subprg : Iir) return Ortho_Nodes.O_Dnode; + + -- Get the internal _RESOLV function for FUNC. + function Get_Resolv_Ortho_Decl (Func : Iir) return Ortho_Nodes.O_Dnode; + + procedure Finalize; + + package Chap12 is + -- Primary unit + secondary unit (architecture name which may be null) + -- to elaborate. + procedure Elaborate (Primary : String; + Secondary : String; + Filelist : String; + Whole : Boolean); + end Chap12; + + -- If set, generate Run-Time Information nodes. + Flag_Rti : Boolean := True; + + -- If set, do not generate 64 bits integer types and operations. + Flag_Only_32b : Boolean := False; + + -- If set, do not generate code for unused subprograms. + -- Be careful: unless you are in whole compilation mode, this + -- flag shouldn't be set for packages and entities. + Flag_Discard_Unused : Boolean := False; + + -- If set, do not generate code for unused implicit subprograms. + Flag_Discard_Unused_Implicit : Boolean := False; + + -- If set, dump drivers per process during compilation. + Flag_Dump_Drivers : Boolean := False; + + -- If set, try to create direct drivers. + Flag_Direct_Drivers : Boolean := True; + + -- If set, checks ranges (subtype ranges). + Flag_Range_Checks : Boolean := True; + + -- If set, checks indexes (arrays index and slice). + Flag_Index_Checks : Boolean := True; + + -- If set, do not create identifiers (for in memory compilation). + Flag_Discard_Identifiers : Boolean := False; + + -- If true, do not create nested subprograms. + -- This flag is forced during initialization if the code generated doesn't + -- support nested subprograms. + Flag_Unnest_Subprograms : Boolean := False; + + type Foreign_Kind_Type is (Foreign_Unknown, + Foreign_Vhpidirect, + Foreign_Intrinsic); + + type Foreign_Info_Type (Kind : Foreign_Kind_Type := Foreign_Unknown) + is record + case Kind is + when Foreign_Unknown => + null; + when Foreign_Vhpidirect => + -- Positions in name_table.name_buffer. + Lib_First : Natural; + Lib_Last : Natural; + Subprg_First : Natural; + Subprg_Last : Natural; + when Foreign_Intrinsic => + null; + end case; + end record; + + Foreign_Bad : constant Foreign_Info_Type := (Kind => Foreign_Unknown); + + -- Return a foreign_info for DECL. + -- Can generate error messages, if the attribute expression is ill-formed. + -- If EXTRACT_NAME is set, internal fields of foreign_info are set. + -- Otherwise, only KIND discriminent is set. + -- EXTRACT_NAME should be set only inside translation itself, since the + -- name can be based on the prefix. + function Translate_Foreign_Id (Decl : Iir) return Foreign_Info_Type; + + -- If not null, this procedure is called when a foreign subprogram is + -- created. + type Foreign_Hook_Access is access procedure (Decl : Iir; + Info : Foreign_Info_Type; + Ortho : Ortho_Nodes.O_Dnode); + Foreign_Hook : Foreign_Hook_Access := null; +end Translation; |