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.
This commit is contained in:
Ian Lance Taylor 1999-06-10 20:35:50 +00:00
parent 7f2f689c83
commit d7ba4a779e
4 changed files with 42 additions and 38 deletions

View 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.

View 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

View 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;

View 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));