[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 04/22] target/sparc: Introduce gen_{load,store}_fpr_Q
|
From: |
Richard Henderson |
|
Subject: |
[PATCH 04/22] target/sparc: Introduce gen_{load,store}_fpr_Q |
|
Date: |
Fri, 3 Nov 2023 10:38:23 -0700 |
Use them for trans_FMOVq.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/sparc/translate.c | 25 +++++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)
diff --git a/target/sparc/translate.c b/target/sparc/translate.c
index cdc85be807..0e494d3ebd 100644
--- a/target/sparc/translate.c
+++ b/target/sparc/translate.c
@@ -264,6 +264,22 @@ static TCGv_i64 gen_dest_fpr_D(DisasContext *dc, unsigned
int dst)
return cpu_fpr[DFPREG(dst) / 2];
}
+static TCGv_i128 gen_load_fpr_Q(DisasContext *dc, unsigned int src)
+{
+ TCGv_i128 ret = tcg_temp_new_i128();
+
+ src = QFPREG(src);
+ tcg_gen_concat_i64_i128(ret, cpu_fpr[src / 2 + 1], cpu_fpr[src / 2]);
+ return ret;
+}
+
+static void gen_store_fpr_Q(DisasContext *dc, unsigned int dst, TCGv_i128 v)
+{
+ dst = DFPREG(dst);
+ tcg_gen_extr_i128_i64(cpu_fpr[dst / 2 + 1], cpu_fpr[dst / 2], v);
+ gen_update_fprs_dirty(dc, dst);
+}
+
static void gen_op_load_fpr_QT0(unsigned int src)
{
tcg_gen_st_i64(cpu_fpr[src / 2], tcg_env, offsetof(CPUSPARCState, qt0) +
@@ -4615,7 +4631,7 @@ TRANS(FsTOx, 64, do_env_df, a, gen_helper_fstox)
static bool trans_FMOVq(DisasContext *dc, arg_FMOVq *a)
{
- int rd, rs;
+ TCGv_i128 t;
if (!avail_64(dc)) {
return false;
@@ -4628,11 +4644,8 @@ static bool trans_FMOVq(DisasContext *dc, arg_FMOVq *a)
}
gen_op_clear_ieee_excp_and_FTT();
- rd = QFPREG(a->rd);
- rs = QFPREG(a->rs);
- tcg_gen_mov_i64(cpu_fpr[rd / 2], cpu_fpr[rs / 2]);
- tcg_gen_mov_i64(cpu_fpr[rd / 2 + 1], cpu_fpr[rs / 2 + 1]);
- gen_update_fprs_dirty(dc, rd);
+ t = gen_load_fpr_Q(dc, a->rs);
+ gen_store_fpr_Q(dc, a->rd, t);
return advance_pc(dc);
}
--
2.34.1
- [PATCH 09/22] target/sparc: Use i128 for FqTOd, FqTOx, (continued)
- [PATCH 09/22] target/sparc: Use i128 for FqTOd, FqTOx, Richard Henderson, 2023/11/03
- [PATCH 06/22] target/sparc: Use i128 for FSQRTq, Richard Henderson, 2023/11/03
- [PATCH 12/22] target/sparc: Use i128 for FdTOq, FxTOq, Richard Henderson, 2023/11/03
- [PATCH 02/22] target/sparc: Use tcg_gen_qemu_{ld, st}_i128 for ASI_M_BFILL, Richard Henderson, 2023/11/03
- [PATCH 16/22] target/split: Split ver from env->fsr, Richard Henderson, 2023/11/03
- [PATCH 07/22] target/sparc: Use i128 for FADDq, FSUBq, FMULq, FDIVq, Richard Henderson, 2023/11/03
- [PATCH 03/22] target/sparc: Remove gen_dest_fpr_F, Richard Henderson, 2023/11/03
- [PATCH 10/22] target/sparc: Use i128 for FCMPq, FCMPEq, Richard Henderson, 2023/11/03
- [PATCH 05/22] target/sparc: Inline FNEG, FABS, Richard Henderson, 2023/11/03
- [PATCH 13/22] target/sparc: Use i128 for Fdmulq, Richard Henderson, 2023/11/03
- [PATCH 04/22] target/sparc: Introduce gen_{load,store}_fpr_Q,
Richard Henderson <=
- [PATCH 08/22] target/sparc: Use i128 for FqTOs, FqTOi, Richard Henderson, 2023/11/03
- [PATCH 17/22] target/sparc: Clear cexc and ftt in do_check_ieee_exceptions, Richard Henderson, 2023/11/03
- [PATCH 18/22] target/sparc: Merge check_ieee_exceptions with FPop helpers, Richard Henderson, 2023/11/03
- [PATCH 22/22] target/sparc: Remove FSR_FTT_NMASK, FSR_FTT_CEXC_NMASK, Richard Henderson, 2023/11/03
- [PATCH 14/22] target/sparc: Remove qt0, qt1 temporaries, Richard Henderson, 2023/11/03
- [PATCH 19/22] target/sparc: Split cexc and ftt from env->fsr, Richard Henderson, 2023/11/03
- [PATCH 20/22] target/sparc: Remove cpu_fsr, Richard Henderson, 2023/11/03
- [PATCH 15/22] target/sparc: Introduce cpu_get_fsr, cpu_put_fsr, Richard Henderson, 2023/11/03
- [PATCH 21/22] target/sparc: Split fcc out of env->fsr, Richard Henderson, 2023/11/03