gas: blackfin: reign in overeager insn flag handling
authorMike Frysinger <vapier@gentoo.org>
Mon, 11 Oct 2010 08:37:20 +0000 (08:37 +0000)
committerMike Frysinger <vapier@gentoo.org>
Mon, 11 Oct 2010 08:37:20 +0000 (08:37 +0000)
commit65646555b2f618d48420b5a786a1e7c86f8ad36f
tree9fae9042782b6669559626a7c962fa512396135b
parent5664043466b5a1a79232f5a3ee6339e638384720
gas: blackfin: reign in overeager insn flag handling

Currently, trying to declare single letter variables in Blackfin assembly
can sometimes lead to parser errors if that letter is used for insn flags.
For example, X, Z, S, M, and T are used to change the behavior of insns:
    R0 = 1; R0 = 1 (X); R0 = 1 (Z);
But the current parser just looks for single letter tokens rather than
ones that show up in the (FLAGS) field.  So only match these letters as
flags when they're in parentheses.

Not a complete fix, but it at least lets gcc tests pass now (the test
gcc/testsuite/gcc.c-torture/compile/mangle-1.c to be exact).  A complete
fix would require a significant parser rewrite in order to handle:
    R0 = (x) (x);   /* zero extend the address of the symbol "x" */
    R0 = W; R0 = W[P0];

Signed-off-by: Steve Kilbane <steve.kilbane@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
gas/ChangeLog
gas/config/bfin-lex.l