]> oss.titaniummirror.com Git - msp430-binutils.git/blobdiff - gas/config/tc-i370.c
Imported binutils-2.20
[msp430-binutils.git] / gas / config / tc-i370.c
index c6bedb7cc2072e4987772e873b57e49c5e6a2952..3c7b1403fc40acd4c3669be7109734d00723bcba 100644 (file)
@@ -1,7 +1,7 @@
 /* tc-i370.c -- Assembler for the IBM 360/370/390 instruction set.
    Loosely based on the ppc files by Linas Vepstas <linas@linas.org> 1998, 99
    Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
 /* tc-i370.c -- Assembler for the IBM 360/370/390 instruction set.
    Loosely based on the ppc files by Linas Vepstas <linas@linas.org> 1998, 99
    Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   2004, 2005, 2006, 2007, 2009  Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of GAS, the GNU Assembler.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of GAS, the GNU Assembler.
@@ -416,7 +416,7 @@ md_parse_option (int c, char *arg)
 #endif
       else
         {
 #endif
       else
         {
-          as_bad ("invalid switch -m%s", arg);
+          as_bad (_("invalid switch -m%s"), arg);
           return 0;
         }
       break;
           return 0;
         }
       break;
@@ -513,7 +513,7 @@ md_begin (void)
            retval = hash_insert (i370_hash, op->name, (void *) op);
            if (retval != (const char *) NULL)
              {
            retval = hash_insert (i370_hash, op->name, (void *) op);
            if (retval != (const char *) NULL)
              {
-               as_bad ("Internal assembler error for instruction %s", op->name);
+               as_bad (_("Internal assembler error for instruction %s"), op->name);
                dup_insn = TRUE;
              }
          }
                dup_insn = TRUE;
              }
          }
@@ -532,7 +532,7 @@ md_begin (void)
           retval = hash_insert (i370_macro_hash, macro->name, (void *) macro);
           if (retval != (const char *) NULL)
             {
           retval = hash_insert (i370_macro_hash, macro->name, (void *) macro);
           if (retval != (const char *) NULL)
             {
-              as_bad ("Internal assembler error for macro %s", macro->name);
+              as_bad (_("Internal assembler error for macro %s"), macro->name);
               dup_insn = TRUE;
             }
         }
               dup_insn = TRUE;
             }
         }
@@ -627,7 +627,7 @@ i370_elf_suffix (char **str_p, expressionS *exp_p)
                || ptr->reloc == BFD_RELOC_LO16_GOTOFF
                || ptr->reloc == BFD_RELOC_HI16_GOTOFF
                || ptr->reloc == BFD_RELOC_HI16_S_GOTOFF))
                || ptr->reloc == BFD_RELOC_LO16_GOTOFF
                || ptr->reloc == BFD_RELOC_HI16_GOTOFF
                || ptr->reloc == BFD_RELOC_HI16_S_GOTOFF))
-          as_warn ("identifier+constant@got means identifier@got+constant");
+          as_warn (_("identifier+constant@got means identifier@got+constant"));
 
         /* Now check for identifier@suffix+constant */
         if (*str == '-' || *str == '+')
 
         /* Now check for identifier@suffix+constant */
         if (*str == '-' || *str == '+')
@@ -681,7 +681,8 @@ i370_elf_cons (int nbytes)   /* 1=.byte, 2=.word, 4=.long.  */
           int size = bfd_get_reloc_size (reloc_howto);
 
           if (size > nbytes)
           int size = bfd_get_reloc_size (reloc_howto);
 
           if (size > nbytes)
-            as_bad ("%s relocations do not fit in %d bytes\n", reloc_howto->name, nbytes);
+            as_bad (_("%s relocations do not fit in %d bytes\n"),
+                   reloc_howto->name, nbytes);
           else
             {
               char *p = frag_more ((int) nbytes);
           else
             {
               char *p = frag_more ((int) nbytes);
@@ -921,7 +922,7 @@ i370_dc (int unused ATTRIBUTE_UNUSED)
       nbytes = 8;
       break;
     default:
       nbytes = 8;
       break;
     default:
-      as_bad ("unsupported DC type");
+      as_bad (_("unsupported DC type"));
       return;
     }
 
       return;
     }
 
@@ -935,7 +936,7 @@ i370_dc (int unused ATTRIBUTE_UNUSED)
       if (close)
        *close= ' ';
       else
       if (close)
        *close= ' ';
       else
-       as_bad ("missing end-quote");
+       as_bad (_("missing end-quote"));
     }
 
   if ('\"' == *input_line_pointer)
     }
 
   if ('\"' == *input_line_pointer)
@@ -947,7 +948,7 @@ i370_dc (int unused ATTRIBUTE_UNUSED)
       if (close)
        *close= ' ';
       else
       if (close)
        *close= ' ';
       else
-       as_bad ("missing end-quote");
+       as_bad (_("missing end-quote"));
     }
 
   switch (type)
     }
 
   switch (type)
@@ -958,13 +959,14 @@ i370_dc (int unused ATTRIBUTE_UNUSED)
       emit_expr (&exp, nbytes);
       break;
     case 'E':  /* 32-bit */
       emit_expr (&exp, nbytes);
       break;
     case 'E':  /* 32-bit */
+      type = 'f';
     case 'D':  /* 64-bit */
       md_atof (type, tmp, &nbytes);
       p = frag_more (nbytes);
       memcpy (p, tmp, nbytes);
       break;
     default:
     case 'D':  /* 64-bit */
       md_atof (type, tmp, &nbytes);
       p = frag_more (nbytes);
       memcpy (p, tmp, nbytes);
       break;
     default:
-      as_bad ("unsupported DC type");
+      as_bad (_("unsupported DC type"));
       return;
     }
 
       return;
     }
 
@@ -994,14 +996,14 @@ i370_ds (int unused ATTRIBUTE_UNUSED)
          alignment = 3;
          break;
        default:
          alignment = 3;
          break;
        default:
-         as_bad ("unsupported alignment");
+         as_bad (_("unsupported alignment"));
          return;
        }
       frag_align (alignment, 0, 0);
       record_alignment (now_seg, alignment);
     }
   else
          return;
        }
       frag_align (alignment, 0, 0);
       record_alignment (now_seg, alignment);
     }
   else
-    as_bad ("this DS form not yet supported");
+    as_bad (_("this DS form not yet supported"));
 }
 
 /* Solaris pseudo op to change to the .rodata section.  */
 }
 
 /* Solaris pseudo op to change to the .rodata section.  */
@@ -1044,7 +1046,7 @@ i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
   SKIP_WHITESPACE ();
   if (*input_line_pointer != ',')
     {
   SKIP_WHITESPACE ();
   if (*input_line_pointer != ',')
     {
-      as_bad ("Expected comma after symbol-name: rest of line ignored.");
+      as_bad (_("Expected comma after symbol-name: rest of line ignored."));
       ignore_rest_of_line ();
       return;
     }
       ignore_rest_of_line ();
       return;
     }
@@ -1053,7 +1055,7 @@ i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
   input_line_pointer++;
   if ((size = get_absolute_expression ()) < 0)
     {
   input_line_pointer++;
   if ((size = get_absolute_expression ()) < 0)
     {
-      as_warn (".COMMon length (%ld.) <0! Ignored.", (long) size);
+      as_warn (_(".COMMon length (%ld.) <0! Ignored."), (long) size);
       ignore_rest_of_line ();
       return;
     }
       ignore_rest_of_line ();
       return;
     }
@@ -1067,7 +1069,7 @@ i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
       align = get_absolute_expression ();
       if (align <= 0)
         {
       align = get_absolute_expression ();
       if (align <= 0)
         {
-          as_warn ("ignoring bad alignment");
+          as_warn (_("ignoring bad alignment"));
           align = 8;
         }
     }
           align = 8;
         }
     }
@@ -1078,7 +1080,7 @@ i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
 
   if (S_IS_DEFINED (symbolP) && ! S_IS_COMMON (symbolP))
     {
 
   if (S_IS_DEFINED (symbolP) && ! S_IS_COMMON (symbolP))
     {
-      as_bad ("Ignoring attempt to re-define symbol `%s'.",
+      as_bad (_("Ignoring attempt to re-define symbol `%s'."),
               S_GET_NAME (symbolP));
       ignore_rest_of_line ();
       return;
               S_GET_NAME (symbolP));
       ignore_rest_of_line ();
       return;
@@ -1086,7 +1088,7 @@ i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
 
   if (S_GET_VALUE (symbolP) && S_GET_VALUE (symbolP) != (valueT) size)
     {
 
   if (S_GET_VALUE (symbolP) && S_GET_VALUE (symbolP) != (valueT) size)
     {
-      as_bad ("Length of .lcomm \"%s\" is already %ld. Not changed to %ld.",
+      as_bad (_("Length of .lcomm \"%s\" is already %ld. Not changed to %ld."),
               S_GET_NAME (symbolP),
               (long) S_GET_VALUE (symbolP),
               (long) size);
               S_GET_NAME (symbolP),
               (long) S_GET_VALUE (symbolP),
               (long) size);
@@ -1105,7 +1107,7 @@ i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
        ;
       if (align != 1)
         {
        ;
       if (align != 1)
         {
-          as_bad ("Common alignment not a power of 2");
+          as_bad (_("Common alignment not a power of 2"));
           ignore_rest_of_line ();
           return;
         }
           ignore_rest_of_line ();
           return;
         }
@@ -1243,7 +1245,7 @@ i370_make_relative (expressionS *exx, expressionS *baseaddr)
        exx->X_add_number += baseaddr->X_add_number;
     }
   else
        exx->X_add_number += baseaddr->X_add_number;
     }
   else
-    as_bad ("Missing or bad .using directive");
+    as_bad (_("Missing or bad .using directive"));
 }
 /* Add an expression to the literal pool.  */
 
 }
 /* Add an expression to the literal pool.  */
 
@@ -1288,7 +1290,7 @@ add_to_lit_pool (expressionS *exx, char *name, int sz)
   if (lit_count == next_literal_pool_place) /* new entry */
     {
       if (next_literal_pool_place > MAX_LITERAL_POOL_SIZE)
   if (lit_count == next_literal_pool_place) /* new entry */
     {
       if (next_literal_pool_place > MAX_LITERAL_POOL_SIZE)
-       as_bad ("Literal Pool Overflow");
+       as_bad (_("Literal Pool Overflow"));
 
       literals[next_literal_pool_place].exp = *exx;
       literals[next_literal_pool_place].size = sz;
 
       literals[next_literal_pool_place].exp = *exx;
       literals[next_literal_pool_place].size = sz;
@@ -1527,7 +1529,7 @@ i370_addr_cons (expressionS *exp)
          if (close)
            *close= ' ';
          else
          if (close)
            *close= ' ';
          else
-           as_bad ("missing end-quote");
+           as_bad (_("missing end-quote"));
        }
       if ('\"' == *input_line_pointer)
        {
        }
       if ('\"' == *input_line_pointer)
        {
@@ -1537,7 +1539,7 @@ i370_addr_cons (expressionS *exp)
          if (close)
            *close= ' ';
          else
          if (close)
            *close= ' ';
          else
-           as_bad ("missing end-quote");
+           as_bad (_("missing end-quote"));
        }
       if (('X' == name[0]) || ('E' == name[0]) || ('D' == name[0]))
        {
        }
       if (('X' == name[0]) || ('E' == name[0]) || ('D' == name[0]))
        {
@@ -1584,14 +1586,14 @@ i370_addr_cons (expressionS *exp)
       /* O_big occurs when more than 4 bytes worth gets parsed.  */
       if ((exp->X_op != O_constant) && (exp->X_op != O_big))
        {
       /* O_big occurs when more than 4 bytes worth gets parsed.  */
       if ((exp->X_op != O_constant) && (exp->X_op != O_big))
        {
-         as_bad ("expression not a constant");
+         as_bad (_("expression not a constant"));
          return FALSE;
        }
       add_to_lit_pool (exp, 0x0, cons_len);
       break;
 
     default:
          return FALSE;
        }
       add_to_lit_pool (exp, 0x0, cons_len);
       break;
 
     default:
-      as_bad ("Unknown/unsupported address literal type");
+      as_bad (_("Unknown/unsupported address literal type"));
       return FALSE;
     }
 
       return FALSE;
     }
 
@@ -1614,11 +1616,11 @@ i370_ltorg (int ignore ATTRIBUTE_UNUSED)
   if (strncmp (now_seg->name, ".text", 5))
     {
       if (i370_other_section == undefined_section)
   if (strncmp (now_seg->name, ".text", 5))
     {
       if (i370_other_section == undefined_section)
-       as_bad (".ltorg without prior .using in section %s",
+       as_bad (_(".ltorg without prior .using in section %s"),
                now_seg->name);
 
       if (i370_other_section != now_seg)
                now_seg->name);
 
       if (i370_other_section != now_seg)
-       as_bad (".ltorg in section %s paired to .using in section %s",
+       as_bad (_(".ltorg in section %s paired to .using in section %s"),
                now_seg->name, i370_other_section->name);
     }
 
                now_seg->name, i370_other_section->name);
     }
 
@@ -1641,7 +1643,7 @@ i370_ltorg (int ignore ATTRIBUTE_UNUSED)
   else if (2 == biggest_literal_size) biggest_align = 1;
   else if (4 == biggest_literal_size) biggest_align = 2;
   else if (8 == biggest_literal_size) biggest_align = 3;
   else if (2 == biggest_literal_size) biggest_align = 1;
   else if (4 == biggest_literal_size) biggest_align = 2;
   else if (8 == biggest_literal_size) biggest_align = 3;
-  else as_bad ("bad alignment of %d bytes in literal pool", biggest_literal_size);
+  else as_bad (_("bad alignment of %d bytes in literal pool"), biggest_literal_size);
   if (0 == biggest_align) biggest_align = 1;
 
   /* Align pool for short, word, double word accesses.  */
   if (0 == biggest_align) biggest_align = 1;
 
   /* Align pool for short, word, double word accesses.  */
@@ -1665,7 +1667,7 @@ i370_ltorg (int ignore ATTRIBUTE_UNUSED)
        case 1:
          current_poolP = byte_poolP; break;
        default:
        case 1:
          current_poolP = byte_poolP; break;
        default:
-         as_bad ("bad literal size\n");
+         as_bad (_("bad literal size\n"));
        }
       if (NULL == current_poolP)
        continue;
        }
       if (NULL == current_poolP)
        continue;
@@ -1739,7 +1741,7 @@ i370_using (int ignore ATTRIBUTE_UNUSED)
   if (O_constant != baseaddr.X_op
       && O_symbol != baseaddr.X_op
       && O_uminus != baseaddr.X_op)
   if (O_constant != baseaddr.X_op
       && O_symbol != baseaddr.X_op
       && O_uminus != baseaddr.X_op)
-    as_bad (".using: base address expression illegal or too complex");
+    as_bad (_(".using: base address expression illegal or too complex"));
 
   if (*input_line_pointer != '\0') ++input_line_pointer;
 
 
   if (*input_line_pointer != '\0') ++input_line_pointer;
 
@@ -1774,7 +1776,7 @@ i370_drop (int ignore ATTRIBUTE_UNUSED)
   if (0 == strncmp (now_seg->name, ".text", 5))
     {
       if (iregno != i370_using_text_regno)
   if (0 == strncmp (now_seg->name, ".text", 5))
     {
       if (iregno != i370_using_text_regno)
-       as_bad ("droping register %d in section %s does not match using register %d",
+       as_bad (_("droping register %d in section %s does not match using register %d"),
                iregno, now_seg->name, i370_using_text_regno);
 
       i370_using_text_regno = -1;
                iregno, now_seg->name, i370_using_text_regno);
 
       i370_using_text_regno = -1;
@@ -1783,11 +1785,11 @@ i370_drop (int ignore ATTRIBUTE_UNUSED)
   else
     {
       if (iregno != i370_using_other_regno)
   else
     {
       if (iregno != i370_using_other_regno)
-       as_bad ("droping register %d in section %s does not match using register %d",
+       as_bad (_("droping register %d in section %s does not match using register %d"),
                iregno, now_seg->name, i370_using_other_regno);
 
       if (i370_other_section != now_seg)
                iregno, now_seg->name, i370_using_other_regno);
 
       if (i370_other_section != now_seg)
-       as_bad ("droping register %d in section %s previously used in section %s",
+       as_bad (_("droping register %d in section %s previously used in section %s"),
                iregno, now_seg->name, i370_other_section->name);
 
       i370_using_other_regno = -1;
                iregno, now_seg->name, i370_other_section->name);
 
       i370_using_other_regno = -1;
@@ -1843,7 +1845,7 @@ i370_macro (char *str, const struct i370_macro *macro)
 
   if (count != macro->operands)
     {
 
   if (count != macro->operands)
     {
-      as_bad ("wrong number of operands");
+      as_bad (_("wrong number of operands"));
       return;
     }
 
       return;
     }
 
@@ -1922,10 +1924,10 @@ md_assemble (char *str)
     {
       const struct i370_macro *macro;
 
     {
       const struct i370_macro *macro;
 
-      assert (i370_macro_hash);
+      gas_assert (i370_macro_hash);
       macro = (const struct i370_macro *) hash_find (i370_macro_hash, str);
       if (macro == (const struct i370_macro *) NULL)
       macro = (const struct i370_macro *) hash_find (i370_macro_hash, str);
       if (macro == (const struct i370_macro *) NULL)
-        as_bad ("Unrecognized opcode: `%s'", str);
+        as_bad (_("Unrecognized opcode: `%s'"), str);
       else
        i370_macro (s, macro);
 
       else
        i370_macro (s, macro);
 
@@ -2070,7 +2072,7 @@ md_assemble (char *str)
                basereg = i370_using_other_regno;
             }
           if (0 > basereg)
                basereg = i370_using_other_regno;
             }
           if (0 > basereg)
-           as_bad ("not using any base register");
+           as_bad (_("not using any base register"));
 
           insn = i370_insert_operand (insn, operand, basereg);
           continue;
 
           insn = i370_insert_operand (insn, operand, basereg);
           continue;
@@ -2100,7 +2102,7 @@ md_assemble (char *str)
             }
 
           if (! register_name (&ex))
             }
 
           if (! register_name (&ex))
-           as_bad ("expecting a register for operand %d",
+           as_bad (_("expecting a register for operand %d"),
                    (int) (opindex_ptr - opcode->operands + 1));
         }
 
                    (int) (opindex_ptr - opcode->operands + 1));
         }
 
@@ -2124,9 +2126,9 @@ md_assemble (char *str)
        ex.X_add_number --;
 
       if (ex.X_op == O_illegal)
        ex.X_add_number --;
 
       if (ex.X_op == O_illegal)
-        as_bad ("illegal operand");
+        as_bad (_("illegal operand"));
       else if (ex.X_op == O_absent)
       else if (ex.X_op == O_absent)
-        as_bad ("missing operand");
+        as_bad (_("missing operand"));
       else if (ex.X_op == O_register)
        insn = i370_insert_operand (insn, operand, ex.X_add_number);
       else if (ex.X_op == O_constant)
       else if (ex.X_op == O_register)
        insn = i370_insert_operand (insn, operand, ex.X_add_number);
       else if (ex.X_op == O_constant)
@@ -2206,7 +2208,7 @@ md_assemble (char *str)
     ++str;
 
   if (*str != '\0')
     ++str;
 
   if (*str != '\0')
-    as_bad ("junk at end of line: `%s'", str);
+    as_bad (_("junk at end of line: `%s'"), str);
 
   /* Write out the instruction.  */
   f = frag_more (opcode->len);
 
   /* Write out the instruction.  */
   f = frag_more (opcode->len);
@@ -2221,7 +2223,7 @@ md_assemble (char *str)
       else
        {
          /* Not used --- don't have any 8 byte instructions.  */
       else
        {
          /* Not used --- don't have any 8 byte instructions.  */
-         as_bad ("Internal Error: bad instruction length");
+         as_bad (_("Internal Error: bad instruction length"));
          md_number_to_chars ((f + 4), insn.i[1], opcode->len -4);
        }
     }
          md_number_to_chars ((f + 4), insn.i[1], opcode->len -4);
        }
     }
@@ -2355,53 +2357,12 @@ i370_tc (int ignore ATTRIBUTE_UNUSED)
     }
 }
 \f
     }
 }
 \f
-/* Turn a string in input_line_pointer into a floating point constant
-   of type TYPE, and store the appropriate bytes in *LITP.  The number
-   of LITTLENUMS emitted is stored in *SIZEP.  An error message is
-   returned, or NULL on OK.  */
-
 char *
 md_atof (int type, char *litp, int *sizep)
 {
 char *
 md_atof (int type, char *litp, int *sizep)
 {
-  int prec;
-  LITTLENUM_TYPE words[4];
-  char *t;
-  int i;
-
-  switch (type)
-    {
-    case 'f':
-    case 'E':
-      type = 'f';
-      prec = 2;
-      break;
-
-    case 'd':
-    case 'D':
-      type = 'd';
-      prec = 4;
-      break;
-
-    default:
-      *sizep = 0;
-      return "bad call to md_atof";
-    }
-
   /* 360/370/390 have two float formats: an old, funky 360 single-precision
   /* 360/370/390 have two float formats: an old, funky 360 single-precision
-   * format, and the ieee format.  Support only the ieee format.  */
-  t = atof_ieee (input_line_pointer, type, words);
-  if (t)
-    input_line_pointer = t;
-
-  *sizep = prec * 2;
-
-  for (i = 0; i < prec; i++)
-    {
-      md_number_to_chars (litp, (valueT) words[i], 2);
-      litp += 2;
-    }
-
-  return NULL;
+     format, and the ieee format.  Support only the ieee format.  */
+  return ieee_md_atof (type, litp, sizep, TRUE);
 }
 
 /* Write a value out to the object file, using the appropriate
 }
 
 /* Write a value out to the object file, using the appropriate
@@ -2708,4 +2669,3 @@ const pseudo_typeS md_pseudo_table[] =
 
   { NULL,       NULL,          0 }
 };
 
   { NULL,       NULL,          0 }
 };
-