]> git.proxmox.com Git - mirror_qemu.git/commitdiff
target/arm: Optimize MVE VDUP
authorPeter Maydell <peter.maydell@linaro.org>
Mon, 13 Sep 2021 09:54:35 +0000 (10:54 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Tue, 21 Sep 2021 15:28:27 +0000 (16:28 +0100)
Optimize the MVE VDUP insns by using TCG vector ops when possible.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20210913095440.13462-8-peter.maydell@linaro.org

target/arm/translate-mve.c

index d30c7e57ea3701a16d74d6e27979f8b3c4566980..13de55242e2523d52cdce2efbd91cad22910ae72 100644 (file)
@@ -500,11 +500,15 @@ static bool trans_VDUP(DisasContext *s, arg_VDUP *a)
         return true;
     }
 
-    qd = mve_qreg_ptr(a->qd);
     rt = load_reg(s, a->rt);
-    tcg_gen_dup_i32(a->size, rt, rt);
-    gen_helper_mve_vdup(cpu_env, qd, rt);
-    tcg_temp_free_ptr(qd);
+    if (mve_no_predication(s)) {
+        tcg_gen_gvec_dup_i32(a->size, mve_qreg_offset(a->qd), 16, 16, rt);
+    } else {
+        qd = mve_qreg_ptr(a->qd);
+        tcg_gen_dup_i32(a->size, rt, rt);
+        gen_helper_mve_vdup(cpu_env, qd, rt);
+        tcg_temp_free_ptr(qd);
+    }
     tcg_temp_free_i32(rt);
     mve_update_eci(s);
     return true;