aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2001-12-20 17:28:13 +0000
committerAlexandre Oliva <aoliva@redhat.com>2001-12-20 17:28:13 +0000
commit8d4d84c202991e99b753fafd5e3d063fb0b9dc75 (patch)
treeea85421ef5eb6aacce85ba3f349c67bdedb234e7
parent2c283bc467fffc9faee414a6208735073b70716a (diff)
downloadfsf-binutils-gdb-8d4d84c202991e99b753fafd5e3d063fb0b9dc75.zip
fsf-binutils-gdb-8d4d84c202991e99b753fafd5e3d063fb0b9dc75.tar.gz
fsf-binutils-gdb-8d4d84c202991e99b753fafd5e3d063fb0b9dc75.tar.bz2
* config/tc-sh.c (parse_at): Reject @(r0) and @(r0,).
-rw-r--r--gas/ChangeLog4
-rw-r--r--gas/config/tc-sh.c35
2 files changed, 28 insertions, 11 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index dfea781..8d6cc41 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,7 @@
+2001-12-20 Alexandre Oliva <aoliva@redhat.com>
+
+ * config/tc-sh.c (parse_at): Reject @(r0) and @(r0,).
+
2001-12-20 matthew green <mrg@redhat.com>
* config/tc-ppc.c (md_parse_option): Make -maltivec default
diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c
index a238019..27c33cd 100644
--- a/gas/config/tc-sh.c
+++ b/gas/config/tc-sh.c
@@ -914,7 +914,7 @@ parse_at (src, op)
else if (src[0] == '(')
{
/* Could be @(disp, rn), @(disp, gbr), @(disp, pc), @(r0, gbr) or
- @(r0, rn) */
+ @(r0, rn). */
src++;
len = parse_reg (src, &mode, &(op->reg));
if (len && mode == A_REG_N)
@@ -925,29 +925,42 @@ parse_at (src, op)
as_bad (_("must be @(r0,...)"));
}
if (src[0] == ',')
- src++;
- /* Now can be rn or gbr */
- len = parse_reg (src, &mode, &(op->reg));
- if (mode == A_GBR)
{
- op->type = A_R0_GBR;
+ src++;
+ /* Now can be rn or gbr. */
+ len = parse_reg (src, &mode, &(op->reg));
+ }
+ else
+ {
+ len = 0;
}
- else if (mode == A_REG_N)
+ if (len)
{
- op->type = A_IND_R0_REG_N;
+ if (mode == A_GBR)
+ {
+ op->type = A_R0_GBR;
+ }
+ else if (mode == A_REG_N)
+ {
+ op->type = A_IND_R0_REG_N;
+ }
+ else
+ {
+ as_bad (_("syntax error in @(r0,...)"));
+ }
}
else
{
- as_bad (_("syntax error in @(r0,...)"));
+ as_bad (_("syntax error in @(r0...)"));
}
}
else
{
- /* Must be an @(disp,.. thing) */
+ /* Must be an @(disp,.. thing). */
src = parse_exp (src, op);
if (src[0] == ',')
src++;
- /* Now can be rn, gbr or pc */
+ /* Now can be rn, gbr or pc. */
len = parse_reg (src, &mode, &op->reg);
if (len)
{