Reuse 32-bit right shift instructions.
Signed-off-by: LIU Zhiwei <[email protected]>
---
target/riscv/insn_trans/trans_rvi.c.inc | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/target/riscv/insn_trans/trans_rvi.c.inc
b/target/riscv/insn_trans/trans_rvi.c.inc
index 6201c07795..698a28731e 100644
--- a/target/riscv/insn_trans/trans_rvi.c.inc
+++ b/target/riscv/insn_trans/trans_rvi.c.inc
@@ -303,11 +303,17 @@ static bool trans_slli(DisasContext *ctx, arg_slli *a)
static bool trans_srli(DisasContext *ctx, arg_srli *a)
{
+ if (ctx->uxl32) {
+ return trans_srliw(ctx, a);
+ }
return gen_shifti(ctx, a, tcg_gen_shr_tl);
}
static bool trans_srai(DisasContext *ctx, arg_srai *a)
{
+ if (ctx->uxl32) {
+ return trans_sraiw(ctx, a);
+ }
return gen_shifti(ctx, a, tcg_gen_sar_tl);
}
@@ -343,11 +349,17 @@ static bool trans_xor(DisasContext *ctx, arg_xor *a)
static bool trans_srl(DisasContext *ctx, arg_srl *a)
{
+ if (ctx->uxl32) {
+ return trans_srlw(ctx, a);
+ }
return gen_shift(ctx, a, &tcg_gen_shr_tl);
}
static bool trans_sra(DisasContext *ctx, arg_sra *a)
{
+ if (ctx->uxl32) {
+ return trans_sraw(ctx, a);
+ }
return gen_shift(ctx, a, &tcg_gen_sar_tl);
}
--
2.17.1