/* Main header for the CRIS simulator, based on the m32r header.
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004-2020 Free Software Foundation, Inc.
Contributed by Axis Communications.
This file is part of the GNU simulators.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
+the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* All FIXME:s present in m32r apply here too; I just refuse to blindly
carry them over, as I don't know if they're really things that need
#ifndef SIM_MAIN_H
#define SIM_MAIN_H
-#define USING_SIM_BASE_H
-
-struct _sim_cpu;
-typedef struct _sim_cpu SIM_CPU;
+/* This is a global setting. Different cpu families can't mix-n-match -scache
+ and -pbb. However some cpu families may use -simple while others use
+ one of -scache/-pbb. */
+#define WITH_SCACHE_PBB 1
#include "symcat.h"
#include "sim-basics.h"
#include "cris-desc.h"
#include "cris-opc.h"
#include "arch.h"
-
-/* These must be defined before sim-base.h. */
-typedef USI sim_cia;
-
-#define CIA_GET(cpu) CPU_PC_GET (cpu)
-#define CIA_SET(cpu,val) CPU_PC_SET ((cpu), (val))
-
-#define SIM_ENGINE_HALT_HOOK(sd, cpu, cia) \
-do { \
- if (cpu) /* Null if ctrl-c. */ \
- sim_pc_set ((cpu), (cia)); \
-} while (0)
-#define SIM_ENGINE_RESTART_HOOK(sd, cpu, cia) \
-do { \
- sim_pc_set ((cpu), (cia)); \
-} while (0)
-
#include "sim-base.h"
#include "cgen-sim.h"
#include "cris-sim.h"
char sigsuspended;
};
+typedef int (*cris_interrupt_delivery_fn) (SIM_CPU *,
+ enum cris_interrupt_type,
+ unsigned int);
+
struct _sim_cpu {
/* sim/common cpu base. */
sim_cpu_base base;
CRIS_MISC_PROFILE cris_prev_misc_profile;
#define CPU_CRIS_PREV_MISC_PROFILE(cpu) (& (cpu)->cris_prev_misc_profile)
+#if WITH_HW
+ cris_interrupt_delivery_fn deliver_interrupt;
+#define CPU_CRIS_DELIVER_INTERRUPT(cpu) (cpu->deliver_interrupt)
+#endif
+
/* Simulator environment data. */
USI endmem;
USI endbrk;
void* (*make_thread_cpu_data) (SIM_CPU *, void *);
size_t thread_cpu_data_size;
+ /* The register differs, so we dispatch to a CPU-specific function. */
+ void (*set_target_thread_data) (SIM_CPU *, USI);
+
/* CPU-model specific parts go here.
Note that in files that don't need to access these pieces WANT_CPU_FOO
won't be defined and thus these parts won't appear. This is ok in the
/* The sim_state struct. */
struct sim_state {
- sim_cpu *cpu;
-#define STATE_CPU(sd, n) (/*&*/ (sd)->cpu)
+ sim_cpu *cpu[MAX_NR_PROCESSORS];
CGEN_STATE cgen_state;
/* Default memory size. */
#define CRIS_DEFAULT_MEM_SIZE 0x800000 /* 8M */
-extern device cris_devices;
-
#endif /* SIM_MAIN_H */