predicates.md (cint34_operand): Update SIGNED_34BIT_OFFSET_P call.
[official-gcc.git] / gcc / config / rs6000 / crypto.md
blobb9917b08d984574424398c2be3ee71e685260e62
1 ;; Cryptographic instructions added in ISA 2.07
2 ;; Copyright (C) 2012-2019 Free Software Foundation, Inc.
3 ;; Contributed by Michael Meissner (meissner@linux.vnet.ibm.com)
5 ;; This file is part of GCC.
7 ;; GCC is free software; you can redistribute it and/or modify it
8 ;; under the terms of the GNU General Public License as published
9 ;; by the Free Software Foundation; either version 3, or (at your
10 ;; option) any later version.
12 ;; GCC is distributed in the hope that it will be useful, but WITHOUT
13 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 ;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
15 ;; License for more details.
17 ;; You should have received a copy of the GNU General Public License
18 ;; along with GCC; see the file COPYING3.  If not see
19 ;; <http://www.gnu.org/licenses/>.
21 ;; NOTE: Although this file contains all the instructions from
22 ;; section 5.11 of ISA 2.07, only those in sections 5.11.1 and
23 ;; 5.11.2 are in Category:Vector.Crypto.  Those are the only
24 ;; ones controlled by -m[no-]crypto.
26 ;; FIXME: The builtin names for the instructions in this file
27 ;; are likely to be deprecated in favor of other names to be
28 ;; agreed upon with the XL compilers and LLVM.
30 (define_c_enum "unspec"
31   [UNSPEC_VCIPHER
32    UNSPEC_VNCIPHER
33    UNSPEC_VCIPHERLAST
34    UNSPEC_VNCIPHERLAST
35    UNSPEC_VSBOX
36    UNSPEC_VSHASIGMA
37    UNSPEC_VPERMXOR
38    UNSPEC_VPMSUM])
40 ;; Iterator for VPMSUM/VPERMXOR
41 (define_mode_iterator CR_mode [V16QI V8HI V4SI V2DI])
43 (define_mode_attr CR_char [(V16QI "b")
44                            (V8HI  "h")
45                            (V4SI  "w")
46                            (V2DI  "d")])
48 ;; Iterator for VSHASIGMAD/VSHASIGMAW
49 (define_mode_iterator CR_hash [V4SI V2DI])
51 ;; Iterator for VSBOX/VCIPHER/VNCIPHER/VCIPHERLAST/VNCIPHERLAST
52 (define_mode_iterator CR_vqdi [V16QI V2DI])
54 ;; Iterator for the other crypto functions
55 (define_int_iterator CR_code   [UNSPEC_VCIPHER
56                                 UNSPEC_VNCIPHER
57                                 UNSPEC_VCIPHERLAST
58                                 UNSPEC_VNCIPHERLAST])
60 (define_int_attr CR_insn [(UNSPEC_VCIPHER      "vcipher")
61                           (UNSPEC_VNCIPHER     "vncipher")
62                           (UNSPEC_VCIPHERLAST  "vcipherlast")
63                           (UNSPEC_VNCIPHERLAST "vncipherlast")])
65 ;; 2 operand crypto instructions
66 (define_insn "crypto_<CR_insn>_<mode>"
67   [(set (match_operand:CR_vqdi 0 "register_operand" "=v")
68         (unspec:CR_vqdi [(match_operand:CR_vqdi 1 "register_operand" "v")
69                       (match_operand:CR_vqdi 2 "register_operand" "v")]
70                      CR_code))]
71   "TARGET_CRYPTO"
72   "<CR_insn> %0,%1,%2"
73   [(set_attr "type" "crypto")])
75 (define_insn "crypto_vpmsum<CR_char>"
76   [(set (match_operand:CR_mode 0 "register_operand" "=v")
77         (unspec:CR_mode [(match_operand:CR_mode 1 "register_operand" "v")
78                          (match_operand:CR_mode 2 "register_operand" "v")]
79                         UNSPEC_VPMSUM))]
80   "TARGET_P8_VECTOR"
81   "vpmsum<CR_char> %0,%1,%2"
82   [(set_attr "type" "crypto")])
84 ;; 3 operand crypto instructions
85 (define_insn "crypto_vpermxor_<mode>"
86   [(set (match_operand:CR_mode 0 "register_operand" "=v")
87         (unspec:CR_mode [(match_operand:CR_mode 1 "register_operand" "v")
88                          (match_operand:CR_mode 2 "register_operand" "v")
89                          (match_operand:CR_mode 3 "register_operand" "v")]
90                         UNSPEC_VPERMXOR))]
91   "TARGET_P8_VECTOR"
92   "vpermxor %0,%1,%2,%3"
93   [(set_attr "type" "vecperm")])
95 ;; 1 operand crypto instruction
96 (define_insn "crypto_vsbox_<mode>"
97   [(set (match_operand:CR_vqdi 0 "register_operand" "=v")
98         (unspec:CR_vqdi [(match_operand:CR_vqdi 1 "register_operand" "v")]
99                      UNSPEC_VSBOX))]
100   "TARGET_CRYPTO"
101   "vsbox %0,%1"
102   [(set_attr "type" "crypto")])
104 ;; Hash crypto instructions
105 (define_insn "crypto_vshasigma<CR_char>"
106   [(set (match_operand:CR_hash 0 "register_operand" "=v")
107         (unspec:CR_hash [(match_operand:CR_hash 1 "register_operand" "v")
108                          (match_operand:SI 2 "const_0_to_1_operand" "n")
109                          (match_operand:SI 3 "const_0_to_15_operand" "n")]
110                         UNSPEC_VSHASIGMA))]
111   "TARGET_CRYPTO"
112   "vshasigma<CR_char> %0,%1,%2,%3"
113   [(set_attr "type" "vecsimple")])