gas: blackfin: add missing register move insns
authorMike Frysinger <vapier@gentoo.org>
Wed, 22 Sep 2010 21:30:35 +0000 (21:30 +0000)
committerMike Frysinger <vapier@gentoo.org>
Wed, 22 Sep 2010 21:30:35 +0000 (21:30 +0000)
The Blackfin ISA supports moving just about anything to/from EMUDAT, so
make sure the assembler accepts these insns too.

Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
gas/ChangeLog
gas/config/bfin-defs.h
gas/config/bfin-parse.y

index 947bfdd1f4f64b0d8e1de41e95d833ce835f7c08..102f30751090d1d9f5995bf0429c12605c4c5841 100644 (file)
@@ -1,3 +1,8 @@
+2010-09-22  Robin Getz  <robin.getz@analog.com>
+
+       * config/bfin-defs.h (IS_EMUDAT): New define.
+       * config/bfin-parse.y: Accept EMUDAT for any register move.
+
 2010-09-22  Robin Getz  <robin.getz@analog.com>
 
        * config/bfin-parse.y: Improve error messages.
index 7dd9796b9043787f47353a8ffc8eadb8b5e199fe..8217332c5a31e5f125f930dea263376dd0381b29 100644 (file)
@@ -203,6 +203,7 @@ enum reg_class
 #define IS_BREG(r)       (((r).regno & 0xf4) == T_REG_B)
 #define IS_LREG(r)       (((r).regno & 0xf4) == T_REG_L)
 #define IS_CREG(r)       ((r).regno == REG_LC0 || (r).regno == REG_LC1)
+#define IS_EMUDAT(r)     ((r).regno == REG_EMUDAT)
 #define IS_ALLREG(r)     ((r).regno < T_NOGROUP)
 
 #define IS_GENREG(r) \
index 4549b53534eb40826d66a5d8cdebc19e5709d163..0dd729cb35b571b82c56e358ead80e721282c0d7 100644 (file)
@@ -1728,10 +1728,12 @@ asm_1:
              || (IS_DAGREG ($1) && IS_DAGREG ($3))
              || (IS_GENREG ($1) && $3.regno == REG_USP)
              || ($1.regno == REG_USP && IS_GENREG ($3))
+             || ($1.regno == REG_USP && $3.regno == REG_USP)
              || (IS_DREG ($1) && IS_SYSREG ($3))
              || (IS_PREG ($1) && IS_SYSREG ($3))
-             || (IS_SYSREG ($1) && IS_DREG ($3))
-             || (IS_SYSREG ($1) && IS_PREG ($3))
+             || (IS_SYSREG ($1) && IS_GENREG ($3))
+             || (IS_ALLREG ($1) && IS_EMUDAT ($3))
+             || (IS_EMUDAT ($1) && IS_ALLREG ($3))
              || (IS_SYSREG ($1) && $3.regno == REG_USP))
            {
              $$ = bfin_gen_regmv (&$3, &$1);