[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v7 73/75] target/riscv: rvv-1.0: add vsetivli instruction
From: |
frank . chang |
Subject: |
[PATCH v7 73/75] target/riscv: rvv-1.0: add vsetivli instruction |
Date: |
Fri, 26 Feb 2021 11:18:57 +0800 |
From: Frank Chang <frank.chang@sifive.com>
Signed-off-by: Frank Chang <frank.chang@sifive.com>
---
target/riscv/insn32.decode | 2 ++
target/riscv/insn_trans/trans_rvv.c.inc | 30 +++++++++++++++++++++++++
2 files changed, 32 insertions(+)
diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode
index 6fb85c83278..472626f1950 100644
--- a/target/riscv/insn32.decode
+++ b/target/riscv/insn32.decode
@@ -78,6 +78,7 @@
@r_vm_0 ...... . ..... ..... ... ..... ....... &rmrr vm=0 %rs2 %rs1 %rd
@r_wdvm ..... wd:1 vm:1 ..... ..... ... ..... ....... &rwdvm %rs2 %rs1 %rd
@r2_zimm11 . zimm:11 ..... ... ..... ....... %rs1 %rd
+@r2_zimm10 .. zimm:10 ..... ... ..... ....... %rs1 %rd
@r2_s ....... ..... ..... ... ..... ....... %rs2 %rs1
@hfence_gvma ....... ..... ..... ... ..... ....... %rs2 %rs1
@@ -647,4 +648,5 @@ vsext_vf4 010010 . ..... 00101 010 ..... 1010111
@r2_vm
vsext_vf8 010010 . ..... 00011 010 ..... 1010111 @r2_vm
vsetvli 0 ........... ..... 111 ..... 1010111 @r2_zimm11
+vsetivli 11 .......... ..... 111 ..... 1010111 @r2_zimm10
vsetvl 1000000 ..... ..... 111 ..... 1010111 @r
diff --git a/target/riscv/insn_trans/trans_rvv.c.inc
b/target/riscv/insn_trans/trans_rvv.c.inc
index 120b32367e5..1e9f5148ccd 100644
--- a/target/riscv/insn_trans/trans_rvv.c.inc
+++ b/target/riscv/insn_trans/trans_rvv.c.inc
@@ -159,6 +159,29 @@ static bool do_vsetvl(DisasContext *ctx, int rd, int rs1,
TCGv s2)
return true;
}
+static bool do_vsetivli(DisasContext *ctx, int rd, TCGv s1, TCGv s2)
+{
+ TCGv dst;
+
+ if (!require_rvv(ctx) || !has_ext(ctx, RVV)) {
+ return false;
+ }
+
+ dst = tcg_temp_new();
+
+ gen_helper_vsetvl(dst, cpu_env, s1, s2);
+ gen_set_gpr(rd, dst);
+ mark_vs_dirty(ctx);
+ tcg_gen_movi_tl(cpu_pc, ctx->pc_succ_insn);
+ lookup_and_goto_ptr(ctx);
+ ctx->base.is_jmp = DISAS_NORETURN;
+
+ tcg_temp_free(s1);
+ tcg_temp_free(s2);
+ tcg_temp_free(dst);
+ return true;
+}
+
static bool trans_vsetvl(DisasContext *ctx, arg_vsetvl *a)
{
TCGv s2 = tcg_temp_new();
@@ -172,6 +195,13 @@ static bool trans_vsetvli(DisasContext *ctx, arg_vsetvli
*a)
return do_vsetvl(ctx, a->rd, a->rs1, s2);
}
+static bool trans_vsetivli(DisasContext *ctx, arg_vsetivli *a)
+{
+ TCGv s1 = tcg_const_tl(a->rs1);
+ TCGv s2 = tcg_const_tl(a->zimm);
+ return do_vsetivli(ctx, a->rd, s1, s2);
+}
+
/* vector register offset from env */
static uint32_t vreg_ofs(DisasContext *s, int reg)
{
--
2.17.1
- [PATCH v7 63/75] target/riscv: rvv-1.0: narrowing floating-point/integer type-convert, (continued)
- [PATCH v7 63/75] target/riscv: rvv-1.0: narrowing floating-point/integer type-convert, frank . chang, 2021/02/25
- [PATCH v7 64/75] target/riscv: rvv-1.0: relax RV_VLEN_MAX to 1024-bits, frank . chang, 2021/02/25
- [PATCH v7 65/75] target/riscv: rvv-1.0: implement vstart CSR, frank . chang, 2021/02/25
- [PATCH v7 66/75] target/riscv: rvv-1.0: trigger illegal instruction exception if frm is not valid, frank . chang, 2021/02/25
- [PATCH v7 67/75] target/riscv: rvv-1.0: set mstatus.SD bit when writing vector CSRs, frank . chang, 2021/02/25
- [PATCH v7 68/75] target/riscv: gdb: support vector registers for rv64 & rv32, frank . chang, 2021/02/25
- [PATCH v7 69/75] target/riscv: rvv-1.0: floating-point reciprocal square-root estimate instruction, frank . chang, 2021/02/25
- [PATCH v7 71/75] target/riscv: set mstatus.SD bit when writing fp CSRs, frank . chang, 2021/02/25
- [PATCH v7 70/75] target/riscv: rvv-1.0: floating-point reciprocal estimate instruction, frank . chang, 2021/02/25
- [PATCH v7 72/75] target/riscv: rvv-1.0: rename r2_zimm to r2_zimm11, frank . chang, 2021/02/25
- [PATCH v7 73/75] target/riscv: rvv-1.0: add vsetivli instruction,
frank . chang <=
- [PATCH v7 74/75] target/riscv: rvv-1.0: add evl parameter to vext_ldst_us(), frank . chang, 2021/02/25
- [PATCH v7 75/75] target/riscv: rvv-1.0: add vector unit-stride mask load/store insns, frank . chang, 2021/02/25