* Makefile.in: Delete all stuff moved to ../common/Make-common.in.
authorDavid Edelsohn <dje.gcc@gmail.com>
Wed, 20 Nov 1996 09:27:24 +0000 (09:27 +0000)
committerDavid Edelsohn <dje.gcc@gmail.com>
Wed, 20 Nov 1996 09:27:24 +0000 (09:27 +0000)
(SIM_OBJS,SIM_EXTRA_CFLAGS,SIM_EXTRA_CLEAN): Define.
* configure.in: Simplify using macros in ../common/aclocal.m4.
Call AC_CHECK_HEADERS(unistd.h).
* configure: Regenerated.
* config.in: New file.
* interp.c: #include "callback.h".
* simops.c: #include "config.h".  #include <unistd.h> if present.

sim/d10v/ChangeLog
sim/d10v/configure.in
sim/d10v/interp.c

index 0976b6afd3d45bc945e2206b68ec45f1082a0dc3..0e0925942b4ecc24ac913a68ca79037ad93ba734 100644 (file)
@@ -1,3 +1,37 @@
+Wed Nov 20 01:23:03 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * Makefile.in: Delete all stuff moved to ../common/Make-common.in.
+       (SIM_OBJS,SIM_EXTRA_CFLAGS,SIM_EXTRA_CLEAN): Define.
+       * configure.in: Simplify using macros in ../common/aclocal.m4.
+       Call AC_CHECK_HEADERS(unistd.h).
+       * configure: Regenerated.
+       * config.in: New file.
+       * interp.c: #include "callback.h".
+       * simops.c: #include "config.h".  #include <unistd.h> if present.
+
+Fri Nov  8 16:19:55 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>
+
+       * d10v-sim.h (simops): Add flag is_long.
+       (State): Add pc_changed.  Instructions which update the PC should
+       use the JMP macro which sets this.
+       (JMP): New macro.  Sets the PC and the pc_changed flag.
+
+       * gencode.c (write_opcodes): Add is_long field.
+       
+       * interp.c (lookup_hash): If we blindly apply a short opcode's mask
+       to a long opcode we could get a false match.  Check the opcode size.
+       (hash): Add a size field to the hash table.
+       (sim_open): Initialize size field in hash table.
+       (sim_resume): Change to logic for setting the PC.  Used to increment the
+       PC if it had not been changed.  This didn't allow single-instruction loops.
+       Now checks the flag State.pc_changed.  Also now stops when ^C is received.
+       (dmem_addr): Fix translation of data segments to unified memory.
+       (sim_ctrl_c): New function.  When ^C is received, set stop_simulator flag.
+
+       * simops.c: Changed all branch and jump instructions to use new JMP macro.
+       (OP_20000000): Corrected trace information to show this is a ldi.l, not
+       a ldi.s instruction.
+       
 Thu Oct 31 19:13:55 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>
 
        * interp.c (sim_fetch_register, sim_store_register): Fix bug where
index d260088e18fc6dd5b99e91bcd5345a49b73db4e9..b31f21c0bf1dd271dad1f6576638042a4e4e6714 100644 (file)
@@ -2,74 +2,8 @@ dnl Process this file with autoconf to produce a configure script.
 AC_PREREQ(2.5)dnl
 AC_INIT(Makefile.in)
 
-AC_CONFIG_AUX_DIR(`cd $srcdir;pwd`/../..)
-AC_CANONICAL_SYSTEM
-AC_ARG_PROGRAM
-AC_PROG_CC
-AC_PROG_INSTALL
-AC_C_BIGENDIAN
+SIM_AC_COMMON
 
-# Put a plausible default for CC_FOR_BUILD in Makefile.
-AC_C_CROSS
-if test "x$cross_compiling" = "xno"; then
-  CC_FOR_BUILD='$(CC)'
-else
-  CC_FOR_BUILD=gcc
-fi
+AC_CHECK_HEADERS(unistd.h)
 
-. ${srcdir}/../../bfd/configure.host
-
-AC_ARG_ENABLE(sim-cflags,
-[  --enable-sim-cflags=opts            Extra CFLAGS for use in building simulator],
-[case "${enableval}" in
-  yes)  sim_cflags="-O2";;
-  trace) AC_MSG_ERROR("Please use --enable-sim-debug instead."); sim_cflags="";;
-  no)   sim_cflags="";;
-  *)    sim_cflags=`echo "${enableval}" | sed -e "s/,/ /g"`;;
-esac
-if test x"$silent" != x"yes" && test x"$sim_cflags" != x""; then
-  echo "Setting sim cflags = $sim_cflags" 6>&1
-fi],[sim_cflags=""])dnl
-
-AC_ARG_ENABLE(sim-debug,
-[  --enable-sim-debug=opts             Enable debugging flags],
-[case "${enableval}" in
-  yes) sim_debug="-DDEBUG=7";;
-  no)  sim_debug="-DDEBUG=0";;
-  *)   sim_debug="-DDEBUG='(${enableval})'";;
-esac
-if test x"$silent" != x"yes" && test x"$sim_debug" != x""; then
-  echo "Setting sim debug = $sim_debug" 6>&1
-fi],[sim_cflags=""])dnl
-
-AC_ARG_ENABLE(sim-bswap,
-[  --enable-sim-bswap                  Use the BSWAP instruction on Intel 486s and Pentiums.],
-[case "${enableval}" in
-  yes) sim_bswap="-DUSE_BSWAP";;
-  no)  sim_bswap="";;
-  *)   AC_MSG_ERROR("--enable-sim-bswap does not take a value"); sim_bswap="";;
-esac
-if test x"$silent" != x"yes" && test x"$sim_bswap" != x""; then
-  echo "Setting bswap flags = $sim_bswap" 6>&1
-fi],[sim_bswap=""])dnl
-
-AC_SUBST(CC_FOR_BUILD)
-AC_SUBST(CFLAGS)
-AC_SUBST(HDEFINES)
-AR=${AR-ar}
-AC_SUBST(AR)
-AC_PROG_RANLIB
-AC_SUBST(sim_cflags)
-AC_SUBST(sim_debug)
-AC_SUBST(sim_bswap)
-
-# Put a plausible default for CC_FOR_BUILD in Makefile.
-AC_C_CROSS
-if test "x$cross_compiling" = "xno"; then
-  CC_FOR_BUILD='$(CC)'
-else
-  CC_FOR_BUILD=gcc
-fi
-AC_SUBST(CC_FOR_BUILD)
-
-AC_OUTPUT(Makefile)
+SIM_AC_OUTPUT
index f4c6fe1ba44ac38945488d06ea3ecf755b6d6f77..b1ce7801451318a50de4b914a17dda5317b69275 100644 (file)
@@ -1,5 +1,6 @@
 #include <signal.h>
 #include "sysdep.h"
+#include "callback.h"
 #include "remote-sim.h"
 
 #include "d10v_sim.h"
@@ -60,6 +61,7 @@ struct hash_entry
   struct hash_entry *next;
   long opcode;
   long mask;
+  int size;
   struct simops *ops;
 };
 
@@ -88,7 +90,7 @@ lookup_hash (ins, size)
   else
     h = &hash_table[(ins & 0x7E00) >> 9];
 
-  while ((ins & h->mask) != h->opcode)
+  while ((ins & h->mask) != h->opcode || h->size != size)
     {
       if (h->next == NULL)
        {
@@ -493,6 +495,7 @@ sim_open (args)
          h->ops = s;
          h->mask = s->mask;
          h->opcode = s->opcode;
+         h->size = s->is_long;
        }
     }
 }
@@ -546,14 +549,14 @@ dmem_addr( addr )
       /* unified memory */
       /* this is ugly because we allocate unified memory in 128K segments and */
       /* dmap addresses 16k segments */
-      seg = (DMAP & 0x3ff) >> 2;
+      seg = (DMAP & 0x3ff) >> 3;
       if (State.umem[seg] == NULL)
        {
          (*d10v_callback->printf_filtered) (d10v_callback, "ERROR:  unified memory region %d unmapped, pc = 0x%lx\n",
                                             seg, (long)decode_pc ());
          exit(1);
        }
-      return State.umem[seg] + (DMAP & 3) * 0x4000;
+      return State.umem[seg] + (DMAP & 7) * 0x4000;
     }
 
   return State.dmem + addr;
@@ -586,20 +589,32 @@ pc_addr()
 }
 
 
+static int stop_simulator;
+
+static void
+sim_ctrl_c()
+{
+  stop_simulator = 1;
+}
+
+
+/* Run (or resume) the program.  */
 void
 sim_resume (step, siggnal)
      int step, siggnal;
 {
+  void (*prev) ();
   uint32 inst;
-  reg_t oldpc = 0;
 
 /*   (*d10v_callback->printf_filtered) (d10v_callback, "sim_resume (%d,%d)  PC=0x%x\n",step,siggnal,PC); */
-
   State.exception = 0;
+  prev = signal(SIGINT, sim_ctrl_c);
+  stop_simulator = step;
+
   do
     {
       inst = get_longword( pc_addr() ); 
-      oldpc = PC;
+      State.pc_changed = 0;
       ins_type_counters[ (int)INS_CYCLES ]++;
       switch (inst & 0xC0000000)
        {
@@ -628,16 +643,15 @@ sim_resume (step, siggnal)
          else
            PC = RPT_S;
        }
-      
-      /* FIXME */
-      if (PC == oldpc)
+      else if (!State.pc_changed)
        PC++;
-      
     } 
-  while ( !State.exception && !step);
+  while ( !State.exception && !stop_simulator);
   
   if (step && !State.exception)
     State.exception = SIGTRAP;
+
+  signal(SIGINT, prev);
 }
 
 int
@@ -790,7 +804,6 @@ void
 sim_set_callbacks(p)
      host_callback *p;
 {
-/*  printf ("sim_set_callbacks\n"); */
   d10v_callback = p;
 }