diff options
author | Tristan Gingold <tgingold@free.fr> | 2019-07-25 05:48:04 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2019-07-25 05:48:04 +0200 |
commit | dbdc6a93ab37ad44537d250ec216d682c090b5f0 (patch) | |
tree | 34054ef3be6e34d5414667a164409215ee72182e /src/synth/netlists-locations.adb | |
parent | e5aa8272090bba9224b6e544113ff8b2bce0dd33 (diff) | |
download | ghdl-dbdc6a93ab37ad44537d250ec216d682c090b5f0.tar.gz ghdl-dbdc6a93ab37ad44537d250ec216d682c090b5f0.tar.bz2 ghdl-dbdc6a93ab37ad44537d250ec216d682c090b5f0.zip |
synth: save and display locations for instances.
Diffstat (limited to 'src/synth/netlists-locations.adb')
-rw-r--r-- | src/synth/netlists-locations.adb | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/synth/netlists-locations.adb b/src/synth/netlists-locations.adb new file mode 100644 index 000000000..c754d2855 --- /dev/null +++ b/src/synth/netlists-locations.adb @@ -0,0 +1,69 @@ +-- Locations for instances. +-- Copyright (C) 2019 Tristan Gingold +-- +-- This file is part of GHDL. +-- +-- This program 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 of the License, or +-- (at your option) any later version. +-- +-- This program 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 this program; if not, write to the Free Software +-- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +-- MA 02110-1301, USA. + +with Tables; + +package body Netlists.Locations is + package Loc_Table is new Tables + (Table_Component_Type => Location_Type, + Table_Index_Type => Instance, + Table_Low_Bound => No_Instance, + Table_Initial => 1024); + + procedure Set_Location1 (Inst : Instance; Loc : Location_Type) + is + Cur_Last : constant Instance := Loc_Table.Last; + begin + if Inst > Cur_Last then + Loc_Table.Set_Last (Inst); + for I in Cur_Last + 1 .. Inst - 1 loop + Loc_Table.Table (I) := No_Location; + end loop; + end if; + Loc_Table.Table (Inst) := Loc; + end Set_Location1; + + procedure Set_Location (Inst : Instance; Loc : Location_Type) is + begin + if Flag_Locations then + Set_Location1 (Inst, Loc); + end if; + end Set_Location; + + function Get_Location1 (Inst : Instance) return Location_Type is + begin + if Inst > Loc_Table.Last then + return No_Location; + else + return Loc_Table.Table (Inst); + end if; + end Get_Location1; + + function Get_Location (Inst : Instance) return Location_Type is + begin + if Flag_Locations then + return Get_Location1 (Inst); + else + return No_Location; + end if; + end Get_Location; +begin + Loc_Table.Append (No_Location); +end Netlists.Locations; |