aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-sparc.c4
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/sparc/imm-plus-rreg.d13
-rw-r--r--gas/testsuite/gas/sparc/imm-plus-rreg.s7
-rw-r--r--gas/testsuite/gas/sparc/sparc.exp1
6 files changed, 34 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index cdea19e..63afe4f 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2011-09-08 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-09-08 Joern Rennecke <joern.rennecke@embecosm.com>
* cgen.c (gas_cgen_pcrel_r_type): New function.
diff --git a/gas/config/tc-sparc.c b/gas/config/tc-sparc.c
index 61808f3..be8d987 100644
--- a/gas/config/tc-sparc.c
+++ b/gas/config/tc-sparc.c
@@ -2408,8 +2408,10 @@ sparc_ip (char *str, const struct sparc_opcode **pinsn)
{
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 --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index b8adc1f..2df1ce8 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-09-08 Mark Fortescue <mark@mtfhpc.demon.co.uk>
+
+ * gas/sparc/imm-plus-rreg.[sd]: New test.
+ * gas/sparc/sparc.exp: Run new test.
+
2011-09-08 David S. Miller <davem@davemloft.net>
* gas/sparc/hpcvis3.s: Correct pdistn test.
diff --git a/gas/testsuite/gas/sparc/imm-plus-rreg.d b/gas/testsuite/gas/sparc/imm-plus-rreg.d
new file mode 100644
index 0000000..aed738b
--- /dev/null
+++ b/gas/testsuite/gas/sparc/imm-plus-rreg.d
@@ -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 --git a/gas/testsuite/gas/sparc/imm-plus-rreg.s b/gas/testsuite/gas/sparc/imm-plus-rreg.s
new file mode 100644
index 0000000..c84e3e8
--- /dev/null
+++ b/gas/testsuite/gas/sparc/imm-plus-rreg.s
@@ -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 --git a/gas/testsuite/gas/sparc/sparc.exp b/gas/testsuite/gas/sparc/sparc.exp
index 4a67574..335d4b4 100644
--- a/gas/testsuite/gas/sparc/sparc.exp
+++ b/gas/testsuite/gas/sparc/sparc.exp
@@ -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"