aboutsummaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorDoug Evans <dje@google.com>1998-11-18 23:45:32 +0000
committerDoug Evans <dje@google.com>1998-11-18 23:45:32 +0000
commit916b11527eb9bd5001ac4b12afe6f05f1af12329 (patch)
tree68a9d77aeca9f64201474aaeb4c61c5ee60730f6 /sim
parent95b03313e0e5e27d4260f26cf17292fc1830eb5e (diff)
downloadgdb-916b11527eb9bd5001ac4b12afe6f05f1af12329.zip
gdb-916b11527eb9bd5001ac4b12afe6f05f1af12329.tar.gz
gdb-916b11527eb9bd5001ac4b12afe6f05f1af12329.tar.bz2
* Make-common.in (cgen-utils.o): Depend on cgen-engine.h.
(CGEN_ARCH_SCM): New variable. * cgen-engine.h (EXTRACT_[ML]SB0_{INT,UINT}): New macros. (EXTRACT_INT,EXTRACT_UINT): New macros. (SEM_SEM_ARG): New macro. (SEM_NEXT_VPC): New arg `pc'. * cgen-sim.h (EXTRACT_SIGNED,EXTRACT_UNSIGNED): Delete. (sim_disassemble_insn): Update prototype. * cgen-trace.c (current_insn,insn_fields): New static locals. (trace_insn): Set them. * cgen-utils.scm: #include cgen-engine.h. (sim_disassemble_insn): New arg insn_fields. Handle variable length insns. * genmloop.sh: Only emit pbb decls if -pbb. (${cpu}_scache_lookup): New arg `vpc'. (scache support): Fetch pc before entering loop.
Diffstat (limited to 'sim')
-rw-r--r--sim/common/ChangeLog17
-rw-r--r--sim/common/genmloop.sh42
2 files changed, 42 insertions, 17 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index 7ccfd55..eb82a7b 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,5 +1,22 @@
1998-11-18 Doug Evans <devans@casey.cygnus.com>
+ * Make-common.in (cgen-utils.o): Depend on cgen-engine.h.
+ (CGEN_ARCH_SCM): New variable.
+ * cgen-engine.h (EXTRACT_[ML]SB0_{INT,UINT}): New macros.
+ (EXTRACT_INT,EXTRACT_UINT): New macros.
+ (SEM_SEM_ARG): New macro.
+ (SEM_NEXT_VPC): New arg `pc'.
+ * cgen-sim.h (EXTRACT_SIGNED,EXTRACT_UNSIGNED): Delete.
+ (sim_disassemble_insn): Update prototype.
+ * cgen-trace.c (current_insn,insn_fields): New static locals.
+ (trace_insn): Set them.
+ * cgen-utils.scm: #include cgen-engine.h.
+ (sim_disassemble_insn): New arg insn_fields.
+ Handle variable length insns.
+ * genmloop.sh: Only emit pbb decls if -pbb.
+ (${cpu}_scache_lookup): New arg `vpc'.
+ (scache support): Fetch pc before entering loop.
+
* gennltvals.sh: Add fr30 support.
* nltvals.def: Rebuild.
diff --git a/sim/common/genmloop.sh b/sim/common/genmloop.sh
index 6b93efb..52e6004 100644
--- a/sim/common/genmloop.sh
+++ b/sim/common/genmloop.sh
@@ -209,12 +209,15 @@ echo " (which doesn't necessarily have that file name). */"
echo ""
echo "extern ENGINE_FN ${cpu}_engine_run_full;"
echo "extern ENGINE_FN ${cpu}_engine_run_fast;"
-echo ""
-echo "extern SEM_PC ${cpu}_pbb_begin (SIM_CPU *, int);"
-echo "extern SEM_PC ${cpu}_pbb_chain (SIM_CPU *, SEM_ARG);"
-echo "extern SEM_PC ${cpu}_pbb_cti_chain (SIM_CPU *, SEM_ARG, SEM_PC *, PCADDR);"
-echo "extern void ${cpu}_pbb_before (SIM_CPU *, SCACHE *);"
-echo "extern void ${cpu}_pbb_after (SIM_CPU *, SCACHE *);"
+
+if [ x$pbb = xyes ] ; then
+ echo ""
+ echo "extern SEM_PC ${cpu}_pbb_begin (SIM_CPU *, int);"
+ echo "extern SEM_PC ${cpu}_pbb_chain (SIM_CPU *, SEM_ARG);"
+ echo "extern SEM_PC ${cpu}_pbb_cti_chain (SIM_CPU *, SEM_ARG, SEM_PC *, PCADDR);"
+ echo "extern void ${cpu}_pbb_before (SIM_CPU *, SCACHE *);"
+ echo "extern void ${cpu}_pbb_after (SIM_CPU *, SCACHE *);"
+fi
##########################################################################
@@ -349,16 +352,15 @@ if [ x$scache = xyes ] ; then
cat << EOF
static INLINE SCACHE *
-${cpu}_scache_lookup (SIM_CPU *current_cpu, SCACHE *scache,
+${cpu}_scache_lookup (SIM_CPU *current_cpu, PCADDR vpc, SCACHE *scache,
unsigned int hash_mask, int FAST_P)
{
/* First step: look up current insn in hash table. */
- PCADDR pc = PC;
- SCACHE *sc = scache + SCACHE_HASH_PC (pc, hash_mask);
+ SCACHE *sc = scache + SCACHE_HASH_PC (vpc, hash_mask);
/* If the entry isn't the one we want (cache miss),
fetch and decode the instruction. */
- if (sc->argbuf.addr != pc)
+ if (sc->argbuf.addr != vpc)
{
insn_t insn;
@@ -378,8 +380,10 @@ cat << EOF
PROFILE_COUNT_SCACHE_HIT (current_cpu);
/* Make core access statistics come out right.
The size is a guess, but it's currently not used either. */
- PROFILE_COUNT_CORE (current_cpu, pc, 2, exec_map);
+ PROFILE_COUNT_CORE (current_cpu, vpc, 2, exec_map);
}
+
+ return sc;
}
#define FAST_P 0
@@ -390,6 +394,7 @@ ${cpu}_engine_run_full (SIM_CPU *current_cpu)
SIM_DESC current_state = CPU_STATE (current_cpu);
SCACHE *scache = CPU_SCACHE_CACHE (current_cpu);
unsigned int hash_mask = CPU_SCACHE_HASH_MASK (current_cpu);
+ SEM_PC vpc;
EOF
@@ -425,12 +430,13 @@ fi
cat << EOF
+ vpc = GET_H_PC ();
+
do
{
- PCADDR new_pc;
SCACHE *sc;
- sc = ${cpu}_scache_lookup (current_cpu, scache, hash_mask, FAST_P);
+ sc = ${cpu}_scache_lookup (current_cpu, vpc, scache, hash_mask, FAST_P);
/* begin full-exec-scache */
EOF
@@ -440,7 +446,7 @@ ${SHELL} $infile full-exec-scache
cat << EOF
/* end full-exec-scache */
- CPU (h_pc) = new_pc;
+ SET_H_PC (vpc);
++ CPU_INSN_COUNT (current_cpu);
}
@@ -467,6 +473,7 @@ ${cpu}_engine_run_fast (SIM_CPU *current_cpu)
SIM_DESC current_state = CPU_STATE (current_cpu);
SCACHE *scache = CPU_SCACHE_CACHE (current_cpu);
unsigned int hash_mask = CPU_SCACHE_HASH_MASK (current_cpu);
+ SEM_PC vpc;
EOF
@@ -514,12 +521,13 @@ cat << EOF
}
#endif
+ vpc = GET_H_PC ();
+
do
{
- PCADDR new_pc;
SCACHE *sc;
- sc = ${cpu}_scache_lookup (current_cpu, scache, hash_mask, FAST_P);
+ sc = ${cpu}_scache_lookup (current_cpu, vpc, scache, hash_mask, FAST_P);
/* begin fast-exec-scache */
EOF
@@ -529,7 +537,7 @@ ${SHELL} $infile fast-exec-scache
cat << EOF
/* end fast-exec-scache */
- CPU (h_pc) = new_pc;
+ SET_H_PC (vpc);
++ CPU_INSN_COUNT (current_cpu);
}