public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@novell.com>
To: <binutils@sources.redhat.com>
Subject: [PATCH] ia64: certain symbol names were unusable
Date: Tue, 08 Feb 2005 17:05:00 -0000	[thread overview]
Message-ID: <s2089f7e.083@emea1-mh.id2.novell.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 4318 bytes --]

Variables starting with 'in', 'loc', or 'out' and continuing with
decimal
numbers not fitting the 0-95 range (used for the stacked register
aliases) or
starting with zeroes were considered reserved, while they really
aren't.
Rotating registers allocated through .rotX could not start with 'in',
'loc',
or 'out' followed by at least one digit (and then anything) at all.

Built and tested on ia64-unknown-linux-gnu.

Jan

gas/
2005-02-08  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-08  Jan Beulich  <jbeulich@novell.com>

	* gas/ia64/nostkreg.[ds]: New.
	* gas/ia64/ia64.exp: Run new test.

---
/home/jbeulich/src/binutils/mainline/2005-02-08/gas/config/tc-ia64.c	2005-02-02
08:33:18.000000000 +0100
+++ 2005-02-08/gas/config/tc-ia64.c	2005-02-08 12:05:12.000000000
+0100
@@ -7586,7 +7586,7 @@ ia64_parse_name (name, e)
 {
   struct const_desc *cdesc;
   struct dynreg *dr = 0;
-  unsigned int regnum;
+  unsigned int idx;
   struct symbol *sym;
   char *end;
 
@@ -7608,43 +7608,37 @@ ia64_parse_name (name, e)
     }
 
   /* 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;
-	}
+      if (name[1] == 'n' && ISDIGIT (name[idx = 2]))
+	dr = &md.in;
       break;
 
     case 'l':
-      if (name[1] == 'o' && name[2] == 'c' && ISDIGIT (name[3]))
-	{
-	  dr = &md.loc;
-	  name += 3;
-	}
+      if (name[1] == 'o' && name[2] == 'c' && ISDIGIT (name[idx =
3]))
+	dr = &md.loc;
       break;
 
     case 'o':
-      if (name[1] == 'u' && name[2] == 't' && ISDIGIT (name[3]))
-	{
-	  dr = &md.out;
-	  name += 3;
-	}
+      if (name[1] == 'u' && name[2] == 't' && ISDIGIT (name[idx =
3]))
+	dr = &md.out;
       break;
 
     default:
       break;
     }
 
-  if (dr)
+  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");
---
/home/jbeulich/src/binutils/mainline/2005-02-08/gas/testsuite/gas/ia64/ia64.exp	2005-02-02
08:33:18.000000000 +0100
+++ 2005-02-08/gas/testsuite/gas/ia64/ia64.exp	2005-02-08
11:43:19.000000000 +0100
@@ -44,7 +44,8 @@ if [istarget "ia64-*"] then {
     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"
---
/home/jbeulich/src/binutils/mainline/2005-02-08/gas/testsuite/gas/ia64/nostkreg.d	1970-01-01
01:00:00.000000000 +0100
+++ 2005-02-08/gas/testsuite/gas/ia64/nostkreg.d	2005-02-04
15:02:33.000000000 +0100
@@ -0,0 +1,16 @@
+#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);;
---
/home/jbeulich/src/binutils/mainline/2005-02-08/gas/testsuite/gas/ia64/nostkreg.s	1970-01-01
01:00:00.000000000 +0100
+++ 2005-02-08/gas/testsuite/gas/ia64/nostkreg.s	2005-02-04
14:47:29.000000000 +0100
@@ -0,0 +1,9 @@
+_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


[-- Attachment #2: binutils-mainline-ia64-in-loc-out.patch --]
[-- Type: text/plain, Size: 4317 bytes --]

Variables starting with 'in', 'loc', or 'out' and continuing with decimal
numbers not fitting the 0-95 range (used for the stacked register aliases) or
starting with zeroes were considered reserved, while they really aren't.
Rotating registers allocated through .rotX could not start with 'in', 'loc',
or 'out' followed by at least one digit (and then anything) at all.

Built and tested on ia64-unknown-linux-gnu.

Jan

gas/
2005-02-08  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-08  Jan Beulich  <jbeulich@novell.com>

	* gas/ia64/nostkreg.[ds]: New.
	* gas/ia64/ia64.exp: Run new test.

--- /home/jbeulich/src/binutils/mainline/2005-02-08/gas/config/tc-ia64.c	2005-02-02 08:33:18.000000000 +0100
+++ 2005-02-08/gas/config/tc-ia64.c	2005-02-08 12:05:12.000000000 +0100
@@ -7586,7 +7586,7 @@ ia64_parse_name (name, e)
 {
   struct const_desc *cdesc;
   struct dynreg *dr = 0;
-  unsigned int regnum;
+  unsigned int idx;
   struct symbol *sym;
   char *end;
 
@@ -7608,43 +7608,37 @@ ia64_parse_name (name, e)
     }
 
   /* 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;
-	}
+      if (name[1] == 'n' && ISDIGIT (name[idx = 2]))
+	dr = &md.in;
       break;
 
     case 'l':
-      if (name[1] == 'o' && name[2] == 'c' && ISDIGIT (name[3]))
-	{
-	  dr = &md.loc;
-	  name += 3;
-	}
+      if (name[1] == 'o' && name[2] == 'c' && ISDIGIT (name[idx = 3]))
+	dr = &md.loc;
       break;
 
     case 'o':
-      if (name[1] == 'u' && name[2] == 't' && ISDIGIT (name[3]))
-	{
-	  dr = &md.out;
-	  name += 3;
-	}
+      if (name[1] == 'u' && name[2] == 't' && ISDIGIT (name[idx = 3]))
+	dr = &md.out;
       break;
 
     default:
       break;
     }
 
-  if (dr)
+  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");
--- /home/jbeulich/src/binutils/mainline/2005-02-08/gas/testsuite/gas/ia64/ia64.exp	2005-02-02 08:33:18.000000000 +0100
+++ 2005-02-08/gas/testsuite/gas/ia64/ia64.exp	2005-02-08 11:43:19.000000000 +0100
@@ -44,7 +44,8 @@ if [istarget "ia64-*"] then {
     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"
--- /home/jbeulich/src/binutils/mainline/2005-02-08/gas/testsuite/gas/ia64/nostkreg.d	1970-01-01 01:00:00.000000000 +0100
+++ 2005-02-08/gas/testsuite/gas/ia64/nostkreg.d	2005-02-04 15:02:33.000000000 +0100
@@ -0,0 +1,16 @@
+#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);;
--- /home/jbeulich/src/binutils/mainline/2005-02-08/gas/testsuite/gas/ia64/nostkreg.s	1970-01-01 01:00:00.000000000 +0100
+++ 2005-02-08/gas/testsuite/gas/ia64/nostkreg.s	2005-02-04 14:47:29.000000000 +0100
@@ -0,0 +1,9 @@
+_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

             reply	other threads:[~2005-02-08 11:16 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-08 17:05 Jan Beulich [this message]
2005-02-11  3:46 ` James E Wilson
2005-02-11 15:54 Jan Beulich
2005-02-17  3:22 ` James E Wilson
     [not found] <s20c8f76.004@emea1-mh.id2.novell.com>
2005-02-11 20:41 ` James E Wilson
2005-02-17 15:37 Jan Beulich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=s2089f7e.083@emea1-mh.id2.novell.com \
    --to=jbeulich@novell.com \
    --cc=binutils@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).