vfp.md ("*movdf_vfp"): Handle the VFP constraints before the core constraints.
authorRamana Radhakrishnan <ramana.radhakrishnan@linaro.org>
Thu, 28 Jul 2011 12:02:17 +0000 (12:02 +0000)
committerRamana Radhakrishnan <ramana@gcc.gnu.org>
Thu, 28 Jul 2011 12:02:17 +0000 (12:02 +0000)
2011-07-28  Ramana Radhakrishnan  <ramana.radhakrishnan@linaro.org>

* config/arm/vfp.md ("*movdf_vfp"): Handle the VFP constraints
before the core constraints. Adjust attributes.
(*thumb2_movdf_vfp"): Likewise.

From-SVN: r176867

gcc/ChangeLog
gcc/config/arm/vfp.md

index 3be00e9dcee34180addde574e1be9d6fa0a3a36d..8016e51d9c7620edac4a00e63f9c55814f9998e7 100644 (file)
@@ -1,3 +1,9 @@
+2011-07-28  Ramana Radhakrishnan  <ramana.radhakrishnan@linaro.org>
+
+       * config/arm/vfp.md ("*movdf_vfp"): Handle the VFP constraints
+       before the core constraints. Adjust attributes.
+       (*thumb2_movdf_vfp"): Likewise.
+
 2011-07-28  Kai Tietz  <ktietz@redhat.com>
 
        * tree-vrp.c (simplify_stmt_using_ranges): Remove
index e2165a8cfe3eff08fe4114eef02d0cbaead71a9f..3311ae09e9285e99fef2a5982cff82e67bd1c1f3 100644 (file)
 ;; DFmode moves
 
 (define_insn "*movdf_vfp"
-  [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,r, m,w  ,Uv,w,r")
-       (match_operand:DF 1 "soft_df_operand"              " ?r,w,Dy,mF,r,UvF,w, w,r"))]
+  [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,w  ,Uv,r, m,w,r")
+       (match_operand:DF 1 "soft_df_operand"              " ?r,w,Dy,UvF,w ,mF,r,w,r"))]
   "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP
    && (   register_operand (operands[0], DFmode)
        || register_operand (operands[1], DFmode))"
        gcc_assert (TARGET_VFP_DOUBLE);
         return \"fconstd%?\\t%P0, #%G1\";
       case 3: case 4:
-       return output_move_double (operands);
-      case 5: case 6:
        return output_move_vfp (operands);
+      case 5: case 6:
+       return output_move_double (operands);
       case 7:
        if (TARGET_VFP_SINGLE)
          return \"fcpys%?\\t%0, %1\;fcpys%?\\t%p0, %p1\";
   "
   [(set_attr "type"
      "r_2_f,f_2_r,fconstd,f_loadd,f_stored,load2,store2,ffarithd,*")
-   (set (attr "length") (cond [(eq_attr "alternative" "3,4,8") (const_int 8)
+   (set (attr "length") (cond [(eq_attr "alternative" "5,6,8") (const_int 8)
                               (eq_attr "alternative" "7")
                                (if_then_else
                                 (eq (symbol_ref "TARGET_VFP_SINGLE")
 )
 
 (define_insn "*thumb2_movdf_vfp"
-  [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,r, m,w  ,Uv,w,r")
-       (match_operand:DF 1 "soft_df_operand"              " ?r,w,Dy,mF,r,UvF,w, w,r"))]
+  [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,w  ,Uv,r ,m,w,r")
+       (match_operand:DF 1 "soft_df_operand"              " ?r,w,Dy,UvF,w, mF,r, w,r"))]
   "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP"
   "*
   {
       case 2:
        gcc_assert (TARGET_VFP_DOUBLE);
        return \"fconstd%?\\t%P0, #%G1\";
-      case 3: case 4: case 8:
-       return output_move_double (operands);
-      case 5: case 6:
+      case 3: case 4:
        return output_move_vfp (operands);
+      case 5: case 6: case 8:
+       return output_move_double (operands);
       case 7:
        if (TARGET_VFP_SINGLE)
          return \"fcpys%?\\t%0, %1\;fcpys%?\\t%p0, %p1\";
     }
   "
   [(set_attr "type"
-     "r_2_f,f_2_r,fconstd,load2,store2,f_loadd,f_stored,ffarithd,*")
-   (set (attr "length") (cond [(eq_attr "alternative" "3,4,8") (const_int 8)
+     "r_2_f,f_2_r,fconstd,f_loadd,f_stored,load2,store2,ffarithd,*")
+   (set (attr "length") (cond [(eq_attr "alternative" "5,6,8") (const_int 8)
                               (eq_attr "alternative" "7")
                                (if_then_else
                                 (eq (symbol_ref "TARGET_VFP_SINGLE")
                                 (const_int 8)
                                 (const_int 4))]
                              (const_int 4)))
-   (set_attr "pool_range" "*,*,*,4096,*,1020,*,*,*")
-   (set_attr "neg_pool_range" "*,*,*,0,*,1008,*,*,*")]
+   (set_attr "pool_range" "*,*,*,1020,*,4096,*,*,*")
+   (set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
 )