Revision c4ed8c5610984e77a8bbf30e11b4a45a49a5c239 authored by Daniel Henrique Barboza on 14 March 2024, 17:57:00 UTC, committed by Michael Tokarev on 27 March 2024, 10:00:21 UTC
We're going to make changes that will required each helper to be responsible for the 'vstart' management, i.e. we will relieve the 'vstart < vl' assumption that helpers have today. Helpers are usually able to deal with vstart >= vl, i.e. doing nothing aside from setting vstart = 0 at the end, but the tail update functions will update the tail regardless of vstart being valid or not. Unifying the tail update process in a single function that would handle the vstart >= vl case isn't trivial (see [1] for more info). This patch takes a blunt approach: do an early exit in every single vector helper if vstart >= vl, unless the helper is guarded with vstart_eq_zero in the translation. For those cases the helper is ready to deal with cases where vl might be zero, i.e. throwing exceptions based on it like vcpop_m() and first_m(). Helpers that weren't changed: - vcpop_m(), vfirst_m(), vmsetm(), GEN_VEXT_VIOTA_M(): these are guarded directly with vstart_eq_zero; - GEN_VEXT_VCOMPRESS_VM(): guarded with vcompress_vm_check() that checks vstart_eq_zero; - GEN_VEXT_RED(): guarded with either reduction_check() or reduction_widen_check(), both check vstart_eq_zero; - GEN_VEXT_FRED(): guarded with either freduction_check() or freduction_widen_check(), both check vstart_eq_zero. Another exception is vext_ldst_whole(), who operates on effective vector length regardless of the current settings in vtype and vl. [1] https://lore.kernel.org/qemu-riscv/1590234b-0291-432a-a0fa-c5a6876097bc@linux.alibaba.com/ Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20240314175704.478276-7-dbarboza@ventanamicro.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com> (cherry picked from commit df4252b2ecaf93b601109373a17427d1867046e8) Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
1 parent 43ca6c1
File | Mode | Size |
---|---|---|
block-qdict.c | -rw-r--r-- | 22.0 KB |
json-lexer.c | -rw-r--r-- | 10.3 KB |
json-parser-int.h | -rw-r--r-- | 1.3 KB |
json-parser.c | -rw-r--r-- | 15.9 KB |
json-streamer.c | -rw-r--r-- | 3.6 KB |
json-writer.c | -rw-r--r-- | 6.5 KB |
meson.build | -rw-r--r-- | 212 bytes |
qbool.c | -rw-r--r-- | 1.1 KB |
qdict.c | -rw-r--r-- | 10.4 KB |
qjson.c | -rw-r--r-- | 5.7 KB |
qlist.c | -rw-r--r-- | 3.8 KB |
qlit.c | -rw-r--r-- | 3.2 KB |
qnull.c | -rw-r--r-- | 651 bytes |
qnum.c | -rw-r--r-- | 5.1 KB |
qobject-internal.h | -rw-r--r-- | 1009 bytes |
qobject.c | -rw-r--r-- | 2.0 KB |
qstring.c | -rw-r--r-- | 2.2 KB |
Computing file changes ...