sv_reg_t sv_proc_t::rv_sl(sv_reg_t const & lhs, sv_reg_t const & rhs)
{
- return lhs << rhs;
+ uint8_t bitwidth = _insn->src_bitwidth;
+ uint64_t vlhs = 0;
+ uint64_t vrhs = 0;
+ if (rv_int_op_prepare(lhs, rhs, vlhs, vrhs, bitwidth)) {
+ return lhs << rhs;
+ }
+ uint64_t result = vlhs << vrhs;
+ return rv_int_op_finish(lhs, rhs, result, bitwidth);
}
sv_reg_t sv_proc_t::rv_sr(sv_reg_t const & lhs, sv_reg_t const & rhs)
{
- return lhs >> rhs;
+ uint8_t bitwidth = _insn->src_bitwidth;
+ uint64_t vlhs = 0;
+ uint64_t vrhs = 0;
+ if (rv_int_op_prepare(lhs, rhs, vlhs, vrhs, bitwidth)) {
+ return lhs >> rhs;
+ }
+ uint64_t result = vlhs >> vrhs;
+ return rv_int_op_finish(lhs, rhs, result, bitwidth);
}
bool sv_proc_t::rv_lt(sv_reg_t const & lhs, sv_reg_t const & rhs)