]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
arm.md (arch): Add neon_onlya8 and neon_nota8.
authorAndrew Stubbs <ams@codesourcery.com>
Thu, 5 Apr 2012 14:37:45 +0000 (14:37 +0000)
committerAndrew Stubbs <ams@gcc.gnu.org>
Thu, 5 Apr 2012 14:37:45 +0000 (14:37 +0000)
2012-04-05  Andrew Stubbs  <ams@codesourcery.com>

gcc/
* config/arm/arm.md (arch): Add neon_onlya8 and neon_nota8.
(arch_enabled): Handle new arch types.
(one_cmpldi2): Add NEON support.

From-SVN: r186167

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

index 5ff0682d38dcebca0780480116d3bd931ae6fdc8..8fbf1abfeb1f2c96fc30c294657792165021cd49 100644 (file)
@@ -1,3 +1,9 @@
+2012-04-05  Andrew Stubbs  <ams@codesourcery.com>
+
+       * config/arm/arm.md (arch): Add neon_onlya8 and neon_nota8.
+       (arch_enabled): Handle new arch types.
+       (one_cmpldi2): Add NEON support.
+
 2012-04-05  Richard Guenther  <rguenther@suse.de>
 
        * gimple.c (walk_gimple_op): Compute val_only for the LHS
index 4f6d96575b943b05181e8b7cc7dda516fbee458b..3cdc1535f3a77b9426416d2e56b268825825298e 100644 (file)
 ; for ARM or Thumb-2 with arm_arch6, and nov6 for ARM without
 ; arm_arch6.  This attribute is used to compute attribute "enabled",
 ; use type "any" to enable an alternative in all cases.
-(define_attr "arch" "any,a,t,32,t1,t2,v6,nov6,onlya8,nota8"
+(define_attr "arch" "any,a,t,32,t1,t2,v6,nov6,onlya8,neon_onlya8,nota8,neon_nota8"
   (const_string "any"))
 
 (define_attr "arch_enabled" "no,yes"
              (eq_attr "tune" "cortexa8"))
         (const_string "yes")
 
+        (and (eq_attr "arch" "neon_onlya8")
+             (eq_attr "tune" "cortexa8")
+             (match_test "TARGET_NEON"))
+        (const_string "yes")
+
         (and (eq_attr "arch" "nota8")
              (not (eq_attr "tune" "cortexa8")))
+        (const_string "yes")
+
+        (and (eq_attr "arch" "neon_nota8")
+             (not (eq_attr "tune" "cortexa8"))
+             (match_test "TARGET_NEON"))
         (const_string "yes")]
        (const_string "no")))
 
   "")
 
 (define_insn_and_split "one_cmpldi2"
-  [(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
-       (not:DI (match_operand:DI 1 "s_register_operand" "0,r")))]
+  [(set (match_operand:DI 0 "s_register_operand"        "=w,&r,&r,?w")
+       (not:DI (match_operand:DI 1 "s_register_operand" " w, 0, r, w")))]
   "TARGET_32BIT"
-  "#"
-  "TARGET_32BIT && reload_completed"
+  "@
+   vmvn\t%P0, %P1
+   #
+   #
+   vmvn\t%P0, %P1"
+  "TARGET_32BIT && reload_completed
+   && arm_general_register_operand (operands[0], DImode)"
   [(set (match_dup 0) (not:SI (match_dup 1)))
    (set (match_dup 2) (not:SI (match_dup 3)))]
   "
     operands[3] = gen_highpart (SImode, operands[1]);
     operands[1] = gen_lowpart (SImode, operands[1]);
   }"
-  [(set_attr "length" "8")
-   (set_attr "predicable" "yes")]
+  [(set_attr "length" "*,8,8,*")
+   (set_attr "predicable" "no,yes,yes,no")
+   (set_attr "neon_type" "neon_int_1,*,*,neon_int_1")
+   (set_attr "arch" "neon_nota8,*,*,neon_onlya8")]
 )
 
 (define_expand "one_cmplsi2"