diff options
| -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,  | 
