{
TCGv src1 = tcg_temp_new();
/* Put addr in load_res, data in load_val. */
- gen_get_gpr(src1, a->rs1);
+ gen_get_gpr(ctx, src1, a->rs1);
if (a->rl) {
tcg_gen_mb(TCG_MO_ALL | TCG_BAR_STRL);
}
tcg_gen_mb(TCG_MO_ALL | TCG_BAR_LDAQ);
}
tcg_gen_mov_tl(load_res, src1);
- gen_set_gpr(a->rd, load_val);
+ gen_set_gpr(ctx, a->rd, load_val);
tcg_temp_free(src1);
return true;
TCGLabel *l1 = gen_new_label();
TCGLabel *l2 = gen_new_label();
- gen_get_gpr(src1, a->rs1);
+ gen_get_gpr(ctx, src1, a->rs1);
tcg_gen_brcond_tl(TCG_COND_NE, load_res, src1, l1);
- gen_get_gpr(src2, a->rs2);
+ gen_get_gpr(ctx, src2, a->rs2);
/*
* Note that the TCG atomic primitives are SC,
* so we can ignore AQ/RL along this path.
tcg_gen_atomic_cmpxchg_tl(src1, load_res, load_val, src2,
ctx->mem_idx, mop);
tcg_gen_setcond_tl(TCG_COND_NE, dat, src1, load_val);
- gen_set_gpr(a->rd, dat);
+ gen_set_gpr(ctx, a->rd, dat);
tcg_gen_br(l2);
gen_set_label(l1);
*/
tcg_gen_mb(TCG_MO_ALL + a->aq * TCG_BAR_LDAQ + a->rl * TCG_BAR_STRL);
tcg_gen_movi_tl(dat, 1);
- gen_set_gpr(a->rd, dat);
+ gen_set_gpr(ctx, a->rd, dat);
gen_set_label(l2);
/*
TCGv src1 = tcg_temp_new();
TCGv src2 = tcg_temp_new();
- gen_get_gpr(src1, a->rs1);
- gen_get_gpr(src2, a->rs2);
+ gen_get_gpr(ctx, src1, a->rs1);
+ gen_get_gpr(ctx, src2, a->rs2);
(*func)(src2, src1, src2, ctx->mem_idx, mop);
- gen_set_gpr(a->rd, src2);
+ gen_set_gpr(ctx, a->rd, src2);
tcg_temp_free(src1);
tcg_temp_free(src2);
return true;
REQUIRE_EXT(ctx, RVB);
TCGv source1 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
+ gen_get_gpr(ctx, source1, a->rs1);
if (a->shamt < 32) {
tcg_gen_deposit_z_tl(source1, source1, a->shamt, 32);
tcg_gen_shli_tl(source1, source1, a->shamt);
}
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
return true;
}
REQUIRE_FPU;
REQUIRE_EXT(ctx, RVD);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_addi_tl(t0, t0, a->imm);
tcg_gen_qemu_ld_i64(cpu_fpr[a->rd], t0, ctx->mem_idx, MO_TEQ);
REQUIRE_FPU;
REQUIRE_EXT(ctx, RVD);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_addi_tl(t0, t0, a->imm);
tcg_gen_qemu_st_i64(cpu_fpr[a->rs2], t0, ctx->mem_idx, MO_TEQ);
TCGv t0 = tcg_temp_new();
gen_helper_feq_d(t0, cpu_env, cpu_fpr[a->rs1], cpu_fpr[a->rs2]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
TCGv t0 = tcg_temp_new();
gen_helper_flt_d(t0, cpu_env, cpu_fpr[a->rs1], cpu_fpr[a->rs2]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
TCGv t0 = tcg_temp_new();
gen_helper_fle_d(t0, cpu_env, cpu_fpr[a->rs1], cpu_fpr[a->rs2]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
TCGv t0 = tcg_temp_new();
gen_helper_fclass_d(t0, cpu_fpr[a->rs1]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
}
TCGv t0 = tcg_temp_new();
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_w_d(t0, cpu_env, cpu_fpr[a->rs1]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
TCGv t0 = tcg_temp_new();
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_wu_d(t0, cpu_env, cpu_fpr[a->rs1]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
REQUIRE_EXT(ctx, RVD);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_d_w(cpu_fpr[a->rd], cpu_env, t0);
REQUIRE_EXT(ctx, RVD);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_d_wu(cpu_fpr[a->rd], cpu_env, t0);
TCGv t0 = tcg_temp_new();
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_l_d(t0, cpu_env, cpu_fpr[a->rs1]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
}
TCGv t0 = tcg_temp_new();
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_lu_d(t0, cpu_env, cpu_fpr[a->rs1]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
}
REQUIRE_EXT(ctx, RVD);
#ifdef TARGET_RISCV64
- gen_set_gpr(a->rd, cpu_fpr[a->rs1]);
+ gen_set_gpr(ctx, a->rd, cpu_fpr[a->rs1]);
return true;
#else
qemu_build_not_reached();
REQUIRE_EXT(ctx, RVD);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_d_l(cpu_fpr[a->rd], cpu_env, t0);
REQUIRE_EXT(ctx, RVD);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_d_lu(cpu_fpr[a->rd], cpu_env, t0);
#ifdef TARGET_RISCV64
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_mov_tl(cpu_fpr[a->rd], t0);
tcg_temp_free(t0);
REQUIRE_FPU;
REQUIRE_EXT(ctx, RVF);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_addi_tl(t0, t0, a->imm);
tcg_gen_qemu_ld_i64(cpu_fpr[a->rd], t0, ctx->mem_idx, MO_TEUL);
REQUIRE_FPU;
REQUIRE_EXT(ctx, RVF);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_addi_tl(t0, t0, a->imm);
TCGv t0 = tcg_temp_new();
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_w_s(t0, cpu_env, cpu_fpr[a->rs1]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
TCGv t0 = tcg_temp_new();
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_wu_s(t0, cpu_env, cpu_fpr[a->rs1]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
tcg_gen_extrl_i64_i32(t0, cpu_fpr[a->rs1]);
#endif
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
REQUIRE_EXT(ctx, RVF);
TCGv t0 = tcg_temp_new();
gen_helper_feq_s(t0, cpu_env, cpu_fpr[a->rs1], cpu_fpr[a->rs2]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
}
REQUIRE_EXT(ctx, RVF);
TCGv t0 = tcg_temp_new();
gen_helper_flt_s(t0, cpu_env, cpu_fpr[a->rs1], cpu_fpr[a->rs2]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
}
REQUIRE_EXT(ctx, RVF);
TCGv t0 = tcg_temp_new();
gen_helper_fle_s(t0, cpu_env, cpu_fpr[a->rs1], cpu_fpr[a->rs2]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
}
gen_helper_fclass_s(t0, cpu_fpr[a->rs1]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
REQUIRE_EXT(ctx, RVF);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_s_w(cpu_fpr[a->rd], cpu_env, t0);
REQUIRE_EXT(ctx, RVF);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_s_wu(cpu_fpr[a->rd], cpu_env, t0);
REQUIRE_EXT(ctx, RVF);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_extu_tl_i64(cpu_fpr[a->rd], t0);
gen_nanbox_s(cpu_fpr[a->rd], cpu_fpr[a->rd]);
TCGv t0 = tcg_temp_new();
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_l_s(t0, cpu_env, cpu_fpr[a->rs1]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
}
TCGv t0 = tcg_temp_new();
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_lu_s(t0, cpu_env, cpu_fpr[a->rs1]);
- gen_set_gpr(a->rd, t0);
+ gen_set_gpr(ctx, a->rd, t0);
tcg_temp_free(t0);
return true;
}
REQUIRE_EXT(ctx, RVF);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_s_l(cpu_fpr[a->rd], cpu_env, t0);
REQUIRE_EXT(ctx, RVF);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
gen_set_rm(ctx, a->rm);
gen_helper_fcvt_s_lu(cpu_fpr[a->rd], cpu_env, t0);
check_access(ctx);
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MASK, MO_SB);
- gen_set_gpr(a->rd, t1);
+ gen_set_gpr(ctx, a->rd, t1);
tcg_temp_free(t0);
tcg_temp_free(t1);
check_access(ctx);
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MASK, MO_TESW);
- gen_set_gpr(a->rd, t1);
+ gen_set_gpr(ctx, a->rd, t1);
tcg_temp_free(t0);
tcg_temp_free(t1);
check_access(ctx);
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MASK, MO_TESL);
- gen_set_gpr(a->rd, t1);
+ gen_set_gpr(ctx, a->rd, t1);
tcg_temp_free(t0);
tcg_temp_free(t1);
check_access(ctx);
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MASK, MO_UB);
- gen_set_gpr(a->rd, t1);
+ gen_set_gpr(ctx, a->rd, t1);
tcg_temp_free(t0);
tcg_temp_free(t1);
check_access(ctx);
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MASK, MO_TEUW);
- gen_set_gpr(a->rd, t1);
+ gen_set_gpr(ctx, a->rd, t1);
tcg_temp_free(t0);
tcg_temp_free(t1);
check_access(ctx);
- gen_get_gpr(t0, a->rs1);
- gen_get_gpr(dat, a->rs2);
+ gen_get_gpr(ctx, t0, a->rs1);
+ gen_get_gpr(ctx, dat, a->rs2);
tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MASK, MO_SB);
check_access(ctx);
- gen_get_gpr(t0, a->rs1);
- gen_get_gpr(dat, a->rs2);
+ gen_get_gpr(ctx, t0, a->rs1);
+ gen_get_gpr(ctx, dat, a->rs2);
tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MASK, MO_TESW);
check_access(ctx);
- gen_get_gpr(t0, a->rs1);
- gen_get_gpr(dat, a->rs2);
+ gen_get_gpr(ctx, t0, a->rs1);
+ gen_get_gpr(ctx, dat, a->rs2);
tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MASK, MO_TESL);
check_access(ctx);
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MASK, MO_TEUL);
- gen_set_gpr(a->rd, t1);
+ gen_set_gpr(ctx, a->rd, t1);
tcg_temp_free(t0);
tcg_temp_free(t1);
check_access(ctx);
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MASK, MO_TEQ);
- gen_set_gpr(a->rd, t1);
+ gen_set_gpr(ctx, a->rd, t1);
tcg_temp_free(t0);
tcg_temp_free(t1);
check_access(ctx);
- gen_get_gpr(t0, a->rs1);
- gen_get_gpr(dat, a->rs2);
+ gen_get_gpr(ctx, t0, a->rs1);
+ gen_get_gpr(ctx, dat, a->rs2);
tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx | TB_FLAGS_PRIV_HYP_ACCESS_MASK, MO_TEQ);
check_access(ctx);
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
gen_helper_hyp_hlvx_hu(t1, cpu_env, t0);
- gen_set_gpr(a->rd, t1);
+ gen_set_gpr(ctx, a->rd, t1);
tcg_temp_free(t0);
tcg_temp_free(t1);
check_access(ctx);
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
gen_helper_hyp_hlvx_wu(t1, cpu_env, t0);
- gen_set_gpr(a->rd, t1);
+ gen_set_gpr(ctx, a->rd, t1);
tcg_temp_free(t0);
tcg_temp_free(t1);
TCGv t0 = tcg_temp_new();
- gen_get_gpr(cpu_pc, a->rs1);
+ gen_get_gpr(ctx, cpu_pc, a->rs1);
tcg_gen_addi_tl(cpu_pc, cpu_pc, a->imm);
tcg_gen_andi_tl(cpu_pc, cpu_pc, (target_ulong)-2);
TCGv source1, source2;
source1 = tcg_temp_new();
source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
- gen_get_gpr(source2, a->rs2);
+ gen_get_gpr(ctx, source1, a->rs1);
+ gen_get_gpr(ctx, source2, a->rs2);
tcg_gen_brcond_tl(cond, source1, source2, l);
gen_goto_tb(ctx, 1, ctx->pc_succ_insn);
{
TCGv t0 = tcg_temp_new();
TCGv t1 = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_addi_tl(t0, t0, a->imm);
tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, memop);
- gen_set_gpr(a->rd, t1);
+ gen_set_gpr(ctx, a->rd, t1);
tcg_temp_free(t0);
tcg_temp_free(t1);
return true;
{
TCGv t0 = tcg_temp_new();
TCGv dat = tcg_temp_new();
- gen_get_gpr(t0, a->rs1);
+ gen_get_gpr(ctx, t0, a->rs1);
tcg_gen_addi_tl(t0, t0, a->imm);
- gen_get_gpr(dat, a->rs2);
+ gen_get_gpr(ctx, dat, a->rs2);
tcg_gen_qemu_st_tl(dat, t0, ctx->mem_idx, memop);
tcg_temp_free(t0);
{
REQUIRE_64BIT(ctx);
TCGv t = tcg_temp_new();
- gen_get_gpr(t, a->rs1);
+ gen_get_gpr(ctx, t, a->rs1);
tcg_gen_extract_tl(t, t, a->shamt, 32 - a->shamt);
/* sign-extend for W instructions */
tcg_gen_ext32s_tl(t, t);
- gen_set_gpr(a->rd, t);
+ gen_set_gpr(ctx, a->rd, t);
tcg_temp_free(t);
return true;
}
{
REQUIRE_64BIT(ctx);
TCGv t = tcg_temp_new();
- gen_get_gpr(t, a->rs1);
+ gen_get_gpr(ctx, t, a->rs1);
tcg_gen_sextract_tl(t, t, a->shamt, 32 - a->shamt);
- gen_set_gpr(a->rd, t);
+ gen_set_gpr(ctx, a->rd, t);
tcg_temp_free(t);
return true;
}
TCGv source1 = tcg_temp_new();
TCGv source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
- gen_get_gpr(source2, a->rs2);
+ gen_get_gpr(ctx, source1, a->rs1);
+ gen_get_gpr(ctx, source2, a->rs2);
tcg_gen_andi_tl(source2, source2, 0x1F);
tcg_gen_shl_tl(source1, source1, source2);
tcg_gen_ext32s_tl(source1, source1);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
tcg_temp_free(source2);
return true;
TCGv source1 = tcg_temp_new();
TCGv source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
- gen_get_gpr(source2, a->rs2);
+ gen_get_gpr(ctx, source1, a->rs1);
+ gen_get_gpr(ctx, source2, a->rs2);
/* clear upper 32 */
tcg_gen_ext32u_tl(source1, source1);
tcg_gen_shr_tl(source1, source1, source2);
tcg_gen_ext32s_tl(source1, source1);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
tcg_temp_free(source2);
return true;
TCGv source1 = tcg_temp_new();
TCGv source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
- gen_get_gpr(source2, a->rs2);
+ gen_get_gpr(ctx, source1, a->rs1);
+ gen_get_gpr(ctx, source2, a->rs2);
/*
* first, trick to get it to act like working on 32 bits (get rid of
tcg_gen_andi_tl(source2, source2, 0x1F);
tcg_gen_sar_tl(source1, source1, source2);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
tcg_temp_free(source2);
csr_store = tcg_temp_new(); \
dest = tcg_temp_new(); \
rs1_pass = tcg_temp_new(); \
- gen_get_gpr(source1, a->rs1); \
+ gen_get_gpr(ctx, source1, a->rs1); \
tcg_gen_movi_tl(cpu_pc, ctx->base.pc_next); \
tcg_gen_movi_tl(rs1_pass, a->rs1); \
tcg_gen_movi_tl(csr_store, a->csr); \
} while (0)
#define RISCV_OP_CSR_POST do {\
- gen_set_gpr(a->rd, dest); \
+ gen_set_gpr(ctx, a->rd, dest); \
tcg_gen_movi_tl(cpu_pc, ctx->pc_succ_insn); \
exit_tb(ctx); \
ctx->base.is_jmp = DISAS_NORETURN; \
REQUIRE_EXT(ctx, RVM);
TCGv source1 = tcg_temp_new();
TCGv source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
- gen_get_gpr(source2, a->rs2);
+ gen_get_gpr(ctx, source1, a->rs1);
+ gen_get_gpr(ctx, source2, a->rs2);
tcg_gen_muls2_tl(source2, source1, source1, source2);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
tcg_temp_free(source2);
return true;
REQUIRE_EXT(ctx, RVM);
TCGv source1 = tcg_temp_new();
TCGv source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
- gen_get_gpr(source2, a->rs2);
+ gen_get_gpr(ctx, source1, a->rs1);
+ gen_get_gpr(ctx, source2, a->rs2);
tcg_gen_mulu2_tl(source2, source1, source1, source2);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
tcg_temp_free(source2);
return true;
s1 = tcg_constant_tl(RV_VLEN_MAX);
} else {
s1 = tcg_temp_new();
- gen_get_gpr(s1, a->rs1);
+ gen_get_gpr(ctx, s1, a->rs1);
}
- gen_get_gpr(s2, a->rs2);
+ gen_get_gpr(ctx, s2, a->rs2);
gen_helper_vsetvl(dst, cpu_env, s1, s2);
- gen_set_gpr(a->rd, dst);
+ gen_set_gpr(ctx, a->rd, dst);
tcg_gen_movi_tl(cpu_pc, ctx->pc_succ_insn);
lookup_and_goto_ptr(ctx);
ctx->base.is_jmp = DISAS_NORETURN;
s1 = tcg_constant_tl(RV_VLEN_MAX);
} else {
s1 = tcg_temp_new();
- gen_get_gpr(s1, a->rs1);
+ gen_get_gpr(ctx, s1, a->rs1);
}
gen_helper_vsetvl(dst, cpu_env, s1, s2);
- gen_set_gpr(a->rd, dst);
+ gen_set_gpr(ctx, a->rd, dst);
gen_goto_tb(ctx, 0, ctx->pc_succ_insn);
ctx->base.is_jmp = DISAS_NORETURN;
*/
desc = tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data));
- gen_get_gpr(base, rs1);
+ gen_get_gpr(s, base, rs1);
tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd));
tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0));
stride = tcg_temp_new();
desc = tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data));
- gen_get_gpr(base, rs1);
- gen_get_gpr(stride, rs2);
+ gen_get_gpr(s, base, rs1);
+ gen_get_gpr(s, stride, rs2);
tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd));
tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0));
base = tcg_temp_new();
desc = tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data));
- gen_get_gpr(base, rs1);
+ gen_get_gpr(s, base, rs1);
tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd));
tcg_gen_addi_ptr(index, cpu_env, vreg_ofs(s, vs2));
tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0));
base = tcg_temp_new();
desc = tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data));
- gen_get_gpr(base, rs1);
+ gen_get_gpr(s, base, rs1);
tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd));
tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0));
base = tcg_temp_new();
desc = tcg_constant_i32(simd_desc(s->vlen / 8, s->vlen / 8, data));
- gen_get_gpr(base, rs1);
+ gen_get_gpr(s, base, rs1);
tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, vd));
tcg_gen_addi_ptr(index, cpu_env, vreg_ofs(s, vs2));
tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0));
mask = tcg_temp_new_ptr();
src2 = tcg_temp_new_ptr();
src1 = tcg_temp_new();
- gen_get_gpr(src1, rs1);
+ gen_get_gpr(s, src1, rs1);
data = FIELD_DP32(data, VDATA, MLEN, s->mlen);
data = FIELD_DP32(data, VDATA, VM, vm);
TCGv_i64 src1 = tcg_temp_new_i64();
TCGv tmp = tcg_temp_new();
- gen_get_gpr(tmp, a->rs1);
+ gen_get_gpr(s, tmp, a->rs1);
tcg_gen_ext_tl_i64(src1, tmp);
gvec_fn(s->sew, vreg_ofs(s, a->rd), vreg_ofs(s, a->rs2),
src1, MAXSZ(s), MAXSZ(s));
TCGv_i32 src1 = tcg_temp_new_i32();
TCGv tmp = tcg_temp_new();
- gen_get_gpr(tmp, a->rs1);
+ gen_get_gpr(s, tmp, a->rs1);
tcg_gen_trunc_tl_i32(src1, tmp);
tcg_gen_extract_i32(src1, src1, 0, s->sew + 3);
gvec_fn(s->sew, vreg_ofs(s, a->rd), vreg_ofs(s, a->rs2),
tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_vl, 0, over);
s1 = tcg_temp_new();
- gen_get_gpr(s1, a->rs1);
+ gen_get_gpr(s, s1, a->rs1);
if (s->vl_eq_vlmax) {
tcg_gen_gvec_dup_tl(s->sew, vreg_ofs(s, a->rd),
tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0));
gen_helper_vmpopc_m(dst, mask, src2, cpu_env, desc);
- gen_set_gpr(a->rd, dst);
+ gen_set_gpr(s, a->rd, dst);
tcg_temp_free_ptr(mask);
tcg_temp_free_ptr(src2);
tcg_gen_addi_ptr(mask, cpu_env, vreg_ofs(s, 0));
gen_helper_vmfirst_m(dst, mask, src2, cpu_env, desc);
- gen_set_gpr(a->rd, dst);
+ gen_set_gpr(s, a->rd, dst);
tcg_temp_free_ptr(mask);
tcg_temp_free_ptr(src2);
vec_element_loadx(s, tmp, a->rs2, cpu_gpr[a->rs1], vlmax);
}
tcg_gen_trunc_i64_tl(dest, tmp);
- gen_set_gpr(a->rd, dest);
+ gen_set_gpr(s, a->rd, dest);
tcg_temp_free(dest);
tcg_temp_free_i64(tmp);
/* Wrapper for getting reg values - need to check of reg is zero since
* cpu_gpr[0] is not actually allocated
*/
-static inline void gen_get_gpr(TCGv t, int reg_num)
+static void gen_get_gpr(DisasContext *ctx, TCGv t, int reg_num)
{
if (reg_num == 0) {
tcg_gen_movi_tl(t, 0);
* since we usually avoid calling the OP_TYPE_gen function if we see a write to
* $zero
*/
-static inline void gen_set_gpr(int reg_num_dst, TCGv t)
+static void gen_set_gpr(DisasContext *ctx, int reg_num_dst, TCGv t)
{
if (reg_num_dst != 0) {
tcg_gen_mov_tl(cpu_gpr[reg_num_dst], t);
TCGv source1;
source1 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
+ gen_get_gpr(ctx, source1, a->rs1);
(*func)(source1, source1, a->imm);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
return true;
}
source1 = tcg_temp_new();
source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
+ gen_get_gpr(ctx, source1, a->rs1);
tcg_gen_movi_tl(source2, a->imm);
(*func)(source1, source1, source2);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
tcg_temp_free(source2);
return true;
source1 = tcg_temp_new();
source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
- gen_get_gpr(source2, a->rs2);
+ gen_get_gpr(ctx, source1, a->rs1);
+ gen_get_gpr(ctx, source2, a->rs2);
tcg_gen_ext32s_tl(source1, source1);
tcg_gen_ext32s_tl(source2, source2);
(*func)(source1, source1, source2);
tcg_gen_ext32s_tl(source1, source1);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
tcg_temp_free(source2);
return true;
source1 = tcg_temp_new();
source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
- gen_get_gpr(source2, a->rs2);
+ gen_get_gpr(ctx, source1, a->rs1);
+ gen_get_gpr(ctx, source2, a->rs2);
tcg_gen_ext32u_tl(source1, source1);
tcg_gen_ext32u_tl(source2, source2);
(*func)(source1, source1, source2);
tcg_gen_ext32s_tl(source1, source1);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
tcg_temp_free(source2);
return true;
TCGv source1 = tcg_temp_new();
TCGv source2;
- gen_get_gpr(source1, a->rs1);
+ gen_get_gpr(ctx, source1, a->rs1);
if (a->shamt == (TARGET_LONG_BITS - 8)) {
/* rev8, byte swaps */
tcg_temp_free(source2);
}
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
return true;
}
source1 = tcg_temp_new();
source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
- gen_get_gpr(source2, a->rs2);
+ gen_get_gpr(ctx, source1, a->rs1);
+ gen_get_gpr(ctx, source2, a->rs2);
(*func)(source1, source1, source2);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
tcg_temp_free(source2);
return true;
TCGv source1 = tcg_temp_new();
TCGv source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
- gen_get_gpr(source2, a->rs2);
+ gen_get_gpr(ctx, source1, a->rs1);
+ gen_get_gpr(ctx, source2, a->rs2);
tcg_gen_andi_tl(source2, source2, TARGET_LONG_BITS - 1);
(*func)(source1, source1, source2);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
tcg_temp_free(source2);
return true;
TCGv source1 = tcg_temp_new();
TCGv source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
+ gen_get_gpr(ctx, source1, a->rs1);
tcg_gen_movi_tl(source2, a->shamt);
(*func)(source1, source1, source2);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
tcg_temp_free(source2);
return true;
TCGv source1 = tcg_temp_new();
TCGv source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
- gen_get_gpr(source2, a->rs2);
+ gen_get_gpr(ctx, source1, a->rs1);
+ gen_get_gpr(ctx, source2, a->rs2);
tcg_gen_andi_tl(source2, source2, 31);
(*func)(source1, source1, source2);
tcg_gen_ext32s_tl(source1, source1);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
tcg_temp_free(source2);
return true;
TCGv source1 = tcg_temp_new();
TCGv source2 = tcg_temp_new();
- gen_get_gpr(source1, a->rs1);
+ gen_get_gpr(ctx, source1, a->rs1);
tcg_gen_movi_tl(source2, a->shamt);
(*func)(source1, source1, source2);
tcg_gen_ext32s_tl(source1, source1);
- gen_set_gpr(a->rd, source1);
+ gen_set_gpr(ctx, a->rd, source1);
tcg_temp_free(source1);
tcg_temp_free(source2);
return true;
{
TCGv source = tcg_temp_new();
- gen_get_gpr(source, a->rs1);
+ gen_get_gpr(ctx, source, a->rs1);
(*func)(source, source);
- gen_set_gpr(a->rd, source);
+ gen_set_gpr(ctx, a->rd, source);
tcg_temp_free(source);
return true;
}