aboutsummaryrefslogtreecommitdiffstats
path: root/src/ortho
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2023-01-26 07:33:44 +0100
committerTristan Gingold <tgingold@free.fr>2023-01-26 21:56:29 +0100
commit74c048cdb4b19d41f70880ebf3d3e6eb58404097 (patch)
tree9180f7dedb279cede535e375da4cb7cf0ff3d8bc /src/ortho
parent061d1a8726712c3f57b8fe57bf7ef89331a33ed0 (diff)
downloadghdl-74c048cdb4b19d41f70880ebf3d3e6eb58404097.tar.gz
ghdl-74c048cdb4b19d41f70880ebf3d3e6eb58404097.tar.bz2
ghdl-74c048cdb4b19d41f70880ebf3d3e6eb58404097.zip
mcode: add new functions for JIT
Diffstat (limited to 'src/ortho')
-rw-r--r--src/ortho/mcode/binary_file-memory.adb7
-rw-r--r--src/ortho/mcode/ortho_jit.adb8
-rw-r--r--src/ortho/mcode/ortho_mcode-jit.adb28
-rw-r--r--src/ortho/mcode/ortho_mcode-jit.ads20
-rw-r--r--src/ortho/ortho_jit.ads4
5 files changed, 63 insertions, 4 deletions
diff --git a/src/ortho/mcode/binary_file-memory.adb b/src/ortho/mcode/binary_file-memory.adb
index 2442952c1..4c823701c 100644
--- a/src/ortho/mcode/binary_file-memory.adb
+++ b/src/ortho/mcode/binary_file-memory.adb
@@ -204,9 +204,12 @@ package body Binary_File.Memory is
end if;
end Write_Memory_Relocate;
- function Get_Section_Addr (Sect : Section_Acc) return System.Address is
+ function Get_Section_Addr (Sect : Section_Acc) return System.Address
+ is
+ function To_Address is new Ada.Unchecked_Conversion
+ (Source => Byte_Array_Acc, Target => System.Address);
begin
- return Sect.Data (0)'Address;
+ return To_Address (Sect.Data);
end Get_Section_Addr;
function Get_Section_Size (Sect : Section_Acc) return Pc_Type is
diff --git a/src/ortho/mcode/ortho_jit.adb b/src/ortho/mcode/ortho_jit.adb
index 84145f747..41777b1da 100644
--- a/src/ortho/mcode/ortho_jit.adb
+++ b/src/ortho/mcode/ortho_jit.adb
@@ -14,8 +14,6 @@
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <gnu.org/licenses>.
-with System.Storage_Elements; use System.Storage_Elements;
-
with GNAT.OS_Lib; use GNAT.OS_Lib;
with Ada.Text_IO;
@@ -48,6 +46,12 @@ package body Ortho_Jit is
function Get_Address (Decl : O_Dnode) return Address
renames Ortho_Mcode.Jit.Get_Address;
+ function Get_Byte_Size (Typ : O_Tnode) return Storage_Count
+ renames Ortho_Mcode.Jit.Get_Type_Size;
+
+ function Get_Field_Offset (Field : O_Fnode) return Storage_Count
+ renames Ortho_Mcode.Jit.Get_Field_Offset;
+
-- Do link.
procedure Link (Status : out Boolean) is
begin
diff --git a/src/ortho/mcode/ortho_mcode-jit.adb b/src/ortho/mcode/ortho_mcode-jit.adb
index 7e845cc6e..8e72913a7 100644
--- a/src/ortho/mcode/ortho_mcode-jit.adb
+++ b/src/ortho/mcode/ortho_mcode-jit.adb
@@ -1,3 +1,19 @@
+-- JIT features for ortho mcode.
+-- Copyright (C) 2006-2023 Tristan Gingold
+--
+-- 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, see <gnu.org/licenses>.
+
with Ada.Unchecked_Conversion;
with Ortho_Code.Binary;
@@ -25,4 +41,16 @@ package body Ortho_Mcode.Jit is
return Conv (Get_Symbol_Vaddr
(Get_Decl_Symbol (Ortho_Code.O_Dnode (Decl))));
end Get_Address;
+
+ function Get_Type_Size (Typ : O_Tnode) return Storage_Count is
+ begin
+ return Storage_Count
+ (Ortho_Code.Types.Get_Type_Size (Ortho_Code.O_Tnode (Typ)));
+ end Get_Type_Size;
+
+ function Get_Field_Offset (Field : O_Fnode) return Storage_Count is
+ begin
+ return Storage_Count
+ (Ortho_Code.Types.Get_Field_Offset (Ortho_Code.O_Fnode (Field)));
+ end Get_Field_Offset;
end Ortho_Mcode.Jit;
diff --git a/src/ortho/mcode/ortho_mcode-jit.ads b/src/ortho/mcode/ortho_mcode-jit.ads
index c689a1e12..019538dd9 100644
--- a/src/ortho/mcode/ortho_mcode-jit.ads
+++ b/src/ortho/mcode/ortho_mcode-jit.ads
@@ -1,3 +1,20 @@
+-- JIT features for ortho mcode.
+-- Copyright (C) 2006-2023 Tristan Gingold
+--
+-- 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, see <gnu.org/licenses>.
+
+with System.Storage_Elements; use System.Storage_Elements;
with System; use System;
package Ortho_Mcode.Jit is
@@ -6,4 +23,7 @@ package Ortho_Mcode.Jit is
-- Get address of a global.
function Get_Address (Decl : O_Dnode) return Address;
+
+ function Get_Type_Size (Typ : O_Tnode) return Storage_Count;
+ function Get_Field_Offset (Field : O_Fnode) return Storage_Count;
end Ortho_Mcode.Jit;
diff --git a/src/ortho/ortho_jit.ads b/src/ortho/ortho_jit.ads
index bc01c9e2c..80540aed2 100644
--- a/src/ortho/ortho_jit.ads
+++ b/src/ortho/ortho_jit.ads
@@ -15,6 +15,7 @@
-- along with this program. If not, see <gnu.org/licenses>.
with System; use System;
+with System.Storage_Elements; use System.Storage_Elements;
with Ortho_Nodes; use Ortho_Nodes;
package Ortho_Jit is
@@ -26,6 +27,9 @@ package Ortho_Jit is
-- Get address of a global.
function Get_Address (Decl : O_Dnode) return Address;
+ function Get_Byte_Size (Typ : O_Tnode) return Storage_Count;
+ function Get_Field_Offset (Field : O_Fnode) return Storage_Count;
+
-- Do link.
procedure Link (Status : out Boolean);