[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 2/2] target-sh4: implement ftrv instruction
From: |
Mans Rullgard |
Subject: |
[Qemu-devel] [PATCH 2/2] target-sh4: implement ftrv instruction |
Date: |
Fri, 21 Nov 2008 19:55:42 +0000 |
This partially implements the ftrv instruction. It gives correct
results under normal conditions. FPU exceptions are not correctly
generated.
Signed-off-by: Mans Rullgard <address@hidden>
---
target-sh4/translate.c | 40 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 40 insertions(+), 0 deletions(-)
diff --git a/target-sh4/translate.c b/target-sh4/translate.c
index 2d6dfe6..9c2da41 100644
--- a/target-sh4/translate.c
+++ b/target-sh4/translate.c
@@ -1694,6 +1694,46 @@ static void _decode_opc(DisasContext * ctx)
tcg_temp_free_i64(fp);
}
return;
+ case 0xf0fd: /* ftrv XMTRX,FVn */
+ if ((ctx->opcode & 0x300) != 0x100)
+ break;
+ if (!(ctx->fpscr & FPSCR_PR)) {
+ TCGv fv[4];
+ TCGv fp;
+ int n = B11_8 & 0xc;
+ int i;
+
+ /*
+ * NOTE: The values calculated here are likely to differ
+ * from hardware since the hardware sacrifices accuracy
+ * for speed in this instruction.
+ *
+ * FIXME: FPU exceptions are not correctly raised here.
+ */
+
+ fp = tcg_temp_new();
+
+ for (i = 0; i < 4; i++) {
+ fv[i] = tcg_temp_new();
+ tcg_gen_mov_i32(fv[i], cpu_fregs[n+i]);
+ }
+
+ for (i = 0; i < 4; i++) {
+ gen_helper_fmul_FT(cpu_fregs[n+i], cpu_fregs[16+i], fv[0]);
+ gen_helper_fmul_FT(fp, cpu_fregs[20+i], fv[1]);
+ gen_helper_fadd_FT(cpu_fregs[n+i], cpu_fregs[n+i], fp);
+ gen_helper_fmul_FT(fp, cpu_fregs[24+i], fv[2]);
+ gen_helper_fadd_FT(cpu_fregs[n+i], cpu_fregs[n+i], fp);
+ gen_helper_fmul_FT(fp, cpu_fregs[28+i], fv[3]);
+ gen_helper_fadd_FT(cpu_fregs[n+i], cpu_fregs[n+i], fp);
+ }
+
+ for (i = 0; i < 4; i++)
+ tcg_temp_free(fv[i]);
+ tcg_temp_free(fp);
+ return;
+ }
+ break;
}
fprintf(stderr, "unknown instruction 0x%04x at pc 0x%08x\n",
--
1.6.0.4
- [Qemu-devel] [PATCH 1/2] target-sh4: fix 64-bit fmov to/from memory, Mans Rullgard, 2008/11/21
- [Qemu-devel] [PATCH 1/2] target-sh4: fix 64-bit fmov to/from memory, Mans Rullgard, 2008/11/21
- [Qemu-devel] [PATCH 2/2] target-sh4: implement ftrv instruction,
Mans Rullgard <=
- Re: [Qemu-devel] [PATCH 1/2] target-sh4: fix 64-bit fmov to/from memory, Aurelien Jarno, 2008/11/21
- [Qemu-devel] Re: [PATCH 1/2] target-sh4: fix 64-bit fmov to/from memory, Måns Rullgård, 2008/11/21
- Re: [Qemu-devel] Re: [PATCH 1/2] target-sh4: fix 64-bit fmov to/from memory, Aurelien Jarno, 2008/11/21
- [Qemu-devel] [PATCH] target-sh4: fix 64-bit fmov to/from memory, Mans Rullgard, 2008/11/21
- Re: [Qemu-devel] [PATCH] target-sh4: fix 64-bit fmov to/from memory, Aurelien Jarno, 2008/11/21
- [Qemu-devel] Re: [PATCH] target-sh4: fix 64-bit fmov to/from memory, Måns Rullgård, 2008/11/21
- Re: [Qemu-devel] Re: [PATCH] target-sh4: fix 64-bit fmov to/from memory, Aurelien Jarno, 2008/11/21
- [Qemu-devel] [PATCH] target-sh4: fix 64-bit fmov to/from memory, Mans Rullgard, 2008/11/21
- Re: [Qemu-devel] [PATCH] target-sh4: fix 64-bit fmov to/from memory, Aurelien Jarno, 2008/11/22
- [Qemu-devel] Re: [PATCH 1/2] target-sh4: fix 64-bit fmov to/from memory, Måns Rullgård, 2008/11/21