qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v12 08/61] target/riscv: add fault-only-first unit stride loa


From: Richard Henderson
Subject: Re: [PATCH v12 08/61] target/riscv: add fault-only-first unit stride load
Date: Sat, 17 Dec 2022 10:28:42 -0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2

On 12/17/22 10:21, Philippe Mathieu-Daudé wrote:
(unburying an old patch)

On 1/7/20 17:24, LIU Zhiwei wrote:
The unit-stride fault-only-fault load instructions are used to
vectorize loops with data-dependent exit conditions(while loops).
These instructions execute as a regular load except that they
will only take a trap on element 0.

Signed-off-by: LIU Zhiwei <zhiwei_liu@c-sky.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
  target/riscv/helper.h                   |  22 +++++
  target/riscv/insn32.decode              |   7 ++
  target/riscv/insn_trans/trans_rvv.inc.c |  73 ++++++++++++++++
  target/riscv/vector_helper.c            | 110 ++++++++++++++++++++++++
  4 files changed, 212 insertions(+)

+/*
+ *** unit-stride fault-only-fisrt load instructions
+ */
+static inline void
+vext_ldff(void *vd, void *v0, target_ulong base,
+          CPURISCVState *env, uint32_t desc,
+          vext_ldst_elem_fn *ldst_elem,
+          clear_fn *clear_elem,
+          uint32_t esz, uint32_t msz, uintptr_t ra)
+{
+    void *host;
+    uint32_t i, k, vl = 0;
+    uint32_t mlen = vext_mlen(desc);
+    uint32_t nf = vext_nf(desc);
+    uint32_t vm = vext_vm(desc);
+    uint32_t vlmax = vext_maxsz(desc) / esz;
+    target_ulong addr, offset, remain;
+
+    /* probe every access*/
+    for (i = 0; i < env->vl; i++) {
+        if (!vm && !vext_elem_mask(v0, mlen, i)) {
+            continue;
+        }
+        addr = base + nf * i * msz;
+        if (i == 0) {
+            probe_pages(env, addr, nf * msz, ra, MMU_DATA_LOAD);

Shouldn't we check page_check_range() in user-mode here?

No, stick to the common interface.


r~



reply via email to

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