From 06e94bd1ac1331b82a371cc0e91097aa7d9d8bbe Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Fri, 27 Jan 2023 18:53:27 +0100 Subject: elab-memtype: add Read_Ptr, Write_Ptr --- src/synth/elab-memtype.adb | 17 +++++++++++++++++ src/synth/elab-memtype.ads | 5 +++++ 2 files changed, 22 insertions(+) (limited to 'src') 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; -- cgit v1.2.3