}
*/
+sv_reg_t sv_proc_t::get_intreg(reg_t reg)
+{
+ uint8_t elwidth = _insn->reg_elwidth(reg, true);
+ uint64_t data = _insn->p->get_state()->XPR[reg];
+ return sv_reg_t(data, elwidth);
+}
+
#define GET_REG(name) \
sv_reg_t sv_proc_t::get_##name() \
{ \
reg_t reg = _insn->name (); \
- uint8_t elwidth = _insn->reg_elwidth(reg, true); \
- uint64_t data = _insn->p->get_state()->XPR[reg]; \
- return sv_reg_t(data, elwidth); \
+ return get_intreg(reg); \
}
GET_REG(rs1)
sv_reg_t sv_proc_t::get_shamt()
{
- return sv_reg_t(_insn->i_imm() & 0x3F);
+ return sv_reg_t(_insn->i_imm() & 0x3F); // XXX TODO: has to be elwidth'd
}
sv_reg_t sv_proc_t::get_rvc_sp()
{
- return (_insn->p->get_state()->XPR[X_SP]);
+ return get_intreg(X_SP); // XXX TODO: work out redirection
}
sv_reg_t sv_proc_t::uint64_max()