diff options
-rw-r--r-- | src/grt/grt-signals.adb | 48 |
1 files changed, 7 insertions, 41 deletions
diff --git a/src/grt/grt-signals.adb b/src/grt/grt-signals.adb index ac78761..1a4454a 100644 --- a/src/grt/grt-signals.adb +++ b/src/grt/grt-signals.adb @@ -446,26 +446,6 @@ package body Grt.Signals is Sign.S.Resolv.Disconnect_Time := Time; end Ghdl_Signal_Set_Disconnect; - procedure Direct_Assign - (Targ : out Value_Union; Val : Ghdl_Value_Ptr; Mode : Mode_Type) - is - begin - case Mode is - when Mode_B1 => - Targ.B1 := Val.B1; - when Mode_E8 => - Targ.E8 := Val.E8; - when Mode_E32 => - Targ.E32 := Val.E32; - when Mode_I32 => - Targ.I32 := Val.I32; - when Mode_I64 => - Targ.I64 := Val.I64; - when Mode_F64 => - Targ.F64 := Val.F64; - end case; - end Direct_Assign; - function Value_Equal (Left, Right : Value_Union; Mode : Mode_Type) return Boolean is @@ -612,20 +592,7 @@ package body Grt.Signals is end if; -- FIXME: can be a bound-error too! if Trans.Kind = Trans_Value then - case Sign.Mode is - when Mode_B1 => - Driver.Last_Trans.Val_Ptr.B1 := Trans.Val.B1; - when Mode_E8 => - Driver.Last_Trans.Val_Ptr.E8 := Trans.Val.E8; - when Mode_E32 => - Driver.Last_Trans.Val_Ptr.E32 := Trans.Val.E32; - when Mode_I32 => - Driver.Last_Trans.Val_Ptr.I32 := Trans.Val.I32; - when Mode_I64 => - Driver.Last_Trans.Val_Ptr.I64 := Trans.Val.I64; - when Mode_F64 => - Driver.Last_Trans.Val_Ptr.F64 := Trans.Val.F64; - end case; + Assign (Driver.Last_Trans.Val_Ptr.all, Trans.Val, Sign.Mode); Free_In (Trans); elsif Trans.Kind = Trans_Error then Error_Trans_Error (Trans); @@ -2745,8 +2712,8 @@ package body Grt.Signals is Trans := Sig.S.Drivers (J - 1).First_Trans.Next; if Trans /= null then if Trans.Kind = Trans_Direct then - Direct_Assign (Sig.S.Drivers (J - 1).First_Trans.Val, - Trans.Val_Ptr, Sig.Mode); + Assign (Sig.S.Drivers (J - 1).First_Trans.Val, + Trans.Val_Ptr.all, Sig.Mode); -- In fact we knew the signal was active! Res := True; elsif Trans.Time = Current_Time then @@ -2874,8 +2841,7 @@ package body Grt.Signals is -- Note: already or will be marked as active in -- update_signals. Mark_Active (Sig); - Direct_Assign (First_Trans.Val, - Trans.Val_Ptr, Sig.Mode); + Assign (First_Trans.Val, Trans.Val_Ptr.all, Sig.Mode); Sig.Driving_Value := First_Trans.Val; elsif Trans.Time = Current_Time then Mark_Active (Sig); @@ -3151,7 +3117,7 @@ package body Grt.Signals is Sig.Is_Direct_Active := False; Trans := Sig.S.Drivers (0).Last_Trans; - Direct_Assign (Sig.Driving_Value, Trans.Val_Ptr, Sig.Mode); + Assign (Sig.Driving_Value, Trans.Val_Ptr.all, Sig.Mode); Sig.S.Drivers (0).First_Trans.Val := Sig.Driving_Value; Set_Effective_Value (Sig, Sig.Driving_Value); @@ -3164,8 +3130,8 @@ package body Grt.Signals is Trans := Sig.S.Drivers (J - 1).First_Trans.Next; if Trans /= null then if Trans.Kind = Trans_Direct then - Direct_Assign (Sig.S.Drivers (J - 1).First_Trans.Val, - Trans.Val_Ptr, Sig.Mode); + Assign (Sig.S.Drivers (J - 1).First_Trans.Val, + Trans.Val_Ptr.all, Sig.Mode); elsif Trans.Time = Current_Time then Free (Sig.S.Drivers (J - 1).First_Trans); Sig.S.Drivers (J - 1).First_Trans := Trans; |