diff options
-rw-r--r-- | gcc/ChangeLog | 24 | ||||
-rw-r--r-- | gcc/config/rs6000/crypto.md | 13 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000-builtin.def | 48 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.opt | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c | 36 |
6 files changed, 112 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6e2742837c0..a9b43c2c280 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/config/rs6000/crypto.md b/gcc/config/rs6000/crypto.md index 2e4ead2444e..6a2cfc60f47 100644 --- a/gcc/config/rs6000/crypto.md +++ b/gcc/config/rs6000/crypto.md @@ -18,6 +18,15 @@ ;; 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")]) diff --git a/gcc/config/rs6000/rs6000-builtin.def b/gcc/config/rs6000/rs6000-builtin.def index b3354977ead..0f384ca2be2 100644 --- a/gcc/config/rs6000/rs6000-builtin.def +++ b/gcc/config/rs6000/rs6000-builtin.def @@ -392,6 +392,14 @@ | 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 */ \ @@ -400,6 +408,14 @@ | 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 */ \ @@ -408,10 +424,10 @@ | 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 */ @@ -424,6 +440,14 @@ | 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") diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt index 5bb2718a88f..989422d186e 100644 --- a/gcc/config/rs6000/rs6000.opt +++ b/gcc/config/rs6000/rs6000.opt @@ -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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ed449109866..e4a224a6066 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 00000000000..6d5ecdc0c12 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c @@ -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]); +} |