This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] sim: bfin: handle V overflows in dsp mult insns
- From: Mike Frysinger <vapier at gentoo dot org>
- To: gdb-patches at sourceware dot org
- Cc: Robin Getz <robin dot getz at analog dot com>
- Date: Mon, 14 Mar 2011 18:33:16 -0400
- Subject: [PATCH] sim: bfin: handle V overflows in dsp mult insns
From: Robin Getz <robin.getz@analog.com>
The current dsp mult handler does not take care of overflows and updating
the V ASTAT bit. So implement it.
Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-03-14 Robin Getz <robin.getz@analog.com>
* bfin-sim.c (decode_dsp32mult_0): Declare v_i0 and v_i1. Pass to
the extract_mult functions. Include these when updating the V, VS,
and V_COPY bits.
---
sim/bfin/bfin-sim.c | 16 +++++++++-------
1 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/sim/bfin/bfin-sim.c b/sim/bfin/bfin-sim.c
index e543ef4..901ca54 100644
--- a/sim/bfin/bfin-sim.c
+++ b/sim/bfin/bfin-sim.c
@@ -3850,7 +3850,7 @@ decode_dsp32mult_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
int h01 = ((iw1 >> DSP32Mac_h01_bits) & DSP32Mac_h01_mask);
bu32 res = DREG (dst);
- bu32 sat0 = 0, sat1 = 0;
+ bu32 sat0 = 0, sat1 = 0, v_i0 = 0, v_i1 = 0;
char _buf[128], *buf = _buf;
int _MM = MM;
@@ -3873,7 +3873,7 @@ decode_dsp32mult_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
if (w1)
{
bu64 r = decode_multfunc (cpu, h01, h11, src0, src1, mmod, MM, &sat1);
- bu32 res1 = extract_mult (cpu, r, mmod, MM, P, NULL);
+ bu32 res1 = extract_mult (cpu, r, mmod, MM, P, &v_i1);
buf += sprintf (buf, P ? "R%i" : "R%i.H", dst + P);
buf += sprintf (buf, " = R%i.%c * R%i.%c",
@@ -3901,7 +3901,7 @@ decode_dsp32mult_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
if (w0)
{
bu64 r = decode_multfunc (cpu, h00, h10, src0, src1, mmod, 0, &sat0);
- bu32 res0 = extract_mult (cpu, r, mmod, 0, P, NULL);
+ bu32 res0 = extract_mult (cpu, r, mmod, 0, P, &v_i0);
buf += sprintf (buf, P ? "R%i" : "R%i.L", dst);
buf += sprintf (buf, " = R%i.%c * R%i.%c",
@@ -3925,10 +3925,12 @@ decode_dsp32mult_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
if (w0 || w1)
{
- STORE (ASTATREG (v), sat0 | sat1);
- STORE (ASTATREG (v_copy), sat0 | sat1);
- if (sat0 | sat1)
- STORE (ASTATREG (vs), 1);
+ bu32 v = sat0 | sat1 | v_i0 | v_i1;
+
+ STORE (ASTATREG (v), v);
+ STORE (ASTATREG (v_copy), v);
+ if (v)
+ STORE (ASTATREG (vs), v);
}
}
--
1.7.4.1