diff options
author | LIU Zhiwei <zhiwei_liu@linux.alibaba.com> | 2024-07-09 19:36:47 +0800 |
---|---|---|
committer | Alistair Francis <alistair.francis@wdc.com> | 2024-07-18 12:00:42 +1000 |
commit | 24da9cbacacadaf95fbddc11da81ff68d3b1e795 (patch) | |
tree | 6a64b8d07b3815d3d65092874025918311a9d286 /target/riscv/translate.c | |
parent | a60ce58fd971bdcbec6ba96ce989fd399ca1f2d7 (diff) | |
download | qemu-24da9cbacacadaf95fbddc11da81ff68d3b1e795.zip qemu-24da9cbacacadaf95fbddc11da81ff68d3b1e795.tar.gz qemu-24da9cbacacadaf95fbddc11da81ff68d3b1e795.tar.bz2 |
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>
Diffstat (limited to 'target/riscv/translate.c')
-rw-r--r-- | target/riscv/translate.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 8a546f4..133550d 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -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); } +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) { DisasContext *ctx = container_of(dcbase, DisasContext, base); |