reg_t target_pred = ~0x0;
bool zeroingtarg = false;
#endif
- sv_insn_t insn(p, sv_enabled, bits, floatintmap, xlen, PRED_ARGS, OFFS_ARGS);
+ sv_insn_t insn(p, sv_enabled, bits, floatintmap, xlen, PRED_ARGS, OFFS_ARGS,
+#ifdef INSN_TYPE_SIGNED
+ true
+#else
+ false
+#endif
+ );
p->s.set_insn(&insn, xlen);
#ifdef USING_NOREGS
#include INCLUDEFILE
uint64_t &p_rd, uint64_t &p_rs1, uint64_t &p_rs2, uint64_t &p_rs3,
uint64_t &p_sp, uint64_t *p_im,
int *o_rd, int *o_rs1, int *o_rs2, int *o_rs3, int *o_sp,
- int *o_imm) :
+ int *o_imm,
+ bool _sign) :
insn_t(bits), p(pr), src_bitwidth(0), xlen(_xlen),
- sv_enabled(_sv_enabled), vloop_continue(false),
+ sv_enabled(_sv_enabled), signextended(_sign),
+ vloop_continue(false),
at_least_one_reg_vectorised(false), fimap(f),
offs_rd(o_rd), offs_rs1(o_rs1), offs_rs2(o_rs2), offs_rs3(o_rs3),
offs_sp(o_sp),
spec.reg = reg; //+ *voffs;
spec.offset = voffs;
spec.isvec = r->isvec;
+ spec.signextend = signextended;
return spec;
}
reg_t reg;
int *offset;
bool isvec;
+ bool signextend;
};
class sv_insn_t: public insn_t
uint64_t &p_rd, uint64_t &p_rs1, uint64_t &p_rs2, uint64_t &p_rs3,
uint64_t &p_sp, uint64_t *p_im,
int *o_rd, int *o_rs1, int *o_rs2, int *o_rs3, int *o_sp,
- int *o_imm);
+ int *o_imm,
+ bool _sign);
uint8_t reg_elwidth(reg_t reg, bool intreg);
sv_reg_t rvc_addi4spn_imm() { return sv_reg_t(insn_t::rvc_addi4spn_imm()); }
uint8_t src_bitwidth;
int xlen;
bool sv_enabled;
+ bool signextended;
// cached version of remap: if remap is called multiple times
// by an emulated instruction it would increment the loop offset