]> 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,
-   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.
@@ -416,7 +416,7 @@ md_parse_option (int c, char *arg)
 #endif
       else
         {
-          as_bad ("invalid switch -m%s", arg);
+          as_bad (_("invalid switch -m%s"), arg);
           return 0;
         }
       break;
@@ -513,7 +513,7 @@ md_begin (void)
            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;
              }
          }
@@ -532,7 +532,7 @@ md_begin (void)
           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;
             }
         }
@@ -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))
-          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 == '+')
@@ -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)
-            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);
@@ -921,7 +922,7 @@ i370_dc (int unused ATTRIBUTE_UNUSED)
       nbytes = 8;
       break;
     default:
-      as_bad ("unsupported DC type");
+      as_bad (_("unsupported DC type"));
       return;
     }
 
@@ -935,7 +936,7 @@ i370_dc (int unused ATTRIBUTE_UNUSED)
       if (close)
        *close= ' ';
       else
-       as_bad ("missing end-quote");
+       as_bad (_("missing end-quote"));
     }
 
   if ('\"' == *input_line_pointer)
@@ -947,7 +948,7 @@ i370_dc (int unused ATTRIBUTE_UNUSED)
       if (close)
        *close= ' ';
       else
-       as_bad ("missing end-quote");
+       as_bad (_("missing end-quote"));
     }
 
   switch (type)
@@ -958,13 +959,14 @@ i370_dc (int unused ATTRIBUTE_UNUSED)
       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:
-      as_bad ("unsupported DC type");
+      as_bad (_("unsupported DC type"));
       return;
     }
 
@@ -994,14 +996,14 @@ i370_ds (int unused ATTRIBUTE_UNUSED)
          alignment = 3;
          break;
        default:
-         as_bad ("unsupported alignment");
+         as_bad (_("unsupported alignment"));
          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.  */
@@ -1044,7 +1046,7 @@ i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
   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;
     }
@@ -1053,7 +1055,7 @@ i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
   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;
     }
@@ -1067,7 +1069,7 @@ i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
       align = get_absolute_expression ();
       if (align <= 0)
         {
-          as_warn ("ignoring bad alignment");
+          as_warn (_("ignoring bad alignment"));
           align = 8;
         }
     }
@@ -1078,7 +1080,7 @@ i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
 
   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;
@@ -1086,7 +1088,7 @@ i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
 
   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);
@@ -1105,7 +1107,7 @@ i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
        ;
       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;
         }
@@ -1243,7 +1245,7 @@ i370_make_relative (expressionS *exx, expressionS *baseaddr)
        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.  */
 
@@ -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)
-       as_bad ("Literal Pool Overflow");
+       as_bad (_("Literal Pool Overflow"));
 
       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
-           as_bad ("missing end-quote");
+           as_bad (_("missing end-quote"));
        }
       if ('\"' == *input_line_pointer)
        {
@@ -1537,7 +1539,7 @@ i370_addr_cons (expressionS *exp)
          if (close)
            *close= ' ';
          else
-           as_bad ("missing end-quote");
+           as_bad (_("missing end-quote"));
        }
       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))
        {
-         as_bad ("expression not a constant");
+         as_bad (_("expression not a constant"));
          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;
     }
 
@@ -1614,11 +1616,11 @@ i370_ltorg (int ignore ATTRIBUTE_UNUSED)
   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)
-       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);
     }
 
@@ -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 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.  */
@@ -1665,7 +1667,7 @@ i370_ltorg (int ignore ATTRIBUTE_UNUSED)
        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;
@@ -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)
-    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;
 
@@ -1774,7 +1776,7 @@ i370_drop (int ignore ATTRIBUTE_UNUSED)
   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;
@@ -1783,11 +1785,11 @@ i370_drop (int ignore ATTRIBUTE_UNUSED)
   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)
-       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;
@@ -1843,7 +1845,7 @@ i370_macro (char *str, const struct i370_macro *macro)
 
   if (count != macro->operands)
     {
-      as_bad ("wrong number of operands");
+      as_bad (_("wrong number of operands"));
       return;
     }
 
@@ -1922,10 +1924,10 @@ md_assemble (char *str)
     {
       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)
-        as_bad ("Unrecognized opcode: `%s'", str);
+        as_bad (_("Unrecognized opcode: `%s'"), str);
       else
        i370_macro (s, macro);
 
@@ -2070,7 +2072,7 @@ md_assemble (char *str)
                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;
@@ -2100,7 +2102,7 @@ md_assemble (char *str)
             }
 
           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));
         }
 
@@ -2124,9 +2126,9 @@ md_assemble (char *str)
        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)
-        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)
@@ -2206,7 +2208,7 @@ md_assemble (char *str)
     ++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);
@@ -2221,7 +2223,7 @@ md_assemble (char *str)
       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);
        }
     }
@@ -2355,53 +2357,12 @@ i370_tc (int ignore ATTRIBUTE_UNUSED)
     }
 }
 \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)
 {
-  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
-   * 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
@@ -2708,4 +2669,3 @@ const pseudo_typeS md_pseudo_table[] =
 
   { NULL,       NULL,          0 }
 };
-