mirror of https://gitee.com/openkylin/qemu.git
target/riscv: Reassign instructions to the Zbs-extension
The following instructions are part of Zbs: - b{set,clr,ext,inv} - b{set,clr,ext,inv}i Signed-off-by: Philipp Tomsich <philipp.tomsich@vrull.eu> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Acked-by: Bin Meng <bmeng.cn@gmail.com> Message-id: 20210911140016.834071-9-philipp.tomsich@vrull.eu Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
628d8c88c1
commit
f36a4a89aa
|
@ -689,19 +689,11 @@ min 0000101 .......... 100 ..... 0110011 @r
|
|||
minu 0000101 .......... 101 ..... 0110011 @r
|
||||
max 0000101 .......... 110 ..... 0110011 @r
|
||||
maxu 0000101 .......... 111 ..... 0110011 @r
|
||||
bset 0010100 .......... 001 ..... 0110011 @r
|
||||
bclr 0100100 .......... 001 ..... 0110011 @r
|
||||
binv 0110100 .......... 001 ..... 0110011 @r
|
||||
bext 0100100 .......... 101 ..... 0110011 @r
|
||||
ror 0110000 .......... 101 ..... 0110011 @r
|
||||
rol 0110000 .......... 001 ..... 0110011 @r
|
||||
grev 0110100 .......... 101 ..... 0110011 @r
|
||||
gorc 0010100 .......... 101 ..... 0110011 @r
|
||||
|
||||
bseti 00101. ........... 001 ..... 0010011 @sh
|
||||
bclri 01001. ........... 001 ..... 0010011 @sh
|
||||
binvi 01101. ........... 001 ..... 0010011 @sh
|
||||
bexti 01001. ........... 101 ..... 0010011 @sh
|
||||
rori 01100. ........... 101 ..... 0010011 @sh
|
||||
grevi 01101. ........... 101 ..... 0010011 @sh
|
||||
gorci 00101. ........... 101 ..... 0010011 @sh
|
||||
|
@ -722,3 +714,12 @@ roriw 0110000 .......... 101 ..... 0011011 @sh5
|
|||
greviw 0110100 .......... 101 ..... 0011011 @sh5
|
||||
gorciw 0010100 .......... 101 ..... 0011011 @sh5
|
||||
|
||||
# *** RV32 Zbs Standard Extension ***
|
||||
bclr 0100100 .......... 001 ..... 0110011 @r
|
||||
bclri 01001. ........... 001 ..... 0010011 @sh
|
||||
bext 0100100 .......... 101 ..... 0110011 @r
|
||||
bexti 01001. ........... 101 ..... 0010011 @sh
|
||||
binv 0110100 .......... 001 ..... 0110011 @r
|
||||
binvi 01101. ........... 001 ..... 0010011 @sh
|
||||
bset 0010100 .......... 001 ..... 0110011 @r
|
||||
bseti 00101. ........... 001 ..... 0010011 @sh
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* RISC-V translation routines for the RVB draft and Zba Standard Extension.
|
||||
* RISC-V translation routines for the RVB draft Zb[as] Standard Extension.
|
||||
*
|
||||
* Copyright (c) 2020 Kito Cheng, kito.cheng@sifive.com
|
||||
* Copyright (c) 2020 Frank Chang, frank.chang@sifive.com
|
||||
|
@ -24,11 +24,16 @@
|
|||
} \
|
||||
} while (0)
|
||||
|
||||
#define REQUIRE_ZBS(ctx) do { \
|
||||
if (!RISCV_CPU(ctx->cs)->cfg.ext_zbs) { \
|
||||
return false; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
static void gen_clz(TCGv ret, TCGv arg1)
|
||||
{
|
||||
tcg_gen_clzi_tl(ret, arg1, TARGET_LONG_BITS);
|
||||
}
|
||||
|
||||
static bool trans_clz(DisasContext *ctx, arg_clz *a)
|
||||
{
|
||||
REQUIRE_EXT(ctx, RVB);
|
||||
|
@ -165,13 +170,13 @@ static void gen_bset(TCGv ret, TCGv arg1, TCGv shamt)
|
|||
|
||||
static bool trans_bset(DisasContext *ctx, arg_bset *a)
|
||||
{
|
||||
REQUIRE_EXT(ctx, RVB);
|
||||
REQUIRE_ZBS(ctx);
|
||||
return gen_shift(ctx, a, EXT_NONE, gen_bset);
|
||||
}
|
||||
|
||||
static bool trans_bseti(DisasContext *ctx, arg_bseti *a)
|
||||
{
|
||||
REQUIRE_EXT(ctx, RVB);
|
||||
REQUIRE_ZBS(ctx);
|
||||
return gen_shift_imm_tl(ctx, a, EXT_NONE, gen_bset);
|
||||
}
|
||||
|
||||
|
@ -187,13 +192,13 @@ static void gen_bclr(TCGv ret, TCGv arg1, TCGv shamt)
|
|||
|
||||
static bool trans_bclr(DisasContext *ctx, arg_bclr *a)
|
||||
{
|
||||
REQUIRE_EXT(ctx, RVB);
|
||||
REQUIRE_ZBS(ctx);
|
||||
return gen_shift(ctx, a, EXT_NONE, gen_bclr);
|
||||
}
|
||||
|
||||
static bool trans_bclri(DisasContext *ctx, arg_bclri *a)
|
||||
{
|
||||
REQUIRE_EXT(ctx, RVB);
|
||||
REQUIRE_ZBS(ctx);
|
||||
return gen_shift_imm_tl(ctx, a, EXT_NONE, gen_bclr);
|
||||
}
|
||||
|
||||
|
@ -209,13 +214,13 @@ static void gen_binv(TCGv ret, TCGv arg1, TCGv shamt)
|
|||
|
||||
static bool trans_binv(DisasContext *ctx, arg_binv *a)
|
||||
{
|
||||
REQUIRE_EXT(ctx, RVB);
|
||||
REQUIRE_ZBS(ctx);
|
||||
return gen_shift(ctx, a, EXT_NONE, gen_binv);
|
||||
}
|
||||
|
||||
static bool trans_binvi(DisasContext *ctx, arg_binvi *a)
|
||||
{
|
||||
REQUIRE_EXT(ctx, RVB);
|
||||
REQUIRE_ZBS(ctx);
|
||||
return gen_shift_imm_tl(ctx, a, EXT_NONE, gen_binv);
|
||||
}
|
||||
|
||||
|
@ -227,13 +232,13 @@ static void gen_bext(TCGv ret, TCGv arg1, TCGv shamt)
|
|||
|
||||
static bool trans_bext(DisasContext *ctx, arg_bext *a)
|
||||
{
|
||||
REQUIRE_EXT(ctx, RVB);
|
||||
REQUIRE_ZBS(ctx);
|
||||
return gen_shift(ctx, a, EXT_NONE, gen_bext);
|
||||
}
|
||||
|
||||
static bool trans_bexti(DisasContext *ctx, arg_bexti *a)
|
||||
{
|
||||
REQUIRE_EXT(ctx, RVB);
|
||||
REQUIRE_ZBS(ctx);
|
||||
return gen_shift_imm_tl(ctx, a, EXT_NONE, gen_bext);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue