Commit | Line | Data |
---|---|---|
9bf4852d DM |
1 | #include <linux/linkage.h> |
2 | #include <asm/visasm.h> | |
3 | ||
7cff82f5 | 4 | #include "opcodes.h" |
9bf4852d DM |
5 | |
6 | #define ENCRYPT_TWO_ROUNDS(KEY_BASE, I0, I1, T0, T1) \ | |
7 | AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ | |
8 | AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ | |
9 | AES_EROUND01(KEY_BASE + 4, T0, T1, I0) \ | |
10 | AES_EROUND23(KEY_BASE + 6, T0, T1, I1) | |
11 | ||
03d168ad DM |
12 | #define ENCRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ |
13 | AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ | |
14 | AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ | |
15 | AES_EROUND01(KEY_BASE + 0, I2, I3, T2) \ | |
16 | AES_EROUND23(KEY_BASE + 2, I2, I3, T3) \ | |
17 | AES_EROUND01(KEY_BASE + 4, T0, T1, I0) \ | |
18 | AES_EROUND23(KEY_BASE + 6, T0, T1, I1) \ | |
19 | AES_EROUND01(KEY_BASE + 4, T2, T3, I2) \ | |
20 | AES_EROUND23(KEY_BASE + 6, T2, T3, I3) | |
21 | ||
9bf4852d DM |
22 | #define ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE, I0, I1, T0, T1) \ |
23 | AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ | |
24 | AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ | |
25 | AES_EROUND01_L(KEY_BASE + 4, T0, T1, I0) \ | |
26 | AES_EROUND23_L(KEY_BASE + 6, T0, T1, I1) | |
27 | ||
03d168ad DM |
28 | #define ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ |
29 | AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ | |
30 | AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ | |
31 | AES_EROUND01(KEY_BASE + 0, I2, I3, T2) \ | |
32 | AES_EROUND23(KEY_BASE + 2, I2, I3, T3) \ | |
33 | AES_EROUND01_L(KEY_BASE + 4, T0, T1, I0) \ | |
34 | AES_EROUND23_L(KEY_BASE + 6, T0, T1, I1) \ | |
35 | AES_EROUND01_L(KEY_BASE + 4, T2, T3, I2) \ | |
36 | AES_EROUND23_L(KEY_BASE + 6, T2, T3, I3) | |
37 | ||
9bf4852d DM |
38 | /* 10 rounds */ |
39 | #define ENCRYPT_128(KEY_BASE, I0, I1, T0, T1) \ | |
40 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ | |
41 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ | |
42 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ | |
43 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ | |
44 | ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 32, I0, I1, T0, T1) | |
45 | ||
03d168ad DM |
46 | #define ENCRYPT_128_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ |
47 | ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
48 | ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
49 | ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
50 | ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
51 | ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) | |
52 | ||
9bf4852d DM |
53 | /* 12 rounds */ |
54 | #define ENCRYPT_192(KEY_BASE, I0, I1, T0, T1) \ | |
55 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ | |
56 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ | |
57 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ | |
58 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ | |
59 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ | |
60 | ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 40, I0, I1, T0, T1) | |
61 | ||
03d168ad DM |
62 | #define ENCRYPT_192_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ |
63 | ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
64 | ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
65 | ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
66 | ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
67 | ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
68 | ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 40, I0, I1, I2, I3, T0, T1, T2, T3) | |
69 | ||
9bf4852d DM |
70 | /* 14 rounds */ |
71 | #define ENCRYPT_256(KEY_BASE, I0, I1, T0, T1) \ | |
72 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ | |
73 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ | |
74 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ | |
75 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ | |
76 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ | |
77 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 40, I0, I1, T0, T1) \ | |
78 | ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 48, I0, I1, T0, T1) | |
79 | ||
03d168ad DM |
80 | #define ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, TMP_BASE) \ |
81 | ENCRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, \ | |
82 | TMP_BASE + 0, TMP_BASE + 2, TMP_BASE + 4, TMP_BASE + 6) | |
83 | ||
84 | #define ENCRYPT_256_2(KEY_BASE, I0, I1, I2, I3) \ | |
85 | ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, KEY_BASE + 48) \ | |
86 | ldd [%o0 + 0xd0], %f56; \ | |
87 | ldd [%o0 + 0xd8], %f58; \ | |
88 | ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, KEY_BASE + 0) \ | |
89 | ldd [%o0 + 0xe0], %f60; \ | |
90 | ldd [%o0 + 0xe8], %f62; \ | |
91 | ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, KEY_BASE + 0) \ | |
92 | ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, KEY_BASE + 0) \ | |
93 | ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, KEY_BASE + 0) \ | |
94 | ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 40, I0, I1, I2, I3, KEY_BASE + 0) \ | |
95 | AES_EROUND01(KEY_BASE + 48, I0, I1, KEY_BASE + 0) \ | |
96 | AES_EROUND23(KEY_BASE + 50, I0, I1, KEY_BASE + 2) \ | |
97 | AES_EROUND01(KEY_BASE + 48, I2, I3, KEY_BASE + 4) \ | |
98 | AES_EROUND23(KEY_BASE + 50, I2, I3, KEY_BASE + 6) \ | |
99 | AES_EROUND01_L(KEY_BASE + 52, KEY_BASE + 0, KEY_BASE + 2, I0) \ | |
100 | AES_EROUND23_L(KEY_BASE + 54, KEY_BASE + 0, KEY_BASE + 2, I1) \ | |
101 | ldd [%o0 + 0x10], %f8; \ | |
102 | ldd [%o0 + 0x18], %f10; \ | |
103 | AES_EROUND01_L(KEY_BASE + 52, KEY_BASE + 4, KEY_BASE + 6, I2) \ | |
104 | AES_EROUND23_L(KEY_BASE + 54, KEY_BASE + 4, KEY_BASE + 6, I3) \ | |
105 | ldd [%o0 + 0x20], %f12; \ | |
106 | ldd [%o0 + 0x28], %f14; | |
107 | ||
0bdcaf74 DM |
108 | #define DECRYPT_TWO_ROUNDS(KEY_BASE, I0, I1, T0, T1) \ |
109 | AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ | |
110 | AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ | |
111 | AES_DROUND23(KEY_BASE + 4, T0, T1, I1) \ | |
112 | AES_DROUND01(KEY_BASE + 6, T0, T1, I0) | |
9bf4852d | 113 | |
30101315 DM |
114 | #define DECRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ |
115 | AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ | |
116 | AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ | |
117 | AES_DROUND23(KEY_BASE + 0, I2, I3, T3) \ | |
118 | AES_DROUND01(KEY_BASE + 2, I2, I3, T2) \ | |
119 | AES_DROUND23(KEY_BASE + 4, T0, T1, I1) \ | |
120 | AES_DROUND01(KEY_BASE + 6, T0, T1, I0) \ | |
121 | AES_DROUND23(KEY_BASE + 4, T2, T3, I3) \ | |
122 | AES_DROUND01(KEY_BASE + 6, T2, T3, I2) | |
123 | ||
0bdcaf74 DM |
124 | #define DECRYPT_TWO_ROUNDS_LAST(KEY_BASE, I0, I1, T0, T1) \ |
125 | AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ | |
126 | AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ | |
127 | AES_DROUND23_L(KEY_BASE + 4, T0, T1, I1) \ | |
128 | AES_DROUND01_L(KEY_BASE + 6, T0, T1, I0) | |
9bf4852d | 129 | |
30101315 DM |
130 | #define DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ |
131 | AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ | |
132 | AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ | |
133 | AES_DROUND23(KEY_BASE + 0, I2, I3, T3) \ | |
134 | AES_DROUND01(KEY_BASE + 2, I2, I3, T2) \ | |
135 | AES_DROUND23_L(KEY_BASE + 4, T0, T1, I1) \ | |
136 | AES_DROUND01_L(KEY_BASE + 6, T0, T1, I0) \ | |
137 | AES_DROUND23_L(KEY_BASE + 4, T2, T3, I3) \ | |
138 | AES_DROUND01_L(KEY_BASE + 6, T2, T3, I2) | |
139 | ||
9bf4852d | 140 | /* 10 rounds */ |
0bdcaf74 DM |
141 | #define DECRYPT_128(KEY_BASE, I0, I1, T0, T1) \ |
142 | DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ | |
143 | DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ | |
144 | DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ | |
145 | DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ | |
146 | DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 32, I0, I1, T0, T1) | |
9bf4852d | 147 | |
30101315 DM |
148 | #define DECRYPT_128_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ |
149 | DECRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
150 | DECRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
151 | DECRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
152 | DECRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
153 | DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) | |
154 | ||
9bf4852d | 155 | /* 12 rounds */ |
0bdcaf74 DM |
156 | #define DECRYPT_192(KEY_BASE, I0, I1, T0, T1) \ |
157 | DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ | |
158 | DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ | |
159 | DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ | |
160 | DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ | |
161 | DECRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ | |
162 | DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 40, I0, I1, T0, T1) | |
9bf4852d | 163 | |
30101315 DM |
164 | #define DECRYPT_192_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ |
165 | DECRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
166 | DECRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
167 | DECRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
168 | DECRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
169 | DECRYPT_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) \ | |
170 | DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 40, I0, I1, I2, I3, T0, T1, T2, T3) | |
171 | ||
9bf4852d | 172 | /* 14 rounds */ |
0bdcaf74 DM |
173 | #define DECRYPT_256(KEY_BASE, I0, I1, T0, T1) \ |
174 | DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ | |
175 | DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ | |
176 | DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ | |
177 | DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ | |
178 | DECRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ | |
179 | DECRYPT_TWO_ROUNDS(KEY_BASE + 40, I0, I1, T0, T1) \ | |
180 | DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 48, I0, I1, T0, T1) | |
181 | ||
30101315 DM |
182 | #define DECRYPT_256_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, TMP_BASE) \ |
183 | DECRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, \ | |
184 | TMP_BASE + 0, TMP_BASE + 2, TMP_BASE + 4, TMP_BASE + 6) | |
185 | ||
186 | #define DECRYPT_256_2(KEY_BASE, I0, I1, I2, I3) \ | |
187 | DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, KEY_BASE + 48) \ | |
188 | ldd [%o0 + 0x18], %f56; \ | |
189 | ldd [%o0 + 0x10], %f58; \ | |
190 | DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, KEY_BASE + 0) \ | |
699871bc DM |
191 | ldd [%o0 + 0x08], %f60; \ |
192 | ldd [%o0 + 0x00], %f62; \ | |
30101315 DM |
193 | DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, KEY_BASE + 0) \ |
194 | DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, KEY_BASE + 0) \ | |
195 | DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, KEY_BASE + 0) \ | |
196 | DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 40, I0, I1, I2, I3, KEY_BASE + 0) \ | |
197 | AES_DROUND23(KEY_BASE + 48, I0, I1, KEY_BASE + 2) \ | |
198 | AES_DROUND01(KEY_BASE + 50, I0, I1, KEY_BASE + 0) \ | |
199 | AES_DROUND23(KEY_BASE + 48, I2, I3, KEY_BASE + 6) \ | |
200 | AES_DROUND01(KEY_BASE + 50, I2, I3, KEY_BASE + 4) \ | |
201 | AES_DROUND23_L(KEY_BASE + 52, KEY_BASE + 0, KEY_BASE + 2, I1) \ | |
202 | AES_DROUND01_L(KEY_BASE + 54, KEY_BASE + 0, KEY_BASE + 2, I0) \ | |
203 | ldd [%o0 + 0xd8], %f8; \ | |
204 | ldd [%o0 + 0xd0], %f10; \ | |
205 | AES_DROUND23_L(KEY_BASE + 52, KEY_BASE + 4, KEY_BASE + 6, I3) \ | |
699871bc | 206 | AES_DROUND01_L(KEY_BASE + 54, KEY_BASE + 4, KEY_BASE + 6, I2) \ |
30101315 DM |
207 | ldd [%o0 + 0xc8], %f12; \ |
208 | ldd [%o0 + 0xc0], %f14; | |
209 | ||
0bdcaf74 | 210 | .align 32 |
9bf4852d DM |
211 | ENTRY(aes_sparc64_key_expand) |
212 | /* %o0=input_key, %o1=output_key, %o2=key_len */ | |
213 | VISEntry | |
214 | ld [%o0 + 0x00], %f0 | |
215 | ld [%o0 + 0x04], %f1 | |
216 | ld [%o0 + 0x08], %f2 | |
217 | ld [%o0 + 0x0c], %f3 | |
218 | ||
219 | std %f0, [%o1 + 0x00] | |
220 | std %f2, [%o1 + 0x08] | |
221 | add %o1, 0x10, %o1 | |
222 | ||
223 | cmp %o2, 24 | |
224 | bl 2f | |
225 | nop | |
226 | ||
227 | be 1f | |
228 | nop | |
229 | ||
230 | /* 256-bit key expansion */ | |
231 | ld [%o0 + 0x10], %f4 | |
232 | ld [%o0 + 0x14], %f5 | |
233 | ld [%o0 + 0x18], %f6 | |
234 | ld [%o0 + 0x1c], %f7 | |
235 | ||
236 | std %f4, [%o1 + 0x00] | |
237 | std %f6, [%o1 + 0x08] | |
238 | add %o1, 0x10, %o1 | |
239 | ||
240 | AES_KEXPAND1(0, 6, 0x0, 8) | |
241 | AES_KEXPAND2(2, 8, 10) | |
242 | AES_KEXPAND0(4, 10, 12) | |
243 | AES_KEXPAND2(6, 12, 14) | |
244 | AES_KEXPAND1(8, 14, 0x1, 16) | |
245 | AES_KEXPAND2(10, 16, 18) | |
246 | AES_KEXPAND0(12, 18, 20) | |
247 | AES_KEXPAND2(14, 20, 22) | |
248 | AES_KEXPAND1(16, 22, 0x2, 24) | |
249 | AES_KEXPAND2(18, 24, 26) | |
250 | AES_KEXPAND0(20, 26, 28) | |
251 | AES_KEXPAND2(22, 28, 30) | |
252 | AES_KEXPAND1(24, 30, 0x3, 32) | |
253 | AES_KEXPAND2(26, 32, 34) | |
254 | AES_KEXPAND0(28, 34, 36) | |
255 | AES_KEXPAND2(30, 36, 38) | |
256 | AES_KEXPAND1(32, 38, 0x4, 40) | |
257 | AES_KEXPAND2(34, 40, 42) | |
258 | AES_KEXPAND0(36, 42, 44) | |
259 | AES_KEXPAND2(38, 44, 46) | |
260 | AES_KEXPAND1(40, 46, 0x5, 48) | |
261 | AES_KEXPAND2(42, 48, 50) | |
262 | AES_KEXPAND0(44, 50, 52) | |
263 | AES_KEXPAND2(46, 52, 54) | |
264 | AES_KEXPAND1(48, 54, 0x6, 56) | |
265 | AES_KEXPAND2(50, 56, 58) | |
266 | ||
267 | std %f8, [%o1 + 0x00] | |
268 | std %f10, [%o1 + 0x08] | |
269 | std %f12, [%o1 + 0x10] | |
270 | std %f14, [%o1 + 0x18] | |
271 | std %f16, [%o1 + 0x20] | |
272 | std %f18, [%o1 + 0x28] | |
273 | std %f20, [%o1 + 0x30] | |
274 | std %f22, [%o1 + 0x38] | |
275 | std %f24, [%o1 + 0x40] | |
276 | std %f26, [%o1 + 0x48] | |
277 | std %f28, [%o1 + 0x50] | |
278 | std %f30, [%o1 + 0x58] | |
279 | std %f32, [%o1 + 0x60] | |
280 | std %f34, [%o1 + 0x68] | |
281 | std %f36, [%o1 + 0x70] | |
282 | std %f38, [%o1 + 0x78] | |
283 | std %f40, [%o1 + 0x80] | |
284 | std %f42, [%o1 + 0x88] | |
285 | std %f44, [%o1 + 0x90] | |
286 | std %f46, [%o1 + 0x98] | |
287 | std %f48, [%o1 + 0xa0] | |
288 | std %f50, [%o1 + 0xa8] | |
289 | std %f52, [%o1 + 0xb0] | |
290 | std %f54, [%o1 + 0xb8] | |
291 | std %f56, [%o1 + 0xc0] | |
292 | ba,pt %xcc, 80f | |
293 | std %f58, [%o1 + 0xc8] | |
294 | ||
295 | 1: | |
296 | /* 192-bit key expansion */ | |
297 | ld [%o0 + 0x10], %f4 | |
298 | ld [%o0 + 0x14], %f5 | |
299 | ||
300 | std %f4, [%o1 + 0x00] | |
301 | add %o1, 0x08, %o1 | |
302 | ||
303 | AES_KEXPAND1(0, 4, 0x0, 6) | |
304 | AES_KEXPAND2(2, 6, 8) | |
305 | AES_KEXPAND2(4, 8, 10) | |
306 | AES_KEXPAND1(6, 10, 0x1, 12) | |
307 | AES_KEXPAND2(8, 12, 14) | |
308 | AES_KEXPAND2(10, 14, 16) | |
309 | AES_KEXPAND1(12, 16, 0x2, 18) | |
310 | AES_KEXPAND2(14, 18, 20) | |
311 | AES_KEXPAND2(16, 20, 22) | |
312 | AES_KEXPAND1(18, 22, 0x3, 24) | |
313 | AES_KEXPAND2(20, 24, 26) | |
314 | AES_KEXPAND2(22, 26, 28) | |
315 | AES_KEXPAND1(24, 28, 0x4, 30) | |
316 | AES_KEXPAND2(26, 30, 32) | |
317 | AES_KEXPAND2(28, 32, 34) | |
318 | AES_KEXPAND1(30, 34, 0x5, 36) | |
319 | AES_KEXPAND2(32, 36, 38) | |
320 | AES_KEXPAND2(34, 38, 40) | |
321 | AES_KEXPAND1(36, 40, 0x6, 42) | |
322 | AES_KEXPAND2(38, 42, 44) | |
323 | AES_KEXPAND2(40, 44, 46) | |
324 | AES_KEXPAND1(42, 46, 0x7, 48) | |
325 | AES_KEXPAND2(44, 48, 50) | |
326 | ||
327 | std %f6, [%o1 + 0x00] | |
328 | std %f8, [%o1 + 0x08] | |
329 | std %f10, [%o1 + 0x10] | |
330 | std %f12, [%o1 + 0x18] | |
331 | std %f14, [%o1 + 0x20] | |
332 | std %f16, [%o1 + 0x28] | |
333 | std %f18, [%o1 + 0x30] | |
334 | std %f20, [%o1 + 0x38] | |
335 | std %f22, [%o1 + 0x40] | |
336 | std %f24, [%o1 + 0x48] | |
337 | std %f26, [%o1 + 0x50] | |
338 | std %f28, [%o1 + 0x58] | |
339 | std %f30, [%o1 + 0x60] | |
340 | std %f32, [%o1 + 0x68] | |
341 | std %f34, [%o1 + 0x70] | |
342 | std %f36, [%o1 + 0x78] | |
343 | std %f38, [%o1 + 0x80] | |
344 | std %f40, [%o1 + 0x88] | |
345 | std %f42, [%o1 + 0x90] | |
346 | std %f44, [%o1 + 0x98] | |
347 | std %f46, [%o1 + 0xa0] | |
348 | std %f48, [%o1 + 0xa8] | |
349 | ba,pt %xcc, 80f | |
350 | std %f50, [%o1 + 0xb0] | |
351 | ||
352 | 2: | |
353 | /* 128-bit key expansion */ | |
354 | AES_KEXPAND1(0, 2, 0x0, 4) | |
355 | AES_KEXPAND2(2, 4, 6) | |
356 | AES_KEXPAND1(4, 6, 0x1, 8) | |
357 | AES_KEXPAND2(6, 8, 10) | |
358 | AES_KEXPAND1(8, 10, 0x2, 12) | |
359 | AES_KEXPAND2(10, 12, 14) | |
360 | AES_KEXPAND1(12, 14, 0x3, 16) | |
361 | AES_KEXPAND2(14, 16, 18) | |
362 | AES_KEXPAND1(16, 18, 0x4, 20) | |
363 | AES_KEXPAND2(18, 20, 22) | |
364 | AES_KEXPAND1(20, 22, 0x5, 24) | |
365 | AES_KEXPAND2(22, 24, 26) | |
366 | AES_KEXPAND1(24, 26, 0x6, 28) | |
367 | AES_KEXPAND2(26, 28, 30) | |
368 | AES_KEXPAND1(28, 30, 0x7, 32) | |
369 | AES_KEXPAND2(30, 32, 34) | |
370 | AES_KEXPAND1(32, 34, 0x8, 36) | |
371 | AES_KEXPAND2(34, 36, 38) | |
372 | AES_KEXPAND1(36, 38, 0x9, 40) | |
373 | AES_KEXPAND2(38, 40, 42) | |
374 | ||
375 | std %f4, [%o1 + 0x00] | |
376 | std %f6, [%o1 + 0x08] | |
377 | std %f8, [%o1 + 0x10] | |
378 | std %f10, [%o1 + 0x18] | |
379 | std %f12, [%o1 + 0x20] | |
380 | std %f14, [%o1 + 0x28] | |
381 | std %f16, [%o1 + 0x30] | |
382 | std %f18, [%o1 + 0x38] | |
383 | std %f20, [%o1 + 0x40] | |
384 | std %f22, [%o1 + 0x48] | |
385 | std %f24, [%o1 + 0x50] | |
386 | std %f26, [%o1 + 0x58] | |
387 | std %f28, [%o1 + 0x60] | |
388 | std %f30, [%o1 + 0x68] | |
389 | std %f32, [%o1 + 0x70] | |
390 | std %f34, [%o1 + 0x78] | |
391 | std %f36, [%o1 + 0x80] | |
392 | std %f38, [%o1 + 0x88] | |
393 | std %f40, [%o1 + 0x90] | |
394 | std %f42, [%o1 + 0x98] | |
395 | 80: | |
396 | retl | |
397 | VISExit | |
398 | ENDPROC(aes_sparc64_key_expand) | |
399 | ||
0bdcaf74 DM |
400 | .align 32 |
401 | ENTRY(aes_sparc64_encrypt_128) | |
402 | /* %o0=key, %o1=input, %o2=output */ | |
9bf4852d DM |
403 | VISEntry |
404 | ld [%o1 + 0x00], %f4 | |
405 | ld [%o1 + 0x04], %f5 | |
406 | ld [%o1 + 0x08], %f6 | |
407 | ld [%o1 + 0x0c], %f7 | |
9bf4852d DM |
408 | ldd [%o0 + 0x00], %f8 |
409 | ldd [%o0 + 0x08], %f10 | |
0bdcaf74 DM |
410 | ldd [%o0 + 0x10], %f12 |
411 | ldd [%o0 + 0x18], %f14 | |
412 | ldd [%o0 + 0x20], %f16 | |
413 | ldd [%o0 + 0x28], %f18 | |
414 | ldd [%o0 + 0x30], %f20 | |
415 | ldd [%o0 + 0x38], %f22 | |
416 | ldd [%o0 + 0x40], %f24 | |
417 | ldd [%o0 + 0x48], %f26 | |
418 | ldd [%o0 + 0x50], %f28 | |
419 | ldd [%o0 + 0x58], %f30 | |
420 | ldd [%o0 + 0x60], %f32 | |
421 | ldd [%o0 + 0x68], %f34 | |
422 | ldd [%o0 + 0x70], %f36 | |
423 | ldd [%o0 + 0x78], %f38 | |
424 | ldd [%o0 + 0x80], %f40 | |
425 | ldd [%o0 + 0x88], %f42 | |
426 | ldd [%o0 + 0x90], %f44 | |
427 | ldd [%o0 + 0x98], %f46 | |
428 | ldd [%o0 + 0xa0], %f48 | |
429 | ldd [%o0 + 0xa8], %f50 | |
9bf4852d | 430 | fxor %f8, %f4, %f4 |
0bdcaf74 DM |
431 | fxor %f10, %f6, %f6 |
432 | ENCRYPT_128(12, 4, 6, 0, 2) | |
433 | st %f4, [%o2 + 0x00] | |
434 | st %f5, [%o2 + 0x04] | |
435 | st %f6, [%o2 + 0x08] | |
436 | st %f7, [%o2 + 0x0c] | |
437 | retl | |
438 | VISExit | |
439 | ENDPROC(aes_sparc64_encrypt_128) | |
9bf4852d | 440 | |
0bdcaf74 DM |
441 | .align 32 |
442 | ENTRY(aes_sparc64_encrypt_192) | |
443 | /* %o0=key, %o1=input, %o2=output */ | |
444 | VISEntry | |
445 | ld [%o1 + 0x00], %f4 | |
446 | ld [%o1 + 0x04], %f5 | |
447 | ld [%o1 + 0x08], %f6 | |
448 | ld [%o1 + 0x0c], %f7 | |
9bf4852d | 449 | |
0bdcaf74 DM |
450 | ldd [%o0 + 0x00], %f8 |
451 | ldd [%o0 + 0x08], %f10 | |
9bf4852d | 452 | |
0bdcaf74 DM |
453 | fxor %f8, %f4, %f4 |
454 | fxor %f10, %f6, %f6 | |
9bf4852d DM |
455 | |
456 | ldd [%o0 + 0x10], %f8 | |
9bf4852d DM |
457 | ldd [%o0 + 0x18], %f10 |
458 | ldd [%o0 + 0x20], %f12 | |
459 | ldd [%o0 + 0x28], %f14 | |
460 | add %o0, 0x20, %o0 | |
461 | ||
462 | ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2) | |
463 | ||
9bf4852d DM |
464 | ldd [%o0 + 0x10], %f12 |
465 | ldd [%o0 + 0x18], %f14 | |
466 | ldd [%o0 + 0x20], %f16 | |
467 | ldd [%o0 + 0x28], %f18 | |
468 | ldd [%o0 + 0x30], %f20 | |
469 | ldd [%o0 + 0x38], %f22 | |
470 | ldd [%o0 + 0x40], %f24 | |
471 | ldd [%o0 + 0x48], %f26 | |
472 | ldd [%o0 + 0x50], %f28 | |
473 | ldd [%o0 + 0x58], %f30 | |
474 | ldd [%o0 + 0x60], %f32 | |
475 | ldd [%o0 + 0x68], %f34 | |
476 | ldd [%o0 + 0x70], %f36 | |
477 | ldd [%o0 + 0x78], %f38 | |
478 | ldd [%o0 + 0x80], %f40 | |
479 | ldd [%o0 + 0x88], %f42 | |
480 | ldd [%o0 + 0x90], %f44 | |
481 | ldd [%o0 + 0x98], %f46 | |
482 | ldd [%o0 + 0xa0], %f48 | |
483 | ldd [%o0 + 0xa8], %f50 | |
484 | ||
485 | ||
486 | ENCRYPT_128(12, 4, 6, 0, 2) | |
487 | ||
488 | st %f4, [%o2 + 0x00] | |
489 | st %f5, [%o2 + 0x04] | |
490 | st %f6, [%o2 + 0x08] | |
491 | st %f7, [%o2 + 0x0c] | |
492 | ||
493 | retl | |
494 | VISExit | |
0bdcaf74 | 495 | ENDPROC(aes_sparc64_encrypt_192) |
9bf4852d | 496 | |
0bdcaf74 DM |
497 | .align 32 |
498 | ENTRY(aes_sparc64_encrypt_256) | |
499 | /* %o0=key, %o1=input, %o2=output */ | |
9bf4852d DM |
500 | VISEntry |
501 | ld [%o1 + 0x00], %f4 | |
9bf4852d DM |
502 | ld [%o1 + 0x04], %f5 |
503 | ld [%o1 + 0x08], %f6 | |
504 | ld [%o1 + 0x0c], %f7 | |
9bf4852d | 505 | |
0bdcaf74 DM |
506 | ldd [%o0 + 0x00], %f8 |
507 | ldd [%o0 + 0x08], %f10 | |
9bf4852d | 508 | |
0bdcaf74 DM |
509 | fxor %f8, %f4, %f4 |
510 | fxor %f10, %f6, %f6 | |
9bf4852d | 511 | |
0bdcaf74 | 512 | ldd [%o0 + 0x10], %f8 |
9bf4852d | 513 | |
0bdcaf74 DM |
514 | ldd [%o0 + 0x18], %f10 |
515 | ldd [%o0 + 0x20], %f12 | |
516 | ldd [%o0 + 0x28], %f14 | |
517 | add %o0, 0x20, %o0 | |
9bf4852d | 518 | |
0bdcaf74 | 519 | ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2) |
9bf4852d | 520 | |
0bdcaf74 DM |
521 | ldd [%o0 + 0x10], %f8 |
522 | ||
523 | ldd [%o0 + 0x18], %f10 | |
524 | ldd [%o0 + 0x20], %f12 | |
525 | ldd [%o0 + 0x28], %f14 | |
526 | add %o0, 0x20, %o0 | |
527 | ||
528 | ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2) | |
529 | ||
530 | ldd [%o0 + 0x10], %f12 | |
531 | ldd [%o0 + 0x18], %f14 | |
532 | ldd [%o0 + 0x20], %f16 | |
533 | ldd [%o0 + 0x28], %f18 | |
534 | ldd [%o0 + 0x30], %f20 | |
535 | ldd [%o0 + 0x38], %f22 | |
536 | ldd [%o0 + 0x40], %f24 | |
537 | ldd [%o0 + 0x48], %f26 | |
538 | ldd [%o0 + 0x50], %f28 | |
539 | ldd [%o0 + 0x58], %f30 | |
540 | ldd [%o0 + 0x60], %f32 | |
541 | ldd [%o0 + 0x68], %f34 | |
542 | ldd [%o0 + 0x70], %f36 | |
543 | ldd [%o0 + 0x78], %f38 | |
544 | ldd [%o0 + 0x80], %f40 | |
545 | ldd [%o0 + 0x88], %f42 | |
546 | ldd [%o0 + 0x90], %f44 | |
547 | ldd [%o0 + 0x98], %f46 | |
548 | ldd [%o0 + 0xa0], %f48 | |
549 | ldd [%o0 + 0xa8], %f50 | |
550 | ||
551 | ENCRYPT_128(12, 4, 6, 0, 2) | |
9bf4852d DM |
552 | |
553 | st %f4, [%o2 + 0x00] | |
554 | st %f5, [%o2 + 0x04] | |
555 | st %f6, [%o2 + 0x08] | |
556 | st %f7, [%o2 + 0x0c] | |
557 | ||
558 | retl | |
559 | VISExit | |
0bdcaf74 | 560 | ENDPROC(aes_sparc64_encrypt_256) |
9bf4852d | 561 | |
0bdcaf74 DM |
562 | .align 32 |
563 | ENTRY(aes_sparc64_decrypt_128) | |
564 | /* %o0=key, %o1=input, %o2=output */ | |
565 | VISEntry | |
566 | ld [%o1 + 0x00], %f4 | |
567 | ld [%o1 + 0x04], %f5 | |
568 | ld [%o1 + 0x08], %f6 | |
569 | ld [%o1 + 0x0c], %f7 | |
570 | ldd [%o0 + 0xa0], %f8 | |
571 | ldd [%o0 + 0xa8], %f10 | |
572 | ldd [%o0 + 0x98], %f12 | |
573 | ldd [%o0 + 0x90], %f14 | |
574 | ldd [%o0 + 0x88], %f16 | |
575 | ldd [%o0 + 0x80], %f18 | |
576 | ldd [%o0 + 0x78], %f20 | |
577 | ldd [%o0 + 0x70], %f22 | |
578 | ldd [%o0 + 0x68], %f24 | |
579 | ldd [%o0 + 0x60], %f26 | |
580 | ldd [%o0 + 0x58], %f28 | |
581 | ldd [%o0 + 0x50], %f30 | |
582 | ldd [%o0 + 0x48], %f32 | |
583 | ldd [%o0 + 0x40], %f34 | |
584 | ldd [%o0 + 0x38], %f36 | |
585 | ldd [%o0 + 0x30], %f38 | |
586 | ldd [%o0 + 0x28], %f40 | |
587 | ldd [%o0 + 0x20], %f42 | |
588 | ldd [%o0 + 0x18], %f44 | |
589 | ldd [%o0 + 0x10], %f46 | |
590 | ldd [%o0 + 0x08], %f48 | |
591 | ldd [%o0 + 0x00], %f50 | |
592 | fxor %f8, %f4, %f4 | |
593 | fxor %f10, %f6, %f6 | |
594 | DECRYPT_128(12, 4, 6, 0, 2) | |
595 | st %f4, [%o2 + 0x00] | |
596 | st %f5, [%o2 + 0x04] | |
597 | st %f6, [%o2 + 0x08] | |
598 | st %f7, [%o2 + 0x0c] | |
599 | retl | |
600 | VISExit | |
601 | ENDPROC(aes_sparc64_decrypt_128) | |
602 | ||
603 | .align 32 | |
604 | ENTRY(aes_sparc64_decrypt_192) | |
605 | /* %o0=key, %o1=input, %o2=output */ | |
606 | VISEntry | |
607 | ld [%o1 + 0x00], %f4 | |
608 | ld [%o1 + 0x04], %f5 | |
609 | ld [%o1 + 0x08], %f6 | |
610 | ld [%o1 + 0x0c], %f7 | |
611 | ldd [%o0 + 0xc0], %f8 | |
612 | ldd [%o0 + 0xc8], %f10 | |
613 | ldd [%o0 + 0xb8], %f12 | |
614 | ldd [%o0 + 0xb0], %f14 | |
615 | ldd [%o0 + 0xa8], %f16 | |
616 | ldd [%o0 + 0xa0], %f18 | |
617 | fxor %f8, %f4, %f4 | |
618 | fxor %f10, %f6, %f6 | |
619 | ldd [%o0 + 0x98], %f20 | |
620 | ldd [%o0 + 0x90], %f22 | |
621 | ldd [%o0 + 0x88], %f24 | |
622 | ldd [%o0 + 0x80], %f26 | |
623 | DECRYPT_TWO_ROUNDS(12, 4, 6, 0, 2) | |
624 | ldd [%o0 + 0x78], %f28 | |
625 | ldd [%o0 + 0x70], %f30 | |
626 | ldd [%o0 + 0x68], %f32 | |
627 | ldd [%o0 + 0x60], %f34 | |
628 | ldd [%o0 + 0x58], %f36 | |
629 | ldd [%o0 + 0x50], %f38 | |
630 | ldd [%o0 + 0x48], %f40 | |
631 | ldd [%o0 + 0x40], %f42 | |
632 | ldd [%o0 + 0x38], %f44 | |
633 | ldd [%o0 + 0x30], %f46 | |
634 | ldd [%o0 + 0x28], %f48 | |
635 | ldd [%o0 + 0x20], %f50 | |
636 | ldd [%o0 + 0x18], %f52 | |
637 | ldd [%o0 + 0x10], %f54 | |
638 | ldd [%o0 + 0x08], %f56 | |
639 | ldd [%o0 + 0x00], %f58 | |
640 | DECRYPT_128(20, 4, 6, 0, 2) | |
641 | st %f4, [%o2 + 0x00] | |
642 | st %f5, [%o2 + 0x04] | |
643 | st %f6, [%o2 + 0x08] | |
644 | st %f7, [%o2 + 0x0c] | |
645 | retl | |
646 | VISExit | |
647 | ENDPROC(aes_sparc64_decrypt_192) | |
648 | ||
649 | .align 32 | |
650 | ENTRY(aes_sparc64_decrypt_256) | |
651 | /* %o0=key, %o1=input, %o2=output */ | |
652 | VISEntry | |
653 | ld [%o1 + 0x00], %f4 | |
654 | ld [%o1 + 0x04], %f5 | |
655 | ld [%o1 + 0x08], %f6 | |
656 | ld [%o1 + 0x0c], %f7 | |
657 | ldd [%o0 + 0xe0], %f8 | |
658 | ldd [%o0 + 0xe8], %f10 | |
659 | ldd [%o0 + 0xd8], %f12 | |
660 | ldd [%o0 + 0xd0], %f14 | |
661 | ldd [%o0 + 0xc8], %f16 | |
662 | fxor %f8, %f4, %f4 | |
663 | ldd [%o0 + 0xc0], %f18 | |
664 | fxor %f10, %f6, %f6 | |
665 | ldd [%o0 + 0xb8], %f20 | |
666 | AES_DROUND23(12, 4, 6, 2) | |
667 | ldd [%o0 + 0xb0], %f22 | |
668 | AES_DROUND01(14, 4, 6, 0) | |
669 | ldd [%o0 + 0xa8], %f24 | |
670 | AES_DROUND23(16, 0, 2, 6) | |
671 | ldd [%o0 + 0xa0], %f26 | |
672 | AES_DROUND01(18, 0, 2, 4) | |
673 | ldd [%o0 + 0x98], %f12 | |
674 | AES_DROUND23(20, 4, 6, 2) | |
675 | ldd [%o0 + 0x90], %f14 | |
676 | AES_DROUND01(22, 4, 6, 0) | |
677 | ldd [%o0 + 0x88], %f16 | |
678 | AES_DROUND23(24, 0, 2, 6) | |
679 | ldd [%o0 + 0x80], %f18 | |
680 | AES_DROUND01(26, 0, 2, 4) | |
681 | ldd [%o0 + 0x78], %f20 | |
682 | AES_DROUND23(12, 4, 6, 2) | |
683 | ldd [%o0 + 0x70], %f22 | |
684 | AES_DROUND01(14, 4, 6, 0) | |
685 | ldd [%o0 + 0x68], %f24 | |
686 | AES_DROUND23(16, 0, 2, 6) | |
687 | ldd [%o0 + 0x60], %f26 | |
688 | AES_DROUND01(18, 0, 2, 4) | |
689 | ldd [%o0 + 0x58], %f28 | |
690 | AES_DROUND23(20, 4, 6, 2) | |
691 | ldd [%o0 + 0x50], %f30 | |
692 | AES_DROUND01(22, 4, 6, 0) | |
693 | ldd [%o0 + 0x48], %f32 | |
694 | AES_DROUND23(24, 0, 2, 6) | |
695 | ldd [%o0 + 0x40], %f34 | |
696 | AES_DROUND01(26, 0, 2, 4) | |
697 | ldd [%o0 + 0x38], %f36 | |
698 | AES_DROUND23(28, 4, 6, 2) | |
699 | ldd [%o0 + 0x30], %f38 | |
700 | AES_DROUND01(30, 4, 6, 0) | |
701 | ldd [%o0 + 0x28], %f40 | |
702 | AES_DROUND23(32, 0, 2, 6) | |
703 | ldd [%o0 + 0x20], %f42 | |
704 | AES_DROUND01(34, 0, 2, 4) | |
705 | ldd [%o0 + 0x18], %f44 | |
706 | AES_DROUND23(36, 4, 6, 2) | |
707 | ldd [%o0 + 0x10], %f46 | |
708 | AES_DROUND01(38, 4, 6, 0) | |
709 | ldd [%o0 + 0x08], %f48 | |
710 | AES_DROUND23(40, 0, 2, 6) | |
711 | ldd [%o0 + 0x00], %f50 | |
712 | AES_DROUND01(42, 0, 2, 4) | |
713 | AES_DROUND23(44, 4, 6, 2) | |
714 | AES_DROUND01(46, 4, 6, 0) | |
715 | AES_DROUND23_L(48, 0, 2, 6) | |
716 | AES_DROUND01_L(50, 0, 2, 4) | |
717 | st %f4, [%o2 + 0x00] | |
718 | st %f5, [%o2 + 0x04] | |
719 | st %f6, [%o2 + 0x08] | |
720 | st %f7, [%o2 + 0x0c] | |
721 | retl | |
722 | VISExit | |
723 | ENDPROC(aes_sparc64_decrypt_256) | |
724 | ||
725 | .align 32 | |
726 | ENTRY(aes_sparc64_load_encrypt_keys_128) | |
9bf4852d | 727 | /* %o0=key */ |
0bdcaf74 DM |
728 | VISEntry |
729 | ldd [%o0 + 0x10], %f8 | |
730 | ldd [%o0 + 0x18], %f10 | |
731 | ldd [%o0 + 0x20], %f12 | |
732 | ldd [%o0 + 0x28], %f14 | |
733 | ldd [%o0 + 0x30], %f16 | |
734 | ldd [%o0 + 0x38], %f18 | |
735 | ldd [%o0 + 0x40], %f20 | |
736 | ldd [%o0 + 0x48], %f22 | |
737 | ldd [%o0 + 0x50], %f24 | |
738 | ldd [%o0 + 0x58], %f26 | |
739 | ldd [%o0 + 0x60], %f28 | |
740 | ldd [%o0 + 0x68], %f30 | |
741 | ldd [%o0 + 0x70], %f32 | |
742 | ldd [%o0 + 0x78], %f34 | |
743 | ldd [%o0 + 0x80], %f36 | |
744 | ldd [%o0 + 0x88], %f38 | |
745 | ldd [%o0 + 0x90], %f40 | |
746 | ldd [%o0 + 0x98], %f42 | |
747 | ldd [%o0 + 0xa0], %f44 | |
748 | retl | |
749 | ldd [%o0 + 0xa8], %f46 | |
750 | ENDPROC(aes_sparc64_load_encrypt_keys_128) | |
9bf4852d | 751 | |
0bdcaf74 DM |
752 | .align 32 |
753 | ENTRY(aes_sparc64_load_encrypt_keys_192) | |
754 | /* %o0=key */ | |
755 | VISEntry | |
756 | ldd [%o0 + 0x10], %f8 | |
757 | ldd [%o0 + 0x18], %f10 | |
758 | ldd [%o0 + 0x20], %f12 | |
759 | ldd [%o0 + 0x28], %f14 | |
760 | ldd [%o0 + 0x30], %f16 | |
761 | ldd [%o0 + 0x38], %f18 | |
762 | ldd [%o0 + 0x40], %f20 | |
763 | ldd [%o0 + 0x48], %f22 | |
764 | ldd [%o0 + 0x50], %f24 | |
765 | ldd [%o0 + 0x58], %f26 | |
766 | ldd [%o0 + 0x60], %f28 | |
767 | ldd [%o0 + 0x68], %f30 | |
768 | ldd [%o0 + 0x70], %f32 | |
769 | ldd [%o0 + 0x78], %f34 | |
770 | ldd [%o0 + 0x80], %f36 | |
771 | ldd [%o0 + 0x88], %f38 | |
772 | ldd [%o0 + 0x90], %f40 | |
773 | ldd [%o0 + 0x98], %f42 | |
774 | ldd [%o0 + 0xa0], %f44 | |
775 | ldd [%o0 + 0xa8], %f46 | |
776 | ldd [%o0 + 0xb0], %f48 | |
777 | ldd [%o0 + 0xb8], %f50 | |
778 | ldd [%o0 + 0xc0], %f52 | |
779 | retl | |
780 | ldd [%o0 + 0xc8], %f54 | |
781 | ENDPROC(aes_sparc64_load_encrypt_keys_192) | |
782 | ||
783 | .align 32 | |
784 | ENTRY(aes_sparc64_load_encrypt_keys_256) | |
9bf4852d DM |
785 | /* %o0=key */ |
786 | VISEntry | |
787 | ldd [%o0 + 0x10], %f8 | |
788 | ldd [%o0 + 0x18], %f10 | |
789 | ldd [%o0 + 0x20], %f12 | |
790 | ldd [%o0 + 0x28], %f14 | |
791 | ldd [%o0 + 0x30], %f16 | |
792 | ldd [%o0 + 0x38], %f18 | |
793 | ldd [%o0 + 0x40], %f20 | |
794 | ldd [%o0 + 0x48], %f22 | |
795 | ldd [%o0 + 0x50], %f24 | |
796 | ldd [%o0 + 0x58], %f26 | |
797 | ldd [%o0 + 0x60], %f28 | |
798 | ldd [%o0 + 0x68], %f30 | |
799 | ldd [%o0 + 0x70], %f32 | |
800 | ldd [%o0 + 0x78], %f34 | |
801 | ldd [%o0 + 0x80], %f36 | |
802 | ldd [%o0 + 0x88], %f38 | |
803 | ldd [%o0 + 0x90], %f40 | |
804 | ldd [%o0 + 0x98], %f42 | |
805 | ldd [%o0 + 0xa0], %f44 | |
806 | ldd [%o0 + 0xa8], %f46 | |
807 | ldd [%o0 + 0xb0], %f48 | |
808 | ldd [%o0 + 0xb8], %f50 | |
809 | ldd [%o0 + 0xc0], %f52 | |
810 | ldd [%o0 + 0xc8], %f54 | |
811 | ldd [%o0 + 0xd0], %f56 | |
812 | ldd [%o0 + 0xd8], %f58 | |
813 | ldd [%o0 + 0xe0], %f60 | |
814 | retl | |
815 | ldd [%o0 + 0xe8], %f62 | |
0bdcaf74 DM |
816 | ENDPROC(aes_sparc64_load_encrypt_keys_256) |
817 | ||
818 | .align 32 | |
819 | ENTRY(aes_sparc64_load_decrypt_keys_128) | |
820 | /* %o0=key */ | |
821 | VISEntry | |
822 | ldd [%o0 + 0x98], %f8 | |
823 | ldd [%o0 + 0x90], %f10 | |
824 | ldd [%o0 + 0x88], %f12 | |
825 | ldd [%o0 + 0x80], %f14 | |
826 | ldd [%o0 + 0x78], %f16 | |
827 | ldd [%o0 + 0x70], %f18 | |
828 | ldd [%o0 + 0x68], %f20 | |
829 | ldd [%o0 + 0x60], %f22 | |
830 | ldd [%o0 + 0x58], %f24 | |
831 | ldd [%o0 + 0x50], %f26 | |
832 | ldd [%o0 + 0x48], %f28 | |
833 | ldd [%o0 + 0x40], %f30 | |
834 | ldd [%o0 + 0x38], %f32 | |
835 | ldd [%o0 + 0x30], %f34 | |
836 | ldd [%o0 + 0x28], %f36 | |
837 | ldd [%o0 + 0x20], %f38 | |
838 | ldd [%o0 + 0x18], %f40 | |
839 | ldd [%o0 + 0x10], %f42 | |
840 | ldd [%o0 + 0x08], %f44 | |
841 | retl | |
842 | ldd [%o0 + 0x00], %f46 | |
843 | ENDPROC(aes_sparc64_load_decrypt_keys_128) | |
9bf4852d | 844 | |
0bdcaf74 DM |
845 | .align 32 |
846 | ENTRY(aes_sparc64_load_decrypt_keys_192) | |
847 | /* %o0=key */ | |
848 | VISEntry | |
849 | ldd [%o0 + 0xb8], %f8 | |
850 | ldd [%o0 + 0xb0], %f10 | |
851 | ldd [%o0 + 0xa8], %f12 | |
852 | ldd [%o0 + 0xa0], %f14 | |
853 | ldd [%o0 + 0x98], %f16 | |
854 | ldd [%o0 + 0x90], %f18 | |
855 | ldd [%o0 + 0x88], %f20 | |
856 | ldd [%o0 + 0x80], %f22 | |
857 | ldd [%o0 + 0x78], %f24 | |
858 | ldd [%o0 + 0x70], %f26 | |
859 | ldd [%o0 + 0x68], %f28 | |
860 | ldd [%o0 + 0x60], %f30 | |
861 | ldd [%o0 + 0x58], %f32 | |
862 | ldd [%o0 + 0x50], %f34 | |
863 | ldd [%o0 + 0x48], %f36 | |
864 | ldd [%o0 + 0x40], %f38 | |
865 | ldd [%o0 + 0x38], %f40 | |
866 | ldd [%o0 + 0x30], %f42 | |
867 | ldd [%o0 + 0x28], %f44 | |
868 | ldd [%o0 + 0x20], %f46 | |
869 | ldd [%o0 + 0x18], %f48 | |
870 | ldd [%o0 + 0x10], %f50 | |
871 | ldd [%o0 + 0x08], %f52 | |
872 | retl | |
873 | ldd [%o0 + 0x00], %f54 | |
874 | ENDPROC(aes_sparc64_load_decrypt_keys_192) | |
875 | ||
876 | .align 32 | |
877 | ENTRY(aes_sparc64_load_decrypt_keys_256) | |
878 | /* %o0=key */ | |
879 | VISEntry | |
880 | ldd [%o0 + 0xd8], %f8 | |
881 | ldd [%o0 + 0xd0], %f10 | |
882 | ldd [%o0 + 0xc8], %f12 | |
883 | ldd [%o0 + 0xc0], %f14 | |
884 | ldd [%o0 + 0xb8], %f16 | |
885 | ldd [%o0 + 0xb0], %f18 | |
886 | ldd [%o0 + 0xa8], %f20 | |
887 | ldd [%o0 + 0xa0], %f22 | |
888 | ldd [%o0 + 0x98], %f24 | |
889 | ldd [%o0 + 0x90], %f26 | |
890 | ldd [%o0 + 0x88], %f28 | |
891 | ldd [%o0 + 0x80], %f30 | |
892 | ldd [%o0 + 0x78], %f32 | |
893 | ldd [%o0 + 0x70], %f34 | |
894 | ldd [%o0 + 0x68], %f36 | |
895 | ldd [%o0 + 0x60], %f38 | |
896 | ldd [%o0 + 0x58], %f40 | |
897 | ldd [%o0 + 0x50], %f42 | |
898 | ldd [%o0 + 0x48], %f44 | |
899 | ldd [%o0 + 0x40], %f46 | |
900 | ldd [%o0 + 0x38], %f48 | |
901 | ldd [%o0 + 0x30], %f50 | |
902 | ldd [%o0 + 0x28], %f52 | |
903 | ldd [%o0 + 0x20], %f54 | |
904 | ldd [%o0 + 0x18], %f56 | |
905 | ldd [%o0 + 0x10], %f58 | |
906 | ldd [%o0 + 0x08], %f60 | |
907 | retl | |
908 | ldd [%o0 + 0x00], %f62 | |
909 | ENDPROC(aes_sparc64_load_decrypt_keys_256) | |
910 | ||
911 | .align 32 | |
912 | ENTRY(aes_sparc64_ecb_encrypt_128) | |
913 | /* %o0=key, %o1=input, %o2=output, %o3=len */ | |
9bf4852d | 914 | ldx [%o0 + 0x00], %g1 |
03d168ad DM |
915 | subcc %o3, 0x10, %o3 |
916 | be 10f | |
917 | ldx [%o0 + 0x08], %g2 | |
0bdcaf74 | 918 | 1: ldx [%o1 + 0x00], %g3 |
9bf4852d | 919 | ldx [%o1 + 0x08], %g7 |
03d168ad DM |
920 | ldx [%o1 + 0x10], %o4 |
921 | ldx [%o1 + 0x18], %o5 | |
922 | xor %g1, %g3, %g3 | |
923 | xor %g2, %g7, %g7 | |
924 | MOVXTOD_G3_F4 | |
925 | MOVXTOD_G7_F6 | |
926 | xor %g1, %o4, %g3 | |
927 | xor %g2, %o5, %g7 | |
928 | MOVXTOD_G3_F60 | |
929 | MOVXTOD_G7_F62 | |
930 | ENCRYPT_128_2(8, 4, 6, 60, 62, 0, 2, 56, 58) | |
931 | std %f4, [%o2 + 0x00] | |
932 | std %f6, [%o2 + 0x08] | |
933 | std %f60, [%o2 + 0x10] | |
934 | std %f62, [%o2 + 0x18] | |
935 | sub %o3, 0x20, %o3 | |
936 | add %o1, 0x20, %o1 | |
937 | brgz %o3, 1b | |
938 | add %o2, 0x20, %o2 | |
939 | brlz,pt %o3, 11f | |
940 | nop | |
941 | 10: ldx [%o1 + 0x00], %g3 | |
942 | ldx [%o1 + 0x08], %g7 | |
9bf4852d DM |
943 | xor %g1, %g3, %g3 |
944 | xor %g2, %g7, %g7 | |
945 | MOVXTOD_G3_F4 | |
946 | MOVXTOD_G7_F6 | |
0bdcaf74 | 947 | ENCRYPT_128(8, 4, 6, 0, 2) |
9bf4852d DM |
948 | std %f4, [%o2 + 0x00] |
949 | std %f6, [%o2 + 0x08] | |
03d168ad | 950 | 11: retl |
9bf4852d | 951 | nop |
0bdcaf74 | 952 | ENDPROC(aes_sparc64_ecb_encrypt_128) |
9bf4852d | 953 | |
0bdcaf74 DM |
954 | .align 32 |
955 | ENTRY(aes_sparc64_ecb_encrypt_192) | |
956 | /* %o0=key, %o1=input, %o2=output, %o3=len */ | |
957 | ldx [%o0 + 0x00], %g1 | |
03d168ad DM |
958 | subcc %o3, 0x10, %o3 |
959 | be 10f | |
960 | ldx [%o0 + 0x08], %g2 | |
0bdcaf74 | 961 | 1: ldx [%o1 + 0x00], %g3 |
9bf4852d | 962 | ldx [%o1 + 0x08], %g7 |
03d168ad DM |
963 | ldx [%o1 + 0x10], %o4 |
964 | ldx [%o1 + 0x18], %o5 | |
965 | xor %g1, %g3, %g3 | |
966 | xor %g2, %g7, %g7 | |
967 | MOVXTOD_G3_F4 | |
968 | MOVXTOD_G7_F6 | |
969 | xor %g1, %o4, %g3 | |
970 | xor %g2, %o5, %g7 | |
971 | MOVXTOD_G3_F60 | |
972 | MOVXTOD_G7_F62 | |
973 | ENCRYPT_192_2(8, 4, 6, 60, 62, 0, 2, 56, 58) | |
974 | std %f4, [%o2 + 0x00] | |
975 | std %f6, [%o2 + 0x08] | |
976 | std %f60, [%o2 + 0x10] | |
977 | std %f62, [%o2 + 0x18] | |
978 | sub %o3, 0x20, %o3 | |
979 | add %o1, 0x20, %o1 | |
980 | brgz %o3, 1b | |
981 | add %o2, 0x20, %o2 | |
982 | brlz,pt %o3, 11f | |
983 | nop | |
984 | 10: ldx [%o1 + 0x00], %g3 | |
985 | ldx [%o1 + 0x08], %g7 | |
9bf4852d DM |
986 | xor %g1, %g3, %g3 |
987 | xor %g2, %g7, %g7 | |
988 | MOVXTOD_G3_F4 | |
989 | MOVXTOD_G7_F6 | |
9bf4852d | 990 | ENCRYPT_192(8, 4, 6, 0, 2) |
9bf4852d DM |
991 | std %f4, [%o2 + 0x00] |
992 | std %f6, [%o2 + 0x08] | |
03d168ad | 993 | 11: retl |
9bf4852d | 994 | nop |
0bdcaf74 | 995 | ENDPROC(aes_sparc64_ecb_encrypt_192) |
9bf4852d | 996 | |
0bdcaf74 DM |
997 | .align 32 |
998 | ENTRY(aes_sparc64_ecb_encrypt_256) | |
999 | /* %o0=key, %o1=input, %o2=output, %o3=len */ | |
1000 | ldx [%o0 + 0x00], %g1 | |
03d168ad DM |
1001 | subcc %o3, 0x10, %o3 |
1002 | be 10f | |
1003 | ldx [%o0 + 0x08], %g2 | |
0bdcaf74 | 1004 | 1: ldx [%o1 + 0x00], %g3 |
9bf4852d | 1005 | ldx [%o1 + 0x08], %g7 |
03d168ad DM |
1006 | ldx [%o1 + 0x10], %o4 |
1007 | ldx [%o1 + 0x18], %o5 | |
1008 | xor %g1, %g3, %g3 | |
1009 | xor %g2, %g7, %g7 | |
1010 | MOVXTOD_G3_F4 | |
1011 | MOVXTOD_G7_F6 | |
1012 | xor %g1, %o4, %g3 | |
1013 | xor %g2, %o5, %g7 | |
1014 | MOVXTOD_G3_F0 | |
1015 | MOVXTOD_G7_F2 | |
1016 | ENCRYPT_256_2(8, 4, 6, 0, 2) | |
1017 | std %f4, [%o2 + 0x00] | |
1018 | std %f6, [%o2 + 0x08] | |
1019 | std %f0, [%o2 + 0x10] | |
1020 | std %f2, [%o2 + 0x18] | |
1021 | sub %o3, 0x20, %o3 | |
1022 | add %o1, 0x20, %o1 | |
1023 | brgz %o3, 1b | |
1024 | add %o2, 0x20, %o2 | |
1025 | brlz,pt %o3, 11f | |
1026 | nop | |
9f28ffc0 DM |
1027 | 10: ldd [%o0 + 0xd0], %f56 |
1028 | ldd [%o0 + 0xd8], %f58 | |
1029 | ldd [%o0 + 0xe0], %f60 | |
1030 | ldd [%o0 + 0xe8], %f62 | |
1031 | ldx [%o1 + 0x00], %g3 | |
03d168ad | 1032 | ldx [%o1 + 0x08], %g7 |
9bf4852d DM |
1033 | xor %g1, %g3, %g3 |
1034 | xor %g2, %g7, %g7 | |
1035 | MOVXTOD_G3_F4 | |
1036 | MOVXTOD_G7_F6 | |
0bdcaf74 | 1037 | ENCRYPT_256(8, 4, 6, 0, 2) |
9bf4852d DM |
1038 | std %f4, [%o2 + 0x00] |
1039 | std %f6, [%o2 + 0x08] | |
03d168ad | 1040 | 11: retl |
9bf4852d | 1041 | nop |
0bdcaf74 | 1042 | ENDPROC(aes_sparc64_ecb_encrypt_256) |
9bf4852d | 1043 | |
0bdcaf74 DM |
1044 | .align 32 |
1045 | ENTRY(aes_sparc64_ecb_decrypt_128) | |
1046 | /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */ | |
9bf4852d | 1047 | ldx [%o0 - 0x10], %g1 |
30101315 DM |
1048 | subcc %o3, 0x10, %o3 |
1049 | be 10f | |
1050 | ldx [%o0 - 0x08], %g2 | |
0bdcaf74 | 1051 | 1: ldx [%o1 + 0x00], %g3 |
9bf4852d | 1052 | ldx [%o1 + 0x08], %g7 |
30101315 DM |
1053 | ldx [%o1 + 0x10], %o4 |
1054 | ldx [%o1 + 0x18], %o5 | |
1055 | xor %g1, %g3, %g3 | |
1056 | xor %g2, %g7, %g7 | |
1057 | MOVXTOD_G3_F4 | |
1058 | MOVXTOD_G7_F6 | |
1059 | xor %g1, %o4, %g3 | |
1060 | xor %g2, %o5, %g7 | |
1061 | MOVXTOD_G3_F60 | |
1062 | MOVXTOD_G7_F62 | |
1063 | DECRYPT_128_2(8, 4, 6, 60, 62, 0, 2, 56, 58) | |
1064 | std %f4, [%o2 + 0x00] | |
1065 | std %f6, [%o2 + 0x08] | |
1066 | std %f60, [%o2 + 0x10] | |
1067 | std %f62, [%o2 + 0x18] | |
1068 | sub %o3, 0x20, %o3 | |
1069 | add %o1, 0x20, %o1 | |
1070 | brgz,pt %o3, 1b | |
1071 | add %o2, 0x20, %o2 | |
1072 | brlz,pt %o3, 11f | |
1073 | nop | |
1074 | 10: ldx [%o1 + 0x00], %g3 | |
1075 | ldx [%o1 + 0x08], %g7 | |
9bf4852d DM |
1076 | xor %g1, %g3, %g3 |
1077 | xor %g2, %g7, %g7 | |
1078 | MOVXTOD_G3_F4 | |
1079 | MOVXTOD_G7_F6 | |
0bdcaf74 | 1080 | DECRYPT_128(8, 4, 6, 0, 2) |
9bf4852d DM |
1081 | std %f4, [%o2 + 0x00] |
1082 | std %f6, [%o2 + 0x08] | |
30101315 | 1083 | 11: retl |
9bf4852d | 1084 | nop |
0bdcaf74 | 1085 | ENDPROC(aes_sparc64_ecb_decrypt_128) |
9bf4852d | 1086 | |
0bdcaf74 DM |
1087 | .align 32 |
1088 | ENTRY(aes_sparc64_ecb_decrypt_192) | |
1089 | /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */ | |
1090 | ldx [%o0 - 0x10], %g1 | |
30101315 DM |
1091 | subcc %o3, 0x10, %o3 |
1092 | be 10f | |
1093 | ldx [%o0 - 0x08], %g2 | |
0bdcaf74 | 1094 | 1: ldx [%o1 + 0x00], %g3 |
9bf4852d | 1095 | ldx [%o1 + 0x08], %g7 |
30101315 DM |
1096 | ldx [%o1 + 0x10], %o4 |
1097 | ldx [%o1 + 0x18], %o5 | |
1098 | xor %g1, %g3, %g3 | |
1099 | xor %g2, %g7, %g7 | |
1100 | MOVXTOD_G3_F4 | |
1101 | MOVXTOD_G7_F6 | |
1102 | xor %g1, %o4, %g3 | |
1103 | xor %g2, %o5, %g7 | |
1104 | MOVXTOD_G3_F60 | |
1105 | MOVXTOD_G7_F62 | |
1106 | DECRYPT_192_2(8, 4, 6, 60, 62, 0, 2, 56, 58) | |
1107 | std %f4, [%o2 + 0x00] | |
1108 | std %f6, [%o2 + 0x08] | |
1109 | std %f60, [%o2 + 0x10] | |
1110 | std %f62, [%o2 + 0x18] | |
1111 | sub %o3, 0x20, %o3 | |
1112 | add %o1, 0x20, %o1 | |
1113 | brgz,pt %o3, 1b | |
1114 | add %o2, 0x20, %o2 | |
1115 | brlz,pt %o3, 11f | |
1116 | nop | |
1117 | 10: ldx [%o1 + 0x00], %g3 | |
1118 | ldx [%o1 + 0x08], %g7 | |
9bf4852d DM |
1119 | xor %g1, %g3, %g3 |
1120 | xor %g2, %g7, %g7 | |
1121 | MOVXTOD_G3_F4 | |
1122 | MOVXTOD_G7_F6 | |
0bdcaf74 | 1123 | DECRYPT_192(8, 4, 6, 0, 2) |
9bf4852d DM |
1124 | std %f4, [%o2 + 0x00] |
1125 | std %f6, [%o2 + 0x08] | |
30101315 | 1126 | 11: retl |
9bf4852d | 1127 | nop |
0bdcaf74 | 1128 | ENDPROC(aes_sparc64_ecb_decrypt_192) |
9bf4852d | 1129 | |
0bdcaf74 DM |
1130 | .align 32 |
1131 | ENTRY(aes_sparc64_ecb_decrypt_256) | |
1132 | /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */ | |
1133 | ldx [%o0 - 0x10], %g1 | |
30101315 | 1134 | subcc %o3, 0x10, %o3 |
9f28ffc0 | 1135 | ldx [%o0 - 0x08], %g2 |
30101315 | 1136 | be 10f |
9f28ffc0 | 1137 | sub %o0, 0xf0, %o0 |
0bdcaf74 | 1138 | 1: ldx [%o1 + 0x00], %g3 |
9bf4852d | 1139 | ldx [%o1 + 0x08], %g7 |
30101315 DM |
1140 | ldx [%o1 + 0x10], %o4 |
1141 | ldx [%o1 + 0x18], %o5 | |
1142 | xor %g1, %g3, %g3 | |
1143 | xor %g2, %g7, %g7 | |
1144 | MOVXTOD_G3_F4 | |
1145 | MOVXTOD_G7_F6 | |
1146 | xor %g1, %o4, %g3 | |
1147 | xor %g2, %o5, %g7 | |
1148 | MOVXTOD_G3_F0 | |
1149 | MOVXTOD_G7_F2 | |
1150 | DECRYPT_256_2(8, 4, 6, 0, 2) | |
1151 | std %f4, [%o2 + 0x00] | |
1152 | std %f6, [%o2 + 0x08] | |
699871bc DM |
1153 | std %f0, [%o2 + 0x10] |
1154 | std %f2, [%o2 + 0x18] | |
30101315 DM |
1155 | sub %o3, 0x20, %o3 |
1156 | add %o1, 0x20, %o1 | |
1157 | brgz,pt %o3, 1b | |
1158 | add %o2, 0x20, %o2 | |
1159 | brlz,pt %o3, 11f | |
1160 | nop | |
9f28ffc0 DM |
1161 | 10: ldd [%o0 + 0x18], %f56 |
1162 | ldd [%o0 + 0x10], %f58 | |
1163 | ldd [%o0 + 0x08], %f60 | |
1164 | ldd [%o0 + 0x00], %f62 | |
1165 | ldx [%o1 + 0x00], %g3 | |
30101315 | 1166 | ldx [%o1 + 0x08], %g7 |
9bf4852d DM |
1167 | xor %g1, %g3, %g3 |
1168 | xor %g2, %g7, %g7 | |
1169 | MOVXTOD_G3_F4 | |
1170 | MOVXTOD_G7_F6 | |
0bdcaf74 | 1171 | DECRYPT_256(8, 4, 6, 0, 2) |
9bf4852d DM |
1172 | std %f4, [%o2 + 0x00] |
1173 | std %f6, [%o2 + 0x08] | |
30101315 | 1174 | 11: retl |
9bf4852d | 1175 | nop |
0bdcaf74 | 1176 | ENDPROC(aes_sparc64_ecb_decrypt_256) |
9bf4852d | 1177 | |
0bdcaf74 DM |
1178 | .align 32 |
1179 | ENTRY(aes_sparc64_cbc_encrypt_128) | |
1180 | /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ | |
1181 | ldd [%o4 + 0x00], %f4 | |
1182 | ldd [%o4 + 0x08], %f6 | |
9bf4852d DM |
1183 | ldx [%o0 + 0x00], %g1 |
1184 | ldx [%o0 + 0x08], %g2 | |
0bdcaf74 | 1185 | 1: ldx [%o1 + 0x00], %g3 |
9bf4852d DM |
1186 | ldx [%o1 + 0x08], %g7 |
1187 | add %o1, 0x10, %o1 | |
1188 | xor %g1, %g3, %g3 | |
1189 | xor %g2, %g7, %g7 | |
1190 | MOVXTOD_G3_F0 | |
1191 | MOVXTOD_G7_F2 | |
1192 | fxor %f4, %f0, %f4 | |
1193 | fxor %f6, %f2, %f6 | |
0bdcaf74 | 1194 | ENCRYPT_128(8, 4, 6, 0, 2) |
9bf4852d DM |
1195 | std %f4, [%o2 + 0x00] |
1196 | std %f6, [%o2 + 0x08] | |
0bdcaf74 DM |
1197 | subcc %o3, 0x10, %o3 |
1198 | bne,pt %xcc, 1b | |
9bf4852d | 1199 | add %o2, 0x10, %o2 |
0bdcaf74 DM |
1200 | std %f4, [%o4 + 0x00] |
1201 | std %f6, [%o4 + 0x08] | |
9bf4852d DM |
1202 | retl |
1203 | nop | |
0bdcaf74 | 1204 | ENDPROC(aes_sparc64_cbc_encrypt_128) |
9bf4852d | 1205 | |
0bdcaf74 DM |
1206 | .align 32 |
1207 | ENTRY(aes_sparc64_cbc_encrypt_192) | |
1208 | /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ | |
1209 | ldd [%o4 + 0x00], %f4 | |
1210 | ldd [%o4 + 0x08], %f6 | |
1211 | ldx [%o0 + 0x00], %g1 | |
1212 | ldx [%o0 + 0x08], %g2 | |
1213 | 1: ldx [%o1 + 0x00], %g3 | |
9bf4852d DM |
1214 | ldx [%o1 + 0x08], %g7 |
1215 | add %o1, 0x10, %o1 | |
1216 | xor %g1, %g3, %g3 | |
1217 | xor %g2, %g7, %g7 | |
1218 | MOVXTOD_G3_F0 | |
1219 | MOVXTOD_G7_F2 | |
1220 | fxor %f4, %f0, %f4 | |
1221 | fxor %f6, %f2, %f6 | |
9bf4852d | 1222 | ENCRYPT_192(8, 4, 6, 0, 2) |
9bf4852d DM |
1223 | std %f4, [%o2 + 0x00] |
1224 | std %f6, [%o2 + 0x08] | |
0bdcaf74 | 1225 | subcc %o3, 0x10, %o3 |
9bf4852d DM |
1226 | bne,pt %xcc, 1b |
1227 | add %o2, 0x10, %o2 | |
0bdcaf74 DM |
1228 | std %f4, [%o4 + 0x00] |
1229 | std %f6, [%o4 + 0x08] | |
9bf4852d DM |
1230 | retl |
1231 | nop | |
0bdcaf74 | 1232 | ENDPROC(aes_sparc64_cbc_encrypt_192) |
9bf4852d | 1233 | |
0bdcaf74 DM |
1234 | .align 32 |
1235 | ENTRY(aes_sparc64_cbc_encrypt_256) | |
1236 | /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ | |
1237 | ldd [%o4 + 0x00], %f4 | |
1238 | ldd [%o4 + 0x08], %f6 | |
1239 | ldx [%o0 + 0x00], %g1 | |
1240 | ldx [%o0 + 0x08], %g2 | |
1241 | 1: ldx [%o1 + 0x00], %g3 | |
9bf4852d DM |
1242 | ldx [%o1 + 0x08], %g7 |
1243 | add %o1, 0x10, %o1 | |
1244 | xor %g1, %g3, %g3 | |
1245 | xor %g2, %g7, %g7 | |
1246 | MOVXTOD_G3_F0 | |
1247 | MOVXTOD_G7_F2 | |
1248 | fxor %f4, %f0, %f4 | |
1249 | fxor %f6, %f2, %f6 | |
0bdcaf74 | 1250 | ENCRYPT_256(8, 4, 6, 0, 2) |
9bf4852d DM |
1251 | std %f4, [%o2 + 0x00] |
1252 | std %f6, [%o2 + 0x08] | |
0bdcaf74 DM |
1253 | subcc %o3, 0x10, %o3 |
1254 | bne,pt %xcc, 1b | |
9bf4852d | 1255 | add %o2, 0x10, %o2 |
0bdcaf74 DM |
1256 | std %f4, [%o4 + 0x00] |
1257 | std %f6, [%o4 + 0x08] | |
9bf4852d DM |
1258 | retl |
1259 | nop | |
0bdcaf74 | 1260 | ENDPROC(aes_sparc64_cbc_encrypt_256) |
9bf4852d | 1261 | |
0bdcaf74 DM |
1262 | .align 32 |
1263 | ENTRY(aes_sparc64_cbc_decrypt_128) | |
1264 | /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */ | |
9bf4852d DM |
1265 | ldx [%o0 - 0x10], %g1 |
1266 | ldx [%o0 - 0x08], %g2 | |
0bdcaf74 DM |
1267 | ldx [%o4 + 0x00], %o0 |
1268 | ldx [%o4 + 0x08], %o5 | |
1269 | 1: ldx [%o1 + 0x00], %g3 | |
1270 | ldx [%o1 + 0x08], %g7 | |
1271 | add %o1, 0x10, %o1 | |
9bf4852d DM |
1272 | xor %g1, %g3, %g3 |
1273 | xor %g2, %g7, %g7 | |
1274 | MOVXTOD_G3_F4 | |
1275 | MOVXTOD_G7_F6 | |
0bdcaf74 | 1276 | DECRYPT_128(8, 4, 6, 0, 2) |
9bf4852d | 1277 | MOVXTOD_O0_F0 |
0bdcaf74 | 1278 | MOVXTOD_O5_F2 |
9bf4852d | 1279 | xor %g1, %g3, %o0 |
0bdcaf74 | 1280 | xor %g2, %g7, %o5 |
9bf4852d DM |
1281 | fxor %f4, %f0, %f4 |
1282 | fxor %f6, %f2, %f6 | |
0bdcaf74 DM |
1283 | std %f4, [%o2 + 0x00] |
1284 | std %f6, [%o2 + 0x08] | |
1285 | subcc %o3, 0x10, %o3 | |
1286 | bne,pt %xcc, 1b | |
1287 | add %o2, 0x10, %o2 | |
1288 | stx %o0, [%o4 + 0x00] | |
1289 | stx %o5, [%o4 + 0x08] | |
9bf4852d DM |
1290 | retl |
1291 | nop | |
0bdcaf74 | 1292 | ENDPROC(aes_sparc64_cbc_decrypt_128) |
9bf4852d | 1293 | |
0bdcaf74 DM |
1294 | .align 32 |
1295 | ENTRY(aes_sparc64_cbc_decrypt_192) | |
1296 | /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */ | |
1297 | ldx [%o0 - 0x10], %g1 | |
1298 | ldx [%o0 - 0x08], %g2 | |
1299 | ldx [%o4 + 0x00], %o0 | |
1300 | ldx [%o4 + 0x08], %o5 | |
1301 | 1: ldx [%o1 + 0x00], %g3 | |
1302 | ldx [%o1 + 0x08], %g7 | |
1303 | add %o1, 0x10, %o1 | |
9bf4852d DM |
1304 | xor %g1, %g3, %g3 |
1305 | xor %g2, %g7, %g7 | |
1306 | MOVXTOD_G3_F4 | |
1307 | MOVXTOD_G7_F6 | |
0bdcaf74 | 1308 | DECRYPT_192(8, 4, 6, 0, 2) |
9bf4852d | 1309 | MOVXTOD_O0_F0 |
0bdcaf74 | 1310 | MOVXTOD_O5_F2 |
9bf4852d | 1311 | xor %g1, %g3, %o0 |
0bdcaf74 | 1312 | xor %g2, %g7, %o5 |
9bf4852d DM |
1313 | fxor %f4, %f0, %f4 |
1314 | fxor %f6, %f2, %f6 | |
0bdcaf74 DM |
1315 | std %f4, [%o2 + 0x00] |
1316 | std %f6, [%o2 + 0x08] | |
1317 | subcc %o3, 0x10, %o3 | |
9bf4852d | 1318 | bne,pt %xcc, 1b |
0bdcaf74 DM |
1319 | add %o2, 0x10, %o2 |
1320 | stx %o0, [%o4 + 0x00] | |
1321 | stx %o5, [%o4 + 0x08] | |
9bf4852d DM |
1322 | retl |
1323 | nop | |
0bdcaf74 | 1324 | ENDPROC(aes_sparc64_cbc_decrypt_192) |
9bf4852d | 1325 | |
0bdcaf74 DM |
1326 | .align 32 |
1327 | ENTRY(aes_sparc64_cbc_decrypt_256) | |
1328 | /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */ | |
1329 | ldx [%o0 - 0x10], %g1 | |
1330 | ldx [%o0 - 0x08], %g2 | |
1331 | ldx [%o4 + 0x00], %o0 | |
1332 | ldx [%o4 + 0x08], %o5 | |
1333 | 1: ldx [%o1 + 0x00], %g3 | |
1334 | ldx [%o1 + 0x08], %g7 | |
1335 | add %o1, 0x10, %o1 | |
9bf4852d DM |
1336 | xor %g1, %g3, %g3 |
1337 | xor %g2, %g7, %g7 | |
1338 | MOVXTOD_G3_F4 | |
1339 | MOVXTOD_G7_F6 | |
0bdcaf74 | 1340 | DECRYPT_256(8, 4, 6, 0, 2) |
9bf4852d | 1341 | MOVXTOD_O0_F0 |
0bdcaf74 | 1342 | MOVXTOD_O5_F2 |
9bf4852d | 1343 | xor %g1, %g3, %o0 |
0bdcaf74 | 1344 | xor %g2, %g7, %o5 |
9bf4852d DM |
1345 | fxor %f4, %f0, %f4 |
1346 | fxor %f6, %f2, %f6 | |
0bdcaf74 DM |
1347 | std %f4, [%o2 + 0x00] |
1348 | std %f6, [%o2 + 0x08] | |
1349 | subcc %o3, 0x10, %o3 | |
1350 | bne,pt %xcc, 1b | |
1351 | add %o2, 0x10, %o2 | |
1352 | stx %o0, [%o4 + 0x00] | |
1353 | stx %o5, [%o4 + 0x08] | |
9bf4852d DM |
1354 | retl |
1355 | nop | |
0bdcaf74 | 1356 | ENDPROC(aes_sparc64_cbc_decrypt_256) |
9fd130ec DM |
1357 | |
1358 | .align 32 | |
1359 | ENTRY(aes_sparc64_ctr_crypt_128) | |
1360 | /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ | |
1361 | ldx [%o4 + 0x00], %g3 | |
1362 | ldx [%o4 + 0x08], %g7 | |
4e71bb49 | 1363 | subcc %o3, 0x10, %o3 |
9fd130ec | 1364 | ldx [%o0 + 0x00], %g1 |
4e71bb49 DM |
1365 | be 10f |
1366 | ldx [%o0 + 0x08], %g2 | |
9fd130ec | 1367 | 1: xor %g1, %g3, %o5 |
4e71bb49 DM |
1368 | MOVXTOD_O5_F0 |
1369 | xor %g2, %g7, %o5 | |
1370 | MOVXTOD_O5_F2 | |
1371 | add %g7, 1, %g7 | |
1372 | add %g3, 1, %o5 | |
1373 | movrz %g7, %o5, %g3 | |
1374 | xor %g1, %g3, %o5 | |
1375 | MOVXTOD_O5_F4 | |
1376 | xor %g2, %g7, %o5 | |
1377 | MOVXTOD_O5_F6 | |
1378 | add %g7, 1, %g7 | |
1379 | add %g3, 1, %o5 | |
1380 | movrz %g7, %o5, %g3 | |
1381 | ENCRYPT_128_2(8, 0, 2, 4, 6, 56, 58, 60, 62) | |
1382 | ldd [%o1 + 0x00], %f56 | |
1383 | ldd [%o1 + 0x08], %f58 | |
1384 | ldd [%o1 + 0x10], %f60 | |
1385 | ldd [%o1 + 0x18], %f62 | |
1386 | fxor %f56, %f0, %f56 | |
1387 | fxor %f58, %f2, %f58 | |
1388 | fxor %f60, %f4, %f60 | |
1389 | fxor %f62, %f6, %f62 | |
1390 | std %f56, [%o2 + 0x00] | |
1391 | std %f58, [%o2 + 0x08] | |
1392 | std %f60, [%o2 + 0x10] | |
1393 | std %f62, [%o2 + 0x18] | |
1394 | subcc %o3, 0x20, %o3 | |
1395 | add %o1, 0x20, %o1 | |
1396 | brgz %o3, 1b | |
1397 | add %o2, 0x20, %o2 | |
1398 | brlz,pt %o3, 11f | |
1399 | nop | |
1400 | 10: xor %g1, %g3, %o5 | |
9fd130ec DM |
1401 | MOVXTOD_O5_F0 |
1402 | xor %g2, %g7, %o5 | |
1403 | MOVXTOD_O5_F2 | |
1404 | add %g7, 1, %g7 | |
1405 | add %g3, 1, %o5 | |
1406 | movrz %g7, %o5, %g3 | |
1407 | ENCRYPT_128(8, 0, 2, 4, 6) | |
1408 | ldd [%o1 + 0x00], %f4 | |
1409 | ldd [%o1 + 0x08], %f6 | |
1410 | fxor %f4, %f0, %f4 | |
1411 | fxor %f6, %f2, %f6 | |
1412 | std %f4, [%o2 + 0x00] | |
1413 | std %f6, [%o2 + 0x08] | |
4e71bb49 | 1414 | 11: stx %g3, [%o4 + 0x00] |
9fd130ec | 1415 | retl |
4e71bb49 | 1416 | stx %g7, [%o4 + 0x08] |
9fd130ec DM |
1417 | ENDPROC(aes_sparc64_ctr_crypt_128) |
1418 | ||
1419 | .align 32 | |
1420 | ENTRY(aes_sparc64_ctr_crypt_192) | |
1421 | /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ | |
1422 | ldx [%o4 + 0x00], %g3 | |
1423 | ldx [%o4 + 0x08], %g7 | |
4e71bb49 | 1424 | subcc %o3, 0x10, %o3 |
9fd130ec | 1425 | ldx [%o0 + 0x00], %g1 |
4e71bb49 DM |
1426 | be 10f |
1427 | ldx [%o0 + 0x08], %g2 | |
9fd130ec | 1428 | 1: xor %g1, %g3, %o5 |
4e71bb49 DM |
1429 | MOVXTOD_O5_F0 |
1430 | xor %g2, %g7, %o5 | |
1431 | MOVXTOD_O5_F2 | |
1432 | add %g7, 1, %g7 | |
1433 | add %g3, 1, %o5 | |
1434 | movrz %g7, %o5, %g3 | |
1435 | xor %g1, %g3, %o5 | |
1436 | MOVXTOD_O5_F4 | |
1437 | xor %g2, %g7, %o5 | |
1438 | MOVXTOD_O5_F6 | |
1439 | add %g7, 1, %g7 | |
1440 | add %g3, 1, %o5 | |
1441 | movrz %g7, %o5, %g3 | |
1442 | ENCRYPT_192_2(8, 0, 2, 4, 6, 56, 58, 60, 62) | |
1443 | ldd [%o1 + 0x00], %f56 | |
1444 | ldd [%o1 + 0x08], %f58 | |
1445 | ldd [%o1 + 0x10], %f60 | |
1446 | ldd [%o1 + 0x18], %f62 | |
1447 | fxor %f56, %f0, %f56 | |
1448 | fxor %f58, %f2, %f58 | |
1449 | fxor %f60, %f4, %f60 | |
1450 | fxor %f62, %f6, %f62 | |
1451 | std %f56, [%o2 + 0x00] | |
1452 | std %f58, [%o2 + 0x08] | |
1453 | std %f60, [%o2 + 0x10] | |
1454 | std %f62, [%o2 + 0x18] | |
1455 | subcc %o3, 0x20, %o3 | |
1456 | add %o1, 0x20, %o1 | |
1457 | brgz %o3, 1b | |
1458 | add %o2, 0x20, %o2 | |
1459 | brlz,pt %o3, 11f | |
1460 | nop | |
1461 | 10: xor %g1, %g3, %o5 | |
9fd130ec DM |
1462 | MOVXTOD_O5_F0 |
1463 | xor %g2, %g7, %o5 | |
1464 | MOVXTOD_O5_F2 | |
1465 | add %g7, 1, %g7 | |
1466 | add %g3, 1, %o5 | |
1467 | movrz %g7, %o5, %g3 | |
1468 | ENCRYPT_192(8, 0, 2, 4, 6) | |
1469 | ldd [%o1 + 0x00], %f4 | |
1470 | ldd [%o1 + 0x08], %f6 | |
1471 | fxor %f4, %f0, %f4 | |
1472 | fxor %f6, %f2, %f6 | |
1473 | std %f4, [%o2 + 0x00] | |
1474 | std %f6, [%o2 + 0x08] | |
4e71bb49 | 1475 | 11: stx %g3, [%o4 + 0x00] |
9fd130ec | 1476 | retl |
4e71bb49 | 1477 | stx %g7, [%o4 + 0x08] |
9fd130ec DM |
1478 | ENDPROC(aes_sparc64_ctr_crypt_192) |
1479 | ||
1480 | .align 32 | |
1481 | ENTRY(aes_sparc64_ctr_crypt_256) | |
1482 | /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ | |
1483 | ldx [%o4 + 0x00], %g3 | |
1484 | ldx [%o4 + 0x08], %g7 | |
4e71bb49 | 1485 | subcc %o3, 0x10, %o3 |
9fd130ec | 1486 | ldx [%o0 + 0x00], %g1 |
4e71bb49 DM |
1487 | be 10f |
1488 | ldx [%o0 + 0x08], %g2 | |
9fd130ec | 1489 | 1: xor %g1, %g3, %o5 |
4e71bb49 DM |
1490 | MOVXTOD_O5_F0 |
1491 | xor %g2, %g7, %o5 | |
1492 | MOVXTOD_O5_F2 | |
1493 | add %g7, 1, %g7 | |
1494 | add %g3, 1, %o5 | |
1495 | movrz %g7, %o5, %g3 | |
1496 | xor %g1, %g3, %o5 | |
1497 | MOVXTOD_O5_F4 | |
1498 | xor %g2, %g7, %o5 | |
1499 | MOVXTOD_O5_F6 | |
1500 | add %g7, 1, %g7 | |
1501 | add %g3, 1, %o5 | |
1502 | movrz %g7, %o5, %g3 | |
1503 | ENCRYPT_256_2(8, 0, 2, 4, 6) | |
1504 | ldd [%o1 + 0x00], %f56 | |
1505 | ldd [%o1 + 0x08], %f58 | |
1506 | ldd [%o1 + 0x10], %f60 | |
1507 | ldd [%o1 + 0x18], %f62 | |
1508 | fxor %f56, %f0, %f56 | |
1509 | fxor %f58, %f2, %f58 | |
1510 | fxor %f60, %f4, %f60 | |
1511 | fxor %f62, %f6, %f62 | |
1512 | std %f56, [%o2 + 0x00] | |
1513 | std %f58, [%o2 + 0x08] | |
1514 | std %f60, [%o2 + 0x10] | |
1515 | std %f62, [%o2 + 0x18] | |
1516 | subcc %o3, 0x20, %o3 | |
1517 | add %o1, 0x20, %o1 | |
1518 | brgz %o3, 1b | |
1519 | add %o2, 0x20, %o2 | |
1520 | brlz,pt %o3, 11f | |
1521 | nop | |
9f28ffc0 | 1522 | 10: ldd [%o0 + 0xd0], %f56 |
699871bc DM |
1523 | ldd [%o0 + 0xd8], %f58 |
1524 | ldd [%o0 + 0xe0], %f60 | |
1525 | ldd [%o0 + 0xe8], %f62 | |
9f28ffc0 | 1526 | xor %g1, %g3, %o5 |
9fd130ec DM |
1527 | MOVXTOD_O5_F0 |
1528 | xor %g2, %g7, %o5 | |
1529 | MOVXTOD_O5_F2 | |
1530 | add %g7, 1, %g7 | |
1531 | add %g3, 1, %o5 | |
1532 | movrz %g7, %o5, %g3 | |
1533 | ENCRYPT_256(8, 0, 2, 4, 6) | |
1534 | ldd [%o1 + 0x00], %f4 | |
1535 | ldd [%o1 + 0x08], %f6 | |
1536 | fxor %f4, %f0, %f4 | |
1537 | fxor %f6, %f2, %f6 | |
1538 | std %f4, [%o2 + 0x00] | |
1539 | std %f6, [%o2 + 0x08] | |
4e71bb49 | 1540 | 11: stx %g3, [%o4 + 0x00] |
9fd130ec | 1541 | retl |
4e71bb49 | 1542 | stx %g7, [%o4 + 0x08] |
9fd130ec | 1543 | ENDPROC(aes_sparc64_ctr_crypt_256) |