aboutsummaryrefslogtreecommitdiff
path: root/sim/v850/interp.c
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>1997-09-16 04:49:24 +0000
committerAndrew Cagney <cagney@redhat.com>1997-09-16 04:49:24 +0000
commitc7db488f71fb6faf5d327edb3517a879de35ceea (patch)
tree733ea5ee31bd4e41d74a82d63a163bd79562abf7 /sim/v850/interp.c
parent896e248fe06ea228be115540fffec18644db6270 (diff)
downloadgdb-c7db488f71fb6faf5d327edb3517a879de35ceea.zip
gdb-c7db488f71fb6faf5d327edb3517a879de35ceea.tar.gz
gdb-c7db488f71fb6faf5d327edb3517a879de35ceea.tar.bz2
Restrict ldsr (load system register) to modifying just non-reserved PSW bits.
For v850eq, include PSW[US] in bits that can be modified.
Diffstat (limited to 'sim/v850/interp.c')
-rw-r--r--sim/v850/interp.c48
1 files changed, 26 insertions, 22 deletions
diff --git a/sim/v850/interp.c b/sim/v850/interp.c
index 1981cfb..3d7d866 100644
--- a/sim/v850/interp.c
+++ b/sim/v850/interp.c
@@ -220,10 +220,7 @@ sim_open (kind, cb, abfd, argv)
char **argv;
{
SIM_DESC sd = sim_state_alloc (kind, cb);
-#if 0
- struct simops *s;
- struct hash_entry *h;
-#endif
+ int mach;
/* for compatibility */
simulator = sd;
@@ -285,26 +282,33 @@ sim_open (kind, cb, abfd, argv)
return 0;
}
-#if 0
- /* put all the opcodes in the hash table */
- for (s = Simops; s->func; s++)
- {
- h = &hash_table[hash(s->opcode)];
-
- /* go to the last entry in the chain */
- while (h->next)
- h = h->next;
- if (h->ops)
- {
- h->next = (struct hash_entry *) calloc(1,sizeof(struct hash_entry));
- h = h->next;
- }
- h->ops = s;
- h->mask = s->mask;
- h->opcode = s->opcode;
+ /* determine the machine type */
+ if (STATE_ARCHITECTURE (sd) != NULL
+ && STATE_ARCHITECTURE (sd)->arch == bfd_arch_v850)
+ mach = STATE_ARCHITECTURE (sd)->mach;
+ else
+ mach = bfd_mach_v850; /* default */
+
+ /* set machine specific configuration */
+ switch (mach)
+ {
+ case bfd_mach_v850:
+ /* start-sanitize-v850e */
+ case bfd_mach_v850e:
+ /* end-sanitize-v850e */
+ STATE_CPU (sd, 0)->psw_mask = (PSW_NP | PSW_EP | PSW_ID | PSW_SAT
+ | PSW_CY | PSW_OV | PSW_S | PSW_Z);
+ break;
+ /* start-sanitize-v850eq */
+ case bfd_mach_v850eq:
+ PSW |= PSW_US;
+ STATE_CPU (sd, 0)->psw_mask = (PSW_US
+ | PSW_NP | PSW_EP | PSW_ID | PSW_SAT
+ | PSW_CY | PSW_OV | PSW_S | PSW_Z);
+ break;
+ /* end-sanitize-v850eq */
}
-#endif
return sd;
}