* config/bfin-defs.h (IS_BREG, IS_LREG): New macros.
authorJie Zhang <jie.zhang@analog.com>
Fri, 18 Nov 2005 14:21:29 +0000 (14:21 +0000)
committerJie Zhang <jie.zhang@analog.com>
Fri, 18 Nov 2005 14:21:29 +0000 (14:21 +0000)
* config/bfin-parse.y (asm_1): Check register type for load immediate
instruction.

gas/ChangeLog
gas/config/bfin-defs.h
gas/config/bfin-parse.y

index e452f79915607caa003272883e21ab116a675779..f994538f42e2c23fff2d56a16b22f6a021dfa3df 100644 (file)
@@ -1,3 +1,9 @@
+2005-11-18  Jie Zhang  <jie.zhang@analog.com>
+
+       * config/bfin-defs.h (IS_BREG, IS_LREG): New macros.
+       * config/bfin-parse.y (asm_1): Check register type for load immediate
+       instruction.
+
 2005-11-17  Alexandre Oliva  <aoliva@redhat.com>
 
        * config/tc-ppc.c (ppc_frob_file_before_adjust): Do not reference
index 221e8c40c8f82d9662954f1ca969a153aaa16274..46ae61e2912321960fbf66745aa9659f5237a166 100644 (file)
@@ -199,6 +199,8 @@ enum reg_class
 #define IS_PREG(r)       _TYPECHECK(r, P)
 #define IS_IREG(r)       (((r).regno & 0xf4) == T_REG_I)
 #define IS_MREG(r)       (((r).regno & 0xf4) == T_REG_M)
+#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_ALLREG(r)     ((r).regno < T_NOGROUP)
 
index 7751b688d005a91002ef920f27ae29aca1ecf1de..f5f102240339b9ade4e3238ad918df23dcdaee24 100644 (file)
@@ -1189,8 +1189,14 @@ asm_1:
        | HALF_REG ASSIGN expr
        {
          notethat ("LDIMMhalf: pregs_half = imm16\n");
+
+         if (!IS_DREG ($1) && !IS_PREG ($1) && !IS_IREG ($1)
+             && !IS_MREG ($1) && !IS_BREG ($1) && !IS_LREG ($1))
+           return yyerror ("Wrong register for load immediate");
+
          if (!IS_IMM ($3, 16) && !IS_UIMM ($3, 16))
            return yyerror ("Constant out of range");
+
          $$ = LDIMMHALF_R (&$1, IS_H ($1), 0, 0, $3);
        }
 
@@ -1206,6 +1212,10 @@ asm_1:
 
        | REG ASSIGN expr xpmod1
        {
+         if (!IS_DREG ($1) && !IS_PREG ($1) && !IS_IREG ($1)
+             && !IS_MREG ($1) && !IS_BREG ($1) && !IS_LREG ($1))
+           return yyerror ("Wrong register for load immediate");
+
          if ($4.r0 == 0)
            {
              /* 7 bit immediate value if possible.