[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 16/27] target/sh4: Load/store Dr as 64-bit qu
From: |
Aurelien Jarno |
Subject: |
Re: [Qemu-devel] [PATCH v2 16/27] target/sh4: Load/store Dr as 64-bit quantities |
Date: |
Sat, 8 Jul 2017 00:14:07 +0200 |
User-agent: |
NeoMutt/20170113 (1.7.2) |
On 2017-07-06 16:21, Richard Henderson wrote:
> This enforces proper alignment and makes the register update
> more natural. Note that there is a more serious bug fix for
> fmov {DX}Rn,@(R0,Rn) to use a store instead of a load.
>
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> target/sh4/translate.c | 74
> ++++++++++++++++++++++++--------------------------
> 1 file changed, 35 insertions(+), 39 deletions(-)
>
> diff --git a/target/sh4/translate.c b/target/sh4/translate.c
> index 616e615..fcdabe8 100644
> --- a/target/sh4/translate.c
> +++ b/target/sh4/translate.c
> @@ -1044,18 +1038,20 @@ static void _decode_opc(DisasContext * ctx)
> return;
> case 0xf00b: /* fmov {F,D,X}Rm,@-Rn - FPSCR: Nothing */
> CHECK_FPU_ENABLED
> - TCGv addr = tcg_temp_new_i32();
> - tcg_gen_subi_i32(addr, REG(B11_8), 4);
> - if (ctx->tbflags & FPSCR_SZ) {
> - int fr = XHACK(B7_4);
> - tcg_gen_qemu_st_i32(FREG(fr + 1), addr, ctx->memidx, MO_TEUL);
> - tcg_gen_subi_i32(addr, addr, 4);
> - tcg_gen_qemu_st_i32(FREG(fr), addr, ctx->memidx, MO_TEUL);
> - } else {
> - tcg_gen_qemu_st_i32(FREG(B7_4), addr, ctx->memidx, MO_TEUL);
> - }
> - tcg_gen_mov_i32(REG(B11_8), addr);
> - tcg_temp_free(addr);
> + {
> + TCGv addr = tcg_temp_new_i32();
> + if (ctx->tbflags & FPSCR_SZ) {
> + TCGv_i64 fp = tcg_temp_new_i64();
> + gen_load_fpr64(ctx, fp, XHACK(B7_4));
> + tcg_gen_qemu_st_i64(fp, addr, ctx->memidx, MO_TEQ);
addr is used without before being written. The following line is mising
before the load:
tcg_gen_subi_i32(addr, REG(B11_8), 8);
> + tcg_temp_free_i64(fp);
> + } else {
> + tcg_gen_subi_i32(addr, REG(B11_8), 4);
> + tcg_gen_qemu_st_i32(FREG(B7_4), addr, ctx->memidx, MO_TEUL);
> + }
> + tcg_gen_mov_i32(REG(B11_8), addr);
> + tcg_temp_free(addr);
> + }
> return;
> case 0xf006: /* fmov @(R0,Rm),{F,D,X}Rm - FPSCR: Nothing */
> CHECK_FPU_ENABLED
--
Aurelien Jarno GPG: 4096R/1DDD8C9B
address@hidden http://www.aurel32.net
- [Qemu-devel] [PATCH v2 12/27] target/sh4: Pass DisasContext to fpr64 routines, (continued)
- [Qemu-devel] [PATCH v2 12/27] target/sh4: Pass DisasContext to fpr64 routines, Richard Henderson, 2017/07/06
- [Qemu-devel] [PATCH v2 13/27] target/sh4: Hoist fp register bank selection, Richard Henderson, 2017/07/06
- [Qemu-devel] [PATCH v2 14/27] target/sh4: Eliminate unused XREG macro, Richard Henderson, 2017/07/06
- [Qemu-devel] [PATCH v2 15/27] target/sh4: Merge DREG into fpr64 routines, Richard Henderson, 2017/07/06
- [Qemu-devel] [PATCH v2 16/27] target/sh4: Load/store Dr as 64-bit quantities, Richard Henderson, 2017/07/06
- Re: [Qemu-devel] [PATCH v2 16/27] target/sh4: Load/store Dr as 64-bit quantities,
Aurelien Jarno <=
- [Qemu-devel] [PATCH v2 17/27] target/sh4: Simplify 64-bit fp reg-reg move, Richard Henderson, 2017/07/06
- [Qemu-devel] [PATCH v2 18/27] target/sh4: Unify code for CHECK_NOT_DELAY_SLOT, Richard Henderson, 2017/07/06
- [Qemu-devel] [PATCH v2 19/27] target/sh4: Unify code for CHECK_PRIVILEGED, Richard Henderson, 2017/07/06
- [Qemu-devel] [PATCH v2 20/27] target/sh4: Unify code for CHECK_FPU_ENABLED, Richard Henderson, 2017/07/06