mips.md (compression): Add `micromips32' setting.
authorMaciej W. Rozycki <macro@codesourcery.com>
Tue, 18 Nov 2014 16:52:02 +0000 (16:52 +0000)
committerMaciej W. Rozycki <macro@gcc.gnu.org>
Tue, 18 Nov 2014 16:52:02 +0000 (16:52 +0000)
* config/mips/mips.md (compression): Add `micromips32' setting.
(enabled, length): Handle it.
(shift_compression): Replace `micromips' with `micromips32' in
the `compression' attribute.
(*add<mode>3, sub<mode>3): Likewise.

From-SVN: r217728

gcc/ChangeLog
gcc/config/mips/mips.md

index 3c24cd1abd8d71c3c512d51ce69a7654c3e1fa4d..2fa58caeb38f8309404a91d4435e67f91e74dadd 100644 (file)
@@ -1,3 +1,11 @@
+2014-11-18  Maciej W. Rozycki  <macro@codesourcery.com>
+
+       * config/mips/mips.md (compression): Add `micromips32' setting.
+       (enabled, length): Handle it.
+       (shift_compression): Replace `micromips' with `micromips32' in
+       the `compression' attribute.
+       (*add<mode>3, sub<mode>3): Likewise.
+
 2014-11-18  Maciej W. Rozycki  <macro@codesourcery.com>
 
        * gcc/config/mips/mips.md (*jump_absolute): Use a branch when in
index 6781a0088063581e5fd2ced1da320c9779e2a7a6..65c0a3f18fed68fd8b9646137e380f09100797ec 100644 (file)
                (const_string "yes")
                (const_string "no")))
 
-(define_attr "compression" "none,all,micromips"
+(define_attr "compression" "none,all,micromips32,micromips"
   (const_string "none"))
 
 (define_attr "enabled" "no,yes"
                           || TARGET_O32_FP64A_ABI")
              (eq_attr "dword_mode" "yes"))
         (const_string "no")
-        (and (eq_attr "compression" "micromips")
+        (and (eq_attr "compression" "micromips32,micromips")
              (match_test "!TARGET_MICROMIPS"))
         (const_string "no")]
        (const_string "yes")))
 ;; but there are special cases for branches (which must be handled here)
 ;; and for compressed single instructions.
 (define_attr "length" ""
-   (cond [(and (eq_attr "compression" "micromips,all")
+   (cond [(and (ior (eq_attr "compression" "micromips,all")
+                   (and (eq_attr "compression" "micromips32")
+                        (eq_attr "mode" "SI,SF")))
               (eq_attr "dword_mode" "no")
               (match_test "TARGET_MICROMIPS"))
          (const_int 2)
                                  (xor "xori")
                                  (and "andi")])
 
-(define_code_attr shift_compression [(ashift "micromips")
-                                    (lshiftrt "micromips")
+(define_code_attr shift_compression [(ashift "micromips32")
+                                    (lshiftrt "micromips32")
                                     (ashiftrt "none")])
 
 ;; <fcond> is the c.cond.fmt condition associated with a particular code.
     return "<d>addiu\t%0,%1,%2";
 }
   [(set_attr "alu_type" "add")
-   (set_attr "compression" "micromips,*,micromips,micromips,micromips,micromips,*")
+   (set_attr "compression" "micromips32,*,micromips32,micromips32,micromips32,micromips32,*")
    (set_attr "mode" "<MODE>")])
 
 (define_insn "*add<mode>3_mips16"
   ""
   "<d>subu\t%0,%1,%2"
   [(set_attr "alu_type" "sub")
-   (set_attr "compression" "micromips,*")
+   (set_attr "compression" "micromips32,*")
    (set_attr "mode" "<MODE>")])
 
 (define_insn "*subsi3_extended"