Commit | Line | Data |
---|---|---|
9bf4852d DM |
1 | #include <linux/linkage.h> |
2 | #include <asm/visasm.h> | |
3 | ||
4 | #define F3F(x,y,z) (((x)<<30)|((y)<<19)|((z)<<5)) | |
5 | ||
6 | #define FPD_ENCODE(x) (((x) >> 5) | ((x) & ~(0x20))) | |
7 | ||
8 | #define RS1(x) (FPD_ENCODE(x) << 14) | |
9 | #define RS2(x) (FPD_ENCODE(x) << 0) | |
10 | #define RS3(x) (FPD_ENCODE(x) << 9) | |
11 | #define RD(x) (FPD_ENCODE(x) << 25) | |
12 | #define IMM5(x) ((x) << 9) | |
13 | ||
14 | #define AES_EROUND01(a,b,c,d) \ | |
15 | .word (F3F(2, 0x19, 0)|RS1(a)|RS2(b)|RS3(c)|RD(d)); | |
16 | #define AES_EROUND23(a,b,c,d) \ | |
17 | .word (F3F(2, 0x19, 1)|RS1(a)|RS2(b)|RS3(c)|RD(d)); | |
18 | #define AES_DROUND01(a,b,c,d) \ | |
19 | .word (F3F(2, 0x19, 2)|RS1(a)|RS2(b)|RS3(c)|RD(d)); | |
20 | #define AES_DROUND23(a,b,c,d) \ | |
21 | .word (F3F(2, 0x19, 3)|RS1(a)|RS2(b)|RS3(c)|RD(d)); | |
22 | #define AES_EROUND01_L(a,b,c,d) \ | |
23 | .word (F3F(2, 0x19, 4)|RS1(a)|RS2(b)|RS3(c)|RD(d)); | |
24 | #define AES_EROUND23_L(a,b,c,d) \ | |
25 | .word (F3F(2, 0x19, 5)|RS1(a)|RS2(b)|RS3(c)|RD(d)); | |
26 | #define AES_DROUND01_L(a,b,c,d) \ | |
27 | .word (F3F(2, 0x19, 6)|RS1(a)|RS2(b)|RS3(c)|RD(d)); | |
28 | #define AES_DROUND23_L(a,b,c,d) \ | |
29 | .word (F3F(2, 0x19, 7)|RS1(a)|RS2(b)|RS3(c)|RD(d)); | |
30 | #define AES_KEXPAND1(a,b,c,d) \ | |
31 | .word (F3F(2, 0x19, 8)|RS1(a)|RS2(b)|IMM5(c)|RD(d)); | |
32 | #define AES_KEXPAND0(a,b,c) \ | |
33 | .word (F3F(2, 0x36, 0x130)|RS1(a)|RS2(b)|RD(c)); | |
34 | #define AES_KEXPAND2(a,b,c) \ | |
35 | .word (F3F(2, 0x36, 0x131)|RS1(a)|RS2(b)|RD(c)); | |
36 | ||
37 | #define MOVXTOD_G3_F4 \ | |
38 | .word 0x89b02303; | |
39 | #define MOVXTOD_G7_F6 \ | |
40 | .word 0x8db02307; | |
41 | #define MOVXTOD_G3_F0 \ | |
42 | .word 0x81b02303; | |
43 | #define MOVXTOD_G7_F2 \ | |
44 | .word 0x85b02307; | |
45 | #define MOVXTOD_O0_F0 \ | |
46 | .word 0x81b02308; | |
0bdcaf74 DM |
47 | #define MOVXTOD_O5_F2 \ |
48 | .word 0x85b0230d; | |
9bf4852d DM |
49 | |
50 | #define ENCRYPT_TWO_ROUNDS(KEY_BASE, I0, I1, T0, T1) \ | |
51 | AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ | |
52 | AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ | |
53 | AES_EROUND01(KEY_BASE + 4, T0, T1, I0) \ | |
54 | AES_EROUND23(KEY_BASE + 6, T0, T1, I1) | |
55 | ||
56 | #define ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE, I0, I1, T0, T1) \ | |
57 | AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ | |
58 | AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ | |
59 | AES_EROUND01_L(KEY_BASE + 4, T0, T1, I0) \ | |
60 | AES_EROUND23_L(KEY_BASE + 6, T0, T1, I1) | |
61 | ||
62 | /* 10 rounds */ | |
63 | #define ENCRYPT_128(KEY_BASE, I0, I1, T0, T1) \ | |
64 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ | |
65 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ | |
66 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ | |
67 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ | |
68 | ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 32, I0, I1, T0, T1) | |
69 | ||
70 | /* 12 rounds */ | |
71 | #define ENCRYPT_192(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_LAST(KEY_BASE + 40, I0, I1, T0, T1) | |
78 | ||
79 | /* 14 rounds */ | |
80 | #define ENCRYPT_256(KEY_BASE, I0, I1, T0, T1) \ | |
81 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ | |
82 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ | |
83 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ | |
84 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ | |
85 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ | |
86 | ENCRYPT_TWO_ROUNDS(KEY_BASE + 40, I0, I1, T0, T1) \ | |
87 | ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 48, I0, I1, T0, T1) | |
88 | ||
0bdcaf74 DM |
89 | #define DECRYPT_TWO_ROUNDS(KEY_BASE, I0, I1, T0, T1) \ |
90 | AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ | |
91 | AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ | |
92 | AES_DROUND23(KEY_BASE + 4, T0, T1, I1) \ | |
93 | AES_DROUND01(KEY_BASE + 6, T0, T1, I0) | |
9bf4852d | 94 | |
0bdcaf74 DM |
95 | #define DECRYPT_TWO_ROUNDS_LAST(KEY_BASE, I0, I1, T0, T1) \ |
96 | AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ | |
97 | AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ | |
98 | AES_DROUND23_L(KEY_BASE + 4, T0, T1, I1) \ | |
99 | AES_DROUND01_L(KEY_BASE + 6, T0, T1, I0) | |
9bf4852d DM |
100 | |
101 | /* 10 rounds */ | |
0bdcaf74 DM |
102 | #define DECRYPT_128(KEY_BASE, I0, I1, T0, T1) \ |
103 | DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ | |
104 | DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ | |
105 | DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ | |
106 | DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ | |
107 | DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 32, I0, I1, T0, T1) | |
9bf4852d DM |
108 | |
109 | /* 12 rounds */ | |
0bdcaf74 DM |
110 | #define DECRYPT_192(KEY_BASE, I0, I1, T0, T1) \ |
111 | DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ | |
112 | DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ | |
113 | DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ | |
114 | DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ | |
115 | DECRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ | |
116 | DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 40, I0, I1, T0, T1) | |
9bf4852d DM |
117 | |
118 | /* 14 rounds */ | |
0bdcaf74 DM |
119 | #define DECRYPT_256(KEY_BASE, I0, I1, T0, T1) \ |
120 | DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ | |
121 | DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ | |
122 | DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ | |
123 | DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ | |
124 | DECRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ | |
125 | DECRYPT_TWO_ROUNDS(KEY_BASE + 40, I0, I1, T0, T1) \ | |
126 | DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 48, I0, I1, T0, T1) | |
127 | ||
128 | .align 32 | |
9bf4852d DM |
129 | ENTRY(aes_sparc64_key_expand) |
130 | /* %o0=input_key, %o1=output_key, %o2=key_len */ | |
131 | VISEntry | |
132 | ld [%o0 + 0x00], %f0 | |
133 | ld [%o0 + 0x04], %f1 | |
134 | ld [%o0 + 0x08], %f2 | |
135 | ld [%o0 + 0x0c], %f3 | |
136 | ||
137 | std %f0, [%o1 + 0x00] | |
138 | std %f2, [%o1 + 0x08] | |
139 | add %o1, 0x10, %o1 | |
140 | ||
141 | cmp %o2, 24 | |
142 | bl 2f | |
143 | nop | |
144 | ||
145 | be 1f | |
146 | nop | |
147 | ||
148 | /* 256-bit key expansion */ | |
149 | ld [%o0 + 0x10], %f4 | |
150 | ld [%o0 + 0x14], %f5 | |
151 | ld [%o0 + 0x18], %f6 | |
152 | ld [%o0 + 0x1c], %f7 | |
153 | ||
154 | std %f4, [%o1 + 0x00] | |
155 | std %f6, [%o1 + 0x08] | |
156 | add %o1, 0x10, %o1 | |
157 | ||
158 | AES_KEXPAND1(0, 6, 0x0, 8) | |
159 | AES_KEXPAND2(2, 8, 10) | |
160 | AES_KEXPAND0(4, 10, 12) | |
161 | AES_KEXPAND2(6, 12, 14) | |
162 | AES_KEXPAND1(8, 14, 0x1, 16) | |
163 | AES_KEXPAND2(10, 16, 18) | |
164 | AES_KEXPAND0(12, 18, 20) | |
165 | AES_KEXPAND2(14, 20, 22) | |
166 | AES_KEXPAND1(16, 22, 0x2, 24) | |
167 | AES_KEXPAND2(18, 24, 26) | |
168 | AES_KEXPAND0(20, 26, 28) | |
169 | AES_KEXPAND2(22, 28, 30) | |
170 | AES_KEXPAND1(24, 30, 0x3, 32) | |
171 | AES_KEXPAND2(26, 32, 34) | |
172 | AES_KEXPAND0(28, 34, 36) | |
173 | AES_KEXPAND2(30, 36, 38) | |
174 | AES_KEXPAND1(32, 38, 0x4, 40) | |
175 | AES_KEXPAND2(34, 40, 42) | |
176 | AES_KEXPAND0(36, 42, 44) | |
177 | AES_KEXPAND2(38, 44, 46) | |
178 | AES_KEXPAND1(40, 46, 0x5, 48) | |
179 | AES_KEXPAND2(42, 48, 50) | |
180 | AES_KEXPAND0(44, 50, 52) | |
181 | AES_KEXPAND2(46, 52, 54) | |
182 | AES_KEXPAND1(48, 54, 0x6, 56) | |
183 | AES_KEXPAND2(50, 56, 58) | |
184 | ||
185 | std %f8, [%o1 + 0x00] | |
186 | std %f10, [%o1 + 0x08] | |
187 | std %f12, [%o1 + 0x10] | |
188 | std %f14, [%o1 + 0x18] | |
189 | std %f16, [%o1 + 0x20] | |
190 | std %f18, [%o1 + 0x28] | |
191 | std %f20, [%o1 + 0x30] | |
192 | std %f22, [%o1 + 0x38] | |
193 | std %f24, [%o1 + 0x40] | |
194 | std %f26, [%o1 + 0x48] | |
195 | std %f28, [%o1 + 0x50] | |
196 | std %f30, [%o1 + 0x58] | |
197 | std %f32, [%o1 + 0x60] | |
198 | std %f34, [%o1 + 0x68] | |
199 | std %f36, [%o1 + 0x70] | |
200 | std %f38, [%o1 + 0x78] | |
201 | std %f40, [%o1 + 0x80] | |
202 | std %f42, [%o1 + 0x88] | |
203 | std %f44, [%o1 + 0x90] | |
204 | std %f46, [%o1 + 0x98] | |
205 | std %f48, [%o1 + 0xa0] | |
206 | std %f50, [%o1 + 0xa8] | |
207 | std %f52, [%o1 + 0xb0] | |
208 | std %f54, [%o1 + 0xb8] | |
209 | std %f56, [%o1 + 0xc0] | |
210 | ba,pt %xcc, 80f | |
211 | std %f58, [%o1 + 0xc8] | |
212 | ||
213 | 1: | |
214 | /* 192-bit key expansion */ | |
215 | ld [%o0 + 0x10], %f4 | |
216 | ld [%o0 + 0x14], %f5 | |
217 | ||
218 | std %f4, [%o1 + 0x00] | |
219 | add %o1, 0x08, %o1 | |
220 | ||
221 | AES_KEXPAND1(0, 4, 0x0, 6) | |
222 | AES_KEXPAND2(2, 6, 8) | |
223 | AES_KEXPAND2(4, 8, 10) | |
224 | AES_KEXPAND1(6, 10, 0x1, 12) | |
225 | AES_KEXPAND2(8, 12, 14) | |
226 | AES_KEXPAND2(10, 14, 16) | |
227 | AES_KEXPAND1(12, 16, 0x2, 18) | |
228 | AES_KEXPAND2(14, 18, 20) | |
229 | AES_KEXPAND2(16, 20, 22) | |
230 | AES_KEXPAND1(18, 22, 0x3, 24) | |
231 | AES_KEXPAND2(20, 24, 26) | |
232 | AES_KEXPAND2(22, 26, 28) | |
233 | AES_KEXPAND1(24, 28, 0x4, 30) | |
234 | AES_KEXPAND2(26, 30, 32) | |
235 | AES_KEXPAND2(28, 32, 34) | |
236 | AES_KEXPAND1(30, 34, 0x5, 36) | |
237 | AES_KEXPAND2(32, 36, 38) | |
238 | AES_KEXPAND2(34, 38, 40) | |
239 | AES_KEXPAND1(36, 40, 0x6, 42) | |
240 | AES_KEXPAND2(38, 42, 44) | |
241 | AES_KEXPAND2(40, 44, 46) | |
242 | AES_KEXPAND1(42, 46, 0x7, 48) | |
243 | AES_KEXPAND2(44, 48, 50) | |
244 | ||
245 | std %f6, [%o1 + 0x00] | |
246 | std %f8, [%o1 + 0x08] | |
247 | std %f10, [%o1 + 0x10] | |
248 | std %f12, [%o1 + 0x18] | |
249 | std %f14, [%o1 + 0x20] | |
250 | std %f16, [%o1 + 0x28] | |
251 | std %f18, [%o1 + 0x30] | |
252 | std %f20, [%o1 + 0x38] | |
253 | std %f22, [%o1 + 0x40] | |
254 | std %f24, [%o1 + 0x48] | |
255 | std %f26, [%o1 + 0x50] | |
256 | std %f28, [%o1 + 0x58] | |
257 | std %f30, [%o1 + 0x60] | |
258 | std %f32, [%o1 + 0x68] | |
259 | std %f34, [%o1 + 0x70] | |
260 | std %f36, [%o1 + 0x78] | |
261 | std %f38, [%o1 + 0x80] | |
262 | std %f40, [%o1 + 0x88] | |
263 | std %f42, [%o1 + 0x90] | |
264 | std %f44, [%o1 + 0x98] | |
265 | std %f46, [%o1 + 0xa0] | |
266 | std %f48, [%o1 + 0xa8] | |
267 | ba,pt %xcc, 80f | |
268 | std %f50, [%o1 + 0xb0] | |
269 | ||
270 | 2: | |
271 | /* 128-bit key expansion */ | |
272 | AES_KEXPAND1(0, 2, 0x0, 4) | |
273 | AES_KEXPAND2(2, 4, 6) | |
274 | AES_KEXPAND1(4, 6, 0x1, 8) | |
275 | AES_KEXPAND2(6, 8, 10) | |
276 | AES_KEXPAND1(8, 10, 0x2, 12) | |
277 | AES_KEXPAND2(10, 12, 14) | |
278 | AES_KEXPAND1(12, 14, 0x3, 16) | |
279 | AES_KEXPAND2(14, 16, 18) | |
280 | AES_KEXPAND1(16, 18, 0x4, 20) | |
281 | AES_KEXPAND2(18, 20, 22) | |
282 | AES_KEXPAND1(20, 22, 0x5, 24) | |
283 | AES_KEXPAND2(22, 24, 26) | |
284 | AES_KEXPAND1(24, 26, 0x6, 28) | |
285 | AES_KEXPAND2(26, 28, 30) | |
286 | AES_KEXPAND1(28, 30, 0x7, 32) | |
287 | AES_KEXPAND2(30, 32, 34) | |
288 | AES_KEXPAND1(32, 34, 0x8, 36) | |
289 | AES_KEXPAND2(34, 36, 38) | |
290 | AES_KEXPAND1(36, 38, 0x9, 40) | |
291 | AES_KEXPAND2(38, 40, 42) | |
292 | ||
293 | std %f4, [%o1 + 0x00] | |
294 | std %f6, [%o1 + 0x08] | |
295 | std %f8, [%o1 + 0x10] | |
296 | std %f10, [%o1 + 0x18] | |
297 | std %f12, [%o1 + 0x20] | |
298 | std %f14, [%o1 + 0x28] | |
299 | std %f16, [%o1 + 0x30] | |
300 | std %f18, [%o1 + 0x38] | |
301 | std %f20, [%o1 + 0x40] | |
302 | std %f22, [%o1 + 0x48] | |
303 | std %f24, [%o1 + 0x50] | |
304 | std %f26, [%o1 + 0x58] | |
305 | std %f28, [%o1 + 0x60] | |
306 | std %f30, [%o1 + 0x68] | |
307 | std %f32, [%o1 + 0x70] | |
308 | std %f34, [%o1 + 0x78] | |
309 | std %f36, [%o1 + 0x80] | |
310 | std %f38, [%o1 + 0x88] | |
311 | std %f40, [%o1 + 0x90] | |
312 | std %f42, [%o1 + 0x98] | |
313 | 80: | |
314 | retl | |
315 | VISExit | |
316 | ENDPROC(aes_sparc64_key_expand) | |
317 | ||
0bdcaf74 DM |
318 | .align 32 |
319 | ENTRY(aes_sparc64_encrypt_128) | |
320 | /* %o0=key, %o1=input, %o2=output */ | |
9bf4852d DM |
321 | VISEntry |
322 | ld [%o1 + 0x00], %f4 | |
323 | ld [%o1 + 0x04], %f5 | |
324 | ld [%o1 + 0x08], %f6 | |
325 | ld [%o1 + 0x0c], %f7 | |
9bf4852d DM |
326 | ldd [%o0 + 0x00], %f8 |
327 | ldd [%o0 + 0x08], %f10 | |
0bdcaf74 DM |
328 | ldd [%o0 + 0x10], %f12 |
329 | ldd [%o0 + 0x18], %f14 | |
330 | ldd [%o0 + 0x20], %f16 | |
331 | ldd [%o0 + 0x28], %f18 | |
332 | ldd [%o0 + 0x30], %f20 | |
333 | ldd [%o0 + 0x38], %f22 | |
334 | ldd [%o0 + 0x40], %f24 | |
335 | ldd [%o0 + 0x48], %f26 | |
336 | ldd [%o0 + 0x50], %f28 | |
337 | ldd [%o0 + 0x58], %f30 | |
338 | ldd [%o0 + 0x60], %f32 | |
339 | ldd [%o0 + 0x68], %f34 | |
340 | ldd [%o0 + 0x70], %f36 | |
341 | ldd [%o0 + 0x78], %f38 | |
342 | ldd [%o0 + 0x80], %f40 | |
343 | ldd [%o0 + 0x88], %f42 | |
344 | ldd [%o0 + 0x90], %f44 | |
345 | ldd [%o0 + 0x98], %f46 | |
346 | ldd [%o0 + 0xa0], %f48 | |
347 | ldd [%o0 + 0xa8], %f50 | |
9bf4852d | 348 | fxor %f8, %f4, %f4 |
0bdcaf74 DM |
349 | fxor %f10, %f6, %f6 |
350 | ENCRYPT_128(12, 4, 6, 0, 2) | |
351 | st %f4, [%o2 + 0x00] | |
352 | st %f5, [%o2 + 0x04] | |
353 | st %f6, [%o2 + 0x08] | |
354 | st %f7, [%o2 + 0x0c] | |
355 | retl | |
356 | VISExit | |
357 | ENDPROC(aes_sparc64_encrypt_128) | |
9bf4852d | 358 | |
0bdcaf74 DM |
359 | .align 32 |
360 | ENTRY(aes_sparc64_encrypt_192) | |
361 | /* %o0=key, %o1=input, %o2=output */ | |
362 | VISEntry | |
363 | ld [%o1 + 0x00], %f4 | |
364 | ld [%o1 + 0x04], %f5 | |
365 | ld [%o1 + 0x08], %f6 | |
366 | ld [%o1 + 0x0c], %f7 | |
9bf4852d | 367 | |
0bdcaf74 DM |
368 | ldd [%o0 + 0x00], %f8 |
369 | ldd [%o0 + 0x08], %f10 | |
9bf4852d | 370 | |
0bdcaf74 DM |
371 | fxor %f8, %f4, %f4 |
372 | fxor %f10, %f6, %f6 | |
9bf4852d DM |
373 | |
374 | ldd [%o0 + 0x10], %f8 | |
9bf4852d DM |
375 | ldd [%o0 + 0x18], %f10 |
376 | ldd [%o0 + 0x20], %f12 | |
377 | ldd [%o0 + 0x28], %f14 | |
378 | add %o0, 0x20, %o0 | |
379 | ||
380 | ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2) | |
381 | ||
9bf4852d DM |
382 | ldd [%o0 + 0x10], %f12 |
383 | ldd [%o0 + 0x18], %f14 | |
384 | ldd [%o0 + 0x20], %f16 | |
385 | ldd [%o0 + 0x28], %f18 | |
386 | ldd [%o0 + 0x30], %f20 | |
387 | ldd [%o0 + 0x38], %f22 | |
388 | ldd [%o0 + 0x40], %f24 | |
389 | ldd [%o0 + 0x48], %f26 | |
390 | ldd [%o0 + 0x50], %f28 | |
391 | ldd [%o0 + 0x58], %f30 | |
392 | ldd [%o0 + 0x60], %f32 | |
393 | ldd [%o0 + 0x68], %f34 | |
394 | ldd [%o0 + 0x70], %f36 | |
395 | ldd [%o0 + 0x78], %f38 | |
396 | ldd [%o0 + 0x80], %f40 | |
397 | ldd [%o0 + 0x88], %f42 | |
398 | ldd [%o0 + 0x90], %f44 | |
399 | ldd [%o0 + 0x98], %f46 | |
400 | ldd [%o0 + 0xa0], %f48 | |
401 | ldd [%o0 + 0xa8], %f50 | |
402 | ||
403 | ||
404 | ENCRYPT_128(12, 4, 6, 0, 2) | |
405 | ||
406 | st %f4, [%o2 + 0x00] | |
407 | st %f5, [%o2 + 0x04] | |
408 | st %f6, [%o2 + 0x08] | |
409 | st %f7, [%o2 + 0x0c] | |
410 | ||
411 | retl | |
412 | VISExit | |
0bdcaf74 | 413 | ENDPROC(aes_sparc64_encrypt_192) |
9bf4852d | 414 | |
0bdcaf74 DM |
415 | .align 32 |
416 | ENTRY(aes_sparc64_encrypt_256) | |
417 | /* %o0=key, %o1=input, %o2=output */ | |
9bf4852d DM |
418 | VISEntry |
419 | ld [%o1 + 0x00], %f4 | |
9bf4852d DM |
420 | ld [%o1 + 0x04], %f5 |
421 | ld [%o1 + 0x08], %f6 | |
422 | ld [%o1 + 0x0c], %f7 | |
9bf4852d | 423 | |
0bdcaf74 DM |
424 | ldd [%o0 + 0x00], %f8 |
425 | ldd [%o0 + 0x08], %f10 | |
9bf4852d | 426 | |
0bdcaf74 DM |
427 | fxor %f8, %f4, %f4 |
428 | fxor %f10, %f6, %f6 | |
9bf4852d | 429 | |
0bdcaf74 | 430 | ldd [%o0 + 0x10], %f8 |
9bf4852d | 431 | |
0bdcaf74 DM |
432 | ldd [%o0 + 0x18], %f10 |
433 | ldd [%o0 + 0x20], %f12 | |
434 | ldd [%o0 + 0x28], %f14 | |
435 | add %o0, 0x20, %o0 | |
9bf4852d | 436 | |
0bdcaf74 | 437 | ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2) |
9bf4852d | 438 | |
0bdcaf74 DM |
439 | ldd [%o0 + 0x10], %f8 |
440 | ||
441 | ldd [%o0 + 0x18], %f10 | |
442 | ldd [%o0 + 0x20], %f12 | |
443 | ldd [%o0 + 0x28], %f14 | |
444 | add %o0, 0x20, %o0 | |
445 | ||
446 | ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2) | |
447 | ||
448 | ldd [%o0 + 0x10], %f12 | |
449 | ldd [%o0 + 0x18], %f14 | |
450 | ldd [%o0 + 0x20], %f16 | |
451 | ldd [%o0 + 0x28], %f18 | |
452 | ldd [%o0 + 0x30], %f20 | |
453 | ldd [%o0 + 0x38], %f22 | |
454 | ldd [%o0 + 0x40], %f24 | |
455 | ldd [%o0 + 0x48], %f26 | |
456 | ldd [%o0 + 0x50], %f28 | |
457 | ldd [%o0 + 0x58], %f30 | |
458 | ldd [%o0 + 0x60], %f32 | |
459 | ldd [%o0 + 0x68], %f34 | |
460 | ldd [%o0 + 0x70], %f36 | |
461 | ldd [%o0 + 0x78], %f38 | |
462 | ldd [%o0 + 0x80], %f40 | |
463 | ldd [%o0 + 0x88], %f42 | |
464 | ldd [%o0 + 0x90], %f44 | |
465 | ldd [%o0 + 0x98], %f46 | |
466 | ldd [%o0 + 0xa0], %f48 | |
467 | ldd [%o0 + 0xa8], %f50 | |
468 | ||
469 | ENCRYPT_128(12, 4, 6, 0, 2) | |
9bf4852d DM |
470 | |
471 | st %f4, [%o2 + 0x00] | |
472 | st %f5, [%o2 + 0x04] | |
473 | st %f6, [%o2 + 0x08] | |
474 | st %f7, [%o2 + 0x0c] | |
475 | ||
476 | retl | |
477 | VISExit | |
0bdcaf74 | 478 | ENDPROC(aes_sparc64_encrypt_256) |
9bf4852d | 479 | |
0bdcaf74 DM |
480 | .align 32 |
481 | ENTRY(aes_sparc64_decrypt_128) | |
482 | /* %o0=key, %o1=input, %o2=output */ | |
483 | VISEntry | |
484 | ld [%o1 + 0x00], %f4 | |
485 | ld [%o1 + 0x04], %f5 | |
486 | ld [%o1 + 0x08], %f6 | |
487 | ld [%o1 + 0x0c], %f7 | |
488 | ldd [%o0 + 0xa0], %f8 | |
489 | ldd [%o0 + 0xa8], %f10 | |
490 | ldd [%o0 + 0x98], %f12 | |
491 | ldd [%o0 + 0x90], %f14 | |
492 | ldd [%o0 + 0x88], %f16 | |
493 | ldd [%o0 + 0x80], %f18 | |
494 | ldd [%o0 + 0x78], %f20 | |
495 | ldd [%o0 + 0x70], %f22 | |
496 | ldd [%o0 + 0x68], %f24 | |
497 | ldd [%o0 + 0x60], %f26 | |
498 | ldd [%o0 + 0x58], %f28 | |
499 | ldd [%o0 + 0x50], %f30 | |
500 | ldd [%o0 + 0x48], %f32 | |
501 | ldd [%o0 + 0x40], %f34 | |
502 | ldd [%o0 + 0x38], %f36 | |
503 | ldd [%o0 + 0x30], %f38 | |
504 | ldd [%o0 + 0x28], %f40 | |
505 | ldd [%o0 + 0x20], %f42 | |
506 | ldd [%o0 + 0x18], %f44 | |
507 | ldd [%o0 + 0x10], %f46 | |
508 | ldd [%o0 + 0x08], %f48 | |
509 | ldd [%o0 + 0x00], %f50 | |
510 | fxor %f8, %f4, %f4 | |
511 | fxor %f10, %f6, %f6 | |
512 | DECRYPT_128(12, 4, 6, 0, 2) | |
513 | st %f4, [%o2 + 0x00] | |
514 | st %f5, [%o2 + 0x04] | |
515 | st %f6, [%o2 + 0x08] | |
516 | st %f7, [%o2 + 0x0c] | |
517 | retl | |
518 | VISExit | |
519 | ENDPROC(aes_sparc64_decrypt_128) | |
520 | ||
521 | .align 32 | |
522 | ENTRY(aes_sparc64_decrypt_192) | |
523 | /* %o0=key, %o1=input, %o2=output */ | |
524 | VISEntry | |
525 | ld [%o1 + 0x00], %f4 | |
526 | ld [%o1 + 0x04], %f5 | |
527 | ld [%o1 + 0x08], %f6 | |
528 | ld [%o1 + 0x0c], %f7 | |
529 | ldd [%o0 + 0xc0], %f8 | |
530 | ldd [%o0 + 0xc8], %f10 | |
531 | ldd [%o0 + 0xb8], %f12 | |
532 | ldd [%o0 + 0xb0], %f14 | |
533 | ldd [%o0 + 0xa8], %f16 | |
534 | ldd [%o0 + 0xa0], %f18 | |
535 | fxor %f8, %f4, %f4 | |
536 | fxor %f10, %f6, %f6 | |
537 | ldd [%o0 + 0x98], %f20 | |
538 | ldd [%o0 + 0x90], %f22 | |
539 | ldd [%o0 + 0x88], %f24 | |
540 | ldd [%o0 + 0x80], %f26 | |
541 | DECRYPT_TWO_ROUNDS(12, 4, 6, 0, 2) | |
542 | ldd [%o0 + 0x78], %f28 | |
543 | ldd [%o0 + 0x70], %f30 | |
544 | ldd [%o0 + 0x68], %f32 | |
545 | ldd [%o0 + 0x60], %f34 | |
546 | ldd [%o0 + 0x58], %f36 | |
547 | ldd [%o0 + 0x50], %f38 | |
548 | ldd [%o0 + 0x48], %f40 | |
549 | ldd [%o0 + 0x40], %f42 | |
550 | ldd [%o0 + 0x38], %f44 | |
551 | ldd [%o0 + 0x30], %f46 | |
552 | ldd [%o0 + 0x28], %f48 | |
553 | ldd [%o0 + 0x20], %f50 | |
554 | ldd [%o0 + 0x18], %f52 | |
555 | ldd [%o0 + 0x10], %f54 | |
556 | ldd [%o0 + 0x08], %f56 | |
557 | ldd [%o0 + 0x00], %f58 | |
558 | DECRYPT_128(20, 4, 6, 0, 2) | |
559 | st %f4, [%o2 + 0x00] | |
560 | st %f5, [%o2 + 0x04] | |
561 | st %f6, [%o2 + 0x08] | |
562 | st %f7, [%o2 + 0x0c] | |
563 | retl | |
564 | VISExit | |
565 | ENDPROC(aes_sparc64_decrypt_192) | |
566 | ||
567 | .align 32 | |
568 | ENTRY(aes_sparc64_decrypt_256) | |
569 | /* %o0=key, %o1=input, %o2=output */ | |
570 | VISEntry | |
571 | ld [%o1 + 0x00], %f4 | |
572 | ld [%o1 + 0x04], %f5 | |
573 | ld [%o1 + 0x08], %f6 | |
574 | ld [%o1 + 0x0c], %f7 | |
575 | ldd [%o0 + 0xe0], %f8 | |
576 | ldd [%o0 + 0xe8], %f10 | |
577 | ldd [%o0 + 0xd8], %f12 | |
578 | ldd [%o0 + 0xd0], %f14 | |
579 | ldd [%o0 + 0xc8], %f16 | |
580 | fxor %f8, %f4, %f4 | |
581 | ldd [%o0 + 0xc0], %f18 | |
582 | fxor %f10, %f6, %f6 | |
583 | ldd [%o0 + 0xb8], %f20 | |
584 | AES_DROUND23(12, 4, 6, 2) | |
585 | ldd [%o0 + 0xb0], %f22 | |
586 | AES_DROUND01(14, 4, 6, 0) | |
587 | ldd [%o0 + 0xa8], %f24 | |
588 | AES_DROUND23(16, 0, 2, 6) | |
589 | ldd [%o0 + 0xa0], %f26 | |
590 | AES_DROUND01(18, 0, 2, 4) | |
591 | ldd [%o0 + 0x98], %f12 | |
592 | AES_DROUND23(20, 4, 6, 2) | |
593 | ldd [%o0 + 0x90], %f14 | |
594 | AES_DROUND01(22, 4, 6, 0) | |
595 | ldd [%o0 + 0x88], %f16 | |
596 | AES_DROUND23(24, 0, 2, 6) | |
597 | ldd [%o0 + 0x80], %f18 | |
598 | AES_DROUND01(26, 0, 2, 4) | |
599 | ldd [%o0 + 0x78], %f20 | |
600 | AES_DROUND23(12, 4, 6, 2) | |
601 | ldd [%o0 + 0x70], %f22 | |
602 | AES_DROUND01(14, 4, 6, 0) | |
603 | ldd [%o0 + 0x68], %f24 | |
604 | AES_DROUND23(16, 0, 2, 6) | |
605 | ldd [%o0 + 0x60], %f26 | |
606 | AES_DROUND01(18, 0, 2, 4) | |
607 | ldd [%o0 + 0x58], %f28 | |
608 | AES_DROUND23(20, 4, 6, 2) | |
609 | ldd [%o0 + 0x50], %f30 | |
610 | AES_DROUND01(22, 4, 6, 0) | |
611 | ldd [%o0 + 0x48], %f32 | |
612 | AES_DROUND23(24, 0, 2, 6) | |
613 | ldd [%o0 + 0x40], %f34 | |
614 | AES_DROUND01(26, 0, 2, 4) | |
615 | ldd [%o0 + 0x38], %f36 | |
616 | AES_DROUND23(28, 4, 6, 2) | |
617 | ldd [%o0 + 0x30], %f38 | |
618 | AES_DROUND01(30, 4, 6, 0) | |
619 | ldd [%o0 + 0x28], %f40 | |
620 | AES_DROUND23(32, 0, 2, 6) | |
621 | ldd [%o0 + 0x20], %f42 | |
622 | AES_DROUND01(34, 0, 2, 4) | |
623 | ldd [%o0 + 0x18], %f44 | |
624 | AES_DROUND23(36, 4, 6, 2) | |
625 | ldd [%o0 + 0x10], %f46 | |
626 | AES_DROUND01(38, 4, 6, 0) | |
627 | ldd [%o0 + 0x08], %f48 | |
628 | AES_DROUND23(40, 0, 2, 6) | |
629 | ldd [%o0 + 0x00], %f50 | |
630 | AES_DROUND01(42, 0, 2, 4) | |
631 | AES_DROUND23(44, 4, 6, 2) | |
632 | AES_DROUND01(46, 4, 6, 0) | |
633 | AES_DROUND23_L(48, 0, 2, 6) | |
634 | AES_DROUND01_L(50, 0, 2, 4) | |
635 | st %f4, [%o2 + 0x00] | |
636 | st %f5, [%o2 + 0x04] | |
637 | st %f6, [%o2 + 0x08] | |
638 | st %f7, [%o2 + 0x0c] | |
639 | retl | |
640 | VISExit | |
641 | ENDPROC(aes_sparc64_decrypt_256) | |
642 | ||
643 | .align 32 | |
644 | ENTRY(aes_sparc64_load_encrypt_keys_128) | |
9bf4852d | 645 | /* %o0=key */ |
0bdcaf74 DM |
646 | VISEntry |
647 | ldd [%o0 + 0x10], %f8 | |
648 | ldd [%o0 + 0x18], %f10 | |
649 | ldd [%o0 + 0x20], %f12 | |
650 | ldd [%o0 + 0x28], %f14 | |
651 | ldd [%o0 + 0x30], %f16 | |
652 | ldd [%o0 + 0x38], %f18 | |
653 | ldd [%o0 + 0x40], %f20 | |
654 | ldd [%o0 + 0x48], %f22 | |
655 | ldd [%o0 + 0x50], %f24 | |
656 | ldd [%o0 + 0x58], %f26 | |
657 | ldd [%o0 + 0x60], %f28 | |
658 | ldd [%o0 + 0x68], %f30 | |
659 | ldd [%o0 + 0x70], %f32 | |
660 | ldd [%o0 + 0x78], %f34 | |
661 | ldd [%o0 + 0x80], %f36 | |
662 | ldd [%o0 + 0x88], %f38 | |
663 | ldd [%o0 + 0x90], %f40 | |
664 | ldd [%o0 + 0x98], %f42 | |
665 | ldd [%o0 + 0xa0], %f44 | |
666 | retl | |
667 | ldd [%o0 + 0xa8], %f46 | |
668 | ENDPROC(aes_sparc64_load_encrypt_keys_128) | |
9bf4852d | 669 | |
0bdcaf74 DM |
670 | .align 32 |
671 | ENTRY(aes_sparc64_load_encrypt_keys_192) | |
672 | /* %o0=key */ | |
673 | VISEntry | |
674 | ldd [%o0 + 0x10], %f8 | |
675 | ldd [%o0 + 0x18], %f10 | |
676 | ldd [%o0 + 0x20], %f12 | |
677 | ldd [%o0 + 0x28], %f14 | |
678 | ldd [%o0 + 0x30], %f16 | |
679 | ldd [%o0 + 0x38], %f18 | |
680 | ldd [%o0 + 0x40], %f20 | |
681 | ldd [%o0 + 0x48], %f22 | |
682 | ldd [%o0 + 0x50], %f24 | |
683 | ldd [%o0 + 0x58], %f26 | |
684 | ldd [%o0 + 0x60], %f28 | |
685 | ldd [%o0 + 0x68], %f30 | |
686 | ldd [%o0 + 0x70], %f32 | |
687 | ldd [%o0 + 0x78], %f34 | |
688 | ldd [%o0 + 0x80], %f36 | |
689 | ldd [%o0 + 0x88], %f38 | |
690 | ldd [%o0 + 0x90], %f40 | |
691 | ldd [%o0 + 0x98], %f42 | |
692 | ldd [%o0 + 0xa0], %f44 | |
693 | ldd [%o0 + 0xa8], %f46 | |
694 | ldd [%o0 + 0xb0], %f48 | |
695 | ldd [%o0 + 0xb8], %f50 | |
696 | ldd [%o0 + 0xc0], %f52 | |
697 | retl | |
698 | ldd [%o0 + 0xc8], %f54 | |
699 | ENDPROC(aes_sparc64_load_encrypt_keys_192) | |
700 | ||
701 | .align 32 | |
702 | ENTRY(aes_sparc64_load_encrypt_keys_256) | |
9bf4852d DM |
703 | /* %o0=key */ |
704 | VISEntry | |
705 | ldd [%o0 + 0x10], %f8 | |
706 | ldd [%o0 + 0x18], %f10 | |
707 | ldd [%o0 + 0x20], %f12 | |
708 | ldd [%o0 + 0x28], %f14 | |
709 | ldd [%o0 + 0x30], %f16 | |
710 | ldd [%o0 + 0x38], %f18 | |
711 | ldd [%o0 + 0x40], %f20 | |
712 | ldd [%o0 + 0x48], %f22 | |
713 | ldd [%o0 + 0x50], %f24 | |
714 | ldd [%o0 + 0x58], %f26 | |
715 | ldd [%o0 + 0x60], %f28 | |
716 | ldd [%o0 + 0x68], %f30 | |
717 | ldd [%o0 + 0x70], %f32 | |
718 | ldd [%o0 + 0x78], %f34 | |
719 | ldd [%o0 + 0x80], %f36 | |
720 | ldd [%o0 + 0x88], %f38 | |
721 | ldd [%o0 + 0x90], %f40 | |
722 | ldd [%o0 + 0x98], %f42 | |
723 | ldd [%o0 + 0xa0], %f44 | |
724 | ldd [%o0 + 0xa8], %f46 | |
725 | ldd [%o0 + 0xb0], %f48 | |
726 | ldd [%o0 + 0xb8], %f50 | |
727 | ldd [%o0 + 0xc0], %f52 | |
728 | ldd [%o0 + 0xc8], %f54 | |
729 | ldd [%o0 + 0xd0], %f56 | |
730 | ldd [%o0 + 0xd8], %f58 | |
731 | ldd [%o0 + 0xe0], %f60 | |
732 | retl | |
733 | ldd [%o0 + 0xe8], %f62 | |
0bdcaf74 DM |
734 | ENDPROC(aes_sparc64_load_encrypt_keys_256) |
735 | ||
736 | .align 32 | |
737 | ENTRY(aes_sparc64_load_decrypt_keys_128) | |
738 | /* %o0=key */ | |
739 | VISEntry | |
740 | ldd [%o0 + 0x98], %f8 | |
741 | ldd [%o0 + 0x90], %f10 | |
742 | ldd [%o0 + 0x88], %f12 | |
743 | ldd [%o0 + 0x80], %f14 | |
744 | ldd [%o0 + 0x78], %f16 | |
745 | ldd [%o0 + 0x70], %f18 | |
746 | ldd [%o0 + 0x68], %f20 | |
747 | ldd [%o0 + 0x60], %f22 | |
748 | ldd [%o0 + 0x58], %f24 | |
749 | ldd [%o0 + 0x50], %f26 | |
750 | ldd [%o0 + 0x48], %f28 | |
751 | ldd [%o0 + 0x40], %f30 | |
752 | ldd [%o0 + 0x38], %f32 | |
753 | ldd [%o0 + 0x30], %f34 | |
754 | ldd [%o0 + 0x28], %f36 | |
755 | ldd [%o0 + 0x20], %f38 | |
756 | ldd [%o0 + 0x18], %f40 | |
757 | ldd [%o0 + 0x10], %f42 | |
758 | ldd [%o0 + 0x08], %f44 | |
759 | retl | |
760 | ldd [%o0 + 0x00], %f46 | |
761 | ENDPROC(aes_sparc64_load_decrypt_keys_128) | |
9bf4852d | 762 | |
0bdcaf74 DM |
763 | .align 32 |
764 | ENTRY(aes_sparc64_load_decrypt_keys_192) | |
765 | /* %o0=key */ | |
766 | VISEntry | |
767 | ldd [%o0 + 0xb8], %f8 | |
768 | ldd [%o0 + 0xb0], %f10 | |
769 | ldd [%o0 + 0xa8], %f12 | |
770 | ldd [%o0 + 0xa0], %f14 | |
771 | ldd [%o0 + 0x98], %f16 | |
772 | ldd [%o0 + 0x90], %f18 | |
773 | ldd [%o0 + 0x88], %f20 | |
774 | ldd [%o0 + 0x80], %f22 | |
775 | ldd [%o0 + 0x78], %f24 | |
776 | ldd [%o0 + 0x70], %f26 | |
777 | ldd [%o0 + 0x68], %f28 | |
778 | ldd [%o0 + 0x60], %f30 | |
779 | ldd [%o0 + 0x58], %f32 | |
780 | ldd [%o0 + 0x50], %f34 | |
781 | ldd [%o0 + 0x48], %f36 | |
782 | ldd [%o0 + 0x40], %f38 | |
783 | ldd [%o0 + 0x38], %f40 | |
784 | ldd [%o0 + 0x30], %f42 | |
785 | ldd [%o0 + 0x28], %f44 | |
786 | ldd [%o0 + 0x20], %f46 | |
787 | ldd [%o0 + 0x18], %f48 | |
788 | ldd [%o0 + 0x10], %f50 | |
789 | ldd [%o0 + 0x08], %f52 | |
790 | retl | |
791 | ldd [%o0 + 0x00], %f54 | |
792 | ENDPROC(aes_sparc64_load_decrypt_keys_192) | |
793 | ||
794 | .align 32 | |
795 | ENTRY(aes_sparc64_load_decrypt_keys_256) | |
796 | /* %o0=key */ | |
797 | VISEntry | |
798 | ldd [%o0 + 0xd8], %f8 | |
799 | ldd [%o0 + 0xd0], %f10 | |
800 | ldd [%o0 + 0xc8], %f12 | |
801 | ldd [%o0 + 0xc0], %f14 | |
802 | ldd [%o0 + 0xb8], %f16 | |
803 | ldd [%o0 + 0xb0], %f18 | |
804 | ldd [%o0 + 0xa8], %f20 | |
805 | ldd [%o0 + 0xa0], %f22 | |
806 | ldd [%o0 + 0x98], %f24 | |
807 | ldd [%o0 + 0x90], %f26 | |
808 | ldd [%o0 + 0x88], %f28 | |
809 | ldd [%o0 + 0x80], %f30 | |
810 | ldd [%o0 + 0x78], %f32 | |
811 | ldd [%o0 + 0x70], %f34 | |
812 | ldd [%o0 + 0x68], %f36 | |
813 | ldd [%o0 + 0x60], %f38 | |
814 | ldd [%o0 + 0x58], %f40 | |
815 | ldd [%o0 + 0x50], %f42 | |
816 | ldd [%o0 + 0x48], %f44 | |
817 | ldd [%o0 + 0x40], %f46 | |
818 | ldd [%o0 + 0x38], %f48 | |
819 | ldd [%o0 + 0x30], %f50 | |
820 | ldd [%o0 + 0x28], %f52 | |
821 | ldd [%o0 + 0x20], %f54 | |
822 | ldd [%o0 + 0x18], %f56 | |
823 | ldd [%o0 + 0x10], %f58 | |
824 | ldd [%o0 + 0x08], %f60 | |
825 | retl | |
826 | ldd [%o0 + 0x00], %f62 | |
827 | ENDPROC(aes_sparc64_load_decrypt_keys_256) | |
828 | ||
829 | .align 32 | |
830 | ENTRY(aes_sparc64_ecb_encrypt_128) | |
831 | /* %o0=key, %o1=input, %o2=output, %o3=len */ | |
9bf4852d DM |
832 | ldx [%o0 + 0x00], %g1 |
833 | ldx [%o0 + 0x08], %g2 | |
0bdcaf74 | 834 | 1: ldx [%o1 + 0x00], %g3 |
9bf4852d DM |
835 | ldx [%o1 + 0x08], %g7 |
836 | add %o1, 0x10, %o1 | |
837 | xor %g1, %g3, %g3 | |
838 | xor %g2, %g7, %g7 | |
839 | MOVXTOD_G3_F4 | |
840 | MOVXTOD_G7_F6 | |
0bdcaf74 | 841 | ENCRYPT_128(8, 4, 6, 0, 2) |
9bf4852d DM |
842 | std %f4, [%o2 + 0x00] |
843 | std %f6, [%o2 + 0x08] | |
0bdcaf74 DM |
844 | subcc %o3, 0x10, %o3 |
845 | bne,pt %xcc, 1b | |
9bf4852d | 846 | add %o2, 0x10, %o2 |
9bf4852d DM |
847 | retl |
848 | nop | |
0bdcaf74 | 849 | ENDPROC(aes_sparc64_ecb_encrypt_128) |
9bf4852d | 850 | |
0bdcaf74 DM |
851 | .align 32 |
852 | ENTRY(aes_sparc64_ecb_encrypt_192) | |
853 | /* %o0=key, %o1=input, %o2=output, %o3=len */ | |
854 | ldx [%o0 + 0x00], %g1 | |
855 | ldx [%o0 + 0x08], %g2 | |
856 | 1: ldx [%o1 + 0x00], %g3 | |
9bf4852d DM |
857 | ldx [%o1 + 0x08], %g7 |
858 | add %o1, 0x10, %o1 | |
859 | xor %g1, %g3, %g3 | |
860 | xor %g2, %g7, %g7 | |
861 | MOVXTOD_G3_F4 | |
862 | MOVXTOD_G7_F6 | |
9bf4852d | 863 | ENCRYPT_192(8, 4, 6, 0, 2) |
9bf4852d DM |
864 | std %f4, [%o2 + 0x00] |
865 | std %f6, [%o2 + 0x08] | |
0bdcaf74 | 866 | subcc %o3, 0x10, %o3 |
9bf4852d DM |
867 | bne,pt %xcc, 1b |
868 | add %o2, 0x10, %o2 | |
9bf4852d DM |
869 | retl |
870 | nop | |
0bdcaf74 | 871 | ENDPROC(aes_sparc64_ecb_encrypt_192) |
9bf4852d | 872 | |
0bdcaf74 DM |
873 | .align 32 |
874 | ENTRY(aes_sparc64_ecb_encrypt_256) | |
875 | /* %o0=key, %o1=input, %o2=output, %o3=len */ | |
876 | ldx [%o0 + 0x00], %g1 | |
877 | ldx [%o0 + 0x08], %g2 | |
878 | 1: ldx [%o1 + 0x00], %g3 | |
9bf4852d DM |
879 | ldx [%o1 + 0x08], %g7 |
880 | add %o1, 0x10, %o1 | |
881 | xor %g1, %g3, %g3 | |
882 | xor %g2, %g7, %g7 | |
883 | MOVXTOD_G3_F4 | |
884 | MOVXTOD_G7_F6 | |
0bdcaf74 | 885 | ENCRYPT_256(8, 4, 6, 0, 2) |
9bf4852d DM |
886 | std %f4, [%o2 + 0x00] |
887 | std %f6, [%o2 + 0x08] | |
0bdcaf74 DM |
888 | subcc %o3, 0x10, %o3 |
889 | bne,pt %xcc, 1b | |
9bf4852d | 890 | add %o2, 0x10, %o2 |
9bf4852d DM |
891 | retl |
892 | nop | |
0bdcaf74 | 893 | ENDPROC(aes_sparc64_ecb_encrypt_256) |
9bf4852d | 894 | |
0bdcaf74 DM |
895 | .align 32 |
896 | ENTRY(aes_sparc64_ecb_decrypt_128) | |
897 | /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */ | |
9bf4852d DM |
898 | ldx [%o0 - 0x10], %g1 |
899 | ldx [%o0 - 0x08], %g2 | |
0bdcaf74 | 900 | 1: ldx [%o1 + 0x00], %g3 |
9bf4852d DM |
901 | ldx [%o1 + 0x08], %g7 |
902 | add %o1, 0x10, %o1 | |
903 | xor %g1, %g3, %g3 | |
904 | xor %g2, %g7, %g7 | |
905 | MOVXTOD_G3_F4 | |
906 | MOVXTOD_G7_F6 | |
0bdcaf74 | 907 | DECRYPT_128(8, 4, 6, 0, 2) |
9bf4852d DM |
908 | std %f4, [%o2 + 0x00] |
909 | std %f6, [%o2 + 0x08] | |
0bdcaf74 DM |
910 | subcc %o3, 0x10, %o3 |
911 | bne,pt %xcc, 1b | |
9bf4852d | 912 | add %o2, 0x10, %o2 |
9bf4852d DM |
913 | retl |
914 | nop | |
0bdcaf74 | 915 | ENDPROC(aes_sparc64_ecb_decrypt_128) |
9bf4852d | 916 | |
0bdcaf74 DM |
917 | .align 32 |
918 | ENTRY(aes_sparc64_ecb_decrypt_192) | |
919 | /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */ | |
920 | ldx [%o0 - 0x10], %g1 | |
921 | ldx [%o0 - 0x08], %g2 | |
922 | 1: ldx [%o1 + 0x00], %g3 | |
9bf4852d DM |
923 | ldx [%o1 + 0x08], %g7 |
924 | add %o1, 0x10, %o1 | |
925 | xor %g1, %g3, %g3 | |
926 | xor %g2, %g7, %g7 | |
927 | MOVXTOD_G3_F4 | |
928 | MOVXTOD_G7_F6 | |
0bdcaf74 | 929 | DECRYPT_192(8, 4, 6, 0, 2) |
9bf4852d DM |
930 | std %f4, [%o2 + 0x00] |
931 | std %f6, [%o2 + 0x08] | |
0bdcaf74 | 932 | subcc %o3, 0x10, %o3 |
9bf4852d DM |
933 | bne,pt %xcc, 1b |
934 | add %o2, 0x10, %o2 | |
9bf4852d DM |
935 | retl |
936 | nop | |
0bdcaf74 | 937 | ENDPROC(aes_sparc64_ecb_decrypt_192) |
9bf4852d | 938 | |
0bdcaf74 DM |
939 | .align 32 |
940 | ENTRY(aes_sparc64_ecb_decrypt_256) | |
941 | /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */ | |
942 | ldx [%o0 - 0x10], %g1 | |
943 | ldx [%o0 - 0x08], %g2 | |
944 | 1: ldx [%o1 + 0x00], %g3 | |
9bf4852d DM |
945 | ldx [%o1 + 0x08], %g7 |
946 | add %o1, 0x10, %o1 | |
947 | xor %g1, %g3, %g3 | |
948 | xor %g2, %g7, %g7 | |
949 | MOVXTOD_G3_F4 | |
950 | MOVXTOD_G7_F6 | |
0bdcaf74 | 951 | DECRYPT_256(8, 4, 6, 0, 2) |
9bf4852d DM |
952 | std %f4, [%o2 + 0x00] |
953 | std %f6, [%o2 + 0x08] | |
0bdcaf74 DM |
954 | subcc %o3, 0x10, %o3 |
955 | bne,pt %xcc, 1b | |
9bf4852d | 956 | add %o2, 0x10, %o2 |
9bf4852d DM |
957 | retl |
958 | nop | |
0bdcaf74 | 959 | ENDPROC(aes_sparc64_ecb_decrypt_256) |
9bf4852d | 960 | |
0bdcaf74 DM |
961 | .align 32 |
962 | ENTRY(aes_sparc64_cbc_encrypt_128) | |
963 | /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ | |
964 | ldd [%o4 + 0x00], %f4 | |
965 | ldd [%o4 + 0x08], %f6 | |
9bf4852d DM |
966 | ldx [%o0 + 0x00], %g1 |
967 | ldx [%o0 + 0x08], %g2 | |
0bdcaf74 | 968 | 1: ldx [%o1 + 0x00], %g3 |
9bf4852d DM |
969 | ldx [%o1 + 0x08], %g7 |
970 | add %o1, 0x10, %o1 | |
971 | xor %g1, %g3, %g3 | |
972 | xor %g2, %g7, %g7 | |
973 | MOVXTOD_G3_F0 | |
974 | MOVXTOD_G7_F2 | |
975 | fxor %f4, %f0, %f4 | |
976 | fxor %f6, %f2, %f6 | |
0bdcaf74 | 977 | ENCRYPT_128(8, 4, 6, 0, 2) |
9bf4852d DM |
978 | std %f4, [%o2 + 0x00] |
979 | std %f6, [%o2 + 0x08] | |
0bdcaf74 DM |
980 | subcc %o3, 0x10, %o3 |
981 | bne,pt %xcc, 1b | |
9bf4852d | 982 | add %o2, 0x10, %o2 |
0bdcaf74 DM |
983 | std %f4, [%o4 + 0x00] |
984 | std %f6, [%o4 + 0x08] | |
9bf4852d DM |
985 | retl |
986 | nop | |
0bdcaf74 | 987 | ENDPROC(aes_sparc64_cbc_encrypt_128) |
9bf4852d | 988 | |
0bdcaf74 DM |
989 | .align 32 |
990 | ENTRY(aes_sparc64_cbc_encrypt_192) | |
991 | /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ | |
992 | ldd [%o4 + 0x00], %f4 | |
993 | ldd [%o4 + 0x08], %f6 | |
994 | ldx [%o0 + 0x00], %g1 | |
995 | ldx [%o0 + 0x08], %g2 | |
996 | 1: ldx [%o1 + 0x00], %g3 | |
9bf4852d DM |
997 | ldx [%o1 + 0x08], %g7 |
998 | add %o1, 0x10, %o1 | |
999 | xor %g1, %g3, %g3 | |
1000 | xor %g2, %g7, %g7 | |
1001 | MOVXTOD_G3_F0 | |
1002 | MOVXTOD_G7_F2 | |
1003 | fxor %f4, %f0, %f4 | |
1004 | fxor %f6, %f2, %f6 | |
9bf4852d | 1005 | ENCRYPT_192(8, 4, 6, 0, 2) |
9bf4852d DM |
1006 | std %f4, [%o2 + 0x00] |
1007 | std %f6, [%o2 + 0x08] | |
0bdcaf74 | 1008 | subcc %o3, 0x10, %o3 |
9bf4852d DM |
1009 | bne,pt %xcc, 1b |
1010 | add %o2, 0x10, %o2 | |
0bdcaf74 DM |
1011 | std %f4, [%o4 + 0x00] |
1012 | std %f6, [%o4 + 0x08] | |
9bf4852d DM |
1013 | retl |
1014 | nop | |
0bdcaf74 | 1015 | ENDPROC(aes_sparc64_cbc_encrypt_192) |
9bf4852d | 1016 | |
0bdcaf74 DM |
1017 | .align 32 |
1018 | ENTRY(aes_sparc64_cbc_encrypt_256) | |
1019 | /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ | |
1020 | ldd [%o4 + 0x00], %f4 | |
1021 | ldd [%o4 + 0x08], %f6 | |
1022 | ldx [%o0 + 0x00], %g1 | |
1023 | ldx [%o0 + 0x08], %g2 | |
1024 | 1: ldx [%o1 + 0x00], %g3 | |
9bf4852d DM |
1025 | ldx [%o1 + 0x08], %g7 |
1026 | add %o1, 0x10, %o1 | |
1027 | xor %g1, %g3, %g3 | |
1028 | xor %g2, %g7, %g7 | |
1029 | MOVXTOD_G3_F0 | |
1030 | MOVXTOD_G7_F2 | |
1031 | fxor %f4, %f0, %f4 | |
1032 | fxor %f6, %f2, %f6 | |
0bdcaf74 | 1033 | ENCRYPT_256(8, 4, 6, 0, 2) |
9bf4852d DM |
1034 | std %f4, [%o2 + 0x00] |
1035 | std %f6, [%o2 + 0x08] | |
0bdcaf74 DM |
1036 | subcc %o3, 0x10, %o3 |
1037 | bne,pt %xcc, 1b | |
9bf4852d | 1038 | add %o2, 0x10, %o2 |
0bdcaf74 DM |
1039 | std %f4, [%o4 + 0x00] |
1040 | std %f6, [%o4 + 0x08] | |
9bf4852d DM |
1041 | retl |
1042 | nop | |
0bdcaf74 | 1043 | ENDPROC(aes_sparc64_cbc_encrypt_256) |
9bf4852d | 1044 | |
0bdcaf74 DM |
1045 | .align 32 |
1046 | ENTRY(aes_sparc64_cbc_decrypt_128) | |
1047 | /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */ | |
9bf4852d DM |
1048 | ldx [%o0 - 0x10], %g1 |
1049 | ldx [%o0 - 0x08], %g2 | |
0bdcaf74 DM |
1050 | ldx [%o4 + 0x00], %o0 |
1051 | ldx [%o4 + 0x08], %o5 | |
1052 | 1: ldx [%o1 + 0x00], %g3 | |
1053 | ldx [%o1 + 0x08], %g7 | |
1054 | add %o1, 0x10, %o1 | |
9bf4852d DM |
1055 | xor %g1, %g3, %g3 |
1056 | xor %g2, %g7, %g7 | |
1057 | MOVXTOD_G3_F4 | |
1058 | MOVXTOD_G7_F6 | |
0bdcaf74 | 1059 | DECRYPT_128(8, 4, 6, 0, 2) |
9bf4852d | 1060 | MOVXTOD_O0_F0 |
0bdcaf74 | 1061 | MOVXTOD_O5_F2 |
9bf4852d | 1062 | xor %g1, %g3, %o0 |
0bdcaf74 | 1063 | xor %g2, %g7, %o5 |
9bf4852d DM |
1064 | fxor %f4, %f0, %f4 |
1065 | fxor %f6, %f2, %f6 | |
0bdcaf74 DM |
1066 | std %f4, [%o2 + 0x00] |
1067 | std %f6, [%o2 + 0x08] | |
1068 | subcc %o3, 0x10, %o3 | |
1069 | bne,pt %xcc, 1b | |
1070 | add %o2, 0x10, %o2 | |
1071 | stx %o0, [%o4 + 0x00] | |
1072 | stx %o5, [%o4 + 0x08] | |
9bf4852d DM |
1073 | retl |
1074 | nop | |
0bdcaf74 | 1075 | ENDPROC(aes_sparc64_cbc_decrypt_128) |
9bf4852d | 1076 | |
0bdcaf74 DM |
1077 | .align 32 |
1078 | ENTRY(aes_sparc64_cbc_decrypt_192) | |
1079 | /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */ | |
1080 | ldx [%o0 - 0x10], %g1 | |
1081 | ldx [%o0 - 0x08], %g2 | |
1082 | ldx [%o4 + 0x00], %o0 | |
1083 | ldx [%o4 + 0x08], %o5 | |
1084 | 1: ldx [%o1 + 0x00], %g3 | |
1085 | ldx [%o1 + 0x08], %g7 | |
1086 | add %o1, 0x10, %o1 | |
9bf4852d DM |
1087 | xor %g1, %g3, %g3 |
1088 | xor %g2, %g7, %g7 | |
1089 | MOVXTOD_G3_F4 | |
1090 | MOVXTOD_G7_F6 | |
0bdcaf74 | 1091 | DECRYPT_192(8, 4, 6, 0, 2) |
9bf4852d | 1092 | MOVXTOD_O0_F0 |
0bdcaf74 | 1093 | MOVXTOD_O5_F2 |
9bf4852d | 1094 | xor %g1, %g3, %o0 |
0bdcaf74 | 1095 | xor %g2, %g7, %o5 |
9bf4852d DM |
1096 | fxor %f4, %f0, %f4 |
1097 | fxor %f6, %f2, %f6 | |
0bdcaf74 DM |
1098 | std %f4, [%o2 + 0x00] |
1099 | std %f6, [%o2 + 0x08] | |
1100 | subcc %o3, 0x10, %o3 | |
9bf4852d | 1101 | bne,pt %xcc, 1b |
0bdcaf74 DM |
1102 | add %o2, 0x10, %o2 |
1103 | stx %o0, [%o4 + 0x00] | |
1104 | stx %o5, [%o4 + 0x08] | |
9bf4852d DM |
1105 | retl |
1106 | nop | |
0bdcaf74 | 1107 | ENDPROC(aes_sparc64_cbc_decrypt_192) |
9bf4852d | 1108 | |
0bdcaf74 DM |
1109 | .align 32 |
1110 | ENTRY(aes_sparc64_cbc_decrypt_256) | |
1111 | /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */ | |
1112 | ldx [%o0 - 0x10], %g1 | |
1113 | ldx [%o0 - 0x08], %g2 | |
1114 | ldx [%o4 + 0x00], %o0 | |
1115 | ldx [%o4 + 0x08], %o5 | |
1116 | 1: ldx [%o1 + 0x00], %g3 | |
1117 | ldx [%o1 + 0x08], %g7 | |
1118 | add %o1, 0x10, %o1 | |
9bf4852d DM |
1119 | xor %g1, %g3, %g3 |
1120 | xor %g2, %g7, %g7 | |
1121 | MOVXTOD_G3_F4 | |
1122 | MOVXTOD_G7_F6 | |
0bdcaf74 | 1123 | DECRYPT_256(8, 4, 6, 0, 2) |
9bf4852d | 1124 | MOVXTOD_O0_F0 |
0bdcaf74 | 1125 | MOVXTOD_O5_F2 |
9bf4852d | 1126 | xor %g1, %g3, %o0 |
0bdcaf74 | 1127 | xor %g2, %g7, %o5 |
9bf4852d DM |
1128 | fxor %f4, %f0, %f4 |
1129 | fxor %f6, %f2, %f6 | |
0bdcaf74 DM |
1130 | std %f4, [%o2 + 0x00] |
1131 | std %f6, [%o2 + 0x08] | |
1132 | subcc %o3, 0x10, %o3 | |
1133 | bne,pt %xcc, 1b | |
1134 | add %o2, 0x10, %o2 | |
1135 | stx %o0, [%o4 + 0x00] | |
1136 | stx %o5, [%o4 + 0x08] | |
9bf4852d DM |
1137 | retl |
1138 | nop | |
0bdcaf74 | 1139 | ENDPROC(aes_sparc64_cbc_decrypt_256) |