[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