* interp.c (hash): Make this an inline function
authorJeff Law <law@redhat.com>
Tue, 10 Sep 1996 02:51:07 +0000 (02:51 +0000)
committerJeff Law <law@redhat.com>
Tue, 10 Sep 1996 02:51:07 +0000 (02:51 +0000)
        when compiling with GCC.  Simplify.
        * simpos.c: Explicitly include "sys/syscall.h".  Remove
        some #if 0'd code.  Enable more emulated syscalls.
Checking in more stuff.

sim/v850/ChangeLog
sim/v850/interp.c
sim/v850/simops.c

index fa8e4d777994a02df28a5987d20e93e34b776801..771b6d8db2ef81924cabb26728613a1c6e3417f2 100644 (file)
@@ -1,3 +1,14 @@
+Mon Sep  9 20:50:46 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * interp.c (hash): Make this an inline function
+       when compiling with GCC.  Simplify.
+       * simpos.c: Explicitly include "sys/syscall.h".  Remove
+       some #if 0'd code.  Enable more emulated syscalls.
+
+Wed Sep  4 01:48:55 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * interp.c: Fix sign bit handling for add and sub instructions.
+
 Tue Sep  3 10:20:30 1996  Jeffrey A Law  (law@cygnus.com)
 
        * gencode.c: Fix various indention & style problems.
index bb7aa9bc6ed757ffd5ed63e828fd61e83613beaf..b9f5a9edc4ccfd12571d4c51c47fe4387d090204 100644 (file)
@@ -6,6 +6,14 @@
 
 #include "v850_sim.h"
 
+#ifndef INLINE
+#ifdef __GNUC__
+#define INLINE inline
+#else
+#define INLINE
+#endif
+#endif
+
 #define MEM_SIZE 18    /* V850 memory size is 18 bits XXX */
 
 host_callback *v850_callback;
@@ -14,6 +22,16 @@ host_callback *v850_callback;
 uint32 OP[4];
 
 static struct hash_entry *lookup_hash PARAMS ((uint32 ins));
+static long hash PARAMS ((long));
+static void do_format_1_2 PARAMS ((uint32));
+static void do_format_3 PARAMS ((uint32));
+static void do_format_4 PARAMS ((uint32));
+static void do_format_5 PARAMS ((uint32));
+static void do_format_6 PARAMS ((uint32));
+static void do_format_7 PARAMS ((uint32));
+static void do_format_8 PARAMS ((uint32));
+static void do_format_9_10 PARAMS ((uint32));
+static void init_system PARAMS ((void));
 
 #define MAX_HASH  63
 struct hash_entry
@@ -26,25 +44,22 @@ struct hash_entry
 
 struct hash_entry hash_table[MAX_HASH+1];
 
-static long 
+
+static INLINE long 
 hash(insn)
      long insn;
 {
   if ((insn & 0x0600) == 0
-      || (insn & 0x0700) == 0x0200)
+      || (insn & 0x0700) == 0x0200
+      || (insn & 0x0700) == 0x0600
+      || (insn & 0x0780) == 0x0700)
     return (insn & 0x07e0) >> 5;
   if ((insn & 0x0700) == 0x0300
       || (insn & 0x0700) == 0x0400
       || (insn & 0x0700) == 0x0500)
     return (insn & 0x0780) >> 7;
-  if ((insn & 0x0700) == 0x0600)
-    return (insn & 0x07e0) >> 5;
-  if ((insn & 0x0780) == 0x0700)
-    return (insn & 0x07e0) >> 5;
   if ((insn & 0x07c0) == 0x0780)
     return (insn & 0x07c0) >> 6;
-  if ((insn & 0x07E0) == 0x07C0)
-    return (insn & 0x07e0) >> 5;
   return (insn & 0x07e0) >> 5;
 }
 
@@ -56,7 +71,7 @@ lookup_hash (ins)
 
   h = &hash_table[hash(ins)];
 
-  while ( (ins & h->mask) != h->opcode)
+  while ((ins & h->mask) != h->opcode)
     {
       if (h->next == NULL)
        {
@@ -209,7 +224,7 @@ do_format_8 (insn)
 }
 
 static void
-do_formats_9_10 (insn)
+do_format_9_10 (insn)
      uint32 insn;
 {
   struct hash_entry *h;
@@ -266,7 +281,7 @@ sim_open (args)
      char *args;
 {
   struct simops *s;
-  struct hash_entry *h, *prev;
+  struct hash_entry *h;
   if (args != NULL)
       printf ("sim_open %s\n",args);
 
@@ -317,10 +332,8 @@ sim_resume (step, siggnal)
      int step, siggnal;
 {
   uint32 inst, opcode;
-  int i;
   reg_t oldpc;
 
-
  if (step)
    State.exception = SIGTRAP;
  else
@@ -373,7 +386,7 @@ sim_resume (step, siggnal)
        }
      else
        {
-        do_formats_9_10 (inst);
+        do_format_9_10 (inst);
         PC += 4;
        }
    } 
@@ -449,6 +462,7 @@ sim_store_register (rn, memory)
   State.regs[rn]= *(uint32 *)memory;
 }
 
+int
 sim_read (addr, buffer, size)
      SIM_ADDR addr;
      unsigned char *buffer;
index 65ee98b3494ba50dfa75c01db84aebdafeddaa43..2c47db80bbe711c969e51130a44d994dca291273 100644 (file)
@@ -1,6 +1,7 @@
 #include <signal.h>
 #include "v850_sim.h"
 #include "simops.h"
+#include "sys/syscall.h"
 
 /* sld.b */
 void
@@ -466,10 +467,6 @@ OP_1C0 ()
   ov = ((op0 & 0x80000000) == (op1 & 0x80000000)
        && (op0 & 0x80000000) != (result & 0x80000000));
 
-  /* According to the manual, 's' is inverted if 'ov'
-     is set.  */
-  s = ov ? !s : s;
-
   /* Store the result and condition codes.  */
   State.regs[OP[1]] = result;
   State.sregs[5] &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
@@ -498,10 +495,6 @@ OP_240 ()
   ov = ((op0 & 0x80000000) == (op1 & 0x80000000)
        && (op0 & 0x80000000) != (result & 0x80000000));
 
-  /* According to the manual, 's' is inverted if 'ov'
-     is set.  */
-  s = ov ? !s : s;
-
   /* Store the result and condition codes.  */
   State.regs[OP[1]] = result;
   State.sregs[5] &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
@@ -530,10 +523,6 @@ OP_600 ()
   ov = ((op0 & 0x80000000) == (op1 & 0x80000000)
        && (op0 & 0x80000000) != (result & 0x80000000));
 
-  /* According to the manual, 's' is inverted if 'ov'
-     is set.  */
-  s = ov ? !s : s;
-
   /* Store the result and condition codes.  */
   State.regs[OP[2]] = result;
   State.sregs[5] &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
@@ -559,10 +548,6 @@ OP_1A0 ()
   ov = ((op1 & 0x80000000) != (op0 & 0x80000000)
        && (op1 & 0x80000000) != (result & 0x80000000));
 
-  /* According to the manual, 's' is inverted if 'ov'
-     is set.  */
-  s = ov ? !s : s;
-
   /* Store the result and condition codes.  */
   State.regs[OP[1]] = result;
   State.sregs[5] &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
@@ -588,10 +573,6 @@ OP_180 ()
   ov = ((op0 & 0x80000000) != (op1 & 0x80000000)
        && (op0 & 0x80000000) != (result & 0x80000000));
 
-  /* According to the manual, 's' is inverted if 'ov'
-     is set.  */
-  s = ov ? !s : s;
-
   /* Store the result and condition codes.  */
   State.regs[OP[1]] = result;
   State.sregs[5] &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
@@ -1411,10 +1392,6 @@ OP_10007E0 ()
 
   if (OP[0] == 0)
     {
-#if 0
-      char *fstr = State.regs[2] + State.imem;
-      printf (fstr,State.regs[3],State.regs[4],State.regs[5]);
-#else
       int save_errno = errno;  
       errno = 0;
 
@@ -1437,7 +1414,6 @@ OP_10007E0 ()
 
       switch (FUNC)
        {
-#if 0
 #if !defined(__GO32__) && !defined(_WIN32)
        case SYS_fork:
          RETVAL = fork ();
@@ -1449,6 +1425,7 @@ OP_10007E0 ()
        case SYS_execv:
          RETVAL = execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2), NULL);
          break;
+#if 0
        case SYS_pipe:
          {
            reg_t buf;
@@ -1470,13 +1447,13 @@ OP_10007E0 ()
            SW (PARM1, status);
          }
          break;
+#endif
 #endif
 
        case SYS_read:
          RETVAL = v850_callback->read (v850_callback, PARM1, MEMPTR (PARM2),
                                        PARM3);
          break;
-#endif
        case SYS_write:
          if (PARM1 == 1)
            RETVAL = (int)v850_callback->write_stdout (v850_callback,
@@ -1485,7 +1462,6 @@ OP_10007E0 ()
            RETVAL = (int)v850_callback->write (v850_callback, PARM1,
                                                MEMPTR (PARM2), PARM3);
          break;
-#if 0
        case SYS_lseek:
          RETVAL = v850_callback->lseek (v850_callback, PARM1, PARM2, PARM3);
          break;
@@ -1495,7 +1471,6 @@ OP_10007E0 ()
        case SYS_open:
          RETVAL = v850_callback->open (v850_callback, MEMPTR (PARM1), PARM2);
          break;
-#endif
        case SYS_exit:
          /* EXIT - caller can look in PARM1 to work out the 
             reason */
@@ -1531,6 +1506,7 @@ OP_10007E0 ()
            SLW (buf+28, host_stat.st_mtime);
            SLW (buf+36, host_stat.st_ctime);
          }
+#endif
          break;
 
        case SYS_chown:
@@ -1544,13 +1520,11 @@ OP_10007E0 ()
             if a prototype is present.  */
          RETVAL = utime (MEMPTR (PARM1), (void *) MEMPTR (PARM2));
          break;
-#endif
        default:
          abort ();
        }
       RETERR = errno;
       errno = save_errno;
-#endif
     }
   else if (OP[0] == 1 )
     {