Fixed return size of const_*() eval functions
authorClifford Wolf <clifford@clifford.at>
Sun, 31 Aug 2014 16:08:26 +0000 (18:08 +0200)
committerClifford Wolf <clifford@clifford.at>
Sun, 31 Aug 2014 16:08:26 +0000 (18:08 +0200)
kernel/calc.cc

index 29717aad5d91193c9ae85bd093de49db87f2f015..7bfdb895568434e2af019330aa3da045f044c930 100644 (file)
@@ -35,6 +35,8 @@ static void extend(RTLIL::Const &arg, int width, bool is_signed)
 
        while (int(arg.bits.size()) < width)
                arg.bits.push_back(padding);
+
+       arg.bits.resize(width);
 }
 
 static void extend_u0(RTLIL::Const &arg, int width, bool is_signed)
@@ -46,6 +48,8 @@ static void extend_u0(RTLIL::Const &arg, int width, bool is_signed)
 
        while (int(arg.bits.size()) < width)
                arg.bits.push_back(padding);
+
+       arg.bits.resize(width);
 }
 
 static BigInteger const2big(const RTLIL::Const &val, bool as_signed, int &undef_bit_pos)
@@ -312,7 +316,7 @@ RTLIL::Const RTLIL::const_shl(const RTLIL::Const &arg1, const RTLIL::Const &arg2
 RTLIL::Const RTLIL::const_shr(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool, int result_len)
 {
        RTLIL::Const arg1_ext = arg1;
-       extend_u0(arg1_ext, result_len, signed1);
+       extend_u0(arg1_ext, std::max(result_len, SIZE(arg1)), signed1);
        return const_shift_worker(arg1_ext, arg2, false, +1, result_len);
 }