]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/rs6000/crypto.md
Update copyright years.
[thirdparty/gcc.git] / gcc / config / rs6000 / crypto.md
CommitLineData
406bdd7d 1;; Cryptographic instructions added in ISA 2.07
7adcbafe 2;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
406bdd7d
MM
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
6895fffb
BS
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
406bdd7d
MM
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
d60a02c8
XHL
51;; Iterator for VSBOX/VCIPHER/VNCIPHER/VCIPHERLAST/VNCIPHERLAST
52(define_mode_iterator CR_vqdi [V16QI V2DI])
53
406bdd7d
MM
54;; Iterator for the other crypto functions
55(define_int_iterator CR_code [UNSPEC_VCIPHER
56 UNSPEC_VNCIPHER
57 UNSPEC_VCIPHERLAST
58 UNSPEC_VNCIPHERLAST])
59
60(define_int_attr CR_insn [(UNSPEC_VCIPHER "vcipher")
61 (UNSPEC_VNCIPHER "vncipher")
62 (UNSPEC_VCIPHERLAST "vcipherlast")
63 (UNSPEC_VNCIPHERLAST "vncipherlast")])
64
65;; 2 operand crypto instructions
d60a02c8
XHL
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")]
406bdd7d
MM
70 CR_code))]
71 "TARGET_CRYPTO"
72 "<CR_insn> %0,%1,%2"
73 [(set_attr "type" "crypto")])
74
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))]
6895fffb 80 "TARGET_P8_VECTOR"
406bdd7d
MM
81 "vpmsum<CR_char> %0,%1,%2"
82 [(set_attr "type" "crypto")])
83
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))]
6895fffb 91 "TARGET_P8_VECTOR"
406bdd7d 92 "vpermxor %0,%1,%2,%3"
10ecae74 93 [(set_attr "type" "vecperm")])
406bdd7d
MM
94
95;; 1 operand crypto instruction
d60a02c8
XHL
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")]
406bdd7d
MM
99 UNSPEC_VSBOX))]
100 "TARGET_CRYPTO"
101 "vsbox %0,%1"
102 [(set_attr "type" "crypto")])
103
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"
eda328bf 113 [(set_attr "type" "vecsimple")])