From 9e4aca9a9df5d2831a1981abf6a46182bcef33d1 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Thu, 23 Apr 2020 18:17:07 +0200 Subject: synth-oper: handle more operations (comparaisons from std_logic_unsigned). --- src/synth/synth-aggr.adb | 3 ++- src/synth/synth-oper.adb | 30 ++++++++++++++++-------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/synth/synth-aggr.adb b/src/synth/synth-aggr.adb index ad8b5ea05..beaab3aa9 100644 --- a/src/synth/synth-aggr.adb +++ b/src/synth/synth-aggr.adb @@ -467,7 +467,8 @@ package body Synth.Aggr is (Syn_Inst, Get_Type (Aggr)); return Synth_Aggregate_Array (Syn_Inst, Aggr, Res_Type); end; - when Type_Vector | Type_Array => + when Type_Vector + | Type_Array => return Synth_Aggregate_Array (Syn_Inst, Aggr, Aggr_Type); when Type_Record => return Synth_Aggregate_Record (Syn_Inst, Aggr, Aggr_Type); diff --git a/src/synth/synth-oper.adb b/src/synth/synth-oper.adb index 0bd5769e0..8b7b8a57c 100644 --- a/src/synth/synth-oper.adb +++ b/src/synth/synth-oper.adb @@ -1061,28 +1061,29 @@ package body Synth.Oper is return Synth_Sdivmod (Id_Smod, Oper_Right); when Iir_Predefined_Ieee_Numeric_Std_Eq_Uns_Uns - | Iir_Predefined_Ieee_Std_Logic_Unsigned_Eq_Slv_Slv - | Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Uns_Uns => + | Iir_Predefined_Ieee_Std_Logic_Unsigned_Eq_Slv_Slv + | Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Uns_Uns => -- "=" (Unsigned, Unsigned) [resize] return Synth_Compare_Uns_Uns (Id_Eq, Expr_Typ); when Iir_Predefined_Ieee_Numeric_Std_Eq_Uns_Nat - | Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Uns_Nat => + | Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Uns_Nat + | Iir_Predefined_Ieee_Std_Logic_Unsigned_Eq_Slv_Int => -- "=" (Unsigned, Natural) return Synth_Compare_Uns_Nat (Id_Eq, Expr_Typ); when Iir_Predefined_Ieee_Numeric_Std_Eq_Nat_Uns - | Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Nat_Uns => + | Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Nat_Uns => -- "=" (Natural, Unsigned) [resize] return Synth_Compare_Nat_Uns (Id_Eq, Expr_Typ); when Iir_Predefined_Ieee_Numeric_Std_Eq_Sgn_Int - | Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Sgn_Int => + | Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Sgn_Int => -- "=" (Signed, Integer) return Synth_Compare_Sgn_Int (Id_Eq, Expr_Typ); when Iir_Predefined_Ieee_Numeric_Std_Eq_Sgn_Sgn - | Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Sgn_Sgn => + | Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Sgn_Sgn => -- "=" (Signed, Signed) [resize] return Synth_Compare_Sgn_Sgn (Id_Eq, Expr_Typ); when Iir_Predefined_Ieee_Numeric_Std_Eq_Int_Sgn - | Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Int_Sgn => + | Iir_Predefined_Ieee_Numeric_Std_Match_Eq_Int_Sgn => -- "=" (Integer, Signed) return Synth_Compare_Int_Sgn (Id_Eq, Expr_Typ); @@ -1144,28 +1145,29 @@ package body Synth.Oper is return Synth_Compare_Int_Sgn (Id_Slt, Expr_Typ); when Iir_Predefined_Ieee_Numeric_Std_Le_Uns_Uns - | Iir_Predefined_Ieee_Std_Logic_Unsigned_Le_Slv_Slv - | Iir_Predefined_Ieee_Numeric_Std_Match_Le_Uns_Uns => + | Iir_Predefined_Ieee_Std_Logic_Unsigned_Le_Slv_Slv + | Iir_Predefined_Ieee_Numeric_Std_Match_Le_Uns_Uns => -- "<=" (Unsigned, Unsigned) [resize] return Synth_Compare_Uns_Uns (Id_Ule, Expr_Typ); when Iir_Predefined_Ieee_Numeric_Std_Le_Uns_Nat - | Iir_Predefined_Ieee_Numeric_Std_Match_Le_Uns_Nat => + | Iir_Predefined_Ieee_Numeric_Std_Match_Le_Uns_Nat + | Iir_Predefined_Ieee_Std_Logic_Unsigned_Le_Slv_Int => -- "<=" (Unsigned, Natural) return Synth_Compare_Uns_Nat (Id_Ule, Expr_Typ); when Iir_Predefined_Ieee_Numeric_Std_Le_Nat_Uns - | Iir_Predefined_Ieee_Numeric_Std_Match_Le_Nat_Uns => + | Iir_Predefined_Ieee_Numeric_Std_Match_Le_Nat_Uns => -- "<=" (Natural, Unsigned) [resize] return Synth_Compare_Nat_Uns (Id_Ule, Expr_Typ); when Iir_Predefined_Ieee_Numeric_Std_Le_Sgn_Sgn - | Iir_Predefined_Ieee_Numeric_Std_Match_Le_Sgn_Sgn => + | Iir_Predefined_Ieee_Numeric_Std_Match_Le_Sgn_Sgn => -- "<=" (Signed, Signed) return Synth_Compare_Sgn_Sgn (Id_Sle, Expr_Typ); when Iir_Predefined_Ieee_Numeric_Std_Le_Sgn_Int - | Iir_Predefined_Ieee_Numeric_Std_Match_Le_Sgn_Int => + | Iir_Predefined_Ieee_Numeric_Std_Match_Le_Sgn_Int => -- "<=" (Signed, Integer) return Synth_Compare_Sgn_Int (Id_Sle, Expr_Typ); when Iir_Predefined_Ieee_Numeric_Std_Le_Int_Sgn - | Iir_Predefined_Ieee_Numeric_Std_Match_Le_Int_Sgn => + | Iir_Predefined_Ieee_Numeric_Std_Match_Le_Int_Sgn => -- "<=" (Integer, Signed) return Synth_Compare_Int_Sgn (Id_Sle, Expr_Typ); -- cgit v1.2.3