diff options
Diffstat (limited to 'sim/v850/interp.c')
-rw-r--r-- | sim/v850/interp.c | 48 |
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; } |