Strictly zero-extend unsigned A-inputs of shift operations
authorClifford Wolf <clifford@clifford.at>
Thu, 6 Mar 2014 10:53:37 +0000 (11:53 +0100)
committerClifford Wolf <clifford@clifford.at>
Thu, 6 Mar 2014 10:53:37 +0000 (11:53 +0100)
kernel/calc.cc
kernel/satgen.h

index a56db93aab4c5d27fd003fe4d12b4d7a513a966f..749589f2042cafaf3feca42fface97f6bcd548f6 100644 (file)
@@ -305,14 +305,14 @@ static RTLIL::Const const_shift(const RTLIL::Const &arg1, const RTLIL::Const &ar
 RTLIL::Const RTLIL::const_shl(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool, int result_len)
 {
        RTLIL::Const arg1_ext = arg1;
-       extend(arg1_ext, result_len, signed1);
+       extend_u0(arg1_ext, result_len, signed1);
        return const_shift(arg1_ext, arg2, false, -1, result_len);
 }
 
 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(arg1_ext, result_len, signed1);
+       extend_u0(arg1_ext, result_len, signed1);
        return const_shift(arg1_ext, arg2, false, +1, result_len);
 }
 
index d9bcb425004fde2cfb34c3f03ce45d4e341dc3ec..3ae9502f8c5904909a271bc00fcdae49529793ce 100644 (file)
@@ -634,7 +634,7 @@ struct SatGen
                                while (undef_y.size() < undef_a.size())
                                        undef_y.push_back(ez->literal());
                                while (undef_y.size() > undef_a.size())
-                                       undef_a.push_back(undef_a.back());
+                                       undef_a.push_back(cell->parameters["\\A_SIGNED"].as_bool() ? undef_a.back() : ez->FALSE);
 
                                tmp = undef_a;
                                for (size_t i = 0; i < b.size(); i++)