aboutsummaryrefslogtreecommitdiff
path: root/target/riscv/translate.c
diff options
context:
space:
mode:
authorLIU Zhiwei <zhiwei_liu@linux.alibaba.com>2024-07-09 19:36:47 +0800
committerAlistair Francis <alistair.francis@wdc.com>2024-07-18 12:00:42 +1000
commit24da9cbacacadaf95fbddc11da81ff68d3b1e795 (patch)
tree6a64b8d07b3815d3d65092874025918311a9d286 /target/riscv/translate.c
parenta60ce58fd971bdcbec6ba96ce989fd399ca1f2d7 (diff)
downloadqemu-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.c21
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);