aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2020-03-10 20:47:00 +0100
committerTristan Gingold <tgingold@free.fr>2020-03-10 20:47:00 +0100
commit7de4670eaaf229205ece2de7d0af733fd863e6fa (patch)
tree786ae2be7d7a6a99916012cf2fe117023a9b2131 /src
parent9867eb89230df9bf5f02e9d35d0ec478c6f63f0b (diff)
downloadghdl-7de4670eaaf229205ece2de7d0af733fd863e6fa.tar.gz
ghdl-7de4670eaaf229205ece2de7d0af733fd863e6fa.tar.bz2
ghdl-7de4670eaaf229205ece2de7d0af733fd863e6fa.zip
vhdl: recognize mod/rem operators.
Diffstat (limited to 'src')
-rw-r--r--src/vhdl/vhdl-ieee-numeric.adb40
-rw-r--r--src/vhdl/vhdl-nodes.ads14
2 files changed, 54 insertions, 0 deletions
diff --git a/src/vhdl/vhdl-ieee-numeric.adb b/src/vhdl/vhdl-ieee-numeric.adb
index 990f74b5e..f03ac61d4 100644
--- a/src/vhdl/vhdl-ieee-numeric.adb
+++ b/src/vhdl/vhdl-ieee-numeric.adb
@@ -112,6 +112,42 @@ package body Vhdl.Ieee.Numeric is
(others =>
(others => Iir_Predefined_None)));
+ Rem_Patterns : constant Binary_Pattern_Type :=
+ (Pkg_Std =>
+ (Type_Unsigned =>
+ (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Rem_Uns_Uns,
+ Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Rem_Uns_Nat,
+ Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Rem_Nat_Uns,
+ Arg_Vect_Log => Iir_Predefined_None,
+ Arg_Log_Vect => Iir_Predefined_None),
+ Type_Signed =>
+ (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Rem_Sgn_Sgn,
+ Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Rem_Sgn_Int,
+ Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Rem_Int_Sgn,
+ Arg_Vect_Log => Iir_Predefined_None,
+ Arg_Log_Vect => Iir_Predefined_None)),
+ Pkg_Bit =>
+ (others =>
+ (others => Iir_Predefined_None)));
+
+ Mod_Patterns : constant Binary_Pattern_Type :=
+ (Pkg_Std =>
+ (Type_Unsigned =>
+ (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Mod_Uns_Uns,
+ Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Mod_Uns_Nat,
+ Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Mod_Nat_Uns,
+ Arg_Vect_Log => Iir_Predefined_None,
+ Arg_Log_Vect => Iir_Predefined_None),
+ Type_Signed =>
+ (Arg_Vect_Vect => Iir_Predefined_Ieee_Numeric_Std_Mod_Sgn_Sgn,
+ Arg_Vect_Scal => Iir_Predefined_Ieee_Numeric_Std_Mod_Sgn_Int,
+ Arg_Scal_Vect => Iir_Predefined_Ieee_Numeric_Std_Mod_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 =>
@@ -741,6 +777,10 @@ package body Vhdl.Ieee.Numeric is
Handle_Binary (Mul_Patterns);
when Name_Op_Div =>
Handle_Binary (Div_Patterns);
+ when Name_Mod =>
+ Handle_Binary (Mod_Patterns);
+ when Name_Rem =>
+ Handle_Binary (Rem_Patterns);
when Name_Op_Equality =>
Handle_Binary (Eq_Patterns);
when Name_Op_Inequality =>
diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads
index a9ba20275..54fba3db2 100644
--- a/src/vhdl/vhdl-nodes.ads
+++ b/src/vhdl/vhdl-nodes.ads
@@ -5527,6 +5527,20 @@ package Vhdl.Nodes is
Iir_Predefined_Ieee_Numeric_Std_Div_Sgn_Int,
Iir_Predefined_Ieee_Numeric_Std_Div_Int_Sgn,
+ Iir_Predefined_Ieee_Numeric_Std_Rem_Uns_Uns,
+ Iir_Predefined_Ieee_Numeric_Std_Rem_Uns_Nat,
+ Iir_Predefined_Ieee_Numeric_Std_Rem_Nat_Uns,
+ Iir_Predefined_Ieee_Numeric_Std_Rem_Sgn_Sgn,
+ Iir_Predefined_Ieee_Numeric_Std_Rem_Sgn_Int,
+ Iir_Predefined_Ieee_Numeric_Std_Rem_Int_Sgn,
+
+ Iir_Predefined_Ieee_Numeric_Std_Mod_Uns_Uns,
+ Iir_Predefined_Ieee_Numeric_Std_Mod_Uns_Nat,
+ Iir_Predefined_Ieee_Numeric_Std_Mod_Nat_Uns,
+ Iir_Predefined_Ieee_Numeric_Std_Mod_Sgn_Sgn,
+ Iir_Predefined_Ieee_Numeric_Std_Mod_Sgn_Int,
+ Iir_Predefined_Ieee_Numeric_Std_Mod_Int_Sgn,
+
Iir_Predefined_Ieee_Numeric_Std_Gt_Uns_Uns,
Iir_Predefined_Ieee_Numeric_Std_Gt_Uns_Nat,
Iir_Predefined_Ieee_Numeric_Std_Gt_Nat_Uns,