+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.
+
2005-02-16 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
* config/tc-mips.c (load_address): Fix formatting.
{
struct const_desc *cdesc;
struct dynreg *dr = 0;
- unsigned int regnum;
unsigned int idx;
struct symbol *sym;
char *end;
}
/* 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;
if (name[1] == 'o' && name[2] == 'c' && ISDIGIT (name[3]))
{
dr = &md.loc;
- name += 3;
+ idx = 3;
}
break;
if (name[1] == 'u' && name[2] == 't' && ISDIGIT (name[3]))
{
dr = &md.out;
- name += 3;
+ idx = 3;
}
break;
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");
+2005-02-17 Jan Beulich <jbeulich@novell.com>
+
+ * gas/ia64/nostkreg.[ds]: New.
+ * gas/ia64/ia64.exp: Run new test.
+
2005-02-16 Alan Modra <amodra@bigpond.net.au>
* gas/all/gas.exp (quad): Don't run on i960.
run_dump_test "ldxmov-1"
run_list_test "ldxmov-2" ""
run_dump_test "ltoff22x-1"
-
+
+ run_dump_test "nostkreg"
run_list_test "invalid-ar" ""
run_dump_test "dependency-1"
--- /dev/null
+#objdump: -dr
+#name: ia64 not stacked registers
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+0+000 <_start>:
+[[:space:]]*[[:xdigit:]]+:[[:space:][:xdigit:]]+\[M[IM]I\][[:space:]]+mov[[:space:]]+r5=0
+[[:space:]]+0:[[:space:]]+IMM22[[:space:]]+in00
+[[:space:]]+1:[[:space:]]+IMM22[[:space:]]+loc96
+[[:space:]]*[[:xdigit:]]+:[[:space:][:xdigit:]]+mov[[:space:]]+r6=0
+[[:space:]]*[[:xdigit:]]+:[[:space:][:xdigit:]]+mov[[:space:]]+r7=r32
+[[:space:]]*[[:xdigit:]]+:[[:space:][:xdigit:]]+\[M[IM]B\][[:space:]]+mov[[:space:]]+r8=r34
+[[:space:]]*[[:xdigit:]]+:[[:space:][:xdigit:]]+mov[[:space:]]+r9=r36
+[[:space:]]*[[:xdigit:]]+:[[:space:][:xdigit:]]+br\.ret\.sptk\.few[[:space:]]+(b0|rp);;
--- /dev/null
+_start:
+ mov r5 = in00
+ mov r6 = loc96
+ .regstk 2, 6, 2, 8
+ .rotr in0I[2], loc1L[2], out2O[2]
+ mov r7 = in0I[0]
+ mov r8 = loc1L[0]
+ mov r9 = out2O[0]
+ br.ret.sptk rp