aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/vhdl-ieee-numeric.adb
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2019-08-30 03:54:04 +0200
committerTristan Gingold <tgingold@free.fr>2019-08-30 03:54:04 +0200
commitef80528ce62cfe8d17723f8142118057da8ad369 (patch)
tree0716e1b5b25081a4229f087ac9500c1d49438435 /src/vhdl/vhdl-ieee-numeric.adb
parent18ae5082cbae9ebc652455419b60a9d420281688 (diff)
downloadghdl-ef80528ce62cfe8d17723f8142118057da8ad369.tar.gz
ghdl-ef80528ce62cfe8d17723f8142118057da8ad369.tar.bz2
ghdl-ef80528ce62cfe8d17723f8142118057da8ad369.zip
vhdl: recognize ieee.numeric_std std_match.
Diffstat (limited to 'src/vhdl/vhdl-ieee-numeric.adb')
-rw-r--r--src/vhdl/vhdl-ieee-numeric.adb32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/vhdl/vhdl-ieee-numeric.adb b/src/vhdl/vhdl-ieee-numeric.adb
index 4a9ba8508..a1ac7927e 100644
--- a/src/vhdl/vhdl-ieee-numeric.adb
+++ b/src/vhdl/vhdl-ieee-numeric.adb
@@ -429,6 +429,36 @@ package body Vhdl.Ieee.Numeric is
raise Error;
end if;
end Handle_Resize;
+
+ procedure Handle_Std_Match
+ is
+ Predefined : Iir_Predefined_Functions;
+ begin
+ if Arg1_Kind /= Arg2_Kind or else Arg1_Sign /= Arg2_Sign then
+ raise Error;
+ end if;
+
+ if Arg1_Kind = Arg_Scal and Arg1_Sign = Type_Log then
+ Predefined := Iir_Predefined_Ieee_Numeric_Std_Match_Log;
+ elsif Arg1_Kind = Arg_Vect then
+ case Arg1_Sign is
+ when Type_Unsigned =>
+ Predefined := Iir_Predefined_Ieee_Numeric_Std_Match_Uns;
+ when Type_Signed =>
+ Predefined := Iir_Predefined_Ieee_Numeric_Std_Match_Sgn;
+ when Type_Suv =>
+ Predefined := Iir_Predefined_Ieee_Numeric_Std_Match_Suv;
+ when Type_Slv =>
+ Predefined := Iir_Predefined_Ieee_Numeric_Std_Match_Slv;
+ when Type_Log =>
+ raise Error;
+ end case;
+ else
+ raise Error;
+ end if;
+
+ Set_Implicit_Definition (Decl, Predefined);
+ end Handle_Std_Match;
begin
Decl := Get_Declaration_Chain (Pkg_Decl);
@@ -537,6 +567,8 @@ package body Vhdl.Ieee.Numeric is
Handle_To_Signed;
when Name_Resize =>
Handle_Resize;
+ when Name_Std_Match =>
+ Handle_Std_Match;
when others =>
null;
end case;