rs6000.md (define_attr "type"): New type popcnt.
authorEdmar Wienskoski <edmar@freescale.com>
Fri, 22 Jun 2012 20:13:23 +0000 (20:13 +0000)
committerEdmar Wienskoski <edmarwjr@gcc.gnu.org>
Fri, 22 Jun 2012 20:13:23 +0000 (20:13 +0000)
2012-06-22  Edmar Wienskoski  <edmar@freescale.com>

* config/rs6000/rs6000.md (define_attr "type"): New type popcnt.
(popcntb<mode>2): Add attribute type popcnt.
(popcntd<mode>2): Ditto.
* config/rs6000/power4.md (define_insn_reservation): Add type popcnt.
* config/rs6000/power5.md (define_insn_reservation): Ditto.
* config/rs6000/power7.md (define_insn_reservation): Ditto.
* config/rs6000/476.md (define_insn_reservation): Ditto.
* config/rs6000/power6.md (define_insn_reservation): New
reservation for popcnt instructions.

From-SVN: r188901

gcc/ChangeLog
gcc/config/rs6000/476.md
gcc/config/rs6000/power5.md
gcc/config/rs6000/power6.md
gcc/config/rs6000/power7.md
gcc/config/rs6000/rs6000.md

index d0ebc5a797408f439efd63d442d160ce58b09b48..028f4f60e21d72442fdf05190edfdcd574316134 100644 (file)
@@ -1,3 +1,15 @@
+2012-06-22  Edmar Wienskoski  <edmar@freescale.com>
+
+       * config/rs6000/rs6000.md (define_attr "type"): New type popcnt.
+       (popcntb<mode>2): Add attribute type popcnt.
+       (popcntd<mode>2): Ditto.
+       * config/rs6000/power4.md (define_insn_reservation): Add type popcnt.
+       * config/rs6000/power5.md (define_insn_reservation): Ditto.
+       * config/rs6000/power7.md (define_insn_reservation): Ditto.
+       * config/rs6000/476.md (define_insn_reservation): Ditto.
+       * config/rs6000/power6.md (define_insn_reservation): New
+       reservation for popcnt instructions.
+
 2012-06-22  H.J. Lu  <hongjiu.lu@intel.com>
 
        * doc/invoke.texi: Update -mpreferred-stack-boundary=3 warning.
index 3f50bafa03c2b7ba46c15c4a62edc3628c77de48..ad0acc343f75e0919ad2ff8a98aa041d1d521701 100644 (file)
@@ -71,7 +71,7 @@
    ppc476_i_pipe|ppc476_lj_pipe")
 
 (define_insn_reservation "ppc476-complex-integer" 1
-  (and (eq_attr "type" "cmp,cr_logical,delayed_cr,cntlz,isel,isync,sync,trap")
+  (and (eq_attr "type" "cmp,cr_logical,delayed_cr,cntlz,isel,isync,sync,trap,popcnt")
        (eq_attr "cpu" "ppc476"))
   "ppc476_issue,\
    ppc476_i_pipe")
index b6db0931219d993c54bf6870a487fbd0a1646788..c667a5454115b5500a5c87895cbace473c545ce5 100644 (file)
 ; Integer latency is 2 cycles
 (define_insn_reservation "power5-integer" 2
   (and (eq_attr "type" "integer,insert_dword,shift,trap,\
-                        var_shift_rotate,cntlz,exts,isel")
+                        var_shift_rotate,cntlz,exts,isel,popcnt")
        (eq_attr "cpu" "power5"))
   "iq_power5")
 
index 8d54c812963213383068fba682727ab0e923e7ae..39f19b80a888f2e96af1bea942255230e129fe44 100644 (file)
        (eq_attr "cpu" "power6"))
   "FXU_power6")
 
+(define_insn_reservation "power6-popcnt" 1
+  (and (eq_attr "type" "popcnt")
+       (eq_attr "cpu" "power6"))
+  "FXU_power6")
+
 (define_insn_reservation "power6-insert" 1
   (and (eq_attr "type" "insert_word")
        (eq_attr "cpu" "power6"))
index 9071bd5e8e0ee34539067b9edf68d50379ce3e61..cf7fd3770f9986fda9a2298489df0520b2773907 100644 (file)
 ; FX Unit
 (define_insn_reservation "power7-integer" 1
   (and (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\
-                        var_shift_rotate,exts,isel")
+                        var_shift_rotate,exts,isel,popcnt")
        (eq_attr "cpu" "power7"))
   "DU_power7,FXU_power7")
 
index 8098b8f2ce6ef96313c23ae61324b6d0f009ca65..b264221cc7add026902b6f8acdc3a63342bb3876 100644 (file)
 \f
 ;; Define an insn type attribute.  This is used in function unit delay
 ;; computations.
-(define_attr "type" "integer,two,three,load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,store,store_ux,store_u,fpload,fpload_ux,fpload_u,fpstore,fpstore_ux,fpstore_u,vecload,vecstore,imul,imul2,imul3,lmul,idiv,ldiv,insert_word,branch,cmp,fast_compare,compare,var_delayed_compare,delayed_compare,imul_compare,lmul_compare,fpcompare,cr_logical,delayed_cr,mfcr,mfcrf,mtcr,mfjmpr,mtjmpr,fp,fpsimple,dmul,sdiv,ddiv,ssqrt,dsqrt,jmpreg,brinc,vecsimple,veccomplex,vecdiv,veccmp,veccmpsimple,vecperm,vecfloat,vecfdiv,vecdouble,isync,sync,load_l,store_c,shift,trap,insert_dword,var_shift_rotate,cntlz,exts,mffgpr,mftgpr,isel"
+(define_attr "type" "integer,two,three,load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,store,store_ux,store_u,fpload,fpload_ux,fpload_u,fpstore,fpstore_ux,fpstore_u,vecload,vecstore,imul,imul2,imul3,lmul,idiv,ldiv,insert_word,branch,cmp,fast_compare,compare,var_delayed_compare,delayed_compare,imul_compare,lmul_compare,fpcompare,cr_logical,delayed_cr,mfcr,mfcrf,mtcr,mfjmpr,mtjmpr,fp,fpsimple,dmul,sdiv,ddiv,ssqrt,dsqrt,jmpreg,brinc,vecsimple,veccomplex,vecdiv,veccmp,veccmpsimple,vecperm,vecfloat,vecfdiv,vecdouble,isync,sync,load_l,store_c,shift,trap,insert_dword,var_shift_rotate,cntlz,exts,mffgpr,mftgpr,isel,popcnt"
   (const_string "integer"))
 
 ;; Define floating point instruction sub-types for use with Xfpu.md
         (unspec:GPR [(match_operand:GPR 1 "gpc_reg_operand" "r")]
                      UNSPEC_POPCNTB))]
   "TARGET_POPCNTB"
-  "popcntb %0,%1")
+  "popcntb %0,%1"
+  [(set_attr "length" "4")
+   (set_attr "type" "popcnt")])
 
 (define_insn "popcntd<mode>2"
   [(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
        (popcount:GPR (match_operand:GPR 1 "gpc_reg_operand" "r")))]
   "TARGET_POPCNTD"
-  "popcnt<wd> %0,%1")
+  "popcnt<wd> %0,%1"
+  [(set_attr "length" "4")
+   (set_attr "type" "popcnt")])
 
 (define_expand "popcount<mode>2"
   [(set (match_operand:GPR 0 "gpc_reg_operand" "")