// vrgather.vx vd, vs2, rs1, vm # vd[i] = (rs1 >= VLMAX) ? 0 : vs2[rs1]; require((insn.rd() & (P.VU.vlmul - 1)) == 0); require((insn.rs2() & (P.VU.vlmul - 1)) == 0); require(insn.rd() != insn.rs2()); if (insn.v_vm() == 0) require(insn.rd() != 0); reg_t rs1 = RS1; VI_LOOP_BASE switch (sew) { case e8: P.VU.elt(rd_num, i, true) = rs1 >= P.VU.vlmax ? 0 : P.VU.elt(rs2_num, rs1); break; case e16: P.VU.elt(rd_num, i, true) = rs1 >= P.VU.vlmax ? 0 : P.VU.elt(rs2_num, rs1); break; case e32: P.VU.elt(rd_num, i, true) = rs1 >= P.VU.vlmax ? 0 : P.VU.elt(rs2_num, rs1); break; default: P.VU.elt(rd_num, i, true) = rs1 >= P.VU.vlmax ? 0 : P.VU.elt(rs2_num, rs1); break; } VI_LOOP_END;