* 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.
This commit is contained in:
Doug Evans 1998-11-18 23:45:32 +00:00
parent 95b03313e0
commit 916b11527e
2 changed files with 42 additions and 17 deletions

View File

@ -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.

View File

@ -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);
}