aboutsummaryrefslogtreecommitdiffstats
path: root/src/synth
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2023-01-27 18:53:27 +0100
committerTristan Gingold <tgingold@free.fr>2023-01-27 20:30:08 +0100
commit06e94bd1ac1331b82a371cc0e91097aa7d9d8bbe (patch)
treefcdc3c4fee261eac26a97eceac8711c5b90b65a9 /src/synth
parent33a923a2be7c78d4e95e31c69c7c125acb2619bc (diff)
downloadghdl-06e94bd1ac1331b82a371cc0e91097aa7d9d8bbe.tar.gz
ghdl-06e94bd1ac1331b82a371cc0e91097aa7d9d8bbe.tar.bz2
ghdl-06e94bd1ac1331b82a371cc0e91097aa7d9d8bbe.zip
elab-memtype: add Read_Ptr, Write_Ptr
Diffstat (limited to 'src/synth')
-rw-r--r--src/synth/elab-memtype.adb17
-rw-r--r--src/synth/elab-memtype.ads5
2 files changed, 22 insertions, 0 deletions
diff --git a/src/synth/elab-memtype.adb b/src/synth/elab-memtype.adb
index 8a9babd3d..91e38a900 100644
--- a/src/synth/elab-memtype.adb
+++ b/src/synth/elab-memtype.adb
@@ -122,4 +122,21 @@ package body Elab.Memtype is
return V;
end Read_Fp64;
+ procedure Write_Ptr (Mem : Memory_Ptr; Val : Memory_Ptr)
+ is
+ V : Memory_Ptr;
+ for V'Address use To_Address (Mem);
+ pragma Import (Ada, V);
+ begin
+ V := Val;
+ end Write_Ptr;
+
+ function Read_Ptr (Mem : Memory_Ptr) return Memory_Ptr
+ is
+ V : Memory_Ptr;
+ for V'Address use To_Address (Mem);
+ pragma Import (Ada, V);
+ begin
+ return V;
+ end Read_Ptr;
end Elab.Memtype;
diff --git a/src/synth/elab-memtype.ads b/src/synth/elab-memtype.ads
index ee562779a..2b4cb14e7 100644
--- a/src/synth/elab-memtype.ads
+++ b/src/synth/elab-memtype.ads
@@ -37,6 +37,8 @@ package Elab.Memtype is
function To_Memory_Ptr is new Ada.Unchecked_Conversion
(System.Address, Memory_Ptr);
+ Ptr_Size : constant Size_Type := Standard'Address_Size / 8;
+
-- Low-level functions.
function "+" (Base : Memory_Ptr; Off : Size_Type) return Memory_Ptr;
@@ -57,4 +59,7 @@ package Elab.Memtype is
procedure Write_Fp64 (Mem : Memory_Ptr; Val : Fp64);
function Read_Fp64 (Mem : Memory_Ptr) return Fp64;
+
+ procedure Write_Ptr (Mem : Memory_Ptr; Val : Memory_Ptr);
+ function Read_Ptr (Mem : Memory_Ptr) return Memory_Ptr;
end Elab.Memtype;