mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 01:03:55 -06:00
target/riscv: zfh: half-precision computational
Signed-off-by: Kito Cheng <kito.cheng@sifive.com> Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com> Signed-off-by: Frank Chang <frank.chang@sifive.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-id: 20211210074329.5775-3-frank.chang@sifive.com Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
915f77b211
commit
00c1899f12
5 changed files with 255 additions and 0 deletions
|
@ -63,3 +63,132 @@ static bool trans_fsh(DisasContext *ctx, arg_fsh *a)
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_fmadd_h(DisasContext *ctx, arg_fmadd_h *a)
|
||||
{
|
||||
REQUIRE_FPU;
|
||||
REQUIRE_ZFH(ctx);
|
||||
|
||||
gen_set_rm(ctx, a->rm);
|
||||
gen_helper_fmadd_h(cpu_fpr[a->rd], cpu_env, cpu_fpr[a->rs1],
|
||||
cpu_fpr[a->rs2], cpu_fpr[a->rs3]);
|
||||
mark_fs_dirty(ctx);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_fmsub_h(DisasContext *ctx, arg_fmsub_h *a)
|
||||
{
|
||||
REQUIRE_FPU;
|
||||
REQUIRE_ZFH(ctx);
|
||||
|
||||
gen_set_rm(ctx, a->rm);
|
||||
gen_helper_fmsub_h(cpu_fpr[a->rd], cpu_env, cpu_fpr[a->rs1],
|
||||
cpu_fpr[a->rs2], cpu_fpr[a->rs3]);
|
||||
mark_fs_dirty(ctx);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_fnmsub_h(DisasContext *ctx, arg_fnmsub_h *a)
|
||||
{
|
||||
REQUIRE_FPU;
|
||||
REQUIRE_ZFH(ctx);
|
||||
|
||||
gen_set_rm(ctx, a->rm);
|
||||
gen_helper_fnmsub_h(cpu_fpr[a->rd], cpu_env, cpu_fpr[a->rs1],
|
||||
cpu_fpr[a->rs2], cpu_fpr[a->rs3]);
|
||||
mark_fs_dirty(ctx);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_fnmadd_h(DisasContext *ctx, arg_fnmadd_h *a)
|
||||
{
|
||||
REQUIRE_FPU;
|
||||
REQUIRE_ZFH(ctx);
|
||||
|
||||
gen_set_rm(ctx, a->rm);
|
||||
gen_helper_fnmadd_h(cpu_fpr[a->rd], cpu_env, cpu_fpr[a->rs1],
|
||||
cpu_fpr[a->rs2], cpu_fpr[a->rs3]);
|
||||
mark_fs_dirty(ctx);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_fadd_h(DisasContext *ctx, arg_fadd_h *a)
|
||||
{
|
||||
REQUIRE_FPU;
|
||||
REQUIRE_ZFH(ctx);
|
||||
|
||||
gen_set_rm(ctx, a->rm);
|
||||
gen_helper_fadd_h(cpu_fpr[a->rd], cpu_env,
|
||||
cpu_fpr[a->rs1], cpu_fpr[a->rs2]);
|
||||
mark_fs_dirty(ctx);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_fsub_h(DisasContext *ctx, arg_fsub_h *a)
|
||||
{
|
||||
REQUIRE_FPU;
|
||||
REQUIRE_ZFH(ctx);
|
||||
|
||||
gen_set_rm(ctx, a->rm);
|
||||
gen_helper_fsub_h(cpu_fpr[a->rd], cpu_env,
|
||||
cpu_fpr[a->rs1], cpu_fpr[a->rs2]);
|
||||
mark_fs_dirty(ctx);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_fmul_h(DisasContext *ctx, arg_fmul_h *a)
|
||||
{
|
||||
REQUIRE_FPU;
|
||||
REQUIRE_ZFH(ctx);
|
||||
|
||||
gen_set_rm(ctx, a->rm);
|
||||
gen_helper_fmul_h(cpu_fpr[a->rd], cpu_env,
|
||||
cpu_fpr[a->rs1], cpu_fpr[a->rs2]);
|
||||
mark_fs_dirty(ctx);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_fdiv_h(DisasContext *ctx, arg_fdiv_h *a)
|
||||
{
|
||||
REQUIRE_FPU;
|
||||
REQUIRE_ZFH(ctx);
|
||||
|
||||
gen_set_rm(ctx, a->rm);
|
||||
gen_helper_fdiv_h(cpu_fpr[a->rd], cpu_env,
|
||||
cpu_fpr[a->rs1], cpu_fpr[a->rs2]);
|
||||
mark_fs_dirty(ctx);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_fsqrt_h(DisasContext *ctx, arg_fsqrt_h *a)
|
||||
{
|
||||
REQUIRE_FPU;
|
||||
REQUIRE_ZFH(ctx);
|
||||
|
||||
gen_set_rm(ctx, a->rm);
|
||||
gen_helper_fsqrt_h(cpu_fpr[a->rd], cpu_env, cpu_fpr[a->rs1]);
|
||||
mark_fs_dirty(ctx);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_fmin_h(DisasContext *ctx, arg_fmin_h *a)
|
||||
{
|
||||
REQUIRE_FPU;
|
||||
REQUIRE_ZFH(ctx);
|
||||
|
||||
gen_helper_fmin_h(cpu_fpr[a->rd], cpu_env, cpu_fpr[a->rs1],
|
||||
cpu_fpr[a->rs2]);
|
||||
mark_fs_dirty(ctx);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_fmax_h(DisasContext *ctx, arg_fmax_h *a)
|
||||
{
|
||||
REQUIRE_FPU;
|
||||
REQUIRE_ZFH(ctx);
|
||||
|
||||
gen_helper_fmax_h(cpu_fpr[a->rd], cpu_env, cpu_fpr[a->rs1],
|
||||
cpu_fpr[a->rs2]);
|
||||
mark_fs_dirty(ctx);
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue