From: Clifford Wolf Date: Tue, 5 Nov 2013 09:22:22 +0000 (+0100) Subject: Fixed sign handling in const eval of sshl and sshr X-Git-Tag: yosys-0.2.0~408 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=27fec4e77c8d116deb90398400f5f2a1eb5cf785;p=yosys.git Fixed sign handling in const eval of sshl and sshr --- diff --git a/kernel/calc.cc b/kernel/calc.cc index 2e9be437c..efb09c398 100644 --- a/kernel/calc.cc +++ b/kernel/calc.cc @@ -286,13 +286,17 @@ RTLIL::Const RTLIL::const_shr(const RTLIL::Const &arg1, const RTLIL::Const &arg2 return const_shift(arg1_ext, arg2, false, +1, result_len); } -RTLIL::Const RTLIL::const_sshl(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool, bool, int result_len) +RTLIL::Const RTLIL::const_sshl(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len) { + if (!signed1) + return const_shl(arg1, arg2, signed1, signed2, result_len); return const_shift(arg1, arg2, true, -1, result_len); } -RTLIL::Const RTLIL::const_sshr(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool, bool, int result_len) +RTLIL::Const RTLIL::const_sshr(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len) { + if (!signed1) + return const_shr(arg1, arg2, signed1, signed2, result_len); return const_shift(arg1, arg2, true, +1, result_len); }