Based on patches from John W. Woznack <jwoznack@concentric.net>:
authorIan Lance Taylor <ian@airs.com>
Thu, 10 Jun 1999 20:35:50 +0000 (20:35 +0000)
committerIan Lance Taylor <ian@airs.com>
Thu, 10 Jun 1999 20:35:50 +0000 (20:35 +0000)
* itbl-ops.c (itbl_get_reg_val): Add pval parameter.  Return
indication of success rather than a value.
(itbl_get_val): Likewise.
(itbl_get_field): Use strcspn.  Change delimiters to include
parens.
* itbl-ops.h (itbl_get_reg_val): Update declaration.
(itbl_get_val): Likewise.
* config/tc-mips.c (mips_ip): Update call to itbl_get_reg_val.

gas/ChangeLog
gas/config/tc-mips.c
gas/itbl-ops.c
gas/itbl-ops.h

index 30fbfb5..85e98be 100644 (file)
@@ -1,5 +1,15 @@
 1999-06-10  Ian Lance Taylor  <ian@zembu.com>
 
+       Based on patches from John W. Woznack <jwoznack@concentric.net>:
+       * itbl-ops.c (itbl_get_reg_val): Add pval parameter.  Return
+       indication of success rather than a value.
+       (itbl_get_val): Likewise.
+       (itbl_get_field): Use strcspn.  Change delimiters to include
+       parens.
+       * itbl-ops.h (itbl_get_reg_val): Update declaration.
+       (itbl_get_val): Likewise.
+       * config/tc-mips.c (mips_ip): Update call to itbl_get_reg_val.
+
        * symbols.c (copy_symbol_attributes): Convert local symbols to
        regular symbols.
 
index 3c1c00c..c9b0632 100644 (file)
@@ -7297,23 +7297,22 @@ mips_ip (str, ip)
                      else if (itbl_have_entries)
                        {
                          char *p, *n;
-                         int r;
+                         unsigned long r;
 
-                         p = s+1;      /* advance past '$' */
+                         p = s + 1;    /* advance past '$' */
                          n = itbl_get_field (&p);  /* n is name */
 
-                         /* See if this is a register defined in an 
-                            itbl entry */
-                         r = itbl_get_reg_val (n);
-                         if (r)
+                         /* See if this is a register defined in an
+                            itbl entry.  */
+                         if (itbl_get_reg_val (n, &r))
                            {
                              /* Get_field advances to the start of
                                 the next field, so we need to back
-                                rack to the end of the last field. */
+                                rack to the end of the last field.  */
                              if (p) 
                                s = p - 1;
                              else 
-                               s = strchr (s,'\0');
+                               s = strchr (s, '\0');
                              regno = r;
                            }
                          else
index f008dca..23d5f2f 100644 (file)
@@ -1,5 +1,5 @@
 /* itbl-ops.c
-   Copyright (C) 1997, 1998  Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -457,18 +457,20 @@ form_args (struct itbl_entry *e)
 
 /* Get processor's register name from val */
 
-unsigned long 
-itbl_get_reg_val (char *name)
+int
+itbl_get_reg_val (char *name, unsigned long *pval)
 {
   e_type t;
   e_processor p;
-  int r = 0;
+
   for (p = e_p0; p < e_nprocs; p++)
-    for (t = e_regtype0; t < e_nregtypes; t++)
-      {
-       if (r = itbl_get_val (p, t, name), r)
-         return r;
-      }
+    {
+      for (t = e_regtype0; t < e_nregtypes; t++)
+       {
+         if (itbl_get_val (p, t, name, pval))
+           return 1;
+       }
+    }
   return 0;
 }
 
@@ -486,16 +488,17 @@ itbl_get_name (e_processor processor, e_type type, unsigned long val)
 
 /* Get processor's register value from name */
 
-unsigned long 
-itbl_get_val (e_processor processor, e_type type, char *name)
+int
+itbl_get_val (e_processor processor, e_type type, char *name,
+             unsigned long *pval)
 {
   struct itbl_entry *r;
   /* type depends on instruction passed */
   r = find_entry_byname (processor, type, name);
-  if (r)
-    return r->value;
-  else
-    return 0;                  /* error; invalid operand */
+  if (r == NULL)
+    return 0;
+  *pval = r->value;
+  return 1;
 }
 
 
@@ -732,7 +735,7 @@ extract_range (unsigned long aval, struct itbl_range r)
 /* Extract processor's assembly instruction field name from s;
  * forms are "n args" "n,args" or "n" */
 /* Return next argument from string pointer "s" and advance s.
- * delimiters are " ,\0" */
+ * delimiters are " ,()" */
 
 char *
 itbl_get_field (char **S)
@@ -744,16 +747,8 @@ itbl_get_field (char **S)
   s = *S;
   if (!s || !*s)
     return 0;
-  p = s + strlen (s);
-  if (ps = strchr (s, ','), ps)
-    p = ps;
-  if (ps = strchr (s, ' '), ps)
-    p = min (p, ps);
-  if (ps = strchr (s, '\0'), ps)
-    p = min (p, ps);
-  if (p == 0)
-    return 0;                  /* error! */
-  len = p - s;
+  /* FIXME: This is a weird set of delimiters.  */
+  len = strcspn (s, " \t,()");
   ASSERT (128 > len + 1);
   strncpy (n, s, len);
   n[len] = 0;
index 2946eff..d69ea7f 100644 (file)
@@ -1,5 +1,5 @@
 /* itbl-ops.h
-   Copyright (C) 1997  Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -92,9 +92,9 @@ char *itbl_get_field PARAMS ((char **s));
 unsigned long itbl_assemble PARAMS ((char *name, char *operands));
 int itbl_disassemble PARAMS ((char *str, unsigned long insn));
 int itbl_parse PARAMS ((char *tbl));   /* parses insn tbl */
-unsigned long itbl_get_reg_val PARAMS ((char *name));
-unsigned long itbl_get_val PARAMS ((e_processor processor, e_type type,
-                                   char *name));
+int itbl_get_reg_val PARAMS ((char *name, unsigned long *pval));
+int itbl_get_val PARAMS ((e_processor processor, e_type type, char *name,
+                         unsigned long *pval));
 char *itbl_get_name PARAMS ((e_processor processor, e_type type,
                             unsigned long val));