From 8d4d84c202991e99b753fafd5e3d063fb0b9dc75 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Thu, 20 Dec 2001 17:28:13 +0000 Subject: * config/tc-sh.c (parse_at): Reject @(r0) and @(r0,). --- gas/ChangeLog | 4 ++++ gas/config/tc-sh.c | 35 ++++++++++++++++++++++++----------- 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 + + * config/tc-sh.c (parse_at): Reject @(r0) and @(r0,). + 2001-12-20 matthew green * 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) { -- cgit v1.1