qemu-riscv
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH qemu v15 00/15] Add tail agnostic behavior for rvv instructio


From: eop Chen
Subject: Re: [PATCH qemu v15 00/15] Add tail agnostic behavior for rvv instructions
Date: Wed, 11 May 2022 00:55:15 +0800



~eopxd <eopxd@git.sr.ht> 於 2022年5月11日 上午12:49 寫道:

According to v-spec, tail agnostic behavior can be either kept as
undisturbed or set elements' bits to all 1s. To distinguish the
difference of tail policies, QEMU should be able to simulate the tail
agnostic behavior as "set tail elements' bits to all 1s". An option
'rvv_ta_all_1s' is added to enable the behavior, it is default as
disabled.

There are multiple possibility for agnostic elements according to
v-spec. The main intent of this patch-set tries to add option that
can distinguish between tail policies. Setting agnostic elements to
all 1s makes things simple and allow QEMU to express this.

We may explore other possibility of agnostic behavior by adding
other options in the future. Please understand that this patch-set
is limited.

v2 updates:
- Addressed comments from Weiwei Li
- Added commit tail agnostic on load / store instructions (which
 I forgot to include into the patch-set)

v3 updates:
- Missed the very 1st commit, adding it back

v4 updates:
- Renamed vlmax to total_elems
- Deal with tail element when vl_eq_vlmax == true

v5 updates:
- Let `vext_get_total_elems` take `desc` and `esz`
- Utilize `simd_maxsz(desc)` to get `vlenb`
- Fix alignments to code

v6 updates:
- Fix `vext_get_total_elems`

v7 updates:
- Reuse `max_elems` for vector load / store helper functions. The
 translation sets desc's `lmul` to `min(1, lmul)`, making
 `vext_max_elems` equivalent to `vext_get_total_elems`.

v8 updates:
- Simplify `vext_set_elems_1s`, don't need `vext_set_elems_1s_fns`
- Fix `vext_get_total_elems`, it should derive upon EMUL instead
 of LMUL

v9 updates:
- Let instructions that is tail agnostic regardless of vta respect the
 option and not the vta.

v10 updates:
- Correct range to set element to 1s for load instructions

v11 updates:
- Separate addition of option 'rvv_ta_all_1s' as a new (last) commit
- Add description to show intent of the option in first commit for the
 optional tail agnostic behavior
- Tag WeiWei as Reviewed-by for all commits
- Tag Alistair as Reviewed-by for commit 01, 02
- Tag Alistair as Acked-by for commit 03

v12 updates:
- Add missing space in WeiWei's "Reviewed-by" tag

v13 updates:
- Fix tail agnostic for vext_ldst_us. The function operates on input
 parameter 'evl' rather than 'env->vl'.
- Fix tail elements for vector segment load / store instructions
 A vector segment load / store instruction may contain fractional
 lmul with nf * lmul > 1. The rest of the elements in the last
 register should be treated as tail elements.
- Fix tail agnostic length for instructions with mask destination
 register. Instructions with mask destination register should have
 'vlen - vl' tail elements.

v14 updates:
- Pass lmul information to into vector helper function.
 `vext_get_total_elems` needs it.

v15 updates:
- Rebase to latest `master`
- Tag Alistair as Acked by for commit 04 ~ 14

---
- Tag Alistair as Acked by for commit 15

Sorry, type-o here.
This should be “- Tag Alistair as Acked by Reviewed by for commit 15"

Regards,

cop Chen



reply via email to

[Prev in Thread] Current Thread [Next in Thread]