PR gas/12698
authorNick Clifton <nickc@redhat.com>
Wed, 13 Jun 2012 14:19:00 +0000 (14:19 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 13 Jun 2012 14:19:00 +0000 (14:19 +0000)
* config/tc-arm.c (do_t_mrs): Do not require an m-profile
architecure when assembling for all archiectures.
(do_t_msr): Likewise.

gas/ChangeLog
gas/config/tc-arm.c

index 1182c13cf7f8ce5f48ccb0507822faaf8a1cba73..a9fc59ab8a5c6816c58f0e24189151dc515e94d2 100644 (file)
@@ -1,3 +1,10 @@
+2012-06-13  Zhenqiang Chen  <zhenqiang.chen@linaro.org>
+
+       PR gas/12698
+       * config/tc-arm.c (do_t_mrs): Do not require an m-profile
+       architecure when assembling for all archiectures.
+       (do_t_msr): Likewise.
+
 2012-06-11  Georg-Johann Lay  <avr@gjlay.de>
 
        PR 13503
index 6ff64a615bb355682abba9583258d4e8456eb624..2257d4e59b8ac0933de9e89ce228ddb4940b7f62 100644 (file)
@@ -11201,8 +11201,14 @@ do_t_mrs (void)
       int flags = inst.operands[1].imm & (PSR_c|PSR_x|PSR_s|PSR_f|SPSR_BIT);
 
       if (ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_m))
-       constraint (flags != 0, _("selected processor does not support "
-                   "requested special purpose register"));
+       {
+         /* PR gas/12698:  The constraint is only applied for m_profile.
+            If the user has specified -march=all, we want to ignore it as
+            we are building for any CPU type, including non-m variants.  */
+         bfd_boolean m_profile = selected_cpu.core != arm_arch_any.core;
+         constraint ((flags != 0) && m_profile, _("selected processor does "
+                                                  "not support requested special purpose register"));
+       }
       else
        /* mrs only accepts APSR/CPSR/SPSR/CPSR_all/SPSR_all (for non-M profile
           devices).  */
@@ -11236,12 +11242,16 @@ do_t_msr (void)
     {
       int bits = inst.operands[0].imm & (PSR_c|PSR_x|PSR_s|PSR_f|SPSR_BIT);
 
-      constraint ((ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6_dsp)
-                  && (bits & ~(PSR_s | PSR_f)) != 0)
-                 || (!ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6_dsp)
-                     && bits != PSR_f),
-                 _("selected processor does not support requested special "
-                   "purpose register"));
+      /* PR gas/12698:  The constraint is only applied for m_profile.
+         If the user has specified -march=all, we want to ignore it as
+         we are building for any CPU type, including non-m variants.  */
+      bfd_boolean m_profile = selected_cpu.core != arm_arch_any.core;
+      constraint (((ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6_dsp)
+           && (bits & ~(PSR_s | PSR_f)) != 0)
+          || (!ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6_dsp)
+              && bits != PSR_f)) && m_profile,
+          _("selected processor does not support requested special "
+            "purpose register"));
     }
   else
      constraint ((flags & 0xff) != 0, _("selected processor does not support "