target/riscv: Convert RVXI fence insns to decodetree
Acked-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de> Signed-off-by: Peer Adelt <peer.adelt@hni.uni-paderborn.de>
This commit is contained in:
parent
b73a987b09
commit
0c865e856a
@ -82,3 +82,5 @@ srl 0000000 ..... ..... 101 ..... 0110011 @r
|
||||
sra 0100000 ..... ..... 101 ..... 0110011 @r
|
||||
or 0000000 ..... ..... 110 ..... 0110011 @r
|
||||
and 0000000 ..... ..... 111 ..... 0110011 @r
|
||||
fence ---- pred:4 succ:4 ----- 000 ----- 0001111
|
||||
fence_i ---- ---- ---- ----- 001 ----- 0001111
|
||||
|
@ -318,3 +318,22 @@ static bool trans_sraw(DisasContext *ctx, arg_sraw *a)
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool trans_fence(DisasContext *ctx, arg_fence *a)
|
||||
{
|
||||
/* FENCE is a full memory barrier. */
|
||||
tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_fence_i(DisasContext *ctx, arg_fence_i *a)
|
||||
{
|
||||
/*
|
||||
* FENCE_I is a no-op in QEMU,
|
||||
* however we need to end the translation block
|
||||
*/
|
||||
tcg_gen_movi_tl(cpu_pc, ctx->pc_succ_insn);
|
||||
tcg_gen_exit_tb(NULL, 0);
|
||||
ctx->base.is_jmp = DISAS_NORETURN;
|
||||
return true;
|
||||
}
|
||||
|
@ -1950,18 +1950,6 @@ static void decode_RV32_64G(DisasContext *ctx)
|
||||
gen_fp_arith(ctx, MASK_OP_FP_ARITH(ctx->opcode), rd, rs1, rs2,
|
||||
GET_RM(ctx->opcode));
|
||||
break;
|
||||
case OPC_RISC_FENCE:
|
||||
if (ctx->opcode & 0x1000) {
|
||||
/* FENCE_I is a no-op in QEMU,
|
||||
* however we need to end the translation block */
|
||||
tcg_gen_movi_tl(cpu_pc, ctx->pc_succ_insn);
|
||||
tcg_gen_exit_tb(NULL, 0);
|
||||
ctx->base.is_jmp = DISAS_NORETURN;
|
||||
} else {
|
||||
/* FENCE is a full memory barrier. */
|
||||
tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC);
|
||||
}
|
||||
break;
|
||||
case OPC_RISC_SYSTEM:
|
||||
gen_system(ctx, MASK_OP_SYSTEM(ctx->opcode), rd, rs1,
|
||||
(ctx->opcode & 0xFFF00000) >> 20);
|
||||
|
Loading…
Reference in New Issue
Block a user