diff options
author | Christos Gentsos <christos.gentsos@cern.ch> | 2019-06-05 15:15:23 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2019-06-06 18:47:05 +0200 |
commit | 2c72cffb32c5bfc081c4a182654f2c46bb288db6 (patch) | |
tree | 65ef32780d6253aea67dde8cc425269645a0d9e8 | |
parent | 5bafb1b3aaf6edebb5308a9c361844b4d4438b6a (diff) | |
download | ghdl-2c72cffb32c5bfc081c4a182654f2c46bb288db6.tar.gz ghdl-2c72cffb32c5bfc081c4a182654f2c46bb288db6.tar.bz2 ghdl-2c72cffb32c5bfc081c4a182654f2c46bb288db6.zip |
synth: handle numeric_std subtraction (addition was already there)
-rw-r--r-- | src/synth/synth-expr.adb | 11 | ||||
-rw-r--r-- | src/vhdl/vhdl-ieee-numeric.adb | 20 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes.ads | 7 |
3 files changed, 38 insertions, 0 deletions
diff --git a/src/synth/synth-expr.adb b/src/synth/synth-expr.adb index d13fc6cfc..d8645eeaf 100644 --- a/src/synth/synth-expr.adb +++ b/src/synth/synth-expr.adb @@ -479,6 +479,17 @@ package body Synth.Expr is Synth_Uresize (Right, Get_Width (Left))), Create_Res_Range (Left, L)); end; + when Iir_Predefined_Ieee_Numeric_Std_Sub_Uns_Nat => + -- "-" (Unsigned, Natural) + declare + L : constant Net := Get_Net (Left); + begin + return Create_Value_Net + (Build_Dyadic (Build_Context, Id_Sub, + L, + Synth_Uresize (Right, Get_Width (Left))), + Create_Res_Range (Left, L)); + end; when Iir_Predefined_Ieee_Numeric_Std_Eq_Uns_Nat => -- "=" (Unsigned, Natural) return Create_Value_Net diff --git a/src/vhdl/vhdl-ieee-numeric.adb b/src/vhdl/vhdl-ieee-numeric.adb index c42fb59b4..0c76ff533 100644 --- a/src/vhdl/vhdl-ieee-numeric.adb +++ b/src/vhdl/vhdl-ieee-numeric.adb @@ -52,6 +52,24 @@ package body Vhdl.Ieee.Numeric is (others => (others => Iir_Predefined_None))); + Sub_Patterns : constant Binary_Pattern_Type := + (Pkg_Std => + (Type_Unsigned => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Sub_Uns_Uns, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Sub_Uns_Nat, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Sub_Nat_Uns, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None), + Type_Signed => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Sub_Sgn_Sgn, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Sub_Sgn_Int, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Sub_Int_Sgn, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None)), + Pkg_Bit => + (others => + (others => Iir_Predefined_None))); + Eq_Patterns : constant Binary_Pattern_Type := (Pkg_Std => (Type_Unsigned => @@ -221,6 +239,8 @@ package body Vhdl.Ieee.Numeric is case Get_Identifier (Decl) is when Name_Op_Plus => Handle_Binary (Add_Patterns); + when Name_Op_Minus => + Handle_Binary (Sub_Patterns); when Name_Op_Equality => Handle_Binary (Eq_Patterns); when Name_To_Bstring diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads index 228b58d68..3f4213ca7 100644 --- a/src/vhdl/vhdl-nodes.ads +++ b/src/vhdl/vhdl-nodes.ads @@ -4815,6 +4815,13 @@ package Vhdl.Nodes is Iir_Predefined_Ieee_Numeric_Std_Add_Sgn_Int, Iir_Predefined_Ieee_Numeric_Std_Add_Int_Sgn, + Iir_Predefined_Ieee_Numeric_Std_Sub_Uns_Uns, + Iir_Predefined_Ieee_Numeric_Std_Sub_Uns_Nat, + Iir_Predefined_Ieee_Numeric_Std_Sub_Nat_Uns, + Iir_Predefined_Ieee_Numeric_Std_Sub_Sgn_Sgn, + Iir_Predefined_Ieee_Numeric_Std_Sub_Sgn_Int, + Iir_Predefined_Ieee_Numeric_Std_Sub_Int_Sgn, + Iir_Predefined_Ieee_Numeric_Std_Eq_Uns_Uns, Iir_Predefined_Ieee_Numeric_Std_Eq_Uns_Nat, Iir_Predefined_Ieee_Numeric_Std_Eq_Nat_Uns, |