mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-23 13:21:43 +08:00
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:
parent
7f2f689c83
commit
d7ba4a779e
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user