]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
* Make-common.in (cgen-utils.o): Depend on cgen-engine.h.
authorDoug Evans <dje@google.com>
Wed, 18 Nov 1998 23:45:32 +0000 (23:45 +0000)
committerDoug Evans <dje@google.com>
Wed, 18 Nov 1998 23:45:32 +0000 (23:45 +0000)
(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.

sim/common/ChangeLog
sim/common/genmloop.sh

index 7ccfd5572721ba4be78dbb37aa3a64fb0d152150..eb82a7bc7b6ffb6bba6ef3a9be16eca339344e34 100644 (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.
 
index 6b93efbb4aedae92d2d818d1d927870258753c93..52e600401e63f5b0cb46351552c0d54272aada32 100644 (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);
     }