diff options
author | Tristan Gingold <tgingold@free.fr> | 2020-01-24 05:44:27 +0100 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2020-01-24 05:44:27 +0100 |
commit | 92819a2603f20025b055cb57af997bbdef60c92c (patch) | |
tree | 288b4125fb472dc3e1c50e78ad233c6277ea5c9d /src/vhdl | |
parent | 2fd7ad7864e34cd621e03f31050a82a5a156ade3 (diff) | |
download | ghdl-92819a2603f20025b055cb57af997bbdef60c92c.tar.gz ghdl-92819a2603f20025b055cb57af997bbdef60c92c.tar.bz2 ghdl-92819a2603f20025b055cb57af997bbdef60c92c.zip |
synth: handle matching comparisons. Fix #1109
Diffstat (limited to 'src/vhdl')
-rw-r--r-- | src/vhdl/vhdl-ieee-numeric.adb | 120 | ||||
-rw-r--r-- | src/vhdl/vhdl-nodes.ads | 42 |
2 files changed, 162 insertions, 0 deletions
diff --git a/src/vhdl/vhdl-ieee-numeric.adb b/src/vhdl/vhdl-ieee-numeric.adb index 10aa92d53..990f74b5e 100644 --- a/src/vhdl/vhdl-ieee-numeric.adb +++ b/src/vhdl/vhdl-ieee-numeric.adb @@ -220,6 +220,114 @@ package body Vhdl.Ieee.Numeric is (others => (others => Iir_Predefined_None))); + Match_Eq_Patterns : constant Binary_Pattern_Type := + (Pkg_Std => + (Type_Unsigned => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Uns_Uns, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Uns_Nat, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Nat_Uns, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None), + Type_Signed => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Sgn_Sgn, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Sgn_Int, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Int_Sgn, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None)), + Pkg_Bit => + (others => + (others => Iir_Predefined_None))); + + Match_Ne_Patterns : constant Binary_Pattern_Type := + (Pkg_Std => + (Type_Unsigned => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Ne_Uns_Uns, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Match_Ne_Uns_Nat, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Ne_Nat_Uns, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None), + Type_Signed => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Ne_Sgn_Sgn, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Match_Ne_Sgn_Int, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Ne_Int_Sgn, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None)), + Pkg_Bit => + (others => + (others => Iir_Predefined_None))); + + Match_Lt_Patterns : constant Binary_Pattern_Type := + (Pkg_Std => + (Type_Unsigned => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Lt_Uns_Uns, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Match_Lt_Uns_Nat, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Lt_Nat_Uns, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None), + Type_Signed => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Lt_Sgn_Sgn, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Match_Lt_Sgn_Int, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Lt_Int_Sgn, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None)), + Pkg_Bit => + (others => + (others => Iir_Predefined_None))); + + Match_Le_Patterns : constant Binary_Pattern_Type := + (Pkg_Std => + (Type_Unsigned => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Le_Uns_Uns, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Match_Le_Uns_Nat, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Le_Nat_Uns, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None), + Type_Signed => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Le_Sgn_Sgn, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Match_Le_Sgn_Int, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Le_Int_Sgn, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None)), + Pkg_Bit => + (others => + (others => Iir_Predefined_None))); + + Match_Gt_Patterns : constant Binary_Pattern_Type := + (Pkg_Std => + (Type_Unsigned => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Gt_Uns_Uns, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Match_Gt_Uns_Nat, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Gt_Nat_Uns, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None), + Type_Signed => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Gt_Sgn_Sgn, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Match_Gt_Sgn_Int, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Gt_Int_Sgn, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None)), + Pkg_Bit => + (others => + (others => Iir_Predefined_None))); + + Match_Ge_Patterns : constant Binary_Pattern_Type := + (Pkg_Std => + (Type_Unsigned => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Ge_Uns_Uns, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Match_Ge_Uns_Nat, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Ge_Nat_Uns, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None), + Type_Signed => + (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Ge_Sgn_Sgn, + Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Match_Ge_Sgn_Int, + Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Match_Ge_Int_Sgn, + Arg_Vect_Log => Iir_Predefined_None, + Arg_Log_Vect => Iir_Predefined_None)), + Pkg_Bit => + (others => + (others => Iir_Predefined_None))); + Neg_Patterns : constant Unary_Pattern_Type := (Pkg_Std => (Type_Unsigned => Iir_Predefined_Ieee_Numeric_Std_Neg_Uns, @@ -645,6 +753,18 @@ package body Vhdl.Ieee.Numeric is Handle_Binary (Gt_Patterns); when Name_Op_Greater_Equal => Handle_Binary (Ge_Patterns); + when Name_Op_Match_Equality => + Handle_Binary (Match_Eq_Patterns); + when Name_Op_Match_Inequality => + Handle_Binary (Match_Ne_Patterns); + when Name_Op_Match_Less => + Handle_Binary (Match_Lt_Patterns); + when Name_Op_Match_Less_Equal => + Handle_Binary (Match_Le_Patterns); + when Name_Op_Match_Greater => + Handle_Binary (Match_Gt_Patterns); + when Name_Op_Match_Greater_Equal => + Handle_Binary (Match_Ge_Patterns); when Name_And => Handle_Binary (And_Patterns); when Name_Or => diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads index 1305632d7..c7bec2747 100644 --- a/src/vhdl/vhdl-nodes.ads +++ b/src/vhdl/vhdl-nodes.ads @@ -5553,6 +5553,48 @@ package Vhdl.Nodes is Iir_Predefined_Ieee_Numeric_Std_Ne_Sgn_Int, Iir_Predefined_Ieee_Numeric_Std_Ne_Int_Sgn, + Iir_Predefined_Ieee_Numeric_Std_Match_Gt_Uns_Uns, + Iir_Predefined_Ieee_Numeric_Std_Match_Gt_Uns_Nat, + Iir_Predefined_Ieee_Numeric_Std_Match_Gt_Nat_Uns, + Iir_Predefined_Ieee_Numeric_Std_Match_Gt_Sgn_Sgn, + Iir_Predefined_Ieee_Numeric_Std_Match_Gt_Sgn_Int, + Iir_Predefined_Ieee_Numeric_Std_Match_Gt_Int_Sgn, + + Iir_Predefined_Ieee_Numeric_Std_Match_Lt_Uns_Uns, + Iir_Predefined_Ieee_Numeric_Std_Match_Lt_Uns_Nat, + Iir_Predefined_Ieee_Numeric_Std_Match_Lt_Nat_Uns, + Iir_Predefined_Ieee_Numeric_Std_Match_Lt_Sgn_Sgn, + Iir_Predefined_Ieee_Numeric_Std_Match_Lt_Sgn_Int, + Iir_Predefined_Ieee_Numeric_Std_Match_Lt_Int_Sgn, + + Iir_Predefined_Ieee_Numeric_Std_Match_Le_Uns_Uns, + Iir_Predefined_Ieee_Numeric_Std_Match_Le_Uns_Nat, + Iir_Predefined_Ieee_Numeric_Std_Match_Le_Nat_Uns, + Iir_Predefined_Ieee_Numeric_Std_Match_Le_Sgn_Sgn, + Iir_Predefined_Ieee_Numeric_Std_Match_Le_Sgn_Int, + Iir_Predefined_Ieee_Numeric_Std_Match_Le_Int_Sgn, + + Iir_Predefined_Ieee_Numeric_Std_Match_Ge_Uns_Uns, + Iir_Predefined_Ieee_Numeric_Std_Match_Ge_Uns_Nat, + Iir_Predefined_Ieee_Numeric_Std_Match_Ge_Nat_Uns, + Iir_Predefined_Ieee_Numeric_Std_Match_Ge_Sgn_Sgn, + Iir_Predefined_Ieee_Numeric_Std_Match_Ge_Sgn_Int, + Iir_Predefined_Ieee_Numeric_Std_Match_Ge_Int_Sgn, + + Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Uns_Uns, + Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Uns_Nat, + Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Nat_Uns, + Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Sgn_Sgn, + Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Sgn_Int, + Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Int_Sgn, + + Iir_Predefined_Ieee_Numeric_Std_Match_Ne_Uns_Uns, + Iir_Predefined_Ieee_Numeric_Std_Match_Ne_Uns_Nat, + Iir_Predefined_Ieee_Numeric_Std_Match_Ne_Nat_Uns, + Iir_Predefined_Ieee_Numeric_Std_Match_Ne_Sgn_Sgn, + Iir_Predefined_Ieee_Numeric_Std_Match_Ne_Sgn_Int, + Iir_Predefined_Ieee_Numeric_Std_Match_Ne_Int_Sgn, + Iir_Predefined_Ieee_Numeric_Std_Shl_Uns_Nat, Iir_Predefined_Ieee_Numeric_Std_Shr_Uns_Nat, Iir_Predefined_Ieee_Numeric_Std_Shl_Sgn_Nat, |