o Wordwrap usage messages from sim-options
[deliverable/binutils-gdb.git] / sim / v850 / simops.c
index 4926910b8b763684ac3fcad3c8cd4a65231f6f0f..05b3fdacfde78010720802255a312e553ad01351 100644 (file)
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+
+
+
+
+
  /* FIXME - should be including a version of syscall.h that does not
     pollute the name space */
 #include "../../libgloss/v850/sys/syscall.h"
@@ -81,11 +93,6 @@ static int type3_regs[15] = { 2, 1, 0, 27, 26, 25, 24, 31, 30, 29, 28, 23, 22, 2
 #ifdef DEBUG
 static void trace_input PARAMS ((char *name, enum op_types type, int size));
 static void trace_output PARAMS ((enum op_types result));
-static int init_text_p = 0;
-static asection *text;
-static bfd_vma text_start;
-static bfd_vma text_end;
-extern bfd *prog_bfd;
 
 #ifndef SIZE_INSTRUCTION
 #define SIZE_INSTRUCTION 6
@@ -114,35 +121,26 @@ trace_input (name, type, size)
   char *p;
   uint32 values[3];
   int num_values, i;
-  char *cond;
-  asection *s;
   const char *filename;
   const char *functionname;
   unsigned int linenumber;
 
-  if ((v850_debug & DEBUG_TRACE) == 0)
+  if (!TRACE_ALU_P (STATE_CPU (simulator, 0)))
     return;
 
   buf[0] = '\0';
-  if (!init_text_p)
-    {
-      init_text_p = 1;
-      for (s = prog_bfd->sections; s; s = s->next)
-       if (strcmp (bfd_get_section_name (prog_bfd, s), ".text") == 0)
-         {
-           text = s;
-           text_start = bfd_get_section_vma (prog_bfd, s);
-           text_end = text_start + bfd_section_size (prog_bfd, s);
-           break;
-         }
-    }
 
-  if (text && PC >= text_start && PC < text_end)
+  if (STATE_TEXT_SECTION (simulator)
+      && PC >= STATE_TEXT_START (simulator)
+      && PC < STATE_TEXT_END (simulator))
     {
       filename = (const char *)0;
       functionname = (const char *)0;
       linenumber = 0;
-      if (bfd_find_nearest_line (prog_bfd, text, (struct symbol_cache_entry **)0, PC - text_start,
+      if (bfd_find_nearest_line (STATE_PROG_BFD (simulator),
+                                STATE_TEXT_SECTION (simulator),
+                                (struct symbol_cache_entry **)0,
+                                PC - STATE_TEXT_START (simulator),
                                 &filename, &functionname, &linenumber))
        {
          p = buf;
@@ -169,11 +167,13 @@ trace_input (name, type, size)
        }
     }
 
-  (*v850_callback->printf_filtered) (v850_callback, "0x%.8x: %-*.*s %-*s",
-                                    (unsigned)PC,
-                                    SIZE_LOCATION, SIZE_LOCATION, buf,
-                                    SIZE_INSTRUCTION, name);
+  trace_printf (simulator, STATE_CPU (simulator, 0),
+               "0x%.8x: %-*.*s %-*s",
+               (unsigned)PC,
+               SIZE_LOCATION, SIZE_LOCATION, buf,
+               SIZE_INSTRUCTION, name);
 
+#if 0
   switch (type)
     {
     default:
@@ -183,85 +183,87 @@ trace_input (name, type, size)
       break;
 
     case OP_TRAP:
-      sprintf (buf, "%d", OP[0]);
+      sprintf (buf, "%ld", OP[0]);
       break;
 
     case OP_REG:
-      sprintf (buf, "r%d", OP[0]);
+      sprintf (buf, "r%ld", OP[0]);
       break;
 
     case OP_REG_REG:
     case OP_REG_REG_CMP:
     case OP_REG_REG_MOVE:
-      sprintf (buf, "r%d,r%d", OP[0], OP[1]);
+      sprintf (buf, "r%ld,r%ld", OP[0], OP[1]);
       break;
 
     case OP_IMM_REG:
     case OP_IMM_REG_CMP:
     case OP_IMM_REG_MOVE:
-      sprintf (buf, "%d,r%d", OP[0], OP[1]);
+      sprintf (buf, "%ld,r%ld", OP[0], OP[1]);
       break;
 
     case OP_COND_BR:
-      sprintf (buf, "%d", SEXT9 (OP[0]));
+      sprintf (buf, "%ld", SEXT9 (OP[0]));
       break;
 
     case OP_LOAD16:
-      sprintf (buf, "%d[r30],r%d", OP[1] * size, OP[0]);
+      sprintf (buf, "%ld[r30],r%ld", OP[1] * size, OP[0]);
       break;
 
     case OP_STORE16:
-      sprintf (buf, "r%d,%d[r30]", OP[0], OP[1] * size);
+      sprintf (buf, "r%ld,%ld[r30]", OP[0], OP[1] * size);
       break;
 
     case OP_LOAD32:
-      sprintf (buf, "%d[r%d],r%d", SEXT16 (OP[2]) & ~0x1, OP[0], OP[1]);
+      sprintf (buf, "%ld[r%ld],r%ld", EXTEND16 (OP[2]) & ~0x1, OP[0], OP[1]);
       break;
 
     case OP_STORE32:
-      sprintf (buf, "r%d,%d[r%d]", OP[1], SEXT16 (OP[2] & ~0x1), OP[0]);
+      sprintf (buf, "r%ld,%ld[r%ld]", OP[1], EXTEND16 (OP[2] & ~0x1), OP[0]);
       break;
 
     case OP_JUMP:
-      sprintf (buf, "%d,r%d", SEXT22 (OP[0]), OP[1]);
+      sprintf (buf, "%ld,r%ld", SEXT22 (OP[0]), OP[1]);
       break;
 
     case OP_IMM_REG_REG:
-      sprintf (buf, "%d,r%d,r%d", SEXT16 (OP[0]), OP[1], OP[2]);
+      sprintf (buf, "%ld,r%ld,r%ld", EXTEND16 (OP[0]), OP[1], OP[2]);
       break;
 
     case OP_UIMM_REG_REG:
-      sprintf (buf, "%d,r%d,r%d", OP[0] & 0xffff, OP[1], OP[2]);
+      sprintf (buf, "%ld,r%ld,r%ld", OP[0] & 0xffff, OP[1], OP[2]);
       break;
 
     case OP_BIT:
-      sprintf (buf, "%d,%d[r%d]", OP[1] & 0x7, SEXT16 (OP[2]), OP[0]);
+      sprintf (buf, "%ld,%ld[r%ld]", OP[1] & 0x7, EXTEND16 (OP[2]), OP[0]);
       break;
 
     case OP_EX1:
-      switch (OP[0] & 0xf)
-       {
-       default:  cond = "?";   break;
-       case 0x0: cond = "v";   break;
-       case 0x1: cond = "c";   break;
-       case 0x2: cond = "z";   break;
-       case 0x3: cond = "nh";  break;
-       case 0x4: cond = "s";   break;
-       case 0x5: cond = "t";   break;
-       case 0x6: cond = "lt";  break;
-       case 0x7: cond = "le";  break;
-       case 0x8: cond = "nv";  break;
-       case 0x9: cond = "nc";  break;
-       case 0xa: cond = "nz";  break;
-       case 0xb: cond = "h";   break;
-       case 0xc: cond = "ns";  break;
-       case 0xd: cond = "sa";  break;
-       case 0xe: cond = "ge";  break;
-       case 0xf: cond = "gt";  break;
-       }
-
-      sprintf (buf, "%s,r%d", cond, OP[1]);
-      break;
+      {
+       char *cond;
+       switch (OP[0] & 0xf)
+         {
+         default:  cond = "?"; break;
+         case 0x0: cond = "v"; break;
+         case 0x1: cond = "c"; break;
+         case 0x2: cond = "z"; break;
+         case 0x3: cond = "nh";        break;
+         case 0x4: cond = "s"; break;
+         case 0x5: cond = "t"; break;
+         case 0x6: cond = "lt";        break;
+         case 0x7: cond = "le";        break;
+         case 0x8: cond = "nv";        break;
+         case 0x9: cond = "nc";        break;
+         case 0xa: cond = "nz";        break;
+         case 0xb: cond = "h"; break;
+         case 0xc: cond = "ns";        break;
+         case 0xd: cond = "sa";        break;
+         case 0xe: cond = "ge";        break;
+         case 0xf: cond = "gt";        break;
+         }
+       sprintf (buf, "%s,r%ld", cond, OP[1]);
+       break;
+      }
 
     case OP_EX2:
       strcpy (buf, "EX2");
@@ -269,19 +271,19 @@ trace_input (name, type, size)
 
     case OP_LDSR:
     case OP_STSR:
-      sprintf (buf, "r%d,s%d", OP[0], OP[1]);
+      sprintf (buf, "r%ld,s%ld", OP[0], OP[1]);
       break;
 
     case OP_PUSHPOP1:
       for (i = 0; i < 12; i++)
        if (OP[3] & (1 << type1_regs[i]))
-         strcat (buf, "r%d ", i + 20);
+         sprintf (strchr (buf, 0), "r%d ", i + 20);
       break;
 
     case OP_PUSHPOP2:
       for (i = 0; i < 16; i++)
        if (OP[3] & (1 << type2_regs[i]))
-         strcat (buf, "r%d ", i + 16);
+         sprintf (strchr (buf, 0), "r%d ", i + 16);
       if (OP[3] & (1 << 19))
        strcat (buf, "F/EIPC, F/EIPSW " );
       break;
@@ -289,7 +291,7 @@ trace_input (name, type, size)
     case OP_PUSHPOP3:
       for (i = 0; i < 15; i++)
        if (OP[3] & (1 << type3_regs[i]))
-         strcat (buf, "r%d ", i + 1);
+         sprintf (strchr (buf, 0), "r%d ", i + 1);
       if (OP[3] & (1 << 3))
        strcat (buf, "PSW " );
       if (OP[3] & (1 << 19))
@@ -297,17 +299,22 @@ trace_input (name, type, size)
       break;
 
     case OP_BIT_CHANGE:
-      sprintf (buf, "r%d, [r%d]", OP[1], OP[0] );
+      sprintf (buf, "r%ld, [r%ld]", OP[1], OP[0] );
       break;
     }
+#endif
 
-  if ((v850_debug & DEBUG_VALUES) == 0)
+  if (!TRACE_ALU_P (STATE_CPU (simulator, 0)))
     {
-      (*v850_callback->printf_filtered) (v850_callback, "%s\n", buf);
+      trace_printf (simulator, STATE_CPU (simulator, 0),
+                   "%s\n", buf);
     }
   else
     {
-      (*v850_callback->printf_filtered) (v850_callback, "%-*s", SIZE_OPERANDS, buf);
+#if 0
+      trace_printf (simulator, STATE_CPU (simulator, 0),
+                   "%-*s", SIZE_OPERANDS, buf);
+#endif
       switch (type)
        {
        default:
@@ -364,14 +371,14 @@ trace_input (name, type, size)
          break;
 
        case OP_LOAD32:
-         values[0] = SEXT16 (OP[2]);
+         values[0] = EXTEND16 (OP[2]);
          values[1] = State.regs[OP[0]];
          num_values = 2;
          break;
 
        case OP_STORE32:
          values[0] = State.regs[OP[1]];
-         values[1] = SEXT16 (OP[2]);
+         values[1] = EXTEND16 (OP[2]);
          values[2] = State.regs[OP[0]];
          num_values = 3;
          break;
@@ -383,7 +390,7 @@ trace_input (name, type, size)
          break;
 
        case OP_IMM_REG_REG:
-         values[0] = SEXT16 (OP[0]) << size;
+         values[0] = EXTEND16 (OP[0]) << size;
          values[1] = State.regs[OP[1]];
          num_values = 2;
          break;
@@ -418,10 +425,12 @@ trace_input (name, type, size)
        }
 
       for (i = 0; i < num_values; i++)
-       (*v850_callback->printf_filtered) (v850_callback, "%*s0x%.8lx", SIZE_VALUES - 10, "", values[i]);
+       trace_printf (simulator, STATE_CPU (simulator, 0),
+                     "%*s0x%.8lx", SIZE_VALUES - 10, "", values[i]);
 
       while (i++ < 3)
-       (*v850_callback->printf_filtered) (v850_callback, "%*s", SIZE_VALUES, "");
+       trace_printf (simulator, STATE_CPU (simulator, 0),
+                     "%*s", SIZE_VALUES, "");
     }
 }
 
@@ -429,7 +438,7 @@ static void
 trace_output (result)
      enum op_types result;
 {
-  if ((v850_debug & (DEBUG_TRACE | DEBUG_VALUES)) == (DEBUG_TRACE | DEBUG_VALUES))
+  if (TRACE_ALU_P (STATE_CPU (simulator, 0)))
     {
       switch (result)
        {
@@ -449,8 +458,8 @@ trace_output (result)
 
        case OP_LOAD16:
        case OP_STSR:
-         (*v850_callback->printf_filtered) (v850_callback, " :: 0x%.8lx",
-                                            (unsigned long)State.regs[OP[0]]);
+         trace_printf (simulator, STATE_CPU (simulator, 0),
+                       " :: 0x%.8lx", (unsigned long)State.regs[OP[0]]);
          break;
 
        case OP_REG_REG:
@@ -459,29 +468,30 @@ trace_output (result)
        case OP_IMM_REG_MOVE:
        case OP_LOAD32:
        case OP_EX1:
-         (*v850_callback->printf_filtered) (v850_callback, " :: 0x%.8lx",
-                                            (unsigned long)State.regs[OP[1]]);
+         trace_printf (simulator, STATE_CPU (simulator, 0),
+                       " :: 0x%.8lx", (unsigned long)State.regs[OP[1]]);
          break;
 
        case OP_IMM_REG_REG:
        case OP_UIMM_REG_REG:
-         (*v850_callback->printf_filtered) (v850_callback, " :: 0x%.8lx",
-                                            (unsigned long)State.regs[OP[2]]);
+         trace_printf (simulator, STATE_CPU (simulator, 0),
+                       " :: 0x%.8lx", (unsigned long)State.regs[OP[2]]);
          break;
 
        case OP_JUMP:
          if (OP[1] != 0)
-           (*v850_callback->printf_filtered) (v850_callback, " :: 0x%.8lx",
-                                              (unsigned long)State.regs[OP[1]]);
+           trace_printf (simulator, STATE_CPU (simulator, 0),
+                         " :: 0x%.8lx", (unsigned long)State.regs[OP[1]]);
          break;
 
        case OP_LDSR:
-         (*v850_callback->printf_filtered) (v850_callback, " :: 0x%.8lx",
-                                            (unsigned long)State.sregs[OP[1]]);
+         trace_printf (simulator, STATE_CPU (simulator, 0),
+                       " :: 0x%.8lx", (unsigned long)State.sregs[OP[1]]);
          break;
        }
 
-      (*v850_callback->printf_filtered) (v850_callback, "\n");
+      trace_printf (simulator, STATE_CPU (simulator, 0),
+                   "\n");
     }
 }
 
@@ -489,7 +499,7 @@ trace_output (result)
 #define trace_input(NAME, IN1, IN2)
 #define trace_output(RESULT)
 
-//#define trace_input(NAME, IN1, IN2) fprintf (stderr, NAME "\n" );
+/* #define trace_input(NAME, IN1, IN2) fprintf (stderr, NAME "\n" ); */
 
 #endif
 
@@ -657,7 +667,7 @@ OP_300 ()
 /* end-sanitize-v850eq */
   trace_input ("sld.b", OP_LOAD16, 1);
   
-  State.regs[ OP[1] ] = SEXT8 (result);
+  State.regs[ OP[1] ] = EXTEND8 (result);
 /* start-sanitize-v850eq */
 #endif
 /* end-sanitize-v850eq */
@@ -684,7 +694,7 @@ OP_400 ()
 /* end-sanitize-v850eq */
   trace_input ("sld.h", OP_LOAD16, 2);
   
-  State.regs[ OP[1] ] = SEXT16 (result);
+  State.regs[ OP[1] ] = EXTEND16 (result);
 /* start-sanitize-v850eq */
 #endif
 /* end-sanitize-v850eq */
@@ -754,9 +764,9 @@ OP_700 ()
 
   trace_input ("ld.b", OP_LOAD32, 1);
 
-  adr = State.regs[ OP[0] ] + SEXT16 (OP[2]);
+  adr = State.regs[ OP[0] ] + EXTEND16 (OP[2]);
 
-  State.regs[ OP[1] ] = SEXT8 (load_mem (adr, 1));
+  State.regs[ OP[1] ] = EXTEND8 (load_mem (adr, 1));
   
   trace_output (OP_LOAD32);
 
@@ -771,10 +781,10 @@ OP_720 ()
 
   trace_input ("ld.h", OP_LOAD32, 2);
 
-  adr = State.regs[ OP[0] ] + SEXT16 (OP[2]);
+  adr = State.regs[ OP[0] ] + EXTEND16 (OP[2]);
   adr &= ~0x1;
   
-  State.regs[ OP[1] ] = SEXT16 (load_mem (adr, 2));
+  State.regs[ OP[1] ] = EXTEND16 (load_mem (adr, 2));
   
   trace_output (OP_LOAD32);
 
@@ -789,7 +799,7 @@ OP_10720 ()
 
   trace_input ("ld.w", OP_LOAD32, 4);
 
-  adr = State.regs[ OP[0] ] + SEXT16 (OP[2] & ~1);
+  adr = State.regs[ OP[0] ] + EXTEND16 (OP[2] & ~1);
   adr &= ~0x3;
   
   State.regs[ OP[1] ] = load_mem (adr, 4);
@@ -805,7 +815,7 @@ OP_740 ()
 {
   trace_input ("st.b", OP_STORE32, 1);
 
-  store_mem (State.regs[ OP[0] ] + SEXT16 (OP[2]), 1, State.regs[ OP[1] ]);
+  store_mem (State.regs[ OP[0] ] + EXTEND16 (OP[2]), 1, State.regs[ OP[1] ]);
   
   trace_output (OP_STORE32);
 
@@ -820,7 +830,7 @@ OP_760 ()
   
   trace_input ("st.h", OP_STORE32, 2);
 
-  adr = State.regs[ OP[0] ] + SEXT16 (OP[2]);
+  adr = State.regs[ OP[0] ] + EXTEND16 (OP[2]);
   adr &= ~1;
   
   store_mem (adr, 2, State.regs[ OP[1] ]);
@@ -838,7 +848,7 @@ OP_10760 ()
   
   trace_input ("st.w", OP_STORE32, 4);
 
-  adr = State.regs[ OP[0] ] + SEXT16 (OP[2] & ~1);
+  adr = State.regs[ OP[0] ] + EXTEND16 (OP[2] & ~1);
   adr &= ~3;
   
   store_mem (adr, 4, State.regs[ OP[1] ]);
@@ -998,7 +1008,7 @@ OP_60 ()
 #ifdef ARCH_v850eq
       trace_input ("sld.b", OP_LOAD16, 1);
       
-      State.regs[ OP[1] ] = SEXT8 (result);
+      State.regs[ OP[1] ] = EXTEND8 (result);
 #else
 /* end-sanitize-v850eq */
       trace_input ("sld.bu", OP_LOAD16, 1);
@@ -1103,7 +1113,7 @@ OP_600 ()
 
   /* Compute the result.  */
 
-  op0 = SEXT16 (OP[2]);
+  op0 = EXTEND16 (OP[2]);
   op1 = State.regs[ OP[0] ];
   result = op0 + op1;
   
@@ -1192,7 +1202,7 @@ OP_E0 ()
     {
       trace_input ("sxh", OP_REG, 0);
       
-      State.regs[ OP[0] ] = SEXT16 (State.regs[ OP[0] ]);
+      State.regs[ OP[0] ] = EXTEND16 (State.regs[ OP[0] ]);
 
       trace_output (OP_REG);
     }
@@ -1201,7 +1211,7 @@ OP_E0 ()
     {
       trace_input ("mulh", OP_REG_REG, 0);
       
-      State.regs[ OP[1] ] = (SEXT16 (State.regs[ OP[1] ]) * SEXT16 (State.regs[ OP[0] ]));
+      State.regs[ OP[1] ] = (EXTEND16 (State.regs[ OP[1] ]) * EXTEND16 (State.regs[ OP[0] ]));
       
       trace_output (OP_REG_REG);
     }
@@ -1215,7 +1225,7 @@ OP_2E0 ()
 {
   trace_input ("mulh", OP_IMM_REG, 0);
   
-  State.regs[ OP[1] ] = SEXT16 (State.regs[ OP[1] ]) * SEXT5 (OP[0]);
+  State.regs[ OP[1] ] = EXTEND16 (State.regs[ OP[1] ]) * SEXT5 (OP[0]);
   
   trace_output (OP_IMM_REG);
 
@@ -1233,7 +1243,7 @@ OP_6E0 ()
     {
       trace_input ("mulhi", OP_IMM_REG_REG, 0);
   
-      State.regs[ OP[1] ] = SEXT16 (State.regs[ OP[0] ]) * SEXT16 (OP[2]);
+      State.regs[ OP[1] ] = EXTEND16 (State.regs[ OP[0] ]) * EXTEND16 (OP[2]);
       
       trace_output (OP_IMM_REG_REG);
     }
@@ -1254,7 +1264,7 @@ OP_40 ()
       trace_input ("switch", OP_REG, 0);
       
       adr      = State.pc + 2 + (State.regs[ OP[0] ] << 1);
-      State.pc = State.pc + 2 + (SEXT16 (load_mem (adr, 2)) << 1);
+      State.pc = State.pc + 2 + (EXTEND16 (load_mem (adr, 2)) << 1);
 
       trace_output (OP_REG);
     }
@@ -1267,7 +1277,7 @@ OP_40 ()
       trace_input ("divh", OP_REG_REG, 0);
 
       /* Compute the result.  */
-      temp = SEXT16 (State.regs[ OP[0] ]);
+      temp = EXTEND16 (State.regs[ OP[0] ]);
       op0 = temp;
       op1 = State.regs[OP[1]];
       
@@ -1475,7 +1485,7 @@ OP_A0 ()
     {
       trace_input ("sxb", OP_REG, 0);
 
-      State.regs[ OP[0] ] = SEXT8 (State.regs[ OP[0] ]);
+      State.regs[ OP[0] ] = EXTEND8 (State.regs[ OP[0] ]);
 
       trace_output (OP_REG);
     }
@@ -1527,7 +1537,7 @@ OP_660 ()
   trace_input ("satsubi", OP_IMM_REG, 0);
 
   /* Compute the result.  */
-  temp = SEXT16 (OP[2]);
+  temp = EXTEND16 (OP[2]);
   op0 = temp;
   op1 = State.regs[ OP[0] ];
   result = op1 - op0;
@@ -1693,11 +1703,11 @@ OP_620 ()
 /* start-sanitize-v850e */
   if (OP[1] == 0)
     {
-      trace_input ("mov", OP_IMM32_REG, 4);
+      trace_input ("mov", OP_IMM_REG, 4);
 
       State.regs[ OP[0] ] = load_mem (PC + 2, 4);
       
-      trace_output (OP_IMM32_REG);
+      trace_output (OP_IMM_REG);
 
       return 6;
     }
@@ -1706,7 +1716,7 @@ OP_620 ()
     {
       trace_input ("movea", OP_IMM_REG_REG, 0);
   
-      State.regs[ OP[1] ] = State.regs[ OP[0] ] + SEXT16 (OP[2]);
+      State.regs[ OP[1] ] = State.regs[ OP[0] ] + EXTEND16 (OP[2]);
   
       trace_output (OP_IMM_REG_REG);
 
@@ -2099,7 +2109,7 @@ OP_7C0 ()
   trace_input ("set1", OP_BIT, 0);
   op0 = State.regs[ OP[0] ];
   op1 = OP[1] & 0x7;
-  temp = SEXT16 (OP[2]);
+  temp = EXTEND16 (OP[2]);
   op2 = temp;
   temp = load_mem (op0 + op2, 1);
   PSW &= ~PSW_Z;
@@ -2122,7 +2132,7 @@ OP_47C0 ()
   trace_input ("not1", OP_BIT, 0);
   op0 = State.regs[ OP[0] ];
   op1 = OP[1] & 0x7;
-  temp = SEXT16 (OP[2]);
+  temp = EXTEND16 (OP[2]);
   op2 = temp;
   temp = load_mem (op0 + op2, 1);
   PSW &= ~PSW_Z;
@@ -2145,7 +2155,7 @@ OP_87C0 ()
   trace_input ("clr1", OP_BIT, 0);
   op0 = State.regs[ OP[0] ];
   op1 = OP[1] & 0x7;
-  temp = SEXT16 (OP[2]);
+  temp = EXTEND16 (OP[2]);
   op2 = temp;
   temp = load_mem (op0 + op2, 1);
   PSW &= ~PSW_Z;
@@ -2168,7 +2178,7 @@ OP_C7C0 ()
   trace_input ("tst1", OP_BIT, 0);
   op0 = State.regs[ OP[0] ];
   op1 = OP[1] & 0x7;
-  temp = SEXT16 (OP[2]);
+  temp = EXTEND16 (OP[2]);
   op2 = temp;
   temp = load_mem (op0 + op2, 1);
   PSW &= ~PSW_Z;
@@ -2183,8 +2193,9 @@ OP_C7C0 ()
 int
 OP_FFFF ()
 {
-  State.exception = SIGTRAP;
-  return  -4;
+  sim_engine_halt (simulator, STATE_CPU (simulator, 0), NULL, PC,
+                  sim_stopped, SIGTRAP);
+  return 0;
 }
 
 /* di */
@@ -2215,10 +2226,10 @@ OP_12007E0 ()
 {
   trace_input ("halt", OP_NONE, 0);
   /* FIXME this should put processor into a mode where NMI still handled */
-  State.exception = SIGQUIT;
   trace_output (OP_NONE);
-
-  return 4;
+  sim_engine_halt (simulator, STATE_CPU (simulator, 0), NULL, PC,
+                  sim_stopped, SIGTRAP);
+  return 0;
 }
 
 /* reti */
@@ -2394,11 +2405,17 @@ OP_10007E0 ()
 #ifdef SYS_exit
        case SYS_exit:
          if ((PARM1 & 0xffff0000) == 0xdead0000 && (PARM1 & 0xffff) != 0)
-           State.exception = PARM1 & 0xffff;   /* get signal encoded by kill */
+           /* get signal encoded by kill */
+           sim_engine_halt (simulator, STATE_CPU (simulator, 0), NULL, PC,
+                            sim_signalled, PARM1 & 0xffff);
          else if (PARM1 == 0xdead)
-           State.exception = SIGABRT;          /* old libraries */
+           /* old libraries */
+           sim_engine_halt (simulator, STATE_CPU (simulator, 0), NULL, PC,
+                            sim_exited, SIGABRT);
          else
-           State.exception = SIG_V850_EXIT;    /* PARM1 has exit status encoded */
+           /* PARM1 has exit status */
+           sim_engine_halt (simulator, STATE_CPU (simulator, 0), NULL, PC,
+                            sim_exited, PARM1);
          break;
 #endif
 
@@ -2568,7 +2585,7 @@ OP_E607E0 (void)
 {
   int temp;
 
-  trace_input ("tst1", OP_BIT_LOAD, 1);
+  trace_input ("tst1", OP_BIT, 1);
 
   temp = load_mem (State.regs[ OP[0] ], 1);
   
@@ -2576,7 +2593,7 @@ OP_E607E0 (void)
   if ((temp & (1 << State.regs[ OP[1] & 0x7 ])) == 0)
     PSW |= PSW_Z;
   
-  trace_output (OP_BIT_LOAD);
+  trace_output (OP_BIT);
 
   return 4;
 }
@@ -2946,7 +2963,7 @@ OP_18007E0 (void)
 
   imm5 = 32 - ((OP[3] & 0x3c0000) >> 17);
 
-  divide_by   = SEXT16 (State.regs[ OP[0] ]);
+  divide_by   = EXTEND16 (State.regs[ OP[0] ]);
   divide_this = State.regs[ OP[1] ] << imm5;
 
   divn (imm5, divide_by, divide_this, & quotient, & remainder, & overflow);
@@ -3192,7 +3209,7 @@ OP_28007E0 (void)
       /* Compute the result.  */
 
       divide_by  = State.regs[ OP[0] ];
-      divide_this = SEXT16 (State.regs[ OP[1] ]);
+      divide_this = EXTEND16 (State.regs[ OP[1] ]);
 
       if (divide_by == 0 || (divide_by == -1 && divide_this == (1 << 31)))
        {
@@ -3222,7 +3239,7 @@ OP_28007E0 (void)
 
       imm5 = 32 - ((OP[3] & 0x3c0000) >> 17);
 
-      divide_by   = SEXT16 (State.regs[ OP[0] ]);
+      divide_by   = EXTEND16 (State.regs[ OP[0] ]);
       divide_this = State.regs[ OP[1] ];
 
       divn (imm5, divide_by, divide_this, & quotient, & remainder, & overflow);
@@ -3428,7 +3445,7 @@ OP_107E0 (void)
 
       trace_input ("ld.hu", OP_LOAD32, 2);
 
-      adr = State.regs[ OP[0] ] + SEXT16 (OP[2] & ~1);
+      adr = State.regs[ OP[0] ] + EXTEND16 (OP[2] & ~1);
       adr &= ~0x1;
       
       State.regs[ OP[1] ] = load_mem (adr, 2);
@@ -3469,7 +3486,7 @@ OP_10780 (void)
       trace_input ("ld.bu", OP_LOAD32, 1);
 
       adr = (State.regs[ OP[0] ]
-            + (SEXT16 (OP[2] & ~1) | ((OP[3] >> 5) & 1)));
+            + (EXTEND16 (OP[2] & ~1) | ((OP[3] >> 5) & 1)));
       
       State.regs[ OP[1] ] = load_mem (adr, 1);
   
@@ -3547,7 +3564,7 @@ OP_B0780 (void)
   
   SP -= (OP[3] & 0x3e) << 1;
 
-  EP = SEXT16 (load_mem (PC + 4, 2));
+  EP = EXTEND16 (load_mem (PC + 4, 2));
   
   trace_output (OP_PUSHPOP1);
 
@@ -3591,7 +3608,7 @@ OP_70 (void)
 #ifdef ARCH_v850eq
   trace_input ("sld.h", OP_LOAD16, 2);
   
-  State.regs[ OP[1] ] = SEXT16 (result);
+  State.regs[ OP[1] ] = EXTEND16 (result);
 #else
 /* end-sanitize-v850eq */
   trace_input ("sld.hu", OP_LOAD16, 2);
This page took 0.034098 seconds and 4 git commands to generate.