aboutsummaryrefslogtreecommitdiff
path: root/sim/mips/interp.c
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@redhat.com>1998-04-16 19:27:55 +0000
committerFrank Ch. Eigler <fche@redhat.com>1998-04-16 19:27:55 +0000
commitfc4e5b84c8fa9e228c17d6a545c6e50eaeb68085 (patch)
tree4081fb0bcd51efc99bd1066faf293be7a8b2ce0b /sim/mips/interp.c
parent73181dfff8891b5ad0a40a39978924991d8e92fa (diff)
downloadgdb-fc4e5b84c8fa9e228c17d6a545c6e50eaeb68085.zip
gdb-fc4e5b84c8fa9e228c17d6a545c6e50eaeb68085.tar.gz
gdb-fc4e5b84c8fa9e228c17d6a545c6e50eaeb68085.tar.bz2
* Adapted R5900 COP2 interface code to clarified micro-mode interlock
behavior.
Diffstat (limited to 'sim/mips/interp.c')
-rw-r--r--sim/mips/interp.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/sim/mips/interp.c b/sim/mips/interp.c
index 3e83dfc..5ed3d44 100644
--- a/sim/mips/interp.c
+++ b/sim/mips/interp.c
@@ -3316,12 +3316,17 @@ decode_coproc (SIM_DESC sd,
int rt = i_20_16;
int id = i_15_11;
- /* interlock checking */
+ /* interlock checking: wait until M or E bits set */
/* POLICY: never busy in macro mode */
- if(vu0_busy() && interlock)
+ while(vu0_busy() && interlock)
{
- while(! vu0_micro_interlock_released())
- vu0_issue(sd);
+ if(vu0_micro_interlock_released())
+ {
+ vu0_micro_interlock_clear();
+ break;
+ }
+
+ vu0_issue(sd);
}
/* perform VU register address */