diff options
Diffstat (limited to 'riscv/insns/vadc_vvm.h')
-rw-r--r-- | riscv/insns/vadc_vvm.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/riscv/insns/vadc_vvm.h b/riscv/insns/vadc_vvm.h new file mode 100644 index 0000000..b708ac1 --- /dev/null +++ b/riscv/insns/vadc_vvm.h @@ -0,0 +1,11 @@ +// vadc.vvm vd, vs2, rs1 +require(!(insn.rd() == 0 && P.VU.vlmul > 1)); +VI_VV_LOOP +({ + auto &v0 = P.VU.elt<uint64_t>(0, midx); + const uint128_t op_mask = (UINT64_MAX >> (64 - sew)); + uint64_t carry = (v0 >> mpos) & 0x1; + + uint128_t res = (op_mask & vs1) + (op_mask & vs2) + carry; + vd = res; +}) |