* Fixed data mangling problems in R5900 COP2 LQC2/SQC2 instructions.

This commit is contained in:
Frank Ch. Eigler 1998-04-17 19:04:53 +00:00
parent aa4d43968a
commit f8998e7780
2 changed files with 21 additions and 12 deletions

View File

@ -1,4 +1,11 @@
start-sanitize-sky
Fri Apr 17 14:50:39 1998 Frank Ch. Eigler <fche@cygnus.com>
* r5900.igen (COP_[LS]Q): Transfer COP2 quadwords.
* interp.c (cop_[ls]q): Fixes corresponding to above.
end-sanitize-sky
start-sanitize-sky
Thu Apr 16 15:24:14 1998 Frank Ch. Eigler <fche@cygnus.com>
* interp.c (decode_coproc): Adapt COP2 micro interlock to

View File

@ -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;