aboutsummaryrefslogtreecommitdiff
path: root/sim/mips/interp.c
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@redhat.com>1998-04-17 19:04:53 +0000
committerFrank Ch. Eigler <fche@redhat.com>1998-04-17 19:04:53 +0000
commitf8998e7780a74bd98a55029be88580a06a630ba9 (patch)
tree079d2e064a5ae3da5962951f693d967c51062faf /sim/mips/interp.c
parentaa4d43968a50e9ee0f88fa4a2e55ecdcd1b3bc06 (diff)
downloadgdb-f8998e7780a74bd98a55029be88580a06a630ba9.zip
gdb-f8998e7780a74bd98a55029be88580a06a630ba9.tar.gz
gdb-f8998e7780a74bd98a55029be88580a06a630ba9.tar.bz2
* Fixed data mangling problems in R5900 COP2 LQC2/SQC2 instructions.
Diffstat (limited to 'sim/mips/interp.c')
-rw-r--r--sim/mips/interp.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/sim/mips/interp.c b/sim/mips/interp.c
index 5ed3d44..8f45da9 100644
--- a/sim/mips/interp.c
+++ b/sim/mips/interp.c
@@ -2951,18 +2951,18 @@ cop_lq (SIM_DESC sd,
{
case 2:
{
- unsigned_16 xyzw;
+ int i;
while(vu0_busy())
vu0_issue(sd);
- memcpy(& xyzw, & memword, sizeof(xyzw));
- xyzw = H2T_16(xyzw);
/* one word at a time, argh! */
- write_vu_vec_reg(&(vu0_device.regs), coproc_reg, 0, A4_16(& xyzw, 3));
- write_vu_vec_reg(&(vu0_device.regs), coproc_reg, 1, A4_16(& xyzw, 2));
- write_vu_vec_reg(&(vu0_device.regs), coproc_reg, 2, A4_16(& xyzw, 1));
- write_vu_vec_reg(&(vu0_device.regs), coproc_reg, 3, A4_16(& xyzw, 0));
+ for(i=0; i<4; i++)
+ {
+ unsigned_4 value;
+ value = H2T_4(*A4_16(& memword, 3-i));
+ write_vu_vec_reg(&(vu0_device.regs), coproc_reg, i, & value);
+ }
}
break;
@@ -3053,16 +3053,18 @@ cop_sq (SIM_DESC sd,
case 2:
{
unsigned_16 xyzw;
+ int i;
while(vu0_busy())
vu0_issue(sd);
/* one word at a time, argh! */
- read_vu_vec_reg(&(vu0_device.regs), coproc_reg, 0, A4_16(& xyzw, 3));
- read_vu_vec_reg(&(vu0_device.regs), coproc_reg, 1, A4_16(& xyzw, 2));
- read_vu_vec_reg(&(vu0_device.regs), coproc_reg, 2, A4_16(& xyzw, 1));
- read_vu_vec_reg(&(vu0_device.regs), coproc_reg, 3, A4_16(& xyzw, 0));
- xyzw = T2H_16(xyzw);
+ for(i=0; i<4; i++)
+ {
+ unsigned_4 value;
+ read_vu_vec_reg(&(vu0_device.regs), coproc_reg, i, & value);
+ *A4_16(& xyzw, 3-i) = T2H_4(value);
+ }
return xyzw;
}
break;