]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/config/rs6000/crypto.md
Update copyright years.
[thirdparty/gcc.git] / gcc / config / rs6000 / crypto.md
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)
4
5 ;; This file is part of GCC.
6
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.
11
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.
16
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/>.
20
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.
25
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.
29
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])
39
40 ;; Iterator for VPMSUM/VPERMXOR
41 (define_mode_iterator CR_mode [V16QI V8HI V4SI V2DI])
42
43 (define_mode_attr CR_char [(V16QI "b")
44 (V8HI "h")
45 (V4SI "w")
46 (V2DI "d")])
47
48 ;; Iterator for VSHASIGMAD/VSHASIGMAW
49 (define_mode_iterator CR_hash [V4SI V2DI])
50
51 ;; Iterator for the other crypto functions
52 (define_int_iterator CR_code [UNSPEC_VCIPHER
53 UNSPEC_VNCIPHER
54 UNSPEC_VCIPHERLAST
55 UNSPEC_VNCIPHERLAST])
56
57 (define_int_attr CR_insn [(UNSPEC_VCIPHER "vcipher")
58 (UNSPEC_VNCIPHER "vncipher")
59 (UNSPEC_VCIPHERLAST "vcipherlast")
60 (UNSPEC_VNCIPHERLAST "vncipherlast")])
61
62 ;; 2 operand crypto instructions
63 (define_insn "crypto_<CR_insn>"
64 [(set (match_operand:V2DI 0 "register_operand" "=v")
65 (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "v")
66 (match_operand:V2DI 2 "register_operand" "v")]
67 CR_code))]
68 "TARGET_CRYPTO"
69 "<CR_insn> %0,%1,%2"
70 [(set_attr "type" "crypto")])
71
72 (define_insn "crypto_vpmsum<CR_char>"
73 [(set (match_operand:CR_mode 0 "register_operand" "=v")
74 (unspec:CR_mode [(match_operand:CR_mode 1 "register_operand" "v")
75 (match_operand:CR_mode 2 "register_operand" "v")]
76 UNSPEC_VPMSUM))]
77 "TARGET_P8_VECTOR"
78 "vpmsum<CR_char> %0,%1,%2"
79 [(set_attr "type" "crypto")])
80
81 ;; 3 operand crypto instructions
82 (define_insn "crypto_vpermxor_<mode>"
83 [(set (match_operand:CR_mode 0 "register_operand" "=v")
84 (unspec:CR_mode [(match_operand:CR_mode 1 "register_operand" "v")
85 (match_operand:CR_mode 2 "register_operand" "v")
86 (match_operand:CR_mode 3 "register_operand" "v")]
87 UNSPEC_VPERMXOR))]
88 "TARGET_P8_VECTOR"
89 "vpermxor %0,%1,%2,%3"
90 [(set_attr "type" "vecperm")])
91
92 ;; 1 operand crypto instruction
93 (define_insn "crypto_vsbox"
94 [(set (match_operand:V2DI 0 "register_operand" "=v")
95 (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "v")]
96 UNSPEC_VSBOX))]
97 "TARGET_CRYPTO"
98 "vsbox %0,%1"
99 [(set_attr "type" "crypto")])
100
101 ;; Hash crypto instructions
102 (define_insn "crypto_vshasigma<CR_char>"
103 [(set (match_operand:CR_hash 0 "register_operand" "=v")
104 (unspec:CR_hash [(match_operand:CR_hash 1 "register_operand" "v")
105 (match_operand:SI 2 "const_0_to_1_operand" "n")
106 (match_operand:SI 3 "const_0_to_15_operand" "n")]
107 UNSPEC_VSHASIGMA))]
108 "TARGET_CRYPTO"
109 "vshasigma<CR_char> %0,%1,%2,%3"
110 [(set_attr "type" "vecsimple")])