[gcc]
authorwschmidt <wschmidt@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Apr 2015 12:36:43 +0000 (12:36 +0000)
committerwschmidt <wschmidt@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Apr 2015 12:36:43 +0000 (12:36 +0000)
2015-04-23  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

* config/rs6000/crypto.md (crypto_vpmsum<CR_char>): Change
TARGET_CRYPTO to TARGET_P8_VECTOR>
(crypto_vpermxor_<mode>): Likewise.
* config/rs6000/rs6000-builtin.def (BU_CRYPTO_2A): New #define.
(BU_CRYPTO_3A): Likewise.
(BU_CRYPTO_OVERLOAD_2A): Rename from BU_CRYPTO_OVERLOAD_2.
(BU_CRYPTO_OVERLOAD_3A): New #define.
(VPMSUMB): Change from BU_CRYPTO_2 to BU_CRYPTO_2A.
(VPMSUMH): Likewise.
(VPMSUMW): Likewise.
(VPMSUMD): Likewise.
(VPERMXOR_V2DI): Change from BU_CRYPTO_3 to BU_CRYPTO_3A.
(VPERMXOR_V4SI): Likewise.
(VPERMXOR_V8HI): Likewise.
(VPERMXOR_V16QI): Likewise.
(VPMSUM): Change from BU_CRYPTO_OVERLOAD_2 to
BU_CRYPTO_OVERLOAD_2A.
(VPERMXOR): Change from BU_CRYPTO_OVERLOAD3 to
BU_CRYPTO_OVERLOAD_3A.
* config/rs6000/rs6000.opt (mcrypto): Change description of
option.

[gcc/testsuite]

2015-04-23  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

* gcc.target/powerpc/crypto-builtin-2.c: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@222362 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/crypto.md
gcc/config/rs6000/rs6000-builtin.def
gcc/config/rs6000/rs6000.opt
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c [new file with mode: 0644]

index 6e27428..a9b43c2 100644 (file)
@@ -1,3 +1,27 @@
+2015-04-23  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * config/rs6000/crypto.md (crypto_vpmsum<CR_char>): Change
+       TARGET_CRYPTO to TARGET_P8_VECTOR>
+       (crypto_vpermxor_<mode>): Likewise.
+       * config/rs6000/rs6000-builtin.def (BU_CRYPTO_2A): New #define.
+       (BU_CRYPTO_3A): Likewise.
+       (BU_CRYPTO_OVERLOAD_2A): Rename from BU_CRYPTO_OVERLOAD_2.
+       (BU_CRYPTO_OVERLOAD_3A): New #define.
+       (VPMSUMB): Change from BU_CRYPTO_2 to BU_CRYPTO_2A.
+       (VPMSUMH): Likewise.
+       (VPMSUMW): Likewise.
+       (VPMSUMD): Likewise.
+       (VPERMXOR_V2DI): Change from BU_CRYPTO_3 to BU_CRYPTO_3A.
+       (VPERMXOR_V4SI): Likewise.
+       (VPERMXOR_V8HI): Likewise.
+       (VPERMXOR_V16QI): Likewise.
+       (VPMSUM): Change from BU_CRYPTO_OVERLOAD_2 to
+       BU_CRYPTO_OVERLOAD_2A.
+       (VPERMXOR): Change from BU_CRYPTO_OVERLOAD3 to
+       BU_CRYPTO_OVERLOAD_3A.
+       * config/rs6000/rs6000.opt (mcrypto): Change description of
+       option.
+
 2015-04-23  Richard Biener  <rguenther@suse.de>
 
        * passes.def: Remove copy propagation passes run directly after CCP.
index 2e4ead2..6a2cfc6 100644 (file)
 ;; along with GCC; see the file COPYING3.  If not see
 ;; <http://www.gnu.org/licenses/>.
 
+;; NOTE: Although this file contains all the instructions from
+;; section 5.11 of ISA 2.07, only those in sections 5.11.1 and
+;; 5.11.2 are in Category:Vector.Crypto.  Those are the only
+;; ones controlled by -m[no-]crypto.
+
+;; FIXME: The builtin names for the instructions in this file
+;; are likely to be deprecated in favor of other names to be
+;; agreed upon with the XL compilers and LLVM.
+
 (define_c_enum "unspec"
   [UNSPEC_VCIPHER
    UNSPEC_VNCIPHER
@@ -65,7 +74,7 @@
        (unspec:CR_mode [(match_operand:CR_mode 1 "register_operand" "v")
                         (match_operand:CR_mode 2 "register_operand" "v")]
                        UNSPEC_VPMSUM))]
-  "TARGET_CRYPTO"
+  "TARGET_P8_VECTOR"
   "vpmsum<CR_char> %0,%1,%2"
   [(set_attr "type" "crypto")])
 
@@ -76,7 +85,7 @@
                         (match_operand:CR_mode 2 "register_operand" "v")
                         (match_operand:CR_mode 3 "register_operand" "v")]
                        UNSPEC_VPERMXOR))]
-  "TARGET_CRYPTO"
+  "TARGET_P8_VECTOR"
   "vpermxor %0,%1,%2,%3"
   [(set_attr "type" "crypto")])
 
index b335497..0f384ca 100644 (file)
                     | RS6000_BTC_BINARY),                              \
                    CODE_FOR_ ## ICODE)                 /* ICODE */
 
+#define BU_CRYPTO_2A(ENUM, NAME, ATTR, ICODE)                          \
+  RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM,           /* ENUM */      \
+                   "__builtin_crypto_" NAME,           /* NAME */      \
+                   RS6000_BTM_P8_VECTOR,               /* MASK */      \
+                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
+                    | RS6000_BTC_BINARY),                              \
+                   CODE_FOR_ ## ICODE)                 /* ICODE */
+
 #define BU_CRYPTO_3(ENUM, NAME, ATTR, ICODE)                           \
   RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_crypto_" NAME,           /* NAME */      \
                     | RS6000_BTC_TERNARY),                             \
                    CODE_FOR_ ## ICODE)                 /* ICODE */
 
+#define BU_CRYPTO_3A(ENUM, NAME, ATTR, ICODE)                          \
+  RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM,           /* ENUM */      \
+                   "__builtin_crypto_" NAME,           /* NAME */      \
+                   RS6000_BTM_P8_VECTOR,               /* MASK */      \
+                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
+                    | RS6000_BTC_TERNARY),                             \
+                   CODE_FOR_ ## ICODE)                 /* ICODE */
+
 #define BU_CRYPTO_OVERLOAD_1(ENUM, NAME)                               \
   RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_crypto_" NAME,           /* NAME */      \
                     | RS6000_BTC_UNARY),                               \
                    CODE_FOR_nothing)                   /* ICODE */
 
-#define BU_CRYPTO_OVERLOAD_2(ENUM, NAME)                               \
+#define BU_CRYPTO_OVERLOAD_2A(ENUM, NAME)                              \
   RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM,           /* ENUM */      \
                    "__builtin_crypto_" NAME,           /* NAME */      \
-                   RS6000_BTM_CRYPTO,                  /* MASK */      \
+                   RS6000_BTM_P8_VECTOR,               /* MASK */      \
                    (RS6000_BTC_OVERLOADED              /* ATTR */      \
                     | RS6000_BTC_BINARY),                              \
                    CODE_FOR_nothing)                   /* ICODE */
                     | RS6000_BTC_TERNARY),                             \
                    CODE_FOR_nothing)                   /* ICODE */
 
+#define BU_CRYPTO_OVERLOAD_3A(ENUM, NAME)                              \
+  RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM,           /* ENUM */      \
+                   "__builtin_crypto_" NAME,           /* NAME */      \
+                   RS6000_BTM_P8_VECTOR,               /* MASK */      \
+                   (RS6000_BTC_OVERLOADED              /* ATTR */      \
+                    | RS6000_BTC_TERNARY),                             \
+                   CODE_FOR_nothing)                   /* ICODE */
+
 /* HTM convenience macros.  */
 #define BU_HTM_0(ENUM, NAME, ATTR, ICODE)                              \
   RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM,              /* ENUM */      \
@@ -1611,24 +1635,24 @@ BU_CRYPTO_2 (VCIPHER,           "vcipher",        CONST, crypto_vcipher)
 BU_CRYPTO_2 (VCIPHERLAST,      "vcipherlast",    CONST, crypto_vcipherlast)
 BU_CRYPTO_2 (VNCIPHER,         "vncipher",       CONST, crypto_vncipher)
 BU_CRYPTO_2 (VNCIPHERLAST,     "vncipherlast",   CONST, crypto_vncipherlast)
-BU_CRYPTO_2 (VPMSUMB,          "vpmsumb",        CONST, crypto_vpmsumb)
-BU_CRYPTO_2 (VPMSUMH,          "vpmsumh",        CONST, crypto_vpmsumh)
-BU_CRYPTO_2 (VPMSUMW,          "vpmsumw",        CONST, crypto_vpmsumw)
-BU_CRYPTO_2 (VPMSUMD,          "vpmsumd",        CONST, crypto_vpmsumd)
+BU_CRYPTO_2A (VPMSUMB,         "vpmsumb",        CONST, crypto_vpmsumb)
+BU_CRYPTO_2A (VPMSUMH,         "vpmsumh",        CONST, crypto_vpmsumh)
+BU_CRYPTO_2A (VPMSUMW,         "vpmsumw",        CONST, crypto_vpmsumw)
+BU_CRYPTO_2A (VPMSUMD,         "vpmsumd",        CONST, crypto_vpmsumd)
 
 /* 3 argument crypto functions.  */
-BU_CRYPTO_3 (VPERMXOR_V2DI,    "vpermxor_v2di",  CONST, crypto_vpermxor_v2di)
-BU_CRYPTO_3 (VPERMXOR_V4SI,    "vpermxor_v4si",  CONST, crypto_vpermxor_v4si)
-BU_CRYPTO_3 (VPERMXOR_V8HI,    "vpermxor_v8hi",  CONST, crypto_vpermxor_v8hi)
-BU_CRYPTO_3 (VPERMXOR_V16QI,   "vpermxor_v16qi", CONST, crypto_vpermxor_v16qi)
+BU_CRYPTO_3A (VPERMXOR_V2DI,   "vpermxor_v2di",  CONST, crypto_vpermxor_v2di)
+BU_CRYPTO_3A (VPERMXOR_V4SI,   "vpermxor_v4si",  CONST, crypto_vpermxor_v4si)
+BU_CRYPTO_3A (VPERMXOR_V8HI,   "vpermxor_v8hi",  CONST, crypto_vpermxor_v8hi)
+BU_CRYPTO_3A (VPERMXOR_V16QI,  "vpermxor_v16qi", CONST, crypto_vpermxor_v16qi)
 BU_CRYPTO_3 (VSHASIGMAW,       "vshasigmaw",     CONST, crypto_vshasigmaw)
 BU_CRYPTO_3 (VSHASIGMAD,       "vshasigmad",     CONST, crypto_vshasigmad)
 
 /* 2 argument crypto overloaded functions.  */
-BU_CRYPTO_OVERLOAD_2 (VPMSUM,   "vpmsum")
+BU_CRYPTO_OVERLOAD_2A (VPMSUM,  "vpmsum")
 
 /* 3 argument crypto overloaded functions.  */
-BU_CRYPTO_OVERLOAD_3 (VPERMXOR,         "vpermxor")
+BU_CRYPTO_OVERLOAD_3A (VPERMXOR,        "vpermxor")
 BU_CRYPTO_OVERLOAD_3 (VSHASIGMA, "vshasigma")
 
 \f
index 5bb2718..989422d 100644 (file)
@@ -563,7 +563,7 @@ Use/do not use vector and scalar instructions added in ISA 2.07.
 
 mcrypto
 Target Report Mask(CRYPTO) Var(rs6000_isa_flags)
-Use ISA 2.07 crypto instructions
+Use ISA 2.07 Category:Vector.Crypto instructions
 
 mdirect-move
 Target Report Mask(DIRECT_MOVE) Var(rs6000_isa_flags)
index ed44910..e4a224a 100644 (file)
@@ -1,3 +1,7 @@
+2015-04-23  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gcc.target/powerpc/crypto-builtin-2.c: New.
+
 2015-04-23  Andre Vehreschild  <vehre@gmx.de>
 
        PR fortran/60322
diff --git a/gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c b/gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c
new file mode 100644 (file)
index 0000000..6d5ecdc
--- /dev/null
@@ -0,0 +1,36 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-O2 -mcpu=power8 -mno-crypto" } */
+
+void use_builtins_d (__vector unsigned long long *p, __vector unsigned long long *q, __vector unsigned long long *r, __vector unsigned long long *s)
+{
+  p[0] = __builtin_crypto_vcipher (q[0], r[0]); /* { dg-error "Builtin function __builtin_crypto_vcipher is not supported with the current options" } */
+  p[1] = __builtin_crypto_vcipherlast (q[1], r[1]); /* { dg-error "Builtin function __builtin_crypto_vcipherlast is not supported with the current options" } */
+  p[2] = __builtin_crypto_vncipher (q[2], r[2]); /* { dg-error "Builtin function __builtin_crypto_vncipher is not supported with the current options" } */
+  p[3] = __builtin_crypto_vncipherlast (q[3], r[3]); /* { dg-error "Builtin function __builtin_crypto_vncipherlast is not supported with the current options" } */
+  p[4] = __builtin_crypto_vpermxor (q[4], r[4], s[4]);
+  p[5] = __builtin_crypto_vpmsumd (q[5], r[5]);
+  p[6] = __builtin_crypto_vshasigmad (q[6], 1, 15); /* { dg-error "Builtin function __builtin_crypto_vshasigmad is not supported with the current options" } */
+  p[7] = __builtin_crypto_vsbox (q[7]); /* { dg-error "Builtin function __builtin_crypto_vsbox is not supported with the current options" } */
+}
+
+void use_builtins_w (__vector unsigned int *p, __vector unsigned int *q, __vector unsigned int *r, __vector unsigned int *s)
+{
+  p[0] = __builtin_crypto_vpermxor (q[0], r[0], s[0]);
+  p[1] = __builtin_crypto_vpmsumw (q[1], r[1]);
+  p[2] = __builtin_crypto_vshasigmaw (q[2], 1, 15); /* { dg-error "Builtin function __builtin_crypto_vshasigmaw is not supported with the current options" } */
+}
+
+void use_builtins_h (__vector unsigned short *p, __vector unsigned short *q, __vector unsigned short *r, __vector unsigned short *s)
+{
+  p[0] = __builtin_crypto_vpermxor (q[0], r[0], s[0]);
+  p[1] = __builtin_crypto_vpmsumh (q[1], r[1]);
+}
+
+void use_builtins_b (__vector unsigned char *p, __vector unsigned char *q, __vector unsigned char *r, __vector unsigned char *s)
+{
+  p[0] = __builtin_crypto_vpermxor (q[0], r[0], s[0]);
+  p[1] = __builtin_crypto_vpmsumb (q[1], r[1]);
+}