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
|
-- 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;
with Ortho_Ident; use Ortho_Ident;
with Types; use Types;
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;
type Foreign_Kind_Type is (Foreign_Unknown,
Foreign_Vhpidirect,
Foreign_Intrinsic);
type Foreign_Info_Type (Kind : Foreign_Kind_Type := Foreign_Unknown)
is record
Subprg : O_Ident;
case Kind is
when Foreign_Unknown =>
null;
when Foreign_Vhpidirect =>
Lib : Name_Id;
when Foreign_Intrinsic =>
null;
end case;
end record;
Foreign_Bad : constant Foreign_Info_Type := (Kind => Foreign_Unknown,
Subprg => O_Ident_Nul);
-- 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; Extract_Name : Boolean)
return Foreign_Info_Type;
end Translation;
|