rs6000.md (prefetch): Generate ISA 2.06 instructions dcbt and dcbtstt with TH=16...
authorCarl Love <cel@us.ibm.com>
Wed, 16 May 2018 17:21:04 +0000 (17:21 +0000)
committerCarl Love <carll@gcc.gnu.org>
Wed, 16 May 2018 17:21:04 +0000 (17:21 +0000)
gcc/ChangeLog:

2018-05-16  Carl Love  <cel@us.ibm.com>

* config/rs6000/rs6000.md (prefetch): Generate ISA 2.06 instructions
dcbt and dcbtstt with TH=16 if operands[2] is 0 and Power 8 or newer.

From-SVN: r260296

gcc/ChangeLog
gcc/config/rs6000/rs6000.md

index 8a848124ff732e418b0fa6a39c9273b285cfc90c..59c4b42d23c0c7774eec2332aa93003a213a0791 100644 (file)
@@ -1,3 +1,8 @@
+2018-05-16  Carl Love  <cel@us.ibm.com>
+
+       * config/rs6000/rs6000.md (prefetch): Generate ISA 2.06 instructions
+       dcbt and dcbtstt with TH=16 if operands[2] is 0 and Power 8 or newer.
+
 2018-05-16  Martin Jambor  <mjambor@suse.cz>
 
        * ipa-prop.c (ipa_free_all_edge_args): Remove.
index b249a1f1ca7206114b02263efb8c05b85f878d44..6d8e5e219a927f32d0e95b5ffc8e0746bfaac0f5 100644 (file)
             (match_operand:SI 2 "const_int_operand" "n"))]
   ""
 {
-  /* dcbtstt, dcbtt and TM=0b10000 support starts with ISA 2.06.  */
-  int inst_select = INTVAL (operands[2]) || !TARGET_POPCNTD;
+
+
+  /* dcbtstt, dcbtt and TH=0b10000 support starts with ISA 2.06 (Power7).
+     AIX does not support the dcbtstt and dcbtt extended mnemonics.
+     The AIX assembler does not support the three operand form of dcbt
+     and dcbtst on Power 7 (-mpwr7).  */
+  int inst_select = INTVAL (operands[2]) || !TARGET_DIRECT_MOVE;
 
   if (REG_P (operands[0]))
     {
       if (INTVAL (operands[1]) == 0)
-        return inst_select ? "dcbt 0,%0" : "dcbtt 0,%0";
+        return inst_select ? "dcbt 0,%0" : "dcbt 0,%0,16";
       else
-        return inst_select ? "dcbtst 0,%0" : "dcbtstt 0,%0";
+        return inst_select ? "dcbtst 0,%0" : "dcbtst 0,%0,16";
     }
   else
     {
       if (INTVAL (operands[1]) == 0)
-        return inst_select ? "dcbt %a0" : "dcbtt %a0";
+        return inst_select ? "dcbt %a0" : "dcbt %a0,16";
       else
-        return inst_select ? "dcbtst %a0" : "dcbtstt %a0";
+        return inst_select ? "dcbtst %a0" : "dcbtst %a0,16";
     }
 }
   [(set_attr "type" "load")])