]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - opcodes/or32-opc.c
Add a note to the GDB/NEWS file mentioning that the ARM simulator now
[thirdparty/binutils-gdb.git] / opcodes / or32-opc.c
index e52dbd671c8a89fff9c10d20bc713b3a8b8b6a86..f4bc706e9273035972292912a332e4a3ce435399 100644 (file)
@@ -1,5 +1,5 @@
 /* Table of opcodes for the OpenRISC 1000 ISA.
-   Copyright 2002, 2004, 2005, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2002-2014 Free Software Foundation, Inc.
    Contributed by Damjan Lampret (lampret@opencores.org).
    
    This file is part of the GNU opcodes library.
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-/* We treat all letters the same in encode/decode routines so
-   we need to assign some characteristics to them like signess etc.  */
+#include "sysdep.h"
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include "safe-ctype.h"
 #include "ansidecl.h"
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
 #include "opcode/or32.h"
 
+/* We treat all letters the same in encode/decode routines so
+   we need to assign some characteristics to them like signess etc.  */
+
 const struct or32_letter or32_letters[] =
 {
   { 'A', NUM_UNSIGNED },
@@ -345,7 +344,7 @@ const unsigned int or32_num_opcodes = ((sizeof(or32_opcodes)) / (sizeof(struct o
 /* Calculates instruction length in bytes. Always 4 for OR32.  */
 
 int
-insn_len (int insn_index ATTRIBUTE_UNUSED)
+insn_len (int i_index ATTRIBUTE_UNUSED)
 {
   return 4;
 }
@@ -409,10 +408,10 @@ insn_index (char *insn)
 }
 
 const char *
-insn_name (int index)
+insn_name (int op_index)
 {
-  if (index >= 0 && index < (int) or32_num_opcodes)
-    return or32_opcodes[index].name;
+  if (op_index >= 0 && op_index < (int) or32_num_opcodes)
+    return or32_opcodes[op_index].name;
   else
     return "???";
 }
@@ -586,7 +585,8 @@ cover_insn (unsigned long * cur, int pass, unsigned int mask)
          c = cover_insn (cur, curpass, mask & (~(cur_mask << best_first)));
          if (c)
            {
-             debug (8, "%li> #%X -> %lu\n", (long)(next - automata), i, (long)(cur - automata));
+             debug (8, "%li> #%X -> %lu\n", (long)(next - automata), i,
+                    (unsigned long)(cur - automata));
              *next = cur - automata;
              cur = c;   
            }
@@ -897,7 +897,7 @@ or32_extract (char param_ch, char *enc_initial, unsigned long insn)
           {
             unsigned long tmp = strtol (enc, NULL, 16);
 #if DEBUG
-            printf (" enc=%s, tmp=%x ", enc, tmp);
+            printf (" enc=%s, tmp=%lx ", enc, tmp);
 #endif
             if (param_ch == '0')
               tmp = 15 - tmp;
@@ -917,7 +917,7 @@ or32_extract (char param_ch, char *enc_initial, unsigned long insn)
         opc_pos--;
         param_pos--;
 #if DEBUG
-        printf ("\n  ret=%x opc_pos=%x, param_pos=%x\n", ret, opc_pos, param_pos);
+        printf ("\n  ret=%lx opc_pos=%x, param_pos=%x\n", ret, opc_pos, param_pos);
 #endif  
         if (ISLOWER (param_ch))
           ret -= ((insn >> opc_pos) & 0x1) << param_pos;
@@ -939,7 +939,7 @@ or32_extract (char param_ch, char *enc_initial, unsigned long insn)
       enc++;
 
 #if DEBUG
-  printf ("ret=%x\n", ret);
+  printf ("ret=%lx\n", ret);
 #endif
   return ret;
 }
@@ -950,8 +950,10 @@ static void
 or32_print_register (char param_ch, char *encoding, unsigned long insn)
 {
   int regnum = or32_extract(param_ch, encoding, insn);
-  
-  sprintf (disassembled, "%sr%d", disassembled, regnum);
+  char s_regnum[20];
+
+  sprintf (s_regnum, "r%d", regnum);
+  strcat (disassembled, s_regnum);
 }
 
 /* Print immediate. Used only by print_insn.  */
@@ -960,18 +962,20 @@ static void
 or32_print_immediate (char param_ch, char *encoding, unsigned long insn)
 {
   int imm = or32_extract (param_ch, encoding, insn);
+  char s_imm[20];
 
   imm = extend_imm (imm, param_ch);
-  
+
   if (letter_signed (param_ch))
     {
       if (imm < 0)
-        sprintf (disassembled, "%s%d", disassembled, imm);
+       sprintf (s_imm, "%d", imm);
       else
-        sprintf (disassembled, "%s0x%x", disassembled, imm);
+       sprintf (s_imm, "0x%x", imm);
     }
   else
-    sprintf (disassembled, "%s%#x", disassembled, imm);
+    sprintf (s_imm, "%#x", imm);
+  strcat (disassembled, s_imm);
 }
 
 /* Disassemble one instruction from insn to disassemble.
@@ -980,12 +984,12 @@ or32_print_immediate (char param_ch, char *encoding, unsigned long insn)
 int
 disassemble_insn (unsigned long insn)
 {
-  int index;
-  index = insn_decode (insn);
+  int op_index;
+  op_index = insn_decode (insn);
 
-  if (index >= 0)
+  if (op_index >= 0)
     {
-      struct or32_opcode const *opcode = &or32_opcodes[index];
+      struct or32_opcode const *opcode = &or32_opcodes[op_index];
       char *s;
 
       sprintf (disassembled, "%s ", opcode->name);
@@ -1004,14 +1008,22 @@ disassemble_insn (unsigned long insn)
               if (strchr (opcode->encoding, *s))
                 or32_print_immediate (*s, opcode->encoding, insn);
               else
-                sprintf (disassembled, "%s%c", disassembled, *s);
+               {
+                 char s_encoding[2] = { *s, '\0' };
+
+                 strcat (disassembled, s_encoding);
+               }
+
             }
         }
     }
   else
     {
+      char s_insn[20];
+
       /* This used to be %8x for binutils.  */
-      sprintf (disassembled, "%s.word 0x%08lx", disassembled, insn);
+      sprintf (s_insn, ".word 0x%08lx", insn);
+      strcat (disassembled, s_insn);
     }
 
   return insn_len (insn);