From 74c048cdb4b19d41f70880ebf3d3e6eb58404097 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Thu, 26 Jan 2023 07:33:44 +0100 Subject: mcode: add new functions for JIT --- src/ortho/mcode/binary_file-memory.adb | 7 +++++-- src/ortho/mcode/ortho_jit.adb | 8 ++++++-- src/ortho/mcode/ortho_mcode-jit.adb | 28 ++++++++++++++++++++++++++++ src/ortho/mcode/ortho_mcode-jit.ads | 20 ++++++++++++++++++++ src/ortho/ortho_jit.ads | 4 ++++ 5 files changed, 63 insertions(+), 4 deletions(-) (limited to 'src/ortho') 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 . -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 . + 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 . + +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 . 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); -- cgit v1.2.3