aboutsummaryrefslogtreecommitdiff
path: root/gas/config
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@novell.com>2005-02-17 07:43:12 +0000
committerJan Beulich <jbeulich@novell.com>2005-02-17 07:43:12 +0000
commit26b810ce0ecf8fed7d271047f20183ff16034846 (patch)
tree9a36f3382f94fb7a1a6462abae5da25098494392 /gas/config
parenta348ae870a061245863c765e2377a33f51ca3dc5 (diff)
downloadgdb-26b810ce0ecf8fed7d271047f20183ff16034846.zip
gdb-26b810ce0ecf8fed7d271047f20183ff16034846.tar.gz
gdb-26b810ce0ecf8fed7d271047f20183ff16034846.tar.bz2
gas/
2005-02-17 Jan Beulich <jbeulich@novell.com> * config/tc-ia64.c (ia64_parse_name): Don't advance 'name' when parsing inN, locN, outN. Set 'idx' to offset register number starts at. Don't handle numbers with leading zeroes or beyond 95. Remove pointless cast. gas/testsuite/ 2005-02-17 Jan Beulich <jbeulich@novell.com> * gas/ia64/nostkreg.[ds]: New. * gas/ia64/ia64.exp: Run new test.
Diffstat (limited to 'gas/config')
-rw-r--r--gas/config/tc-ia64.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c
index 42aad8f..e43619d 100644
--- a/gas/config/tc-ia64.c
+++ b/gas/config/tc-ia64.c
@@ -7735,7 +7735,6 @@ ia64_parse_name (name, e, nextcharP)
{
struct const_desc *cdesc;
struct dynreg *dr = 0;
- unsigned int regnum;
unsigned int idx;
struct symbol *sym;
char *end;
@@ -7841,13 +7840,14 @@ ia64_parse_name (name, e, nextcharP)
}
/* check for inN, locN, or outN: */
+ idx = 0;
switch (name[0])
{
case 'i':
if (name[1] == 'n' && ISDIGIT (name[2]))
{
dr = &md.in;
- name += 2;
+ idx = 2;
}
break;
@@ -7855,7 +7855,7 @@ ia64_parse_name (name, e, nextcharP)
if (name[1] == 'o' && name[2] == 'c' && ISDIGIT (name[3]))
{
dr = &md.loc;
- name += 3;
+ idx = 3;
}
break;
@@ -7863,7 +7863,7 @@ ia64_parse_name (name, e, nextcharP)
if (name[1] == 'u' && name[2] == 't' && ISDIGIT (name[3]))
{
dr = &md.out;
- name += 3;
+ idx = 3;
}
break;
@@ -7871,13 +7871,16 @@ ia64_parse_name (name, e, nextcharP)
break;
}
- if (dr)
+ /* Ignore register numbers with leading zeroes, except zero itself. */
+ if (dr && (name[idx] != '0' || name[idx + 1] == '\0'))
{
+ unsigned long regnum;
+
/* The name is inN, locN, or outN; parse the register number. */
- regnum = strtoul (name, &end, 10);
- if (end > name && *end == '\0')
+ regnum = strtoul (name + idx, &end, 10);
+ if (end > name + idx && *end == '\0' && regnum < 96)
{
- if ((unsigned) regnum >= dr->num_regs)
+ if (regnum >= dr->num_regs)
{
if (!dr->num_regs)
as_bad ("No current frame");