gdb, gdbserver: remove ARM regdat files
[deliverable/binutils-gdb.git] / cpu / m32r.opc
index 78bd0facef4bc869bb392007f02e0bd4bbab8295..30e0956eac4d7206f8da931a9224bc843c3f36da 100644 (file)
@@ -1,19 +1,16 @@
 /* M32R opcode support.  -*- C -*-
 
 /* M32R opcode support.  -*- C -*-
 
-   Copyright 1998, 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
+   Copyright 1998, 1999, 2000, 2001, 2004, 2005, 2007, 2009
+   Free Software Foundation, Inc.
 
    Contributed by Red Hat Inc; developed under contract from
    Mitsubishi Electric Corporation.
 
    This file is part of the GNU Binutils.
 
 
    Contributed by Red Hat Inc; developed under contract from
    Mitsubishi Electric Corporation.
 
    This file is part of the GNU Binutils.
 
-   Contributed by Red Hat Inc; developed under contract from Fujitsu.
-
-   This file is part of the GNU Binutils.
-
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -23,7 +20,9 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
 
 /* This file is an addendum to m32r.cpu.  Heavy use of C code isn't
    appropriate in .cpu files, so it resides here.  This especially applies
 
 /* This file is an addendum to m32r.cpu.  Heavy use of C code isn't
    appropriate in .cpu files, so it resides here.  This especially applies
   : X (buffer) == 0x30 ? ((((unsigned char *) (buffer))[1] & 0x70) >> 4) \
   : ((((unsigned char *) (buffer))[1] & 0xf0) >> 4)))
 #else
   : X (buffer) == 0x30 ? ((((unsigned char *) (buffer))[1] & 0x70) >> 4) \
   : ((((unsigned char *) (buffer))[1] & 0xf0) >> 4)))
 #else
-#define CGEN_DIS_HASH(buffer, value) m32r_cgen_dis_hash(buffer, value)
-extern unsigned int m32r_cgen_dis_hash(const char *, CGEN_INSN_INT);
+#define CGEN_DIS_HASH(buffer, value) m32r_cgen_dis_hash (buffer, value)
+extern unsigned int m32r_cgen_dis_hash (const char *, CGEN_INSN_INT);
 #endif
 
 /* -- */
 \f
 /* -- opc.c */
 unsigned int
 #endif
 
 /* -- */
 \f
 /* -- opc.c */
 unsigned int
-m32r_cgen_dis_hash (buf, value)
-     const char * buf ATTRIBUTE_UNUSED;
-     CGEN_INSN_INT value;
+m32r_cgen_dis_hash (const char * buf ATTRIBUTE_UNUSED, CGEN_INSN_INT value)
 {
   unsigned int x;
 {
   unsigned int x;
-                                                                                
-  if (value & 0xffff0000) /* 32bit instructions */
+
+  if (value & 0xffff0000) /* 32bit instructions */
     value = (value >> 16) & 0xffff;
     value = (value >> 16) & 0xffff;
-                                                                                
-  x = (value>>8) & 0xf0;
+
+  x = (value >> 8) & 0xf0;
   if (x == 0x40 || x == 0xe0 || x == 0x60 || x == 0x50)
     return x;
   if (x == 0x40 || x == 0xe0 || x == 0x60 || x == 0x50)
     return x;
-                                                                                
+
   if (x == 0x70 || x == 0xf0)
   if (x == 0x70 || x == 0xf0)
-    return x | ((value>>8) & 0x0f);
-                                                                                
+    return x | ((value >> 8) & 0x0f);
+
   if (x == 0x30)
     return x | ((value & 0x70) >> 4);
   else
     return x | ((value & 0xf0) >> 4);
 }
   if (x == 0x30)
     return x | ((value & 0x70) >> 4);
   else
     return x | ((value & 0xf0) >> 4);
 }
-                                                                                
+
 /* -- */
 \f
 /* -- asm.c */
 /* -- */
 \f
 /* -- asm.c */
-static const char * parse_hash
-  PARAMS ((CGEN_CPU_DESC, const char **, int, unsigned long *));
-static const char * parse_hi16
-  PARAMS ((CGEN_CPU_DESC, const char **, int, unsigned long *));
-static const char * parse_slo16
-  PARAMS ((CGEN_CPU_DESC, const char **, int, long *));
-static const char * parse_ulo16
-  PARAMS ((CGEN_CPU_DESC, const char **, int, unsigned long *));
+static const char * MISSING_CLOSING_PARENTHESIS = N_("missing `)'");
 
 /* Handle '#' prefixes (i.e. skip over them).  */
 
 static const char *
 
 /* Handle '#' prefixes (i.e. skip over them).  */
 
 static const char *
-parse_hash (cd, strp, opindex, valuep)
-     CGEN_CPU_DESC cd ATTRIBUTE_UNUSED;
-     const char **strp;
-     int opindex ATTRIBUTE_UNUSED;
-     unsigned long *valuep ATTRIBUTE_UNUSED;
+parse_hash (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+           const char **strp,
+           int opindex ATTRIBUTE_UNUSED,
+           long *valuep ATTRIBUTE_UNUSED)
 {
   if (**strp == '#')
     ++*strp;
 {
   if (**strp == '#')
     ++*strp;
@@ -113,11 +102,10 @@ parse_hash (cd, strp, opindex, valuep)
 /* Handle shigh(), high().  */
 
 static const char *
 /* Handle shigh(), high().  */
 
 static const char *
-parse_hi16 (cd, strp, opindex, valuep)
-     CGEN_CPU_DESC cd;
-     const char **strp;
-     int opindex;
-     unsigned long *valuep;
+parse_hi16 (CGEN_CPU_DESC cd,
+           const char **strp,
+           int opindex,
+           unsigned long *valuep)
 {
   const char *errmsg;
   enum cgen_parse_operand_result result_type;
 {
   const char *errmsg;
   enum cgen_parse_operand_result result_type;
@@ -130,13 +118,16 @@ parse_hi16 (cd, strp, opindex, valuep)
     {
       *strp += 5;
       errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32R_HI16_ULO,
     {
       *strp += 5;
       errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32R_HI16_ULO,
-                                  &result_type, &value);
+                                  & result_type, & value);
       if (**strp != ')')
       if (**strp != ')')
-       return "missing `)'";
+       return MISSING_CLOSING_PARENTHESIS;
       ++*strp;
       if (errmsg == NULL
       ++*strp;
       if (errmsg == NULL
-         && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
-       value >>= 16;
+         && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
+       {
+         value >>= 16;
+         value &= 0xffff;
+       }
       *valuep = value;
       return errmsg;
     }
       *valuep = value;
       return errmsg;
     }
@@ -144,16 +135,17 @@ parse_hi16 (cd, strp, opindex, valuep)
     {
       *strp += 6;
       errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32R_HI16_SLO,
     {
       *strp += 6;
       errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32R_HI16_SLO,
-                                  &result_type, &value);
+                                  & result_type, & value);
       if (**strp != ')')
       if (**strp != ')')
-       return "missing `)'";
+       return MISSING_CLOSING_PARENTHESIS;
       ++*strp;
       if (errmsg == NULL
          && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
       ++*strp;
       if (errmsg == NULL
          && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
-        {
-          value = value + (value & 0x8000 ? 0x10000 : 0);
-          value >>= 16;
-        }
+       {
+         value += 0x8000;
+         value >>= 16;
+         value &= 0xffff;
+       }
       *valuep = value;
       return errmsg;
     }
       *valuep = value;
       return errmsg;
     }
@@ -166,11 +158,10 @@ parse_hi16 (cd, strp, opindex, valuep)
    handles the case where low() isn't present.  */
 
 static const char *
    handles the case where low() isn't present.  */
 
 static const char *
-parse_slo16 (cd, strp, opindex, valuep)
-     CGEN_CPU_DESC cd;
-     const char **strp;
-     int opindex;
-     long *valuep;
+parse_slo16 (CGEN_CPU_DESC cd,
+            const char ** strp,
+            int opindex,
+            long * valuep)
 {
   const char *errmsg;
   enum cgen_parse_operand_result result_type;
 {
   const char *errmsg;
   enum cgen_parse_operand_result result_type;
@@ -183,17 +174,13 @@ parse_slo16 (cd, strp, opindex, valuep)
     {
       *strp += 4;
       errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32R_LO16,
     {
       *strp += 4;
       errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32R_LO16,
-                                  &result_type, &value);
+                                  & result_type, & value);
       if (**strp != ')')
       if (**strp != ')')
-       return "missing `)'";
+       return MISSING_CLOSING_PARENTHESIS;
       ++*strp;
       if (errmsg == NULL
          && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
       ++*strp;
       if (errmsg == NULL
          && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
-        {
-         value &= 0xffff;
-          if (value & 0x8000)
-             value |= 0xffff0000;
-        }
+       value = ((value & 0xffff) ^ 0x8000) - 0x8000;
       *valuep = value;
       return errmsg;
     }
       *valuep = value;
       return errmsg;
     }
@@ -202,9 +189,9 @@ parse_slo16 (cd, strp, opindex, valuep)
     {
       *strp += 4;
       errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32R_SDA16,
     {
       *strp += 4;
       errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32R_SDA16,
-                                  NULL, &value);
+                                  NULL, & value);
       if (**strp != ')')
       if (**strp != ')')
-       return "missing `)'";
+       return MISSING_CLOSING_PARENTHESIS;
       ++*strp;
       *valuep = value;
       return errmsg;
       ++*strp;
       *valuep = value;
       return errmsg;
@@ -218,11 +205,10 @@ parse_slo16 (cd, strp, opindex, valuep)
    handles the case where low() isn't present.  */
 
 static const char *
    handles the case where low() isn't present.  */
 
 static const char *
-parse_ulo16 (cd, strp, opindex, valuep)
-     CGEN_CPU_DESC cd;
-     const char **strp;
-     int opindex;
-     unsigned long *valuep;
+parse_ulo16 (CGEN_CPU_DESC cd,
+            const char **strp,
+            int opindex,
+            unsigned long *valuep)
 {
   const char *errmsg;
   enum cgen_parse_operand_result result_type;
 {
   const char *errmsg;
   enum cgen_parse_operand_result result_type;
@@ -235,9 +221,9 @@ parse_ulo16 (cd, strp, opindex, valuep)
     {
       *strp += 4;
       errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32R_LO16,
     {
       *strp += 4;
       errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_M32R_LO16,
-                                  &result_type, &value);
+                                  & result_type, & value);
       if (**strp != ')')
       if (**strp != ')')
-       return "missing `)'";
+       return MISSING_CLOSING_PARENTHESIS;
       ++*strp;
       if (errmsg == NULL
          && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
       ++*strp;
       if (errmsg == NULL
          && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
@@ -252,31 +238,51 @@ parse_ulo16 (cd, strp, opindex, valuep)
 /* -- */
 \f
 /* -- dis.c */
 /* -- */
 \f
 /* -- dis.c */
-static void print_hash PARAMS ((CGEN_CPU_DESC, PTR, long, unsigned, bfd_vma, int));
-static int my_print_insn PARAMS ((CGEN_CPU_DESC, bfd_vma, disassemble_info *));
 
 
-/* Immediate values are prefixed with '#'.  */
+/* Print signed operands with '#' prefixes.  */
+
+static void
+print_signed_with_hash_prefix (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+                              void * dis_info,
+                              long value,
+                              unsigned int attrs ATTRIBUTE_UNUSED,
+                              bfd_vma pc ATTRIBUTE_UNUSED,
+                              int length ATTRIBUTE_UNUSED)
+{
+  disassemble_info *info = (disassemble_info *) dis_info;
+
+  (*info->fprintf_func) (info->stream, "#");
+  (*info->fprintf_func) (info->stream, "%ld", value);
+}
+
+/* Print unsigned operands with '#' prefixes.  */
 
 
-#define CGEN_PRINT_NORMAL(cd, info, value, attrs, pc, length)  \
-  do                                                           \
-    {                                                          \
-      if (CGEN_BOOL_ATTR ((attrs), CGEN_OPERAND_HASH_PREFIX))  \
-        (*info->fprintf_func) (info->stream, "#");             \
-    }                                                          \
-  while (0)
+static void
+print_unsigned_with_hash_prefix (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+                                void * dis_info,
+                                long value,
+                                unsigned int attrs ATTRIBUTE_UNUSED,
+                                bfd_vma pc ATTRIBUTE_UNUSED,
+                                int length ATTRIBUTE_UNUSED)
+{
+  disassemble_info *info = (disassemble_info *) dis_info;
+
+  (*info->fprintf_func) (info->stream, "#");
+  (*info->fprintf_func) (info->stream, "0x%lx", value);
+}
 
 /* Handle '#' prefixes as operands.  */
 
 static void
 
 /* Handle '#' prefixes as operands.  */
 
 static void
-print_hash (cd, dis_info, value, attrs, pc, length)
-     CGEN_CPU_DESC cd ATTRIBUTE_UNUSED;
-     PTR dis_info;
-     long value ATTRIBUTE_UNUSED;
-     unsigned int attrs ATTRIBUTE_UNUSED;
-     bfd_vma pc ATTRIBUTE_UNUSED;
-     int length ATTRIBUTE_UNUSED;
+print_hash (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
+           void * dis_info,
+           long value ATTRIBUTE_UNUSED,
+           unsigned int attrs ATTRIBUTE_UNUSED,
+           bfd_vma pc ATTRIBUTE_UNUSED,
+           int length ATTRIBUTE_UNUSED)
 {
   disassemble_info *info = (disassemble_info *) dis_info;
 {
   disassemble_info *info = (disassemble_info *) dis_info;
+
   (*info->fprintf_func) (info->stream, "#");
 }
 
   (*info->fprintf_func) (info->stream, "#");
 }
 
@@ -284,22 +290,21 @@ print_hash (cd, dis_info, value, attrs, pc, length)
 #define CGEN_PRINT_INSN my_print_insn
 
 static int
 #define CGEN_PRINT_INSN my_print_insn
 
 static int
-my_print_insn (cd, pc, info)
-     CGEN_CPU_DESC cd;
-     bfd_vma pc;
-     disassemble_info *info;
+my_print_insn (CGEN_CPU_DESC cd,
+              bfd_vma pc,
+              disassemble_info *info)
 {
 {
-  char buffer[CGEN_MAX_INSN_SIZE];
-  char *buf = buffer;
+  bfd_byte buffer[CGEN_MAX_INSN_SIZE];
+  bfd_byte *buf = buffer;
   int status;
   int buflen = (pc & 3) == 0 ? 4 : 2;
   int big_p = CGEN_CPU_INSN_ENDIAN (cd) == CGEN_ENDIAN_BIG;
   int status;
   int buflen = (pc & 3) == 0 ? 4 : 2;
   int big_p = CGEN_CPU_INSN_ENDIAN (cd) == CGEN_ENDIAN_BIG;
-  char *x;
+  bfd_byte *x;
 
   /* Read the base part of the insn.  */
 
   status = (*info->read_memory_func) (pc - ((!big_p && (pc & 3) != 0) ? 2 : 0),
 
   /* Read the base part of the insn.  */
 
   status = (*info->read_memory_func) (pc - ((!big_p && (pc & 3) != 0) ? 2 : 0),
-                                      buf, buflen, info);
+                                     buf, buflen, info);
   if (status != 0)
     {
       (*info->memory_error_func) (status, pc, info);
   if (status != 0)
     {
       (*info->memory_error_func) (status, pc, info);
This page took 0.056015 seconds and 4 git commands to generate.