mirror of https://github.com/xemu-project/xemu.git
target/riscv: Move gen_amo before implement Zabha
Signed-off-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20240709113652.1239-7-zhiwei_liu@linux.alibaba.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
a60ce58fd9
commit
24da9cbaca
|
@ -96,27 +96,6 @@ static bool gen_sc(DisasContext *ctx, arg_atomic *a, MemOp mop)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool gen_amo(DisasContext *ctx, arg_atomic *a,
|
|
||||||
void(*func)(TCGv, TCGv, TCGv, TCGArg, MemOp),
|
|
||||||
MemOp mop)
|
|
||||||
{
|
|
||||||
TCGv dest = dest_gpr(ctx, a->rd);
|
|
||||||
TCGv src1, src2 = get_gpr(ctx, a->rs2, EXT_NONE);
|
|
||||||
|
|
||||||
if (ctx->cfg_ptr->ext_zama16b) {
|
|
||||||
mop |= MO_ATOM_WITHIN16;
|
|
||||||
} else {
|
|
||||||
mop |= MO_ALIGN;
|
|
||||||
}
|
|
||||||
|
|
||||||
decode_save_opc(ctx);
|
|
||||||
src1 = get_address(ctx, a->rs1, 0);
|
|
||||||
func(dest, src1, src2, ctx->mem_idx, mop);
|
|
||||||
|
|
||||||
gen_set_gpr(ctx, a->rd, dest);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool trans_lr_w(DisasContext *ctx, arg_lr_w *a)
|
static bool trans_lr_w(DisasContext *ctx, arg_lr_w *a)
|
||||||
{
|
{
|
||||||
REQUIRE_A_OR_ZALRSC(ctx);
|
REQUIRE_A_OR_ZALRSC(ctx);
|
||||||
|
|
|
@ -1077,6 +1077,27 @@ static bool gen_unary_per_ol(DisasContext *ctx, arg_r2 *a, DisasExtend ext,
|
||||||
return gen_unary(ctx, a, ext, f_tl);
|
return gen_unary(ctx, a, ext, f_tl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool gen_amo(DisasContext *ctx, arg_atomic *a,
|
||||||
|
void(*func)(TCGv, TCGv, TCGv, TCGArg, MemOp),
|
||||||
|
MemOp mop)
|
||||||
|
{
|
||||||
|
TCGv dest = dest_gpr(ctx, a->rd);
|
||||||
|
TCGv src1, src2 = get_gpr(ctx, a->rs2, EXT_NONE);
|
||||||
|
|
||||||
|
if (ctx->cfg_ptr->ext_zama16b) {
|
||||||
|
mop |= MO_ATOM_WITHIN16;
|
||||||
|
} else {
|
||||||
|
mop |= MO_ALIGN;
|
||||||
|
}
|
||||||
|
|
||||||
|
decode_save_opc(ctx);
|
||||||
|
src1 = get_address(ctx, a->rs1, 0);
|
||||||
|
func(dest, src1, src2, ctx->mem_idx, mop);
|
||||||
|
|
||||||
|
gen_set_gpr(ctx, a->rd, dest);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static uint32_t opcode_at(DisasContextBase *dcbase, target_ulong pc)
|
static uint32_t opcode_at(DisasContextBase *dcbase, target_ulong pc)
|
||||||
{
|
{
|
||||||
DisasContext *ctx = container_of(dcbase, DisasContext, base);
|
DisasContext *ctx = container_of(dcbase, DisasContext, base);
|
||||||
|
|
Loading…
Reference in New Issue