[PATCH 1/3] sparc: Fix address mode bug

Mark Fortescue mark@mtfhpc.demon.co.uk
Fri Aug 26 21:23:00 GMT 2011


Hi all,

Please find attached a patch to fix address modes using imm + r<0..31> 
instead of imm + [goli]<0..7>.

Regards
 	Mark Fortescue.

PS: Sorry the patch is attached. My mail client mangles in-text patches.
-------------- next part --------------
diff -rupN binutils-26Aug2011-cvs.old/gas/ChangeLog binutils-26Aug2011-cvs/gas/ChangeLog
--- binutils-26Aug2011-cvs.old/gas/ChangeLog	2011-08-19 15:48:40.000000000 +0100
+++ binutils-26Aug2011-cvs/gas/ChangeLog	2011-08-26 20:33:00.000000000 +0100
@@ -1,3 +1,8 @@
+2011-08-26  Mark Fortescue <mark@mtfhpc.demon.co.uk>
+
+	* config/tc-sparc.c (sparc_ip): Handle 'i' + r<0..31>
+	in addition to 'i' + [goli]<0..7>.
+
 2011-08-19  Nick Clifton  <nickc@redhat.com>
 
 	* doc/as.texinfo: Include c-xstormy16.texi.
diff -rupN binutils-26Aug2011-cvs.old/gas/config/tc-sparc.c binutils-26Aug2011-cvs/gas/config/tc-sparc.c
--- binutils-26Aug2011-cvs.old/gas/config/tc-sparc.c	2011-08-26 13:54:26.000000000 +0100
+++ binutils-26Aug2011-cvs/gas/config/tc-sparc.c	2011-08-26 16:47:58.000000000 +0100
@@ -2408,8 +2408,10 @@ sparc_ip (char *str, const struct sparc_
 		  {
 		    if (s1[-2] == '%' && s1[-3] == '+')
 		      s1 -= 3;
-		    else if (strchr ("goli0123456789", s1[-2]) && s1[-3] == '%' && s1[-4] == '+')
+		    else if (strchr ("golir0123456789", s1[-2]) && s1[-3] == '%' && s1[-4] == '+')
 		      s1 -= 4;
+		    else if (s1[-3] == 'r' && s1[-4] == '%' && s1[-5] == '+')
+		      s1 -= 5;
 		    else
 		      s1 = NULL;
 		    if (s1)
diff -rupN binutils-26Aug2011-cvs.old/gas/testsuite/ChangeLog binutils-26Aug2011-cvs/gas/testsuite/ChangeLog
--- binutils-26Aug2011-cvs.old/gas/testsuite/ChangeLog	2011-08-19 20:27:52.000000000 +0100
+++ binutils-26Aug2011-cvs/gas/testsuite/ChangeLog	2011-08-26 21:00:26.000000000 +0100
@@ -1,3 +1,8 @@
+2011-08-26  Mark Fortescue <mark@mtfhpc.demon.co.uk>
+
+	* gas/sparc/imm-plus-rreg.[sd]: New test.
+	* gas/sparc/sparc.exp: Run new test.
+
 2011-08-19  Sergey A. Guriev  <sergeya.a.guriev@intel.com>
 
 	* gas/i386/avx-gather-intel.d: Added missing vpgather tests.
diff -rupN binutils-26Aug2011-cvs.old/gas/testsuite/gas/sparc/imm-plus-rreg.d binutils-26Aug2011-cvs/gas/testsuite/gas/sparc/imm-plus-rreg.d
--- binutils-26Aug2011-cvs.old/gas/testsuite/gas/sparc/imm-plus-rreg.d	1970-01-01 01:00:00.000000000 +0100
+++ binutils-26Aug2011-cvs/gas/testsuite/gas/sparc/imm-plus-rreg.d	2011-08-26 15:43:12.000000000 +0100
@@ -0,0 +1,13 @@
+#as: -Av8
+#objdump: -dr
+#name: address: simm13 + rreg
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <foo>:
+   0:	c2 02 20 0a 	ld  \[ %o0 \+ 0xa \], %g1
+   4:	c4 04 a0 0a 	ld  \[ %l2 \+ 0xa \], %g2
+   8:	c4 22 20 0a 	st  %g2, \[ %o0 \+ 0xa \]
+   c:	c2 24 a0 0a 	st  %g1, \[ %l2 \+ 0xa \]
diff -rupN binutils-26Aug2011-cvs.old/gas/testsuite/gas/sparc/imm-plus-rreg.s binutils-26Aug2011-cvs/gas/testsuite/gas/sparc/imm-plus-rreg.s
--- binutils-26Aug2011-cvs.old/gas/testsuite/gas/sparc/imm-plus-rreg.s	1970-01-01 01:00:00.000000000 +0100
+++ binutils-26Aug2011-cvs/gas/testsuite/gas/sparc/imm-plus-rreg.s	2011-08-26 15:08:05.000000000 +0100
@@ -0,0 +1,7 @@
+! simm13 + regrs1 address using r<0..31> instead of [goli]<0..7>
+	.text
+foo:
+	ld	[10+%r8], %r1
+	ld	[10+%r18], %r2
+	st	%r2, [10+%r8]
+	st	%r1, [10+%r18]
diff -rupN binutils-26Aug2011-cvs.old/gas/testsuite/gas/sparc/sparc.exp binutils-26Aug2011-cvs/gas/testsuite/gas/sparc/sparc.exp
--- binutils-26Aug2011-cvs.old/gas/testsuite/gas/sparc/sparc.exp	2011-08-05 17:52:48.000000000 +0100
+++ binutils-26Aug2011-cvs/gas/testsuite/gas/sparc/sparc.exp	2011-08-26 20:19:29.000000000 +0100
@@ -50,6 +50,7 @@ if [istarget sparc*-*-*] {
 	run_dump_test "plt64"
 	run_dump_test "gotop64"
     }
+    run_dump_test "imm-plus-rreg"
     run_dump_test "v9branch1"
     run_dump_test "v9branch2"
     run_dump_test "v9branch3"


More information about the Binutils mailing list