* gasp.c (get_any_string): Cope with getting a string with an
authorSteve Chamberlain <sac@cygnus>
Fri, 8 Jul 1994 00:13:14 +0000 (00:13 +0000)
committerSteve Chamberlain <sac@cygnus>
Fri, 8 Jul 1994 00:13:14 +0000 (00:13 +0000)
alternate base specifier.
(do_aif, do_aelse): Only enable output if expression is true and previous
level was on.
(chartype_init):  Add BASEBIT chartype.
(process_pseudo_op):  Notice nesteed AIFs.

gas/ChangeLog
gas/gasp.c

index eed29ead0cd281751dc5b69908f780fb82dde78b..386c55e0172ae689a0ee1c2c963dddbaad48f1ec 100644 (file)
@@ -1,5 +1,22 @@
+Thu Jul  7 17:04:03 1994  Steve Chamberlain  (sac@jonny.cygnus.com)
+
+       * gasp.c (get_any_string): Cope with getting a string with an
+       alternate base specifier.
+       (do_aif, do_aelse): Only enable output if expression is true and previous
+       level was on.
+       (chartype_init):  Add BASEBIT chartype.
+       (process_pseudo_op):  Notice nesteed AIFs.
+
+Thu Jul  7 12:30:22 1994  Steve Chamberlain  (sac@jonny.cygnus.com)
+
+       * h8300.c (do_a_fix_imm): Code for 2 bit reloc type using in trapa
+       insn.  (fix pr 5165, 5174)
+
 Thu Jul  7 11:31:32 1994  Jeff Law  (law@snake.cs.utah.edu)
 
+       * config/tc-hppa.c (R_DLT_REL): If it isn't defined, then define
+       to an appropriate value to avoid losing on old hpux systems.
+
        * config/tc-hppa.c (hppa_fix_adjustable): Reject reductions for
        symbols in DLT relative relocs.
        (tc_gen_reloc): Zero out the addend field for DLT relative relocs.
index 63c78a4c98f94c3efc7975efceb1d603126abae8..3bc81702547b6163aab43729e2956c665cf4f6d5 100644 (file)
@@ -150,13 +150,13 @@ int string_count[max_power_two];
 #define SEPBIT   4
 #define WHITEBIT 8
 #define COMMENTBIT 16
-
+#define BASEBIT  32
 #define ISCOMMENTCHAR(x) (chartype[(unsigned)(x)] & COMMENTBIT)
 #define ISFIRSTCHAR(x)  (chartype[(unsigned)(x)] & FIRSTBIT)
 #define ISNEXTCHAR(x)   (chartype[(unsigned)(x)] & NEXTBIT)
 #define ISSEP(x)        (chartype[(unsigned)(x)] & SEPBIT)
 #define ISWHITE(x)      (chartype[(unsigned)(x)] & WHITEBIT)
-
+#define ISBASE(x)       (chartype[(unsigned)(x)] & BASEBIT)
 static char chartype[256];
 
 
@@ -714,10 +714,10 @@ hash_lookup (tab, key)
  expression precedence:
   ( )
  unary + - ~
-* /
-+ -
-&
-| ~
+  * /
+  + -
+  &
+  | ~
 
 */
 
@@ -1708,12 +1708,16 @@ get_any_string (idx, in, out, expand)
   sb_reset (out);
   idx = sb_skip_white (idx, in);
 
-
   if (idx < in->len)
     {
-      if (in->ptr[idx] == '%'
-         && alternate
-         && expand)
+      if (in->len > 2 && in->ptr[idx+1] == '\'' && ISBASE (in->ptr[idx]))
+       {
+         while (!ISSEP (in->ptr[idx]))
+           sb_add_char (out, in->ptr[idx++]);
+       }
+      else if (in->ptr[idx] == '%'
+              && alternate
+              && expand)
        {
          int val;
          char buf[20];
@@ -1725,16 +1729,16 @@ get_any_string (idx, in, out, expand)
          sprintf(buf, "%d", val);
          sb_add_string (out, buf);
        }
-      else   if (in->ptr[idx] == '"'
-                || in->ptr[idx] == '<'
-                || (alternate && in->ptr[idx] == '\''))
+      else if (in->ptr[idx] == '"'
+              || in->ptr[idx] == '<'
+              || (alternate && in->ptr[idx] == '\''))
        {
          if (alternate && !expand)
            {
              /* Keep the quotes */
-/*           sb_add_char (out,  '\"');*/
+             /*              sb_add_char (out,  '\"');*/
              idx =  getstring (idx, in, out);
-/*           sb_add_char (out,  '\"');*/
+             /*              sb_add_char (out,  '\"');*/
 
            }
          else {
@@ -1756,12 +1760,14 @@ get_any_string (idx, in, out, expand)
                  while (idx < in->len
                         && in->ptr[idx] != tchar)
                    sb_add_char (out, in->ptr[idx++]);              
+                 if (idx == in->len)
+                   return idx;       
                }
              sb_add_char (out, in->ptr[idx++]);
-
            }
        }
     }
+
   return idx;
 }
 
@@ -2367,7 +2373,7 @@ do_aif (idx, in)
       FATAL ((stderr, "AIF nesting unreasonable.\n"));
     }
   ifi++;
-  ifstack[ifi].on = istrue (idx, in);
+  ifstack[ifi].on = ifstack[ifi-1].on ? istrue (idx, in) : 0;
   ifstack[ifi].hadelse = 0;
 }
 
@@ -2376,7 +2382,7 @@ do_aif (idx, in)
 static void
 do_aelse ()
 {
-  ifstack[ifi].on = !ifstack[ifi].on;
+  ifstack[ifi].on = ifstack[ifi-1].on ? !ifstack[ifi].on : 0;
   if (ifstack[ifi].hadelse)
     {
       ERROR ((stderr, "Multiple AELSEs in AIF.\n"));
@@ -3368,6 +3374,12 @@ chartype_init ()
          || x == '"' || x == '<' || x == '>' || x == ')' || x == '(')
        chartype[x] |= SEPBIT;
 
+      if (x == 'b' || x == 'B'
+         || x == 'q' || x == 'Q'
+         || x == 'h' || x == 'H'
+         || x == 'd' || x == 'D')
+       chartype [x] |= BASEBIT;
+         
       if (x == ' ' || x == '\t')
        chartype[x] |= WHITEBIT;
 
@@ -3552,6 +3564,9 @@ process_pseudo_op (idx, line, acc)
        {
          switch (ptr->value.i)
            {
+           case K_AIF:
+             do_aif ();
+             break;
            case K_AELSE:
              do_aelse ();
              break;