aboutsummaryrefslogtreecommitdiff
path: root/sim/mn10300/interp.c
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2015-04-13 02:13:48 -0400
committerMike Frysinger <vapier@gentoo.org>2015-04-13 02:13:48 -0400
commit64f14c970716647f0761e921141873c75071100f (patch)
tree72ae3ceed525852cce856aa3a18590e970a2b1c6 /sim/mn10300/interp.c
parent14c9ad2edb6e0bb0b560fa45699b83d85aa28b94 (diff)
downloadfsf-binutils-gdb-64f14c970716647f0761e921141873c75071100f.zip
fsf-binutils-gdb-64f14c970716647f0761e921141873c75071100f.tar.gz
fsf-binutils-gdb-64f14c970716647f0761e921141873c75071100f.tar.bz2
sim: mn10300: convert to sim-cpu
Make cpu allocation fully dynamic so we can leverage the common sim-cpu and its APIs.
Diffstat (limited to 'sim/mn10300/interp.c')
-rw-r--r--sim/mn10300/interp.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/sim/mn10300/interp.c b/sim/mn10300/interp.c
index 37f6f24..850f057 100644
--- a/sim/mn10300/interp.c
+++ b/sim/mn10300/interp.c
@@ -84,6 +84,18 @@ static const OPTION mn10300_options[] =
/* For compatibility */
SIM_DESC simulator;
+static sim_cia
+mn10300_pc_get (sim_cpu *cpu)
+{
+ return PC;
+}
+
+static void
+mn10300_pc_set (sim_cpu *cpu, sim_cia pc)
+{
+ PC = pc;
+}
+
/* These default values correspond to expected usage for the chip. */
SIM_DESC
@@ -92,11 +104,16 @@ sim_open (SIM_OPEN_KIND kind,
struct bfd *abfd,
char **argv)
{
+ int i;
SIM_DESC sd = sim_state_alloc (kind, cb);
mn10300_callback = cb;
SIM_ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
+ /* The cpu data is kept in a separately allocated chunk of memory. */
+ if (sim_cpu_alloc_all (sd, 1, /*cgen_cpu_max_extra_bytes ()*/0) != SIM_RC_OK)
+ return 0;
+
/* for compatibility */
simulator = sd;
@@ -297,6 +314,15 @@ sim_open (SIM_OPEN_KIND kind,
/* STATE_CPU (sd, 0)->psw_mask = (PSW_NP | PSW_EP | PSW_ID | PSW_SAT */
/* | PSW_CY | PSW_OV | PSW_S | PSW_Z); */
+ /* CPU specific initialization. */
+ for (i = 0; i < MAX_NR_PROCESSORS; ++i)
+ {
+ SIM_CPU *cpu = STATE_CPU (sd, i);
+
+ CPU_PC_FETCH (cpu) = mn10300_pc_get;
+ CPU_PC_STORE (cpu) = mn10300_pc_set;
+ }
+
return sd;
}
@@ -396,12 +422,6 @@ sim_store_register (SIM_DESC sd,
return length;
}
-sim_cia
-sim_pc_get (sim_cpu *cpu)
-{
- return PC;
-}
-
void
mn10300_core_signal (SIM_DESC sd,
sim_cpu *cpu,