#endif
if (vlen > 1)
{
- fprintf(stderr, "reg %s %x vloop %d vlen %d stop %d pred %lx\n",
+ fprintf(stderr, "reg %s %x vloop %d vlen %d stop %d pred %lx rd%lx\n",
xstr(INSN), INSNCODE, voffs, vlen, insn.stop_vloop(),
- dest_pred & (1<<voffs));
+ dest_pred & (1<<voffs), READ_REG(insn._rd()));
}
insn.reset_caches(); // ready to increment offsets in next iteration
if (insn.stop_vloop())
// is not being "redirected", so just return the actual reg.
if (!r->active)
{
- vloop_continue = false;
return reg; // not active: return as-is
}
+ vloop_continue = true;
// next we go through the lookup table. *THIS* is why the
// sv_reg_entry table is 32 entries (5-bit) *NOT* 6 bits
// we return the re-mapped register...
if (!r->isvec) // scalar
{
- vloop_continue = false;
return reg;
}
+ vloop_continue = true;
// aaand now, as it's a "vector", FINALLY we can add on the loop-offset
// which was passed in to the sv_insn_t constructor (by reference)
public:
sv_insn_t(processor_t *pr, insn_bits_t bits, unsigned int f,
uint64_t &p_rd, uint64_t &p_rs1, uint64_t &p_rs2, uint64_t &p_rs3) :
- insn_t(bits), p(pr), vloop_continue(true), fimap(f),
+ insn_t(bits), p(pr), vloop_continue(false), fimap(f),
cached_rd(0xff), cached_rs1(0xff),
cached_rs2(0xff), cached_rs3(0xff),
offs_rd(0), offs_rs1(0),
sv_pred_entry* get_predentry(uint64_t reg, bool isint);
reg_t predicate(uint64_t reg, bool isint, bool &zeroing);
- void reset_vloop_check(void) { vloop_continue = true; }
+ void reset_vloop_check(void) { vloop_continue = false; }
bool stop_vloop(void) { return !vloop_continue; }
private:
}
else
{
- if (!sv_check_reg(isint, reg))
+ if (sv_check_reg(isint, reg))
{
- vloop_continue = false;
+ vloop_continue = true;
}
}
return cached;