summaryrefslogtreecommitdiff
path: root/gas/config/bfin-parse.y
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2010-10-11 08:36:29 +0000
committerMike Frysinger <vapier@gentoo.org>2010-10-11 08:36:29 +0000
commit96709c617191c6d4ea3e084065bc093019aac39a (patch)
tree7dbdb3a29afb1b58fedf24a24726073a1cdfbebb /gas/config/bfin-parse.y
parentc6fba434d4ee36037082de9ffcb134ed0d9a903e (diff)
downloadbinutils-redhat-96709c617191c6d4ea3e084065bc093019aac39a.tar.gz
gas: blackfin: support numeric local labels with LOOP_BEGIN/LOOP_END pseudo insns
The current LOOP_BEGIN/LOOP_END pseudo insns hit parser errors when trying to use numeric local labels. So add support for them. Signed-off-by: David Gibson <david.gibson@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'gas/config/bfin-parse.y')
-rw-r--r--gas/config/bfin-parse.y22
1 files changed, 22 insertions, 0 deletions
diff --git a/gas/config/bfin-parse.y b/gas/config/bfin-parse.y
index 81640aa926..c34e84c210 100644
--- a/gas/config/bfin-parse.y
+++ b/gas/config/bfin-parse.y
@@ -3573,6 +3573,17 @@ asm_1:
}
/* LOOP_BEGIN. */
+ | LOOP_BEGIN NUMBER
+ {
+ Expr_Node_Value val;
+ val.i_value = $2;
+ Expr_Node *tmp = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
+ bfin_loop_attempt_create_label (tmp, 1);
+ if (!IS_RELOC (tmp))
+ return yyerror ("Invalid expression in LOOP_BEGIN statement");
+ bfin_loop_beginend (tmp, 1);
+ $$ = 0;
+ }
| LOOP_BEGIN expr
{
if (!IS_RELOC ($2))
@@ -3583,6 +3594,17 @@ asm_1:
}
/* LOOP_END. */
+ | LOOP_END NUMBER
+ {
+ Expr_Node_Value val;
+ val.i_value = $2;
+ Expr_Node *tmp = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
+ bfin_loop_attempt_create_label (tmp, 1);
+ if (!IS_RELOC (tmp))
+ return yyerror ("Invalid expression in LOOP_END statement");
+ bfin_loop_beginend (tmp, 0);
+ $$ = 0;
+ }
| LOOP_END expr
{
if (!IS_RELOC ($2))