aboutsummaryrefslogtreecommitdiff
path: root/sim/v850/interp.c
diff options
context:
space:
mode:
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;
}