blob: 42b69c154d947812e0dcde4f44bd5b17e4712e97 [file] [log] [blame]
Robert Sloanc9abfe42018-11-26 12:19:07 -08001# This file is generated from a similarly-named Perl script in the BoringSSL
2# source tree. Do not edit by hand.
3
Robert Sloan726e9d12018-09-11 11:45:04 -07004#if defined(__has_feature)
Robert Sloanf573be72018-09-17 15:29:11 -07005#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
6#define OPENSSL_NO_ASM
Robert Sloan726e9d12018-09-11 11:45:04 -07007#endif
8#endif
9
10#if !defined(OPENSSL_NO_ASM) && defined(__powerpc64__)
Robert Sloan572a4e22017-04-17 10:52:19 -070011.machine "any"
12
Robert Sloan8ff03552017-06-14 12:40:58 -070013.abiversion 2
Robert Sloan572a4e22017-04-17 10:52:19 -070014.text
15
16.align 7
Robert Sloan8ff03552017-06-14 12:40:58 -070017.Lrcon:
Robert Sloan572a4e22017-04-17 10:52:19 -070018.byte 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01
19.byte 0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b
20.byte 0x0c,0x0f,0x0e,0x0d,0x0c,0x0f,0x0e,0x0d,0x0c,0x0f,0x0e,0x0d,0x0c,0x0f,0x0e,0x0d
21.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
Robert Sloan8ff03552017-06-14 12:40:58 -070022.Lconsts:
Robert Sloan572a4e22017-04-17 10:52:19 -070023 mflr 0
24 bcl 20,31,$+4
25 mflr 6
26 addi 6,6,-0x48
27 mtlr 0
28 blr
29.long 0
30.byte 0,12,0x14,0,0,0,0,0
31.byte 65,69,83,32,102,111,114,32,80,111,119,101,114,73,83,65,32,50,46,48,55,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
32.align 2
33
34.globl aes_hw_set_encrypt_key
Robert Sloan8ff03552017-06-14 12:40:58 -070035.type aes_hw_set_encrypt_key,@function
Robert Sloan572a4e22017-04-17 10:52:19 -070036.align 5
37aes_hw_set_encrypt_key:
Robert Sloan8ff03552017-06-14 12:40:58 -070038.localentry aes_hw_set_encrypt_key,0
39
40.Lset_encrypt_key:
Robert Sloan572a4e22017-04-17 10:52:19 -070041 mflr 11
42 std 11,16(1)
43
44 li 6,-1
45 cmpldi 3,0
Robert Sloan8ff03552017-06-14 12:40:58 -070046 beq- .Lenc_key_abort
Robert Sloan572a4e22017-04-17 10:52:19 -070047 cmpldi 5,0
Robert Sloan8ff03552017-06-14 12:40:58 -070048 beq- .Lenc_key_abort
Robert Sloan572a4e22017-04-17 10:52:19 -070049 li 6,-2
50 cmpwi 4,128
Robert Sloan8ff03552017-06-14 12:40:58 -070051 blt- .Lenc_key_abort
Robert Sloan572a4e22017-04-17 10:52:19 -070052 cmpwi 4,256
Robert Sloan8ff03552017-06-14 12:40:58 -070053 bgt- .Lenc_key_abort
Robert Sloan572a4e22017-04-17 10:52:19 -070054 andi. 0,4,0x3f
Robert Sloan8ff03552017-06-14 12:40:58 -070055 bne- .Lenc_key_abort
Robert Sloan572a4e22017-04-17 10:52:19 -070056
57 lis 0,0xfff0
Robert Sloan8ff03552017-06-14 12:40:58 -070058 li 12,-1
59 or 0,0,0
Robert Sloan572a4e22017-04-17 10:52:19 -070060
Robert Sloan8ff03552017-06-14 12:40:58 -070061 bl .Lconsts
Robert Sloan572a4e22017-04-17 10:52:19 -070062 mtlr 11
63
64 neg 9,3
65 lvx 1,0,3
66 addi 3,3,15
67 lvsr 3,0,9
68 li 8,0x20
69 cmpwi 4,192
70 lvx 2,0,3
71 vspltisb 5,0x0f
72 lvx 4,0,6
73 vxor 3,3,5
74 lvx 5,8,6
75 addi 6,6,0x10
76 vperm 1,1,2,3
77 li 7,8
78 vxor 0,0,0
79 mtctr 7
80
81 lvsl 8,0,5
82 vspltisb 9,-1
83 lvx 10,0,5
84 vperm 9,9,0,8
85
Robert Sloan8ff03552017-06-14 12:40:58 -070086 blt .Loop128
Robert Sloan572a4e22017-04-17 10:52:19 -070087 addi 3,3,8
Robert Sloan8ff03552017-06-14 12:40:58 -070088 beq .L192
Robert Sloan572a4e22017-04-17 10:52:19 -070089 addi 3,3,8
Robert Sloan8ff03552017-06-14 12:40:58 -070090 b .L256
Robert Sloan572a4e22017-04-17 10:52:19 -070091
92.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -070093.Loop128:
Robert Sloan572a4e22017-04-17 10:52:19 -070094 vperm 3,1,1,5
95 vsldoi 6,0,1,12
96 vperm 11,1,1,8
97 vsel 7,10,11,9
98 vor 10,11,11
99 .long 0x10632509
100 stvx 7,0,5
101 addi 5,5,16
102
103 vxor 1,1,6
104 vsldoi 6,0,6,12
105 vxor 1,1,6
106 vsldoi 6,0,6,12
107 vxor 1,1,6
108 vadduwm 4,4,4
109 vxor 1,1,3
Robert Sloan8ff03552017-06-14 12:40:58 -0700110 bdnz .Loop128
Robert Sloan572a4e22017-04-17 10:52:19 -0700111
112 lvx 4,0,6
113
114 vperm 3,1,1,5
115 vsldoi 6,0,1,12
116 vperm 11,1,1,8
117 vsel 7,10,11,9
118 vor 10,11,11
119 .long 0x10632509
120 stvx 7,0,5
121 addi 5,5,16
122
123 vxor 1,1,6
124 vsldoi 6,0,6,12
125 vxor 1,1,6
126 vsldoi 6,0,6,12
127 vxor 1,1,6
128 vadduwm 4,4,4
129 vxor 1,1,3
130
131 vperm 3,1,1,5
132 vsldoi 6,0,1,12
133 vperm 11,1,1,8
134 vsel 7,10,11,9
135 vor 10,11,11
136 .long 0x10632509
137 stvx 7,0,5
138 addi 5,5,16
139
140 vxor 1,1,6
141 vsldoi 6,0,6,12
142 vxor 1,1,6
143 vsldoi 6,0,6,12
144 vxor 1,1,6
145 vxor 1,1,3
146 vperm 11,1,1,8
147 vsel 7,10,11,9
148 vor 10,11,11
149 stvx 7,0,5
150
151 addi 3,5,15
152 addi 5,5,0x50
153
154 li 8,10
Robert Sloan8ff03552017-06-14 12:40:58 -0700155 b .Ldone
Robert Sloan572a4e22017-04-17 10:52:19 -0700156
157.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -0700158.L192:
Robert Sloan572a4e22017-04-17 10:52:19 -0700159 lvx 6,0,3
160 li 7,4
161 vperm 11,1,1,8
162 vsel 7,10,11,9
163 vor 10,11,11
164 stvx 7,0,5
165 addi 5,5,16
166 vperm 2,2,6,3
167 vspltisb 3,8
168 mtctr 7
169 vsububm 5,5,3
170
Robert Sloan8ff03552017-06-14 12:40:58 -0700171.Loop192:
Robert Sloan572a4e22017-04-17 10:52:19 -0700172 vperm 3,2,2,5
173 vsldoi 6,0,1,12
174 .long 0x10632509
175
176 vxor 1,1,6
177 vsldoi 6,0,6,12
178 vxor 1,1,6
179 vsldoi 6,0,6,12
180 vxor 1,1,6
181
182 vsldoi 7,0,2,8
183 vspltw 6,1,3
184 vxor 6,6,2
185 vsldoi 2,0,2,12
186 vadduwm 4,4,4
187 vxor 2,2,6
188 vxor 1,1,3
189 vxor 2,2,3
190 vsldoi 7,7,1,8
191
192 vperm 3,2,2,5
193 vsldoi 6,0,1,12
194 vperm 11,7,7,8
195 vsel 7,10,11,9
196 vor 10,11,11
197 .long 0x10632509
198 stvx 7,0,5
199 addi 5,5,16
200
201 vsldoi 7,1,2,8
202 vxor 1,1,6
203 vsldoi 6,0,6,12
204 vperm 11,7,7,8
205 vsel 7,10,11,9
206 vor 10,11,11
207 vxor 1,1,6
208 vsldoi 6,0,6,12
209 vxor 1,1,6
210 stvx 7,0,5
211 addi 5,5,16
212
213 vspltw 6,1,3
214 vxor 6,6,2
215 vsldoi 2,0,2,12
216 vadduwm 4,4,4
217 vxor 2,2,6
218 vxor 1,1,3
219 vxor 2,2,3
220 vperm 11,1,1,8
221 vsel 7,10,11,9
222 vor 10,11,11
223 stvx 7,0,5
224 addi 3,5,15
225 addi 5,5,16
Robert Sloan8ff03552017-06-14 12:40:58 -0700226 bdnz .Loop192
Robert Sloan572a4e22017-04-17 10:52:19 -0700227
228 li 8,12
229 addi 5,5,0x20
Robert Sloan8ff03552017-06-14 12:40:58 -0700230 b .Ldone
Robert Sloan572a4e22017-04-17 10:52:19 -0700231
232.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -0700233.L256:
Robert Sloan572a4e22017-04-17 10:52:19 -0700234 lvx 6,0,3
235 li 7,7
236 li 8,14
237 vperm 11,1,1,8
238 vsel 7,10,11,9
239 vor 10,11,11
240 stvx 7,0,5
241 addi 5,5,16
242 vperm 2,2,6,3
243 mtctr 7
244
Robert Sloan8ff03552017-06-14 12:40:58 -0700245.Loop256:
Robert Sloan572a4e22017-04-17 10:52:19 -0700246 vperm 3,2,2,5
247 vsldoi 6,0,1,12
248 vperm 11,2,2,8
249 vsel 7,10,11,9
250 vor 10,11,11
251 .long 0x10632509
252 stvx 7,0,5
253 addi 5,5,16
254
255 vxor 1,1,6
256 vsldoi 6,0,6,12
257 vxor 1,1,6
258 vsldoi 6,0,6,12
259 vxor 1,1,6
260 vadduwm 4,4,4
261 vxor 1,1,3
262 vperm 11,1,1,8
263 vsel 7,10,11,9
264 vor 10,11,11
265 stvx 7,0,5
266 addi 3,5,15
267 addi 5,5,16
Robert Sloan8ff03552017-06-14 12:40:58 -0700268 bdz .Ldone
Robert Sloan572a4e22017-04-17 10:52:19 -0700269
270 vspltw 3,1,3
271 vsldoi 6,0,2,12
272 .long 0x106305C8
273
274 vxor 2,2,6
275 vsldoi 6,0,6,12
276 vxor 2,2,6
277 vsldoi 6,0,6,12
278 vxor 2,2,6
279
280 vxor 2,2,3
Robert Sloan8ff03552017-06-14 12:40:58 -0700281 b .Loop256
Robert Sloan572a4e22017-04-17 10:52:19 -0700282
283.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -0700284.Ldone:
Robert Sloan572a4e22017-04-17 10:52:19 -0700285 lvx 2,0,3
286 vsel 2,10,2,9
287 stvx 2,0,3
288 li 6,0
Robert Sloan8ff03552017-06-14 12:40:58 -0700289 or 12,12,12
Robert Sloan572a4e22017-04-17 10:52:19 -0700290 stw 8,0(5)
291
Robert Sloan8ff03552017-06-14 12:40:58 -0700292.Lenc_key_abort:
Robert Sloan572a4e22017-04-17 10:52:19 -0700293 mr 3,6
294 blr
295.long 0
296.byte 0,12,0x14,1,0,0,3,0
297.long 0
Robert Sloan8ff03552017-06-14 12:40:58 -0700298.size aes_hw_set_encrypt_key,.-aes_hw_set_encrypt_key
Robert Sloan572a4e22017-04-17 10:52:19 -0700299
300.globl aes_hw_set_decrypt_key
Robert Sloan8ff03552017-06-14 12:40:58 -0700301.type aes_hw_set_decrypt_key,@function
Robert Sloan572a4e22017-04-17 10:52:19 -0700302.align 5
303aes_hw_set_decrypt_key:
Robert Sloan8ff03552017-06-14 12:40:58 -0700304.localentry aes_hw_set_decrypt_key,0
305
Robert Sloan572a4e22017-04-17 10:52:19 -0700306 stdu 1,-64(1)
307 mflr 10
Robert Sloan8ff03552017-06-14 12:40:58 -0700308 std 10,80(1)
309 bl .Lset_encrypt_key
Robert Sloan572a4e22017-04-17 10:52:19 -0700310 mtlr 10
311
312 cmpwi 3,0
Robert Sloan8ff03552017-06-14 12:40:58 -0700313 bne- .Ldec_key_abort
Robert Sloan572a4e22017-04-17 10:52:19 -0700314
315 slwi 7,8,4
316 subi 3,5,240
317 srwi 8,8,1
318 add 5,3,7
319 mtctr 8
320
Robert Sloan8ff03552017-06-14 12:40:58 -0700321.Ldeckey:
Robert Sloan572a4e22017-04-17 10:52:19 -0700322 lwz 0, 0(3)
323 lwz 6, 4(3)
324 lwz 7, 8(3)
325 lwz 8, 12(3)
326 addi 3,3,16
327 lwz 9, 0(5)
328 lwz 10,4(5)
329 lwz 11,8(5)
330 lwz 12,12(5)
331 stw 0, 0(5)
332 stw 6, 4(5)
333 stw 7, 8(5)
334 stw 8, 12(5)
335 subi 5,5,16
336 stw 9, -16(3)
337 stw 10,-12(3)
338 stw 11,-8(3)
339 stw 12,-4(3)
Robert Sloan8ff03552017-06-14 12:40:58 -0700340 bdnz .Ldeckey
Robert Sloan572a4e22017-04-17 10:52:19 -0700341
342 xor 3,3,3
Robert Sloan8ff03552017-06-14 12:40:58 -0700343.Ldec_key_abort:
Robert Sloan572a4e22017-04-17 10:52:19 -0700344 addi 1,1,64
345 blr
346.long 0
347.byte 0,12,4,1,0x80,0,3,0
348.long 0
Robert Sloan8ff03552017-06-14 12:40:58 -0700349.size aes_hw_set_decrypt_key,.-aes_hw_set_decrypt_key
Robert Sloan572a4e22017-04-17 10:52:19 -0700350.globl aes_hw_encrypt
Robert Sloan8ff03552017-06-14 12:40:58 -0700351.type aes_hw_encrypt,@function
Robert Sloan572a4e22017-04-17 10:52:19 -0700352.align 5
353aes_hw_encrypt:
Robert Sloan8ff03552017-06-14 12:40:58 -0700354.localentry aes_hw_encrypt,0
355
Robert Sloan572a4e22017-04-17 10:52:19 -0700356 lwz 6,240(5)
357 lis 0,0xfc00
Robert Sloan8ff03552017-06-14 12:40:58 -0700358 li 12,-1
Robert Sloan572a4e22017-04-17 10:52:19 -0700359 li 7,15
Robert Sloan8ff03552017-06-14 12:40:58 -0700360 or 0,0,0
Robert Sloan572a4e22017-04-17 10:52:19 -0700361
362 lvx 0,0,3
363 neg 11,4
364 lvx 1,7,3
365 lvsl 2,0,3
366 vspltisb 4,0x0f
367 lvsr 3,0,11
368 vxor 2,2,4
369 li 7,16
370 vperm 0,0,1,2
371 lvx 1,0,5
372 lvsr 5,0,5
373 srwi 6,6,1
374 lvx 2,7,5
375 addi 7,7,16
376 subi 6,6,1
377 vperm 1,2,1,5
378
379 vxor 0,0,1
380 lvx 1,7,5
381 addi 7,7,16
382 mtctr 6
383
Robert Sloan8ff03552017-06-14 12:40:58 -0700384.Loop_enc:
Robert Sloan572a4e22017-04-17 10:52:19 -0700385 vperm 2,1,2,5
386 .long 0x10001508
387 lvx 2,7,5
388 addi 7,7,16
389 vperm 1,2,1,5
390 .long 0x10000D08
391 lvx 1,7,5
392 addi 7,7,16
Robert Sloan8ff03552017-06-14 12:40:58 -0700393 bdnz .Loop_enc
Robert Sloan572a4e22017-04-17 10:52:19 -0700394
395 vperm 2,1,2,5
396 .long 0x10001508
397 lvx 2,7,5
398 vperm 1,2,1,5
399 .long 0x10000D09
400
401 vspltisb 2,-1
402 vxor 1,1,1
403 li 7,15
404 vperm 2,2,1,3
405 vxor 3,3,4
406 lvx 1,0,4
407 vperm 0,0,0,3
408 vsel 1,1,0,2
409 lvx 4,7,4
410 stvx 1,0,4
411 vsel 0,0,4,2
412 stvx 0,7,4
413
Robert Sloan8ff03552017-06-14 12:40:58 -0700414 or 12,12,12
Robert Sloan572a4e22017-04-17 10:52:19 -0700415 blr
416.long 0
417.byte 0,12,0x14,0,0,0,3,0
418.long 0
Robert Sloan8ff03552017-06-14 12:40:58 -0700419.size aes_hw_encrypt,.-aes_hw_encrypt
Robert Sloan572a4e22017-04-17 10:52:19 -0700420.globl aes_hw_decrypt
Robert Sloan8ff03552017-06-14 12:40:58 -0700421.type aes_hw_decrypt,@function
Robert Sloan572a4e22017-04-17 10:52:19 -0700422.align 5
423aes_hw_decrypt:
Robert Sloan8ff03552017-06-14 12:40:58 -0700424.localentry aes_hw_decrypt,0
425
Robert Sloan572a4e22017-04-17 10:52:19 -0700426 lwz 6,240(5)
427 lis 0,0xfc00
Robert Sloan8ff03552017-06-14 12:40:58 -0700428 li 12,-1
Robert Sloan572a4e22017-04-17 10:52:19 -0700429 li 7,15
Robert Sloan8ff03552017-06-14 12:40:58 -0700430 or 0,0,0
Robert Sloan572a4e22017-04-17 10:52:19 -0700431
432 lvx 0,0,3
433 neg 11,4
434 lvx 1,7,3
435 lvsl 2,0,3
436 vspltisb 4,0x0f
437 lvsr 3,0,11
438 vxor 2,2,4
439 li 7,16
440 vperm 0,0,1,2
441 lvx 1,0,5
442 lvsr 5,0,5
443 srwi 6,6,1
444 lvx 2,7,5
445 addi 7,7,16
446 subi 6,6,1
447 vperm 1,2,1,5
448
449 vxor 0,0,1
450 lvx 1,7,5
451 addi 7,7,16
452 mtctr 6
453
Robert Sloan8ff03552017-06-14 12:40:58 -0700454.Loop_dec:
Robert Sloan572a4e22017-04-17 10:52:19 -0700455 vperm 2,1,2,5
456 .long 0x10001548
457 lvx 2,7,5
458 addi 7,7,16
459 vperm 1,2,1,5
460 .long 0x10000D48
461 lvx 1,7,5
462 addi 7,7,16
Robert Sloan8ff03552017-06-14 12:40:58 -0700463 bdnz .Loop_dec
Robert Sloan572a4e22017-04-17 10:52:19 -0700464
465 vperm 2,1,2,5
466 .long 0x10001548
467 lvx 2,7,5
468 vperm 1,2,1,5
469 .long 0x10000D49
470
471 vspltisb 2,-1
472 vxor 1,1,1
473 li 7,15
474 vperm 2,2,1,3
475 vxor 3,3,4
476 lvx 1,0,4
477 vperm 0,0,0,3
478 vsel 1,1,0,2
479 lvx 4,7,4
480 stvx 1,0,4
481 vsel 0,0,4,2
482 stvx 0,7,4
483
Robert Sloan8ff03552017-06-14 12:40:58 -0700484 or 12,12,12
Robert Sloan572a4e22017-04-17 10:52:19 -0700485 blr
486.long 0
487.byte 0,12,0x14,0,0,0,3,0
488.long 0
Robert Sloan8ff03552017-06-14 12:40:58 -0700489.size aes_hw_decrypt,.-aes_hw_decrypt
Robert Sloan572a4e22017-04-17 10:52:19 -0700490.globl aes_hw_cbc_encrypt
Robert Sloan8ff03552017-06-14 12:40:58 -0700491.type aes_hw_cbc_encrypt,@function
Robert Sloan572a4e22017-04-17 10:52:19 -0700492.align 5
493aes_hw_cbc_encrypt:
Robert Sloan8ff03552017-06-14 12:40:58 -0700494.localentry aes_hw_cbc_encrypt,0
495
Robert Sloan572a4e22017-04-17 10:52:19 -0700496 cmpldi 5,16
Robert Sloan8ff03552017-06-14 12:40:58 -0700497 .long 0x4dc00020
Robert Sloan572a4e22017-04-17 10:52:19 -0700498
499 cmpwi 8,0
500 lis 0,0xffe0
Robert Sloan8ff03552017-06-14 12:40:58 -0700501 li 12,-1
502 or 0,0,0
Robert Sloan572a4e22017-04-17 10:52:19 -0700503
504 li 10,15
505 vxor 0,0,0
506 vspltisb 3,0x0f
507
508 lvx 4,0,7
509 lvsl 6,0,7
510 lvx 5,10,7
511 vxor 6,6,3
512 vperm 4,4,5,6
513
514 neg 11,3
515 lvsr 10,0,6
516 lwz 9,240(6)
517
518 lvsr 6,0,11
519 lvx 5,0,3
520 addi 3,3,15
521 vxor 6,6,3
522
523 lvsl 8,0,4
524 vspltisb 9,-1
525 lvx 7,0,4
526 vperm 9,9,0,8
527 vxor 8,8,3
528
529 srwi 9,9,1
530 li 10,16
531 subi 9,9,1
Robert Sloan8ff03552017-06-14 12:40:58 -0700532 beq .Lcbc_dec
Robert Sloan572a4e22017-04-17 10:52:19 -0700533
Robert Sloan8ff03552017-06-14 12:40:58 -0700534.Lcbc_enc:
Robert Sloan572a4e22017-04-17 10:52:19 -0700535 vor 2,5,5
536 lvx 5,0,3
537 addi 3,3,16
538 mtctr 9
539 subi 5,5,16
540
541 lvx 0,0,6
542 vperm 2,2,5,6
543 lvx 1,10,6
544 addi 10,10,16
545 vperm 0,1,0,10
546 vxor 2,2,0
547 lvx 0,10,6
548 addi 10,10,16
549 vxor 2,2,4
550
Robert Sloan8ff03552017-06-14 12:40:58 -0700551.Loop_cbc_enc:
Robert Sloan572a4e22017-04-17 10:52:19 -0700552 vperm 1,0,1,10
553 .long 0x10420D08
554 lvx 1,10,6
555 addi 10,10,16
556 vperm 0,1,0,10
557 .long 0x10420508
558 lvx 0,10,6
559 addi 10,10,16
Robert Sloan8ff03552017-06-14 12:40:58 -0700560 bdnz .Loop_cbc_enc
Robert Sloan572a4e22017-04-17 10:52:19 -0700561
562 vperm 1,0,1,10
563 .long 0x10420D08
564 lvx 1,10,6
565 li 10,16
566 vperm 0,1,0,10
567 .long 0x10820509
568 cmpldi 5,16
569
570 vperm 3,4,4,8
571 vsel 2,7,3,9
572 vor 7,3,3
573 stvx 2,0,4
574 addi 4,4,16
Robert Sloan8ff03552017-06-14 12:40:58 -0700575 bge .Lcbc_enc
Robert Sloan572a4e22017-04-17 10:52:19 -0700576
Robert Sloan8ff03552017-06-14 12:40:58 -0700577 b .Lcbc_done
Robert Sloan572a4e22017-04-17 10:52:19 -0700578
579.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -0700580.Lcbc_dec:
Robert Sloan572a4e22017-04-17 10:52:19 -0700581 cmpldi 5,128
582 bge _aesp8_cbc_decrypt8x
583 vor 3,5,5
584 lvx 5,0,3
585 addi 3,3,16
586 mtctr 9
587 subi 5,5,16
588
589 lvx 0,0,6
590 vperm 3,3,5,6
591 lvx 1,10,6
592 addi 10,10,16
593 vperm 0,1,0,10
594 vxor 2,3,0
595 lvx 0,10,6
596 addi 10,10,16
597
Robert Sloan8ff03552017-06-14 12:40:58 -0700598.Loop_cbc_dec:
Robert Sloan572a4e22017-04-17 10:52:19 -0700599 vperm 1,0,1,10
600 .long 0x10420D48
601 lvx 1,10,6
602 addi 10,10,16
603 vperm 0,1,0,10
604 .long 0x10420548
605 lvx 0,10,6
606 addi 10,10,16
Robert Sloan8ff03552017-06-14 12:40:58 -0700607 bdnz .Loop_cbc_dec
Robert Sloan572a4e22017-04-17 10:52:19 -0700608
609 vperm 1,0,1,10
610 .long 0x10420D48
611 lvx 1,10,6
612 li 10,16
613 vperm 0,1,0,10
614 .long 0x10420549
615 cmpldi 5,16
616
617 vxor 2,2,4
618 vor 4,3,3
619 vperm 3,2,2,8
620 vsel 2,7,3,9
621 vor 7,3,3
622 stvx 2,0,4
623 addi 4,4,16
Robert Sloan8ff03552017-06-14 12:40:58 -0700624 bge .Lcbc_dec
Robert Sloan572a4e22017-04-17 10:52:19 -0700625
Robert Sloan8ff03552017-06-14 12:40:58 -0700626.Lcbc_done:
Robert Sloan572a4e22017-04-17 10:52:19 -0700627 addi 4,4,-1
628 lvx 2,0,4
629 vsel 2,7,2,9
630 stvx 2,0,4
631
632 neg 8,7
633 li 10,15
634 vxor 0,0,0
635 vspltisb 9,-1
636 vspltisb 3,0x0f
637 lvsr 8,0,8
638 vperm 9,9,0,8
639 vxor 8,8,3
640 lvx 7,0,7
641 vperm 4,4,4,8
642 vsel 2,7,4,9
643 lvx 5,10,7
644 stvx 2,0,7
645 vsel 2,4,5,9
646 stvx 2,10,7
647
Robert Sloan8ff03552017-06-14 12:40:58 -0700648 or 12,12,12
Robert Sloan572a4e22017-04-17 10:52:19 -0700649 blr
650.long 0
651.byte 0,12,0x14,0,0,0,6,0
652.long 0
653.align 5
654_aesp8_cbc_decrypt8x:
655 stdu 1,-448(1)
656 li 10,207
657 li 11,223
658 stvx 20,10,1
659 addi 10,10,32
660 stvx 21,11,1
661 addi 11,11,32
662 stvx 22,10,1
663 addi 10,10,32
664 stvx 23,11,1
665 addi 11,11,32
666 stvx 24,10,1
667 addi 10,10,32
668 stvx 25,11,1
669 addi 11,11,32
670 stvx 26,10,1
671 addi 10,10,32
672 stvx 27,11,1
673 addi 11,11,32
674 stvx 28,10,1
675 addi 10,10,32
676 stvx 29,11,1
677 addi 11,11,32
678 stvx 30,10,1
679 stvx 31,11,1
680 li 0,-1
681 stw 12,396(1)
682 li 8,0x10
683 std 26,400(1)
684 li 26,0x20
685 std 27,408(1)
686 li 27,0x30
687 std 28,416(1)
688 li 28,0x40
689 std 29,424(1)
690 li 29,0x50
691 std 30,432(1)
692 li 30,0x60
693 std 31,440(1)
694 li 31,0x70
Robert Sloan8ff03552017-06-14 12:40:58 -0700695 or 0,0,0
Robert Sloan572a4e22017-04-17 10:52:19 -0700696
697 subi 9,9,3
698 subi 5,5,128
699
700 lvx 23,0,6
701 lvx 30,8,6
702 addi 6,6,0x20
703 lvx 31,0,6
704 vperm 23,30,23,10
Robert Sloan8ff03552017-06-14 12:40:58 -0700705 addi 11,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -0700706 mtctr 9
707
Robert Sloan8ff03552017-06-14 12:40:58 -0700708.Load_cbc_dec_key:
Robert Sloan572a4e22017-04-17 10:52:19 -0700709 vperm 24,31,30,10
710 lvx 30,8,6
711 addi 6,6,0x20
712 stvx 24,0,11
713 vperm 25,30,31,10
714 lvx 31,0,6
715 stvx 25,8,11
716 addi 11,11,0x20
Robert Sloan8ff03552017-06-14 12:40:58 -0700717 bdnz .Load_cbc_dec_key
Robert Sloan572a4e22017-04-17 10:52:19 -0700718
719 lvx 26,8,6
720 vperm 24,31,30,10
721 lvx 27,26,6
722 stvx 24,0,11
723 vperm 25,26,31,10
724 lvx 28,27,6
725 stvx 25,8,11
Robert Sloan8ff03552017-06-14 12:40:58 -0700726 addi 11,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -0700727 vperm 26,27,26,10
728 lvx 29,28,6
729 vperm 27,28,27,10
730 lvx 30,29,6
731 vperm 28,29,28,10
732 lvx 31,30,6
733 vperm 29,30,29,10
734 lvx 14,31,6
735 vperm 30,31,30,10
736 lvx 24,0,11
737 vperm 31,14,31,10
738 lvx 25,8,11
739
740
741
742 subi 3,3,15
743
744 li 10,8
745 .long 0x7C001E99
746 lvsl 6,0,10
747 vspltisb 3,0x0f
748 .long 0x7C281E99
749 vxor 6,6,3
750 .long 0x7C5A1E99
751 vperm 0,0,0,6
752 .long 0x7C7B1E99
753 vperm 1,1,1,6
754 .long 0x7D5C1E99
755 vperm 2,2,2,6
756 vxor 14,0,23
757 .long 0x7D7D1E99
758 vperm 3,3,3,6
759 vxor 15,1,23
760 .long 0x7D9E1E99
761 vperm 10,10,10,6
762 vxor 16,2,23
763 .long 0x7DBF1E99
764 addi 3,3,0x80
765 vperm 11,11,11,6
766 vxor 17,3,23
767 vperm 12,12,12,6
768 vxor 18,10,23
769 vperm 13,13,13,6
770 vxor 19,11,23
771 vxor 20,12,23
772 vxor 21,13,23
773
774 mtctr 9
Robert Sloan8ff03552017-06-14 12:40:58 -0700775 b .Loop_cbc_dec8x
Robert Sloan572a4e22017-04-17 10:52:19 -0700776.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -0700777.Loop_cbc_dec8x:
Robert Sloan572a4e22017-04-17 10:52:19 -0700778 .long 0x11CEC548
779 .long 0x11EFC548
780 .long 0x1210C548
781 .long 0x1231C548
782 .long 0x1252C548
783 .long 0x1273C548
784 .long 0x1294C548
785 .long 0x12B5C548
786 lvx 24,26,11
787 addi 11,11,0x20
788
789 .long 0x11CECD48
790 .long 0x11EFCD48
791 .long 0x1210CD48
792 .long 0x1231CD48
793 .long 0x1252CD48
794 .long 0x1273CD48
795 .long 0x1294CD48
796 .long 0x12B5CD48
797 lvx 25,8,11
Robert Sloan8ff03552017-06-14 12:40:58 -0700798 bdnz .Loop_cbc_dec8x
Robert Sloan572a4e22017-04-17 10:52:19 -0700799
800 subic 5,5,128
801 .long 0x11CEC548
802 .long 0x11EFC548
803 .long 0x1210C548
804 .long 0x1231C548
805 .long 0x1252C548
806 .long 0x1273C548
807 .long 0x1294C548
808 .long 0x12B5C548
809
810 subfe. 0,0,0
811 .long 0x11CECD48
812 .long 0x11EFCD48
813 .long 0x1210CD48
814 .long 0x1231CD48
815 .long 0x1252CD48
816 .long 0x1273CD48
817 .long 0x1294CD48
818 .long 0x12B5CD48
819
820 and 0,0,5
821 .long 0x11CED548
822 .long 0x11EFD548
823 .long 0x1210D548
824 .long 0x1231D548
825 .long 0x1252D548
826 .long 0x1273D548
827 .long 0x1294D548
828 .long 0x12B5D548
829
830 add 3,3,0
831
832
833
834 .long 0x11CEDD48
835 .long 0x11EFDD48
836 .long 0x1210DD48
837 .long 0x1231DD48
838 .long 0x1252DD48
839 .long 0x1273DD48
840 .long 0x1294DD48
841 .long 0x12B5DD48
842
Robert Sloan8ff03552017-06-14 12:40:58 -0700843 addi 11,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -0700844 .long 0x11CEE548
845 .long 0x11EFE548
846 .long 0x1210E548
847 .long 0x1231E548
848 .long 0x1252E548
849 .long 0x1273E548
850 .long 0x1294E548
851 .long 0x12B5E548
852 lvx 24,0,11
853
854 .long 0x11CEED48
855 .long 0x11EFED48
856 .long 0x1210ED48
857 .long 0x1231ED48
858 .long 0x1252ED48
859 .long 0x1273ED48
860 .long 0x1294ED48
861 .long 0x12B5ED48
862 lvx 25,8,11
863
864 .long 0x11CEF548
865 vxor 4,4,31
866 .long 0x11EFF548
867 vxor 0,0,31
868 .long 0x1210F548
869 vxor 1,1,31
870 .long 0x1231F548
871 vxor 2,2,31
872 .long 0x1252F548
873 vxor 3,3,31
874 .long 0x1273F548
875 vxor 10,10,31
876 .long 0x1294F548
877 vxor 11,11,31
878 .long 0x12B5F548
879 vxor 12,12,31
880
881 .long 0x11CE2549
882 .long 0x11EF0549
883 .long 0x7C001E99
884 .long 0x12100D49
885 .long 0x7C281E99
886 .long 0x12311549
887 vperm 0,0,0,6
888 .long 0x7C5A1E99
889 .long 0x12521D49
890 vperm 1,1,1,6
891 .long 0x7C7B1E99
892 .long 0x12735549
893 vperm 2,2,2,6
894 .long 0x7D5C1E99
895 .long 0x12945D49
896 vperm 3,3,3,6
897 .long 0x7D7D1E99
898 .long 0x12B56549
899 vperm 10,10,10,6
900 .long 0x7D9E1E99
901 vor 4,13,13
902 vperm 11,11,11,6
903 .long 0x7DBF1E99
904 addi 3,3,0x80
905
906 vperm 14,14,14,6
907 vperm 15,15,15,6
908 .long 0x7DC02799
909 vperm 12,12,12,6
910 vxor 14,0,23
911 vperm 16,16,16,6
912 .long 0x7DE82799
913 vperm 13,13,13,6
914 vxor 15,1,23
915 vperm 17,17,17,6
916 .long 0x7E1A2799
917 vxor 16,2,23
918 vperm 18,18,18,6
919 .long 0x7E3B2799
920 vxor 17,3,23
921 vperm 19,19,19,6
922 .long 0x7E5C2799
923 vxor 18,10,23
924 vperm 20,20,20,6
925 .long 0x7E7D2799
926 vxor 19,11,23
927 vperm 21,21,21,6
928 .long 0x7E9E2799
929 vxor 20,12,23
930 .long 0x7EBF2799
931 addi 4,4,0x80
932 vxor 21,13,23
933
934 mtctr 9
Robert Sloan8ff03552017-06-14 12:40:58 -0700935 beq .Loop_cbc_dec8x
Robert Sloan572a4e22017-04-17 10:52:19 -0700936
937 addic. 5,5,128
Robert Sloan8ff03552017-06-14 12:40:58 -0700938 beq .Lcbc_dec8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -0700939 nop
940 nop
941
Robert Sloan8ff03552017-06-14 12:40:58 -0700942.Loop_cbc_dec8x_tail:
Robert Sloan572a4e22017-04-17 10:52:19 -0700943 .long 0x11EFC548
944 .long 0x1210C548
945 .long 0x1231C548
946 .long 0x1252C548
947 .long 0x1273C548
948 .long 0x1294C548
949 .long 0x12B5C548
950 lvx 24,26,11
951 addi 11,11,0x20
952
953 .long 0x11EFCD48
954 .long 0x1210CD48
955 .long 0x1231CD48
956 .long 0x1252CD48
957 .long 0x1273CD48
958 .long 0x1294CD48
959 .long 0x12B5CD48
960 lvx 25,8,11
Robert Sloan8ff03552017-06-14 12:40:58 -0700961 bdnz .Loop_cbc_dec8x_tail
Robert Sloan572a4e22017-04-17 10:52:19 -0700962
963 .long 0x11EFC548
964 .long 0x1210C548
965 .long 0x1231C548
966 .long 0x1252C548
967 .long 0x1273C548
968 .long 0x1294C548
969 .long 0x12B5C548
970
971 .long 0x11EFCD48
972 .long 0x1210CD48
973 .long 0x1231CD48
974 .long 0x1252CD48
975 .long 0x1273CD48
976 .long 0x1294CD48
977 .long 0x12B5CD48
978
979 .long 0x11EFD548
980 .long 0x1210D548
981 .long 0x1231D548
982 .long 0x1252D548
983 .long 0x1273D548
984 .long 0x1294D548
985 .long 0x12B5D548
986
987 .long 0x11EFDD48
988 .long 0x1210DD48
989 .long 0x1231DD48
990 .long 0x1252DD48
991 .long 0x1273DD48
992 .long 0x1294DD48
993 .long 0x12B5DD48
994
995 .long 0x11EFE548
996 .long 0x1210E548
997 .long 0x1231E548
998 .long 0x1252E548
999 .long 0x1273E548
1000 .long 0x1294E548
1001 .long 0x12B5E548
1002
1003 .long 0x11EFED48
1004 .long 0x1210ED48
1005 .long 0x1231ED48
1006 .long 0x1252ED48
1007 .long 0x1273ED48
1008 .long 0x1294ED48
1009 .long 0x12B5ED48
1010
1011 .long 0x11EFF548
1012 vxor 4,4,31
1013 .long 0x1210F548
1014 vxor 1,1,31
1015 .long 0x1231F548
1016 vxor 2,2,31
1017 .long 0x1252F548
1018 vxor 3,3,31
1019 .long 0x1273F548
1020 vxor 10,10,31
1021 .long 0x1294F548
1022 vxor 11,11,31
1023 .long 0x12B5F548
1024 vxor 12,12,31
1025
1026 cmplwi 5,32
Robert Sloan8ff03552017-06-14 12:40:58 -07001027 blt .Lcbc_dec8x_one
Robert Sloan572a4e22017-04-17 10:52:19 -07001028 nop
Robert Sloan8ff03552017-06-14 12:40:58 -07001029 beq .Lcbc_dec8x_two
Robert Sloan572a4e22017-04-17 10:52:19 -07001030 cmplwi 5,64
Robert Sloan8ff03552017-06-14 12:40:58 -07001031 blt .Lcbc_dec8x_three
Robert Sloan572a4e22017-04-17 10:52:19 -07001032 nop
Robert Sloan8ff03552017-06-14 12:40:58 -07001033 beq .Lcbc_dec8x_four
Robert Sloan572a4e22017-04-17 10:52:19 -07001034 cmplwi 5,96
Robert Sloan8ff03552017-06-14 12:40:58 -07001035 blt .Lcbc_dec8x_five
Robert Sloan572a4e22017-04-17 10:52:19 -07001036 nop
Robert Sloan8ff03552017-06-14 12:40:58 -07001037 beq .Lcbc_dec8x_six
Robert Sloan572a4e22017-04-17 10:52:19 -07001038
Robert Sloan8ff03552017-06-14 12:40:58 -07001039.Lcbc_dec8x_seven:
Robert Sloan572a4e22017-04-17 10:52:19 -07001040 .long 0x11EF2549
1041 .long 0x12100D49
1042 .long 0x12311549
1043 .long 0x12521D49
1044 .long 0x12735549
1045 .long 0x12945D49
1046 .long 0x12B56549
1047 vor 4,13,13
1048
1049 vperm 15,15,15,6
1050 vperm 16,16,16,6
1051 .long 0x7DE02799
1052 vperm 17,17,17,6
1053 .long 0x7E082799
1054 vperm 18,18,18,6
1055 .long 0x7E3A2799
1056 vperm 19,19,19,6
1057 .long 0x7E5B2799
1058 vperm 20,20,20,6
1059 .long 0x7E7C2799
1060 vperm 21,21,21,6
1061 .long 0x7E9D2799
1062 .long 0x7EBE2799
1063 addi 4,4,0x70
Robert Sloan8ff03552017-06-14 12:40:58 -07001064 b .Lcbc_dec8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07001065
1066.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001067.Lcbc_dec8x_six:
Robert Sloan572a4e22017-04-17 10:52:19 -07001068 .long 0x12102549
1069 .long 0x12311549
1070 .long 0x12521D49
1071 .long 0x12735549
1072 .long 0x12945D49
1073 .long 0x12B56549
1074 vor 4,13,13
1075
1076 vperm 16,16,16,6
1077 vperm 17,17,17,6
1078 .long 0x7E002799
1079 vperm 18,18,18,6
1080 .long 0x7E282799
1081 vperm 19,19,19,6
1082 .long 0x7E5A2799
1083 vperm 20,20,20,6
1084 .long 0x7E7B2799
1085 vperm 21,21,21,6
1086 .long 0x7E9C2799
1087 .long 0x7EBD2799
1088 addi 4,4,0x60
Robert Sloan8ff03552017-06-14 12:40:58 -07001089 b .Lcbc_dec8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07001090
1091.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001092.Lcbc_dec8x_five:
Robert Sloan572a4e22017-04-17 10:52:19 -07001093 .long 0x12312549
1094 .long 0x12521D49
1095 .long 0x12735549
1096 .long 0x12945D49
1097 .long 0x12B56549
1098 vor 4,13,13
1099
1100 vperm 17,17,17,6
1101 vperm 18,18,18,6
1102 .long 0x7E202799
1103 vperm 19,19,19,6
1104 .long 0x7E482799
1105 vperm 20,20,20,6
1106 .long 0x7E7A2799
1107 vperm 21,21,21,6
1108 .long 0x7E9B2799
1109 .long 0x7EBC2799
1110 addi 4,4,0x50
Robert Sloan8ff03552017-06-14 12:40:58 -07001111 b .Lcbc_dec8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07001112
1113.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001114.Lcbc_dec8x_four:
Robert Sloan572a4e22017-04-17 10:52:19 -07001115 .long 0x12522549
1116 .long 0x12735549
1117 .long 0x12945D49
1118 .long 0x12B56549
1119 vor 4,13,13
1120
1121 vperm 18,18,18,6
1122 vperm 19,19,19,6
1123 .long 0x7E402799
1124 vperm 20,20,20,6
1125 .long 0x7E682799
1126 vperm 21,21,21,6
1127 .long 0x7E9A2799
1128 .long 0x7EBB2799
1129 addi 4,4,0x40
Robert Sloan8ff03552017-06-14 12:40:58 -07001130 b .Lcbc_dec8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07001131
1132.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001133.Lcbc_dec8x_three:
Robert Sloan572a4e22017-04-17 10:52:19 -07001134 .long 0x12732549
1135 .long 0x12945D49
1136 .long 0x12B56549
1137 vor 4,13,13
1138
1139 vperm 19,19,19,6
1140 vperm 20,20,20,6
1141 .long 0x7E602799
1142 vperm 21,21,21,6
1143 .long 0x7E882799
1144 .long 0x7EBA2799
1145 addi 4,4,0x30
Robert Sloan8ff03552017-06-14 12:40:58 -07001146 b .Lcbc_dec8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07001147
1148.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001149.Lcbc_dec8x_two:
Robert Sloan572a4e22017-04-17 10:52:19 -07001150 .long 0x12942549
1151 .long 0x12B56549
1152 vor 4,13,13
1153
1154 vperm 20,20,20,6
1155 vperm 21,21,21,6
1156 .long 0x7E802799
1157 .long 0x7EA82799
1158 addi 4,4,0x20
Robert Sloan8ff03552017-06-14 12:40:58 -07001159 b .Lcbc_dec8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07001160
1161.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001162.Lcbc_dec8x_one:
Robert Sloan572a4e22017-04-17 10:52:19 -07001163 .long 0x12B52549
1164 vor 4,13,13
1165
1166 vperm 21,21,21,6
1167 .long 0x7EA02799
1168 addi 4,4,0x10
1169
Robert Sloan8ff03552017-06-14 12:40:58 -07001170.Lcbc_dec8x_done:
Robert Sloan572a4e22017-04-17 10:52:19 -07001171 vperm 4,4,4,6
1172 .long 0x7C803F99
1173
1174 li 10,79
1175 li 11,95
1176 stvx 6,10,1
1177 addi 10,10,32
1178 stvx 6,11,1
1179 addi 11,11,32
1180 stvx 6,10,1
1181 addi 10,10,32
1182 stvx 6,11,1
1183 addi 11,11,32
1184 stvx 6,10,1
1185 addi 10,10,32
1186 stvx 6,11,1
1187 addi 11,11,32
1188 stvx 6,10,1
1189 addi 10,10,32
1190 stvx 6,11,1
1191 addi 11,11,32
1192
Robert Sloan8ff03552017-06-14 12:40:58 -07001193 or 12,12,12
Robert Sloan572a4e22017-04-17 10:52:19 -07001194 lvx 20,10,1
1195 addi 10,10,32
1196 lvx 21,11,1
1197 addi 11,11,32
1198 lvx 22,10,1
1199 addi 10,10,32
1200 lvx 23,11,1
1201 addi 11,11,32
1202 lvx 24,10,1
1203 addi 10,10,32
1204 lvx 25,11,1
1205 addi 11,11,32
1206 lvx 26,10,1
1207 addi 10,10,32
1208 lvx 27,11,1
1209 addi 11,11,32
1210 lvx 28,10,1
1211 addi 10,10,32
1212 lvx 29,11,1
1213 addi 11,11,32
1214 lvx 30,10,1
1215 lvx 31,11,1
1216 ld 26,400(1)
1217 ld 27,408(1)
1218 ld 28,416(1)
1219 ld 29,424(1)
1220 ld 30,432(1)
1221 ld 31,440(1)
1222 addi 1,1,448
1223 blr
1224.long 0
1225.byte 0,12,0x04,0,0x80,6,6,0
1226.long 0
Robert Sloan8ff03552017-06-14 12:40:58 -07001227.size aes_hw_cbc_encrypt,.-aes_hw_cbc_encrypt
Robert Sloan572a4e22017-04-17 10:52:19 -07001228.globl aes_hw_ctr32_encrypt_blocks
Robert Sloan8ff03552017-06-14 12:40:58 -07001229.type aes_hw_ctr32_encrypt_blocks,@function
Robert Sloan572a4e22017-04-17 10:52:19 -07001230.align 5
1231aes_hw_ctr32_encrypt_blocks:
Robert Sloan8ff03552017-06-14 12:40:58 -07001232.localentry aes_hw_ctr32_encrypt_blocks,0
1233
Robert Sloan572a4e22017-04-17 10:52:19 -07001234 cmpldi 5,1
Robert Sloan8ff03552017-06-14 12:40:58 -07001235 .long 0x4dc00020
Robert Sloan572a4e22017-04-17 10:52:19 -07001236
1237 lis 0,0xfff0
Robert Sloan8ff03552017-06-14 12:40:58 -07001238 li 12,-1
1239 or 0,0,0
Robert Sloan572a4e22017-04-17 10:52:19 -07001240
1241 li 10,15
1242 vxor 0,0,0
1243 vspltisb 3,0x0f
1244
1245 lvx 4,0,7
1246 lvsl 6,0,7
1247 lvx 5,10,7
1248 vspltisb 11,1
1249 vxor 6,6,3
1250 vperm 4,4,5,6
1251 vsldoi 11,0,11,1
1252
1253 neg 11,3
1254 lvsr 10,0,6
1255 lwz 9,240(6)
1256
1257 lvsr 6,0,11
1258 lvx 5,0,3
1259 addi 3,3,15
1260 vxor 6,6,3
1261
1262 srwi 9,9,1
1263 li 10,16
1264 subi 9,9,1
1265
1266 cmpldi 5,8
1267 bge _aesp8_ctr32_encrypt8x
1268
1269 lvsl 8,0,4
1270 vspltisb 9,-1
1271 lvx 7,0,4
1272 vperm 9,9,0,8
1273 vxor 8,8,3
1274
1275 lvx 0,0,6
1276 mtctr 9
1277 lvx 1,10,6
1278 addi 10,10,16
1279 vperm 0,1,0,10
1280 vxor 2,4,0
1281 lvx 0,10,6
1282 addi 10,10,16
Robert Sloan8ff03552017-06-14 12:40:58 -07001283 b .Loop_ctr32_enc
Robert Sloan572a4e22017-04-17 10:52:19 -07001284
1285.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001286.Loop_ctr32_enc:
Robert Sloan572a4e22017-04-17 10:52:19 -07001287 vperm 1,0,1,10
1288 .long 0x10420D08
1289 lvx 1,10,6
1290 addi 10,10,16
1291 vperm 0,1,0,10
1292 .long 0x10420508
1293 lvx 0,10,6
1294 addi 10,10,16
Robert Sloan8ff03552017-06-14 12:40:58 -07001295 bdnz .Loop_ctr32_enc
Robert Sloan572a4e22017-04-17 10:52:19 -07001296
1297 vadduwm 4,4,11
1298 vor 3,5,5
1299 lvx 5,0,3
1300 addi 3,3,16
1301 subic. 5,5,1
1302
1303 vperm 1,0,1,10
1304 .long 0x10420D08
1305 lvx 1,10,6
1306 vperm 3,3,5,6
1307 li 10,16
1308 vperm 1,1,0,10
1309 lvx 0,0,6
1310 vxor 3,3,1
1311 .long 0x10421D09
1312
1313 lvx 1,10,6
1314 addi 10,10,16
1315 vperm 2,2,2,8
1316 vsel 3,7,2,9
1317 mtctr 9
1318 vperm 0,1,0,10
1319 vor 7,2,2
1320 vxor 2,4,0
1321 lvx 0,10,6
1322 addi 10,10,16
1323 stvx 3,0,4
1324 addi 4,4,16
Robert Sloan8ff03552017-06-14 12:40:58 -07001325 bne .Loop_ctr32_enc
Robert Sloan572a4e22017-04-17 10:52:19 -07001326
1327 addi 4,4,-1
1328 lvx 2,0,4
1329 vsel 2,7,2,9
1330 stvx 2,0,4
1331
Robert Sloan8ff03552017-06-14 12:40:58 -07001332 or 12,12,12
Robert Sloan572a4e22017-04-17 10:52:19 -07001333 blr
1334.long 0
1335.byte 0,12,0x14,0,0,0,6,0
1336.long 0
1337.align 5
1338_aesp8_ctr32_encrypt8x:
1339 stdu 1,-448(1)
1340 li 10,207
1341 li 11,223
1342 stvx 20,10,1
1343 addi 10,10,32
1344 stvx 21,11,1
1345 addi 11,11,32
1346 stvx 22,10,1
1347 addi 10,10,32
1348 stvx 23,11,1
1349 addi 11,11,32
1350 stvx 24,10,1
1351 addi 10,10,32
1352 stvx 25,11,1
1353 addi 11,11,32
1354 stvx 26,10,1
1355 addi 10,10,32
1356 stvx 27,11,1
1357 addi 11,11,32
1358 stvx 28,10,1
1359 addi 10,10,32
1360 stvx 29,11,1
1361 addi 11,11,32
1362 stvx 30,10,1
1363 stvx 31,11,1
1364 li 0,-1
1365 stw 12,396(1)
1366 li 8,0x10
1367 std 26,400(1)
1368 li 26,0x20
1369 std 27,408(1)
1370 li 27,0x30
1371 std 28,416(1)
1372 li 28,0x40
1373 std 29,424(1)
1374 li 29,0x50
1375 std 30,432(1)
1376 li 30,0x60
1377 std 31,440(1)
1378 li 31,0x70
Robert Sloan8ff03552017-06-14 12:40:58 -07001379 or 0,0,0
Robert Sloan572a4e22017-04-17 10:52:19 -07001380
1381 subi 9,9,3
1382
1383 lvx 23,0,6
1384 lvx 30,8,6
1385 addi 6,6,0x20
1386 lvx 31,0,6
1387 vperm 23,30,23,10
Robert Sloan8ff03552017-06-14 12:40:58 -07001388 addi 11,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07001389 mtctr 9
1390
Robert Sloan8ff03552017-06-14 12:40:58 -07001391.Load_ctr32_enc_key:
Robert Sloan572a4e22017-04-17 10:52:19 -07001392 vperm 24,31,30,10
1393 lvx 30,8,6
1394 addi 6,6,0x20
1395 stvx 24,0,11
1396 vperm 25,30,31,10
1397 lvx 31,0,6
1398 stvx 25,8,11
1399 addi 11,11,0x20
Robert Sloan8ff03552017-06-14 12:40:58 -07001400 bdnz .Load_ctr32_enc_key
Robert Sloan572a4e22017-04-17 10:52:19 -07001401
1402 lvx 26,8,6
1403 vperm 24,31,30,10
1404 lvx 27,26,6
1405 stvx 24,0,11
1406 vperm 25,26,31,10
1407 lvx 28,27,6
1408 stvx 25,8,11
Robert Sloan8ff03552017-06-14 12:40:58 -07001409 addi 11,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07001410 vperm 26,27,26,10
1411 lvx 29,28,6
1412 vperm 27,28,27,10
1413 lvx 30,29,6
1414 vperm 28,29,28,10
1415 lvx 31,30,6
1416 vperm 29,30,29,10
1417 lvx 15,31,6
1418 vperm 30,31,30,10
1419 lvx 24,0,11
1420 vperm 31,15,31,10
1421 lvx 25,8,11
1422
1423 vadduwm 7,11,11
1424 subi 3,3,15
1425 sldi 5,5,4
1426
1427 vadduwm 16,4,11
1428 vadduwm 17,4,7
1429 vxor 15,4,23
1430 li 10,8
1431 vadduwm 18,16,7
1432 vxor 16,16,23
1433 lvsl 6,0,10
1434 vadduwm 19,17,7
1435 vxor 17,17,23
1436 vspltisb 3,0x0f
1437 vadduwm 20,18,7
1438 vxor 18,18,23
1439 vxor 6,6,3
1440 vadduwm 21,19,7
1441 vxor 19,19,23
1442 vadduwm 22,20,7
1443 vxor 20,20,23
1444 vadduwm 4,21,7
1445 vxor 21,21,23
1446 vxor 22,22,23
1447
1448 mtctr 9
Robert Sloan8ff03552017-06-14 12:40:58 -07001449 b .Loop_ctr32_enc8x
Robert Sloan572a4e22017-04-17 10:52:19 -07001450.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001451.Loop_ctr32_enc8x:
Robert Sloan572a4e22017-04-17 10:52:19 -07001452 .long 0x11EFC508
1453 .long 0x1210C508
1454 .long 0x1231C508
1455 .long 0x1252C508
1456 .long 0x1273C508
1457 .long 0x1294C508
1458 .long 0x12B5C508
1459 .long 0x12D6C508
Robert Sloan8ff03552017-06-14 12:40:58 -07001460.Loop_ctr32_enc8x_middle:
Robert Sloan572a4e22017-04-17 10:52:19 -07001461 lvx 24,26,11
1462 addi 11,11,0x20
1463
1464 .long 0x11EFCD08
1465 .long 0x1210CD08
1466 .long 0x1231CD08
1467 .long 0x1252CD08
1468 .long 0x1273CD08
1469 .long 0x1294CD08
1470 .long 0x12B5CD08
1471 .long 0x12D6CD08
1472 lvx 25,8,11
Robert Sloan8ff03552017-06-14 12:40:58 -07001473 bdnz .Loop_ctr32_enc8x
Robert Sloan572a4e22017-04-17 10:52:19 -07001474
1475 subic 11,5,256
1476 .long 0x11EFC508
1477 .long 0x1210C508
1478 .long 0x1231C508
1479 .long 0x1252C508
1480 .long 0x1273C508
1481 .long 0x1294C508
1482 .long 0x12B5C508
1483 .long 0x12D6C508
1484
1485 subfe 0,0,0
1486 .long 0x11EFCD08
1487 .long 0x1210CD08
1488 .long 0x1231CD08
1489 .long 0x1252CD08
1490 .long 0x1273CD08
1491 .long 0x1294CD08
1492 .long 0x12B5CD08
1493 .long 0x12D6CD08
1494
1495 and 0,0,11
Robert Sloan8ff03552017-06-14 12:40:58 -07001496 addi 11,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07001497 .long 0x11EFD508
1498 .long 0x1210D508
1499 .long 0x1231D508
1500 .long 0x1252D508
1501 .long 0x1273D508
1502 .long 0x1294D508
1503 .long 0x12B5D508
1504 .long 0x12D6D508
1505 lvx 24,0,11
1506
1507 subic 5,5,129
1508 .long 0x11EFDD08
1509 addi 5,5,1
1510 .long 0x1210DD08
1511 .long 0x1231DD08
1512 .long 0x1252DD08
1513 .long 0x1273DD08
1514 .long 0x1294DD08
1515 .long 0x12B5DD08
1516 .long 0x12D6DD08
1517 lvx 25,8,11
1518
1519 .long 0x11EFE508
1520 .long 0x7C001E99
1521 .long 0x1210E508
1522 .long 0x7C281E99
1523 .long 0x1231E508
1524 .long 0x7C5A1E99
1525 .long 0x1252E508
1526 .long 0x7C7B1E99
1527 .long 0x1273E508
1528 .long 0x7D5C1E99
1529 .long 0x1294E508
1530 .long 0x7D9D1E99
1531 .long 0x12B5E508
1532 .long 0x7DBE1E99
1533 .long 0x12D6E508
1534 .long 0x7DDF1E99
1535 addi 3,3,0x80
1536
1537 .long 0x11EFED08
1538 vperm 0,0,0,6
1539 .long 0x1210ED08
1540 vperm 1,1,1,6
1541 .long 0x1231ED08
1542 vperm 2,2,2,6
1543 .long 0x1252ED08
1544 vperm 3,3,3,6
1545 .long 0x1273ED08
1546 vperm 10,10,10,6
1547 .long 0x1294ED08
1548 vperm 12,12,12,6
1549 .long 0x12B5ED08
1550 vperm 13,13,13,6
1551 .long 0x12D6ED08
1552 vperm 14,14,14,6
1553
1554 add 3,3,0
1555
1556
1557
1558 subfe. 0,0,0
1559 .long 0x11EFF508
1560 vxor 0,0,31
1561 .long 0x1210F508
1562 vxor 1,1,31
1563 .long 0x1231F508
1564 vxor 2,2,31
1565 .long 0x1252F508
1566 vxor 3,3,31
1567 .long 0x1273F508
1568 vxor 10,10,31
1569 .long 0x1294F508
1570 vxor 12,12,31
1571 .long 0x12B5F508
1572 vxor 13,13,31
1573 .long 0x12D6F508
1574 vxor 14,14,31
1575
Robert Sloan8ff03552017-06-14 12:40:58 -07001576 bne .Lctr32_enc8x_break
Robert Sloan572a4e22017-04-17 10:52:19 -07001577
1578 .long 0x100F0509
1579 .long 0x10300D09
1580 vadduwm 16,4,11
1581 .long 0x10511509
1582 vadduwm 17,4,7
1583 vxor 15,4,23
1584 .long 0x10721D09
1585 vadduwm 18,16,7
1586 vxor 16,16,23
1587 .long 0x11535509
1588 vadduwm 19,17,7
1589 vxor 17,17,23
1590 .long 0x11946509
1591 vadduwm 20,18,7
1592 vxor 18,18,23
1593 .long 0x11B56D09
1594 vadduwm 21,19,7
1595 vxor 19,19,23
1596 .long 0x11D67509
1597 vadduwm 22,20,7
1598 vxor 20,20,23
1599 vperm 0,0,0,6
1600 vadduwm 4,21,7
1601 vxor 21,21,23
1602 vperm 1,1,1,6
1603 vxor 22,22,23
1604 mtctr 9
1605
1606 .long 0x11EFC508
1607 .long 0x7C002799
1608 vperm 2,2,2,6
1609 .long 0x1210C508
1610 .long 0x7C282799
1611 vperm 3,3,3,6
1612 .long 0x1231C508
1613 .long 0x7C5A2799
1614 vperm 10,10,10,6
1615 .long 0x1252C508
1616 .long 0x7C7B2799
1617 vperm 12,12,12,6
1618 .long 0x1273C508
1619 .long 0x7D5C2799
1620 vperm 13,13,13,6
1621 .long 0x1294C508
1622 .long 0x7D9D2799
1623 vperm 14,14,14,6
1624 .long 0x12B5C508
1625 .long 0x7DBE2799
1626 .long 0x12D6C508
1627 .long 0x7DDF2799
1628 addi 4,4,0x80
1629
Robert Sloan8ff03552017-06-14 12:40:58 -07001630 b .Loop_ctr32_enc8x_middle
Robert Sloan572a4e22017-04-17 10:52:19 -07001631
1632.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001633.Lctr32_enc8x_break:
Robert Sloan572a4e22017-04-17 10:52:19 -07001634 cmpwi 5,-0x60
Robert Sloan8ff03552017-06-14 12:40:58 -07001635 blt .Lctr32_enc8x_one
Robert Sloan572a4e22017-04-17 10:52:19 -07001636 nop
Robert Sloan8ff03552017-06-14 12:40:58 -07001637 beq .Lctr32_enc8x_two
Robert Sloan572a4e22017-04-17 10:52:19 -07001638 cmpwi 5,-0x40
Robert Sloan8ff03552017-06-14 12:40:58 -07001639 blt .Lctr32_enc8x_three
Robert Sloan572a4e22017-04-17 10:52:19 -07001640 nop
Robert Sloan8ff03552017-06-14 12:40:58 -07001641 beq .Lctr32_enc8x_four
Robert Sloan572a4e22017-04-17 10:52:19 -07001642 cmpwi 5,-0x20
Robert Sloan8ff03552017-06-14 12:40:58 -07001643 blt .Lctr32_enc8x_five
Robert Sloan572a4e22017-04-17 10:52:19 -07001644 nop
Robert Sloan8ff03552017-06-14 12:40:58 -07001645 beq .Lctr32_enc8x_six
Robert Sloan572a4e22017-04-17 10:52:19 -07001646 cmpwi 5,0x00
Robert Sloan8ff03552017-06-14 12:40:58 -07001647 blt .Lctr32_enc8x_seven
Robert Sloan572a4e22017-04-17 10:52:19 -07001648
Robert Sloan8ff03552017-06-14 12:40:58 -07001649.Lctr32_enc8x_eight:
Robert Sloan572a4e22017-04-17 10:52:19 -07001650 .long 0x11EF0509
1651 .long 0x12100D09
1652 .long 0x12311509
1653 .long 0x12521D09
1654 .long 0x12735509
1655 .long 0x12946509
1656 .long 0x12B56D09
1657 .long 0x12D67509
1658
1659 vperm 15,15,15,6
1660 vperm 16,16,16,6
1661 .long 0x7DE02799
1662 vperm 17,17,17,6
1663 .long 0x7E082799
1664 vperm 18,18,18,6
1665 .long 0x7E3A2799
1666 vperm 19,19,19,6
1667 .long 0x7E5B2799
1668 vperm 20,20,20,6
1669 .long 0x7E7C2799
1670 vperm 21,21,21,6
1671 .long 0x7E9D2799
1672 vperm 22,22,22,6
1673 .long 0x7EBE2799
1674 .long 0x7EDF2799
1675 addi 4,4,0x80
Robert Sloan8ff03552017-06-14 12:40:58 -07001676 b .Lctr32_enc8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07001677
1678.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001679.Lctr32_enc8x_seven:
Robert Sloan572a4e22017-04-17 10:52:19 -07001680 .long 0x11EF0D09
1681 .long 0x12101509
1682 .long 0x12311D09
1683 .long 0x12525509
1684 .long 0x12736509
1685 .long 0x12946D09
1686 .long 0x12B57509
1687
1688 vperm 15,15,15,6
1689 vperm 16,16,16,6
1690 .long 0x7DE02799
1691 vperm 17,17,17,6
1692 .long 0x7E082799
1693 vperm 18,18,18,6
1694 .long 0x7E3A2799
1695 vperm 19,19,19,6
1696 .long 0x7E5B2799
1697 vperm 20,20,20,6
1698 .long 0x7E7C2799
1699 vperm 21,21,21,6
1700 .long 0x7E9D2799
1701 .long 0x7EBE2799
1702 addi 4,4,0x70
Robert Sloan8ff03552017-06-14 12:40:58 -07001703 b .Lctr32_enc8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07001704
1705.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001706.Lctr32_enc8x_six:
Robert Sloan572a4e22017-04-17 10:52:19 -07001707 .long 0x11EF1509
1708 .long 0x12101D09
1709 .long 0x12315509
1710 .long 0x12526509
1711 .long 0x12736D09
1712 .long 0x12947509
1713
1714 vperm 15,15,15,6
1715 vperm 16,16,16,6
1716 .long 0x7DE02799
1717 vperm 17,17,17,6
1718 .long 0x7E082799
1719 vperm 18,18,18,6
1720 .long 0x7E3A2799
1721 vperm 19,19,19,6
1722 .long 0x7E5B2799
1723 vperm 20,20,20,6
1724 .long 0x7E7C2799
1725 .long 0x7E9D2799
1726 addi 4,4,0x60
Robert Sloan8ff03552017-06-14 12:40:58 -07001727 b .Lctr32_enc8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07001728
1729.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001730.Lctr32_enc8x_five:
Robert Sloan572a4e22017-04-17 10:52:19 -07001731 .long 0x11EF1D09
1732 .long 0x12105509
1733 .long 0x12316509
1734 .long 0x12526D09
1735 .long 0x12737509
1736
1737 vperm 15,15,15,6
1738 vperm 16,16,16,6
1739 .long 0x7DE02799
1740 vperm 17,17,17,6
1741 .long 0x7E082799
1742 vperm 18,18,18,6
1743 .long 0x7E3A2799
1744 vperm 19,19,19,6
1745 .long 0x7E5B2799
1746 .long 0x7E7C2799
1747 addi 4,4,0x50
Robert Sloan8ff03552017-06-14 12:40:58 -07001748 b .Lctr32_enc8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07001749
1750.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001751.Lctr32_enc8x_four:
Robert Sloan572a4e22017-04-17 10:52:19 -07001752 .long 0x11EF5509
1753 .long 0x12106509
1754 .long 0x12316D09
1755 .long 0x12527509
1756
1757 vperm 15,15,15,6
1758 vperm 16,16,16,6
1759 .long 0x7DE02799
1760 vperm 17,17,17,6
1761 .long 0x7E082799
1762 vperm 18,18,18,6
1763 .long 0x7E3A2799
1764 .long 0x7E5B2799
1765 addi 4,4,0x40
Robert Sloan8ff03552017-06-14 12:40:58 -07001766 b .Lctr32_enc8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07001767
1768.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001769.Lctr32_enc8x_three:
Robert Sloan572a4e22017-04-17 10:52:19 -07001770 .long 0x11EF6509
1771 .long 0x12106D09
1772 .long 0x12317509
1773
1774 vperm 15,15,15,6
1775 vperm 16,16,16,6
1776 .long 0x7DE02799
1777 vperm 17,17,17,6
1778 .long 0x7E082799
1779 .long 0x7E3A2799
1780 addi 4,4,0x30
Srinivas Paladugudd42a612019-08-09 19:30:39 +00001781 b .Lcbc_dec8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07001782
1783.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001784.Lctr32_enc8x_two:
Robert Sloan572a4e22017-04-17 10:52:19 -07001785 .long 0x11EF6D09
1786 .long 0x12107509
1787
1788 vperm 15,15,15,6
1789 vperm 16,16,16,6
1790 .long 0x7DE02799
1791 .long 0x7E082799
1792 addi 4,4,0x20
Srinivas Paladugudd42a612019-08-09 19:30:39 +00001793 b .Lcbc_dec8x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07001794
1795.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001796.Lctr32_enc8x_one:
Robert Sloan572a4e22017-04-17 10:52:19 -07001797 .long 0x11EF7509
1798
1799 vperm 15,15,15,6
1800 .long 0x7DE02799
1801 addi 4,4,0x10
1802
Robert Sloan8ff03552017-06-14 12:40:58 -07001803.Lctr32_enc8x_done:
Robert Sloan572a4e22017-04-17 10:52:19 -07001804 li 10,79
1805 li 11,95
1806 stvx 6,10,1
1807 addi 10,10,32
1808 stvx 6,11,1
1809 addi 11,11,32
1810 stvx 6,10,1
1811 addi 10,10,32
1812 stvx 6,11,1
1813 addi 11,11,32
1814 stvx 6,10,1
1815 addi 10,10,32
1816 stvx 6,11,1
1817 addi 11,11,32
1818 stvx 6,10,1
1819 addi 10,10,32
1820 stvx 6,11,1
1821 addi 11,11,32
1822
Robert Sloan8ff03552017-06-14 12:40:58 -07001823 or 12,12,12
Robert Sloan572a4e22017-04-17 10:52:19 -07001824 lvx 20,10,1
1825 addi 10,10,32
1826 lvx 21,11,1
1827 addi 11,11,32
1828 lvx 22,10,1
1829 addi 10,10,32
1830 lvx 23,11,1
1831 addi 11,11,32
1832 lvx 24,10,1
1833 addi 10,10,32
1834 lvx 25,11,1
1835 addi 11,11,32
1836 lvx 26,10,1
1837 addi 10,10,32
1838 lvx 27,11,1
1839 addi 11,11,32
1840 lvx 28,10,1
1841 addi 10,10,32
1842 lvx 29,11,1
1843 addi 11,11,32
1844 lvx 30,10,1
1845 lvx 31,11,1
1846 ld 26,400(1)
1847 ld 27,408(1)
1848 ld 28,416(1)
1849 ld 29,424(1)
1850 ld 30,432(1)
1851 ld 31,440(1)
1852 addi 1,1,448
1853 blr
1854.long 0
1855.byte 0,12,0x04,0,0x80,6,6,0
1856.long 0
Robert Sloan8ff03552017-06-14 12:40:58 -07001857.size aes_hw_ctr32_encrypt_blocks,.-aes_hw_ctr32_encrypt_blocks
Robert Sloan572a4e22017-04-17 10:52:19 -07001858.globl aes_hw_xts_encrypt
Robert Sloan8ff03552017-06-14 12:40:58 -07001859.type aes_hw_xts_encrypt,@function
Robert Sloan572a4e22017-04-17 10:52:19 -07001860.align 5
1861aes_hw_xts_encrypt:
Robert Sloan8ff03552017-06-14 12:40:58 -07001862.localentry aes_hw_xts_encrypt,0
1863
Robert Sloan572a4e22017-04-17 10:52:19 -07001864 mr 10,3
1865 li 3,-1
1866 cmpldi 5,16
Robert Sloan8ff03552017-06-14 12:40:58 -07001867 .long 0x4dc00020
Robert Sloan572a4e22017-04-17 10:52:19 -07001868
1869 lis 0,0xfff0
Robert Sloan8ff03552017-06-14 12:40:58 -07001870 li 12,-1
Robert Sloan572a4e22017-04-17 10:52:19 -07001871 li 11,0
Robert Sloan8ff03552017-06-14 12:40:58 -07001872 or 0,0,0
Robert Sloan572a4e22017-04-17 10:52:19 -07001873
1874 vspltisb 9,0x07
1875 lvsl 6,11,11
1876 vspltisb 11,0x0f
1877 vxor 6,6,9
1878
1879 li 3,15
1880 lvx 8,0,8
1881 lvsl 5,0,8
1882 lvx 4,3,8
1883 vxor 5,5,11
1884 vperm 8,8,4,5
1885
1886 neg 11,10
1887 lvsr 5,0,11
1888 lvx 2,0,10
1889 addi 10,10,15
1890 vxor 5,5,11
1891
1892 cmpldi 7,0
Robert Sloan8ff03552017-06-14 12:40:58 -07001893 beq .Lxts_enc_no_key2
Robert Sloan572a4e22017-04-17 10:52:19 -07001894
1895 lvsr 7,0,7
1896 lwz 9,240(7)
1897 srwi 9,9,1
1898 subi 9,9,1
1899 li 3,16
1900
1901 lvx 0,0,7
1902 lvx 1,3,7
1903 addi 3,3,16
1904 vperm 0,1,0,7
1905 vxor 8,8,0
1906 lvx 0,3,7
1907 addi 3,3,16
1908 mtctr 9
1909
Robert Sloan8ff03552017-06-14 12:40:58 -07001910.Ltweak_xts_enc:
Robert Sloan572a4e22017-04-17 10:52:19 -07001911 vperm 1,0,1,7
1912 .long 0x11080D08
1913 lvx 1,3,7
1914 addi 3,3,16
1915 vperm 0,1,0,7
1916 .long 0x11080508
1917 lvx 0,3,7
1918 addi 3,3,16
Robert Sloan8ff03552017-06-14 12:40:58 -07001919 bdnz .Ltweak_xts_enc
Robert Sloan572a4e22017-04-17 10:52:19 -07001920
1921 vperm 1,0,1,7
1922 .long 0x11080D08
1923 lvx 1,3,7
1924 vperm 0,1,0,7
1925 .long 0x11080509
1926
1927 li 8,0
Robert Sloan8ff03552017-06-14 12:40:58 -07001928 b .Lxts_enc
Robert Sloan572a4e22017-04-17 10:52:19 -07001929
Robert Sloan8ff03552017-06-14 12:40:58 -07001930.Lxts_enc_no_key2:
Robert Sloan572a4e22017-04-17 10:52:19 -07001931 li 3,-16
1932 and 5,5,3
1933
1934
Robert Sloan8ff03552017-06-14 12:40:58 -07001935.Lxts_enc:
Robert Sloan572a4e22017-04-17 10:52:19 -07001936 lvx 4,0,10
1937 addi 10,10,16
1938
1939 lvsr 7,0,6
1940 lwz 9,240(6)
1941 srwi 9,9,1
1942 subi 9,9,1
1943 li 3,16
1944
1945 vslb 10,9,9
1946 vor 10,10,9
1947 vspltisb 11,1
1948 vsldoi 10,10,11,15
1949
1950 cmpldi 5,96
1951 bge _aesp8_xts_encrypt6x
1952
1953 andi. 7,5,15
1954 subic 0,5,32
1955 subi 7,7,16
1956 subfe 0,0,0
1957 and 0,0,7
1958 add 10,10,0
1959
1960 lvx 0,0,6
1961 lvx 1,3,6
1962 addi 3,3,16
1963 vperm 2,2,4,5
1964 vperm 0,1,0,7
1965 vxor 2,2,8
1966 vxor 2,2,0
1967 lvx 0,3,6
1968 addi 3,3,16
1969 mtctr 9
Robert Sloan8ff03552017-06-14 12:40:58 -07001970 b .Loop_xts_enc
Robert Sloan572a4e22017-04-17 10:52:19 -07001971
1972.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07001973.Loop_xts_enc:
Robert Sloan572a4e22017-04-17 10:52:19 -07001974 vperm 1,0,1,7
1975 .long 0x10420D08
1976 lvx 1,3,6
1977 addi 3,3,16
1978 vperm 0,1,0,7
1979 .long 0x10420508
1980 lvx 0,3,6
1981 addi 3,3,16
Robert Sloan8ff03552017-06-14 12:40:58 -07001982 bdnz .Loop_xts_enc
Robert Sloan572a4e22017-04-17 10:52:19 -07001983
1984 vperm 1,0,1,7
1985 .long 0x10420D08
1986 lvx 1,3,6
1987 li 3,16
1988 vperm 0,1,0,7
1989 vxor 0,0,8
1990 .long 0x10620509
1991
1992 vperm 11,3,3,6
1993
1994 .long 0x7D602799
1995
1996 addi 4,4,16
1997
1998 subic. 5,5,16
Robert Sloan8ff03552017-06-14 12:40:58 -07001999 beq .Lxts_enc_done
Robert Sloan572a4e22017-04-17 10:52:19 -07002000
2001 vor 2,4,4
2002 lvx 4,0,10
2003 addi 10,10,16
2004 lvx 0,0,6
2005 lvx 1,3,6
2006 addi 3,3,16
2007
2008 subic 0,5,32
2009 subfe 0,0,0
2010 and 0,0,7
2011 add 10,10,0
2012
2013 vsrab 11,8,9
2014 vaddubm 8,8,8
2015 vsldoi 11,11,11,15
2016 vand 11,11,10
2017 vxor 8,8,11
2018
2019 vperm 2,2,4,5
2020 vperm 0,1,0,7
2021 vxor 2,2,8
2022 vxor 3,3,0
2023 vxor 2,2,0
2024 lvx 0,3,6
2025 addi 3,3,16
2026
2027 mtctr 9
2028 cmpldi 5,16
Robert Sloan8ff03552017-06-14 12:40:58 -07002029 bge .Loop_xts_enc
Robert Sloan572a4e22017-04-17 10:52:19 -07002030
2031 vxor 3,3,8
2032 lvsr 5,0,5
2033 vxor 4,4,4
2034 vspltisb 11,-1
2035 vperm 4,4,11,5
2036 vsel 2,2,3,4
2037
2038 subi 11,4,17
2039 subi 4,4,16
2040 mtctr 5
2041 li 5,16
Robert Sloan8ff03552017-06-14 12:40:58 -07002042.Loop_xts_enc_steal:
Robert Sloan572a4e22017-04-17 10:52:19 -07002043 lbzu 0,1(11)
2044 stb 0,16(11)
Robert Sloan8ff03552017-06-14 12:40:58 -07002045 bdnz .Loop_xts_enc_steal
Robert Sloan572a4e22017-04-17 10:52:19 -07002046
2047 mtctr 9
Robert Sloan8ff03552017-06-14 12:40:58 -07002048 b .Loop_xts_enc
Robert Sloan572a4e22017-04-17 10:52:19 -07002049
Robert Sloan8ff03552017-06-14 12:40:58 -07002050.Lxts_enc_done:
Robert Sloan572a4e22017-04-17 10:52:19 -07002051 cmpldi 8,0
Robert Sloan8ff03552017-06-14 12:40:58 -07002052 beq .Lxts_enc_ret
Robert Sloan572a4e22017-04-17 10:52:19 -07002053
2054 vsrab 11,8,9
2055 vaddubm 8,8,8
2056 vsldoi 11,11,11,15
2057 vand 11,11,10
2058 vxor 8,8,11
2059
2060 vperm 8,8,8,6
2061 .long 0x7D004799
2062
Robert Sloan8ff03552017-06-14 12:40:58 -07002063.Lxts_enc_ret:
2064 or 12,12,12
Robert Sloan572a4e22017-04-17 10:52:19 -07002065 li 3,0
2066 blr
2067.long 0
2068.byte 0,12,0x04,0,0x80,6,6,0
2069.long 0
Robert Sloan8ff03552017-06-14 12:40:58 -07002070.size aes_hw_xts_encrypt,.-aes_hw_xts_encrypt
Robert Sloan572a4e22017-04-17 10:52:19 -07002071
2072.globl aes_hw_xts_decrypt
Robert Sloan8ff03552017-06-14 12:40:58 -07002073.type aes_hw_xts_decrypt,@function
Robert Sloan572a4e22017-04-17 10:52:19 -07002074.align 5
2075aes_hw_xts_decrypt:
Robert Sloan8ff03552017-06-14 12:40:58 -07002076.localentry aes_hw_xts_decrypt,0
2077
Robert Sloan572a4e22017-04-17 10:52:19 -07002078 mr 10,3
2079 li 3,-1
2080 cmpldi 5,16
Robert Sloan8ff03552017-06-14 12:40:58 -07002081 .long 0x4dc00020
Robert Sloan572a4e22017-04-17 10:52:19 -07002082
2083 lis 0,0xfff8
Robert Sloan8ff03552017-06-14 12:40:58 -07002084 li 12,-1
Robert Sloan572a4e22017-04-17 10:52:19 -07002085 li 11,0
Robert Sloan8ff03552017-06-14 12:40:58 -07002086 or 0,0,0
Robert Sloan572a4e22017-04-17 10:52:19 -07002087
2088 andi. 0,5,15
2089 neg 0,0
2090 andi. 0,0,16
2091 sub 5,5,0
2092
2093 vspltisb 9,0x07
2094 lvsl 6,11,11
2095 vspltisb 11,0x0f
2096 vxor 6,6,9
2097
2098 li 3,15
2099 lvx 8,0,8
2100 lvsl 5,0,8
2101 lvx 4,3,8
2102 vxor 5,5,11
2103 vperm 8,8,4,5
2104
2105 neg 11,10
2106 lvsr 5,0,11
2107 lvx 2,0,10
2108 addi 10,10,15
2109 vxor 5,5,11
2110
2111 cmpldi 7,0
Robert Sloan8ff03552017-06-14 12:40:58 -07002112 beq .Lxts_dec_no_key2
Robert Sloan572a4e22017-04-17 10:52:19 -07002113
2114 lvsr 7,0,7
2115 lwz 9,240(7)
2116 srwi 9,9,1
2117 subi 9,9,1
2118 li 3,16
2119
2120 lvx 0,0,7
2121 lvx 1,3,7
2122 addi 3,3,16
2123 vperm 0,1,0,7
2124 vxor 8,8,0
2125 lvx 0,3,7
2126 addi 3,3,16
2127 mtctr 9
2128
Robert Sloan8ff03552017-06-14 12:40:58 -07002129.Ltweak_xts_dec:
Robert Sloan572a4e22017-04-17 10:52:19 -07002130 vperm 1,0,1,7
2131 .long 0x11080D08
2132 lvx 1,3,7
2133 addi 3,3,16
2134 vperm 0,1,0,7
2135 .long 0x11080508
2136 lvx 0,3,7
2137 addi 3,3,16
Robert Sloan8ff03552017-06-14 12:40:58 -07002138 bdnz .Ltweak_xts_dec
Robert Sloan572a4e22017-04-17 10:52:19 -07002139
2140 vperm 1,0,1,7
2141 .long 0x11080D08
2142 lvx 1,3,7
2143 vperm 0,1,0,7
2144 .long 0x11080509
2145
2146 li 8,0
Robert Sloan8ff03552017-06-14 12:40:58 -07002147 b .Lxts_dec
Robert Sloan572a4e22017-04-17 10:52:19 -07002148
Robert Sloan8ff03552017-06-14 12:40:58 -07002149.Lxts_dec_no_key2:
Robert Sloan572a4e22017-04-17 10:52:19 -07002150 neg 3,5
2151 andi. 3,3,15
2152 add 5,5,3
2153
2154
Robert Sloan8ff03552017-06-14 12:40:58 -07002155.Lxts_dec:
Robert Sloan572a4e22017-04-17 10:52:19 -07002156 lvx 4,0,10
2157 addi 10,10,16
2158
2159 lvsr 7,0,6
2160 lwz 9,240(6)
2161 srwi 9,9,1
2162 subi 9,9,1
2163 li 3,16
2164
2165 vslb 10,9,9
2166 vor 10,10,9
2167 vspltisb 11,1
2168 vsldoi 10,10,11,15
2169
2170 cmpldi 5,96
2171 bge _aesp8_xts_decrypt6x
2172
2173 lvx 0,0,6
2174 lvx 1,3,6
2175 addi 3,3,16
2176 vperm 2,2,4,5
2177 vperm 0,1,0,7
2178 vxor 2,2,8
2179 vxor 2,2,0
2180 lvx 0,3,6
2181 addi 3,3,16
2182 mtctr 9
2183
2184 cmpldi 5,16
Robert Sloan8ff03552017-06-14 12:40:58 -07002185 blt .Ltail_xts_dec
Robert Sloan572a4e22017-04-17 10:52:19 -07002186
2187
2188.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07002189.Loop_xts_dec:
Robert Sloan572a4e22017-04-17 10:52:19 -07002190 vperm 1,0,1,7
2191 .long 0x10420D48
2192 lvx 1,3,6
2193 addi 3,3,16
2194 vperm 0,1,0,7
2195 .long 0x10420548
2196 lvx 0,3,6
2197 addi 3,3,16
Robert Sloan8ff03552017-06-14 12:40:58 -07002198 bdnz .Loop_xts_dec
Robert Sloan572a4e22017-04-17 10:52:19 -07002199
2200 vperm 1,0,1,7
2201 .long 0x10420D48
2202 lvx 1,3,6
2203 li 3,16
2204 vperm 0,1,0,7
2205 vxor 0,0,8
2206 .long 0x10620549
2207
2208 vperm 11,3,3,6
2209
2210 .long 0x7D602799
2211
2212 addi 4,4,16
2213
2214 subic. 5,5,16
Robert Sloan8ff03552017-06-14 12:40:58 -07002215 beq .Lxts_dec_done
Robert Sloan572a4e22017-04-17 10:52:19 -07002216
2217 vor 2,4,4
2218 lvx 4,0,10
2219 addi 10,10,16
2220 lvx 0,0,6
2221 lvx 1,3,6
2222 addi 3,3,16
2223
2224 vsrab 11,8,9
2225 vaddubm 8,8,8
2226 vsldoi 11,11,11,15
2227 vand 11,11,10
2228 vxor 8,8,11
2229
2230 vperm 2,2,4,5
2231 vperm 0,1,0,7
2232 vxor 2,2,8
2233 vxor 2,2,0
2234 lvx 0,3,6
2235 addi 3,3,16
2236
2237 mtctr 9
2238 cmpldi 5,16
Robert Sloan8ff03552017-06-14 12:40:58 -07002239 bge .Loop_xts_dec
Robert Sloan572a4e22017-04-17 10:52:19 -07002240
Robert Sloan8ff03552017-06-14 12:40:58 -07002241.Ltail_xts_dec:
Robert Sloan572a4e22017-04-17 10:52:19 -07002242 vsrab 11,8,9
2243 vaddubm 12,8,8
2244 vsldoi 11,11,11,15
2245 vand 11,11,10
2246 vxor 12,12,11
2247
2248 subi 10,10,16
2249 add 10,10,5
2250
2251 vxor 2,2,8
2252 vxor 2,2,12
2253
Robert Sloan8ff03552017-06-14 12:40:58 -07002254.Loop_xts_dec_short:
Robert Sloan572a4e22017-04-17 10:52:19 -07002255 vperm 1,0,1,7
2256 .long 0x10420D48
2257 lvx 1,3,6
2258 addi 3,3,16
2259 vperm 0,1,0,7
2260 .long 0x10420548
2261 lvx 0,3,6
2262 addi 3,3,16
Robert Sloan8ff03552017-06-14 12:40:58 -07002263 bdnz .Loop_xts_dec_short
Robert Sloan572a4e22017-04-17 10:52:19 -07002264
2265 vperm 1,0,1,7
2266 .long 0x10420D48
2267 lvx 1,3,6
2268 li 3,16
2269 vperm 0,1,0,7
2270 vxor 0,0,12
2271 .long 0x10620549
2272
2273 vperm 11,3,3,6
2274
2275 .long 0x7D602799
2276
2277
2278 vor 2,4,4
2279 lvx 4,0,10
2280
2281 lvx 0,0,6
2282 lvx 1,3,6
2283 addi 3,3,16
2284 vperm 2,2,4,5
2285 vperm 0,1,0,7
2286
2287 lvsr 5,0,5
2288 vxor 4,4,4
2289 vspltisb 11,-1
2290 vperm 4,4,11,5
2291 vsel 2,2,3,4
2292
2293 vxor 0,0,8
2294 vxor 2,2,0
2295 lvx 0,3,6
2296 addi 3,3,16
2297
2298 subi 11,4,1
2299 mtctr 5
2300 li 5,16
Robert Sloan8ff03552017-06-14 12:40:58 -07002301.Loop_xts_dec_steal:
Robert Sloan572a4e22017-04-17 10:52:19 -07002302 lbzu 0,1(11)
2303 stb 0,16(11)
Robert Sloan8ff03552017-06-14 12:40:58 -07002304 bdnz .Loop_xts_dec_steal
Robert Sloan572a4e22017-04-17 10:52:19 -07002305
2306 mtctr 9
Robert Sloan8ff03552017-06-14 12:40:58 -07002307 b .Loop_xts_dec
Robert Sloan572a4e22017-04-17 10:52:19 -07002308
Robert Sloan8ff03552017-06-14 12:40:58 -07002309.Lxts_dec_done:
Robert Sloan572a4e22017-04-17 10:52:19 -07002310 cmpldi 8,0
Robert Sloan8ff03552017-06-14 12:40:58 -07002311 beq .Lxts_dec_ret
Robert Sloan572a4e22017-04-17 10:52:19 -07002312
2313 vsrab 11,8,9
2314 vaddubm 8,8,8
2315 vsldoi 11,11,11,15
2316 vand 11,11,10
2317 vxor 8,8,11
2318
2319 vperm 8,8,8,6
2320 .long 0x7D004799
2321
Robert Sloan8ff03552017-06-14 12:40:58 -07002322.Lxts_dec_ret:
2323 or 12,12,12
Robert Sloan572a4e22017-04-17 10:52:19 -07002324 li 3,0
2325 blr
2326.long 0
2327.byte 0,12,0x04,0,0x80,6,6,0
2328.long 0
Robert Sloan8ff03552017-06-14 12:40:58 -07002329.size aes_hw_xts_decrypt,.-aes_hw_xts_decrypt
Robert Sloan572a4e22017-04-17 10:52:19 -07002330.align 5
2331_aesp8_xts_encrypt6x:
2332 stdu 1,-448(1)
2333 mflr 11
2334 li 7,207
2335 li 3,223
2336 std 11,464(1)
2337 stvx 20,7,1
2338 addi 7,7,32
2339 stvx 21,3,1
2340 addi 3,3,32
2341 stvx 22,7,1
2342 addi 7,7,32
2343 stvx 23,3,1
2344 addi 3,3,32
2345 stvx 24,7,1
2346 addi 7,7,32
2347 stvx 25,3,1
2348 addi 3,3,32
2349 stvx 26,7,1
2350 addi 7,7,32
2351 stvx 27,3,1
2352 addi 3,3,32
2353 stvx 28,7,1
2354 addi 7,7,32
2355 stvx 29,3,1
2356 addi 3,3,32
2357 stvx 30,7,1
2358 stvx 31,3,1
2359 li 0,-1
2360 stw 12,396(1)
2361 li 3,0x10
2362 std 26,400(1)
2363 li 26,0x20
2364 std 27,408(1)
2365 li 27,0x30
2366 std 28,416(1)
2367 li 28,0x40
2368 std 29,424(1)
2369 li 29,0x50
2370 std 30,432(1)
2371 li 30,0x60
2372 std 31,440(1)
2373 li 31,0x70
Robert Sloan8ff03552017-06-14 12:40:58 -07002374 or 0,0,0
Robert Sloan572a4e22017-04-17 10:52:19 -07002375
2376 subi 9,9,3
2377
2378 lvx 23,0,6
2379 lvx 30,3,6
2380 addi 6,6,0x20
2381 lvx 31,0,6
2382 vperm 23,30,23,7
Robert Sloan8ff03552017-06-14 12:40:58 -07002383 addi 7,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07002384 mtctr 9
2385
Robert Sloan8ff03552017-06-14 12:40:58 -07002386.Load_xts_enc_key:
Robert Sloan572a4e22017-04-17 10:52:19 -07002387 vperm 24,31,30,7
2388 lvx 30,3,6
2389 addi 6,6,0x20
2390 stvx 24,0,7
2391 vperm 25,30,31,7
2392 lvx 31,0,6
2393 stvx 25,3,7
2394 addi 7,7,0x20
Robert Sloan8ff03552017-06-14 12:40:58 -07002395 bdnz .Load_xts_enc_key
Robert Sloan572a4e22017-04-17 10:52:19 -07002396
2397 lvx 26,3,6
2398 vperm 24,31,30,7
2399 lvx 27,26,6
2400 stvx 24,0,7
2401 vperm 25,26,31,7
2402 lvx 28,27,6
2403 stvx 25,3,7
Robert Sloan8ff03552017-06-14 12:40:58 -07002404 addi 7,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07002405 vperm 26,27,26,7
2406 lvx 29,28,6
2407 vperm 27,28,27,7
2408 lvx 30,29,6
2409 vperm 28,29,28,7
2410 lvx 31,30,6
2411 vperm 29,30,29,7
2412 lvx 22,31,6
2413 vperm 30,31,30,7
2414 lvx 24,0,7
2415 vperm 31,22,31,7
2416 lvx 25,3,7
2417
2418 vperm 0,2,4,5
2419 subi 10,10,31
2420 vxor 17,8,23
2421 vsrab 11,8,9
2422 vaddubm 8,8,8
2423 vsldoi 11,11,11,15
2424 vand 11,11,10
2425 vxor 7,0,17
2426 vxor 8,8,11
2427
2428 .long 0x7C235699
2429 vxor 18,8,23
2430 vsrab 11,8,9
2431 vaddubm 8,8,8
2432 vsldoi 11,11,11,15
2433 vperm 1,1,1,6
2434 vand 11,11,10
2435 vxor 12,1,18
2436 vxor 8,8,11
2437
2438 .long 0x7C5A5699
2439 andi. 31,5,15
2440 vxor 19,8,23
2441 vsrab 11,8,9
2442 vaddubm 8,8,8
2443 vsldoi 11,11,11,15
2444 vperm 2,2,2,6
2445 vand 11,11,10
2446 vxor 13,2,19
2447 vxor 8,8,11
2448
2449 .long 0x7C7B5699
2450 sub 5,5,31
2451 vxor 20,8,23
2452 vsrab 11,8,9
2453 vaddubm 8,8,8
2454 vsldoi 11,11,11,15
2455 vperm 3,3,3,6
2456 vand 11,11,10
2457 vxor 14,3,20
2458 vxor 8,8,11
2459
2460 .long 0x7C9C5699
2461 subi 5,5,0x60
2462 vxor 21,8,23
2463 vsrab 11,8,9
2464 vaddubm 8,8,8
2465 vsldoi 11,11,11,15
2466 vperm 4,4,4,6
2467 vand 11,11,10
2468 vxor 15,4,21
2469 vxor 8,8,11
2470
2471 .long 0x7CBD5699
2472 addi 10,10,0x60
2473 vxor 22,8,23
2474 vsrab 11,8,9
2475 vaddubm 8,8,8
2476 vsldoi 11,11,11,15
2477 vperm 5,5,5,6
2478 vand 11,11,10
2479 vxor 16,5,22
2480 vxor 8,8,11
2481
2482 vxor 31,31,23
2483 mtctr 9
Robert Sloan8ff03552017-06-14 12:40:58 -07002484 b .Loop_xts_enc6x
Robert Sloan572a4e22017-04-17 10:52:19 -07002485
2486.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07002487.Loop_xts_enc6x:
Robert Sloan572a4e22017-04-17 10:52:19 -07002488 .long 0x10E7C508
2489 .long 0x118CC508
2490 .long 0x11ADC508
2491 .long 0x11CEC508
2492 .long 0x11EFC508
2493 .long 0x1210C508
2494 lvx 24,26,7
2495 addi 7,7,0x20
2496
2497 .long 0x10E7CD08
2498 .long 0x118CCD08
2499 .long 0x11ADCD08
2500 .long 0x11CECD08
2501 .long 0x11EFCD08
2502 .long 0x1210CD08
2503 lvx 25,3,7
Robert Sloan8ff03552017-06-14 12:40:58 -07002504 bdnz .Loop_xts_enc6x
Robert Sloan572a4e22017-04-17 10:52:19 -07002505
2506 subic 5,5,96
2507 vxor 0,17,31
2508 .long 0x10E7C508
2509 .long 0x118CC508
2510 vsrab 11,8,9
2511 vxor 17,8,23
2512 vaddubm 8,8,8
2513 .long 0x11ADC508
2514 .long 0x11CEC508
2515 vsldoi 11,11,11,15
2516 .long 0x11EFC508
2517 .long 0x1210C508
2518
2519 subfe. 0,0,0
2520 vand 11,11,10
2521 .long 0x10E7CD08
2522 .long 0x118CCD08
2523 vxor 8,8,11
2524 .long 0x11ADCD08
2525 .long 0x11CECD08
2526 vxor 1,18,31
2527 vsrab 11,8,9
2528 vxor 18,8,23
2529 .long 0x11EFCD08
2530 .long 0x1210CD08
2531
2532 and 0,0,5
2533 vaddubm 8,8,8
2534 vsldoi 11,11,11,15
2535 .long 0x10E7D508
2536 .long 0x118CD508
2537 vand 11,11,10
2538 .long 0x11ADD508
2539 .long 0x11CED508
2540 vxor 8,8,11
2541 .long 0x11EFD508
2542 .long 0x1210D508
2543
2544 add 10,10,0
2545
2546
2547
2548 vxor 2,19,31
2549 vsrab 11,8,9
2550 vxor 19,8,23
2551 vaddubm 8,8,8
2552 .long 0x10E7DD08
2553 .long 0x118CDD08
2554 vsldoi 11,11,11,15
2555 .long 0x11ADDD08
2556 .long 0x11CEDD08
2557 vand 11,11,10
2558 .long 0x11EFDD08
2559 .long 0x1210DD08
2560
Robert Sloan8ff03552017-06-14 12:40:58 -07002561 addi 7,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07002562 vxor 8,8,11
2563 .long 0x10E7E508
2564 .long 0x118CE508
2565 vxor 3,20,31
2566 vsrab 11,8,9
2567 vxor 20,8,23
2568 .long 0x11ADE508
2569 .long 0x11CEE508
2570 vaddubm 8,8,8
2571 vsldoi 11,11,11,15
2572 .long 0x11EFE508
2573 .long 0x1210E508
2574 lvx 24,0,7
2575 vand 11,11,10
2576
2577 .long 0x10E7ED08
2578 .long 0x118CED08
2579 vxor 8,8,11
2580 .long 0x11ADED08
2581 .long 0x11CEED08
2582 vxor 4,21,31
2583 vsrab 11,8,9
2584 vxor 21,8,23
2585 .long 0x11EFED08
2586 .long 0x1210ED08
2587 lvx 25,3,7
2588 vaddubm 8,8,8
2589 vsldoi 11,11,11,15
2590
2591 .long 0x10E7F508
2592 .long 0x118CF508
2593 vand 11,11,10
2594 .long 0x11ADF508
2595 .long 0x11CEF508
2596 vxor 8,8,11
2597 .long 0x11EFF508
2598 .long 0x1210F508
2599 vxor 5,22,31
2600 vsrab 11,8,9
2601 vxor 22,8,23
2602
2603 .long 0x10E70509
2604 .long 0x7C005699
2605 vaddubm 8,8,8
2606 vsldoi 11,11,11,15
2607 .long 0x118C0D09
2608 .long 0x7C235699
2609 .long 0x11AD1509
2610 vperm 0,0,0,6
2611 .long 0x7C5A5699
2612 vand 11,11,10
2613 .long 0x11CE1D09
2614 vperm 1,1,1,6
2615 .long 0x7C7B5699
2616 .long 0x11EF2509
2617 vperm 2,2,2,6
2618 .long 0x7C9C5699
2619 vxor 8,8,11
2620 .long 0x11702D09
2621
2622 vperm 3,3,3,6
2623 .long 0x7CBD5699
2624 addi 10,10,0x60
2625 vperm 4,4,4,6
2626 vperm 5,5,5,6
2627
2628 vperm 7,7,7,6
2629 vperm 12,12,12,6
2630 .long 0x7CE02799
2631 vxor 7,0,17
2632 vperm 13,13,13,6
2633 .long 0x7D832799
2634 vxor 12,1,18
2635 vperm 14,14,14,6
2636 .long 0x7DBA2799
2637 vxor 13,2,19
2638 vperm 15,15,15,6
2639 .long 0x7DDB2799
2640 vxor 14,3,20
2641 vperm 16,11,11,6
2642 .long 0x7DFC2799
2643 vxor 15,4,21
2644 .long 0x7E1D2799
2645
2646 vxor 16,5,22
2647 addi 4,4,0x60
2648
2649 mtctr 9
Robert Sloan8ff03552017-06-14 12:40:58 -07002650 beq .Loop_xts_enc6x
Robert Sloan572a4e22017-04-17 10:52:19 -07002651
2652 addic. 5,5,0x60
Robert Sloan8ff03552017-06-14 12:40:58 -07002653 beq .Lxts_enc6x_zero
Robert Sloan572a4e22017-04-17 10:52:19 -07002654 cmpwi 5,0x20
Robert Sloan8ff03552017-06-14 12:40:58 -07002655 blt .Lxts_enc6x_one
Robert Sloan572a4e22017-04-17 10:52:19 -07002656 nop
Robert Sloan8ff03552017-06-14 12:40:58 -07002657 beq .Lxts_enc6x_two
Robert Sloan572a4e22017-04-17 10:52:19 -07002658 cmpwi 5,0x40
Robert Sloan8ff03552017-06-14 12:40:58 -07002659 blt .Lxts_enc6x_three
Robert Sloan572a4e22017-04-17 10:52:19 -07002660 nop
Robert Sloan8ff03552017-06-14 12:40:58 -07002661 beq .Lxts_enc6x_four
Robert Sloan572a4e22017-04-17 10:52:19 -07002662
Robert Sloan8ff03552017-06-14 12:40:58 -07002663.Lxts_enc6x_five:
Robert Sloan572a4e22017-04-17 10:52:19 -07002664 vxor 7,1,17
2665 vxor 12,2,18
2666 vxor 13,3,19
2667 vxor 14,4,20
2668 vxor 15,5,21
2669
2670 bl _aesp8_xts_enc5x
2671
2672 vperm 7,7,7,6
2673 vor 17,22,22
2674 vperm 12,12,12,6
2675 .long 0x7CE02799
2676 vperm 13,13,13,6
2677 .long 0x7D832799
2678 vperm 14,14,14,6
2679 .long 0x7DBA2799
2680 vxor 11,15,22
2681 vperm 15,15,15,6
2682 .long 0x7DDB2799
2683 .long 0x7DFC2799
2684 addi 4,4,0x50
Robert Sloan8ff03552017-06-14 12:40:58 -07002685 bne .Lxts_enc6x_steal
2686 b .Lxts_enc6x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07002687
2688.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -07002689.Lxts_enc6x_four:
Robert Sloan572a4e22017-04-17 10:52:19 -07002690 vxor 7,2,17
2691 vxor 12,3,18
2692 vxor 13,4,19
2693 vxor 14,5,20
2694 vxor 15,15,15
2695
2696 bl _aesp8_xts_enc5x
2697
2698 vperm 7,7,7,6
2699 vor 17,21,21
2700 vperm 12,12,12,6
2701 .long 0x7CE02799
2702 vperm 13,13,13,6
2703 .long 0x7D832799
2704 vxor 11,14,21
2705 vperm 14,14,14,6
2706 .long 0x7DBA2799
2707 .long 0x7DDB2799
2708 addi 4,4,0x40
Robert Sloan8ff03552017-06-14 12:40:58 -07002709 bne .Lxts_enc6x_steal
2710 b .Lxts_enc6x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07002711
2712.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -07002713.Lxts_enc6x_three:
Robert Sloan572a4e22017-04-17 10:52:19 -07002714 vxor 7,3,17
2715 vxor 12,4,18
2716 vxor 13,5,19
2717 vxor 14,14,14
2718 vxor 15,15,15
2719
2720 bl _aesp8_xts_enc5x
2721
2722 vperm 7,7,7,6
2723 vor 17,20,20
2724 vperm 12,12,12,6
2725 .long 0x7CE02799
2726 vxor 11,13,20
2727 vperm 13,13,13,6
2728 .long 0x7D832799
2729 .long 0x7DBA2799
2730 addi 4,4,0x30
Robert Sloan8ff03552017-06-14 12:40:58 -07002731 bne .Lxts_enc6x_steal
2732 b .Lxts_enc6x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07002733
2734.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -07002735.Lxts_enc6x_two:
Robert Sloan572a4e22017-04-17 10:52:19 -07002736 vxor 7,4,17
2737 vxor 12,5,18
2738 vxor 13,13,13
2739 vxor 14,14,14
2740 vxor 15,15,15
2741
2742 bl _aesp8_xts_enc5x
2743
2744 vperm 7,7,7,6
2745 vor 17,19,19
2746 vxor 11,12,19
2747 vperm 12,12,12,6
2748 .long 0x7CE02799
2749 .long 0x7D832799
2750 addi 4,4,0x20
Robert Sloan8ff03552017-06-14 12:40:58 -07002751 bne .Lxts_enc6x_steal
2752 b .Lxts_enc6x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07002753
2754.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -07002755.Lxts_enc6x_one:
Robert Sloan572a4e22017-04-17 10:52:19 -07002756 vxor 7,5,17
2757 nop
Robert Sloan8ff03552017-06-14 12:40:58 -07002758.Loop_xts_enc1x:
Robert Sloan572a4e22017-04-17 10:52:19 -07002759 .long 0x10E7C508
2760 lvx 24,26,7
2761 addi 7,7,0x20
2762
2763 .long 0x10E7CD08
2764 lvx 25,3,7
Robert Sloan8ff03552017-06-14 12:40:58 -07002765 bdnz .Loop_xts_enc1x
Robert Sloan572a4e22017-04-17 10:52:19 -07002766
2767 add 10,10,31
2768 cmpwi 31,0
2769 .long 0x10E7C508
2770
2771 subi 10,10,16
2772 .long 0x10E7CD08
2773
2774 lvsr 5,0,31
2775 .long 0x10E7D508
2776
2777 .long 0x7C005699
2778 .long 0x10E7DD08
2779
Robert Sloan8ff03552017-06-14 12:40:58 -07002780 addi 7,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07002781 .long 0x10E7E508
2782 lvx 24,0,7
2783
2784 .long 0x10E7ED08
2785 lvx 25,3,7
2786 vxor 17,17,31
2787
2788 vperm 0,0,0,6
2789 .long 0x10E7F508
2790
2791 vperm 0,0,0,5
2792 .long 0x10E78D09
2793
2794 vor 17,18,18
2795 vxor 11,7,18
2796 vperm 7,7,7,6
2797 .long 0x7CE02799
2798 addi 4,4,0x10
Robert Sloan8ff03552017-06-14 12:40:58 -07002799 bne .Lxts_enc6x_steal
2800 b .Lxts_enc6x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07002801
2802.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -07002803.Lxts_enc6x_zero:
Robert Sloan572a4e22017-04-17 10:52:19 -07002804 cmpwi 31,0
Robert Sloan8ff03552017-06-14 12:40:58 -07002805 beq .Lxts_enc6x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07002806
2807 add 10,10,31
2808 subi 10,10,16
2809 .long 0x7C005699
2810 lvsr 5,0,31
2811 vperm 0,0,0,6
2812 vperm 0,0,0,5
2813 vxor 11,11,17
Robert Sloan8ff03552017-06-14 12:40:58 -07002814.Lxts_enc6x_steal:
Robert Sloan572a4e22017-04-17 10:52:19 -07002815 vxor 0,0,17
2816 vxor 7,7,7
2817 vspltisb 12,-1
2818 vperm 7,7,12,5
2819 vsel 7,0,11,7
2820
2821 subi 30,4,17
2822 subi 4,4,16
2823 mtctr 31
Robert Sloan8ff03552017-06-14 12:40:58 -07002824.Loop_xts_enc6x_steal:
Robert Sloan572a4e22017-04-17 10:52:19 -07002825 lbzu 0,1(30)
2826 stb 0,16(30)
Robert Sloan8ff03552017-06-14 12:40:58 -07002827 bdnz .Loop_xts_enc6x_steal
Robert Sloan572a4e22017-04-17 10:52:19 -07002828
2829 li 31,0
2830 mtctr 9
Robert Sloan8ff03552017-06-14 12:40:58 -07002831 b .Loop_xts_enc1x
Robert Sloan572a4e22017-04-17 10:52:19 -07002832
2833.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -07002834.Lxts_enc6x_done:
Robert Sloan572a4e22017-04-17 10:52:19 -07002835 cmpldi 8,0
Robert Sloan8ff03552017-06-14 12:40:58 -07002836 beq .Lxts_enc6x_ret
Robert Sloan572a4e22017-04-17 10:52:19 -07002837
2838 vxor 8,17,23
2839 vperm 8,8,8,6
2840 .long 0x7D004799
2841
Robert Sloan8ff03552017-06-14 12:40:58 -07002842.Lxts_enc6x_ret:
Robert Sloan572a4e22017-04-17 10:52:19 -07002843 mtlr 11
2844 li 10,79
2845 li 11,95
2846 stvx 9,10,1
2847 addi 10,10,32
2848 stvx 9,11,1
2849 addi 11,11,32
2850 stvx 9,10,1
2851 addi 10,10,32
2852 stvx 9,11,1
2853 addi 11,11,32
2854 stvx 9,10,1
2855 addi 10,10,32
2856 stvx 9,11,1
2857 addi 11,11,32
2858 stvx 9,10,1
2859 addi 10,10,32
2860 stvx 9,11,1
2861 addi 11,11,32
2862
Robert Sloan8ff03552017-06-14 12:40:58 -07002863 or 12,12,12
Robert Sloan572a4e22017-04-17 10:52:19 -07002864 lvx 20,10,1
2865 addi 10,10,32
2866 lvx 21,11,1
2867 addi 11,11,32
2868 lvx 22,10,1
2869 addi 10,10,32
2870 lvx 23,11,1
2871 addi 11,11,32
2872 lvx 24,10,1
2873 addi 10,10,32
2874 lvx 25,11,1
2875 addi 11,11,32
2876 lvx 26,10,1
2877 addi 10,10,32
2878 lvx 27,11,1
2879 addi 11,11,32
2880 lvx 28,10,1
2881 addi 10,10,32
2882 lvx 29,11,1
2883 addi 11,11,32
2884 lvx 30,10,1
2885 lvx 31,11,1
2886 ld 26,400(1)
2887 ld 27,408(1)
2888 ld 28,416(1)
2889 ld 29,424(1)
2890 ld 30,432(1)
2891 ld 31,440(1)
2892 addi 1,1,448
2893 blr
2894.long 0
2895.byte 0,12,0x04,1,0x80,6,6,0
2896.long 0
2897
2898.align 5
2899_aesp8_xts_enc5x:
2900 .long 0x10E7C508
2901 .long 0x118CC508
2902 .long 0x11ADC508
2903 .long 0x11CEC508
2904 .long 0x11EFC508
2905 lvx 24,26,7
2906 addi 7,7,0x20
2907
2908 .long 0x10E7CD08
2909 .long 0x118CCD08
2910 .long 0x11ADCD08
2911 .long 0x11CECD08
2912 .long 0x11EFCD08
2913 lvx 25,3,7
Robert Sloan8ff03552017-06-14 12:40:58 -07002914 bdnz _aesp8_xts_enc5x
Robert Sloan572a4e22017-04-17 10:52:19 -07002915
2916 add 10,10,31
2917 cmpwi 31,0
2918 .long 0x10E7C508
2919 .long 0x118CC508
2920 .long 0x11ADC508
2921 .long 0x11CEC508
2922 .long 0x11EFC508
2923
2924 subi 10,10,16
2925 .long 0x10E7CD08
2926 .long 0x118CCD08
2927 .long 0x11ADCD08
2928 .long 0x11CECD08
2929 .long 0x11EFCD08
2930 vxor 17,17,31
2931
2932 .long 0x10E7D508
2933 lvsr 5,0,31
2934 .long 0x118CD508
2935 .long 0x11ADD508
2936 .long 0x11CED508
2937 .long 0x11EFD508
2938 vxor 1,18,31
2939
2940 .long 0x10E7DD08
2941 .long 0x7C005699
2942 .long 0x118CDD08
2943 .long 0x11ADDD08
2944 .long 0x11CEDD08
2945 .long 0x11EFDD08
2946 vxor 2,19,31
2947
Robert Sloan8ff03552017-06-14 12:40:58 -07002948 addi 7,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07002949 .long 0x10E7E508
2950 .long 0x118CE508
2951 .long 0x11ADE508
2952 .long 0x11CEE508
2953 .long 0x11EFE508
2954 lvx 24,0,7
2955 vxor 3,20,31
2956
2957 .long 0x10E7ED08
2958 vperm 0,0,0,6
2959 .long 0x118CED08
2960 .long 0x11ADED08
2961 .long 0x11CEED08
2962 .long 0x11EFED08
2963 lvx 25,3,7
2964 vxor 4,21,31
2965
2966 .long 0x10E7F508
2967 vperm 0,0,0,5
2968 .long 0x118CF508
2969 .long 0x11ADF508
2970 .long 0x11CEF508
2971 .long 0x11EFF508
2972
2973 .long 0x10E78D09
2974 .long 0x118C0D09
2975 .long 0x11AD1509
2976 .long 0x11CE1D09
2977 .long 0x11EF2509
2978 blr
2979.long 0
2980.byte 0,12,0x14,0,0,0,0,0
2981
2982.align 5
2983_aesp8_xts_decrypt6x:
2984 stdu 1,-448(1)
2985 mflr 11
2986 li 7,207
2987 li 3,223
2988 std 11,464(1)
2989 stvx 20,7,1
2990 addi 7,7,32
2991 stvx 21,3,1
2992 addi 3,3,32
2993 stvx 22,7,1
2994 addi 7,7,32
2995 stvx 23,3,1
2996 addi 3,3,32
2997 stvx 24,7,1
2998 addi 7,7,32
2999 stvx 25,3,1
3000 addi 3,3,32
3001 stvx 26,7,1
3002 addi 7,7,32
3003 stvx 27,3,1
3004 addi 3,3,32
3005 stvx 28,7,1
3006 addi 7,7,32
3007 stvx 29,3,1
3008 addi 3,3,32
3009 stvx 30,7,1
3010 stvx 31,3,1
3011 li 0,-1
3012 stw 12,396(1)
3013 li 3,0x10
3014 std 26,400(1)
3015 li 26,0x20
3016 std 27,408(1)
3017 li 27,0x30
3018 std 28,416(1)
3019 li 28,0x40
3020 std 29,424(1)
3021 li 29,0x50
3022 std 30,432(1)
3023 li 30,0x60
3024 std 31,440(1)
3025 li 31,0x70
Robert Sloan8ff03552017-06-14 12:40:58 -07003026 or 0,0,0
Robert Sloan572a4e22017-04-17 10:52:19 -07003027
3028 subi 9,9,3
3029
3030 lvx 23,0,6
3031 lvx 30,3,6
3032 addi 6,6,0x20
3033 lvx 31,0,6
3034 vperm 23,30,23,7
Robert Sloan8ff03552017-06-14 12:40:58 -07003035 addi 7,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07003036 mtctr 9
3037
Robert Sloan8ff03552017-06-14 12:40:58 -07003038.Load_xts_dec_key:
Robert Sloan572a4e22017-04-17 10:52:19 -07003039 vperm 24,31,30,7
3040 lvx 30,3,6
3041 addi 6,6,0x20
3042 stvx 24,0,7
3043 vperm 25,30,31,7
3044 lvx 31,0,6
3045 stvx 25,3,7
3046 addi 7,7,0x20
Robert Sloan8ff03552017-06-14 12:40:58 -07003047 bdnz .Load_xts_dec_key
Robert Sloan572a4e22017-04-17 10:52:19 -07003048
3049 lvx 26,3,6
3050 vperm 24,31,30,7
3051 lvx 27,26,6
3052 stvx 24,0,7
3053 vperm 25,26,31,7
3054 lvx 28,27,6
3055 stvx 25,3,7
Robert Sloan8ff03552017-06-14 12:40:58 -07003056 addi 7,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07003057 vperm 26,27,26,7
3058 lvx 29,28,6
3059 vperm 27,28,27,7
3060 lvx 30,29,6
3061 vperm 28,29,28,7
3062 lvx 31,30,6
3063 vperm 29,30,29,7
3064 lvx 22,31,6
3065 vperm 30,31,30,7
3066 lvx 24,0,7
3067 vperm 31,22,31,7
3068 lvx 25,3,7
3069
3070 vperm 0,2,4,5
3071 subi 10,10,31
3072 vxor 17,8,23
3073 vsrab 11,8,9
3074 vaddubm 8,8,8
3075 vsldoi 11,11,11,15
3076 vand 11,11,10
3077 vxor 7,0,17
3078 vxor 8,8,11
3079
3080 .long 0x7C235699
3081 vxor 18,8,23
3082 vsrab 11,8,9
3083 vaddubm 8,8,8
3084 vsldoi 11,11,11,15
3085 vperm 1,1,1,6
3086 vand 11,11,10
3087 vxor 12,1,18
3088 vxor 8,8,11
3089
3090 .long 0x7C5A5699
3091 andi. 31,5,15
3092 vxor 19,8,23
3093 vsrab 11,8,9
3094 vaddubm 8,8,8
3095 vsldoi 11,11,11,15
3096 vperm 2,2,2,6
3097 vand 11,11,10
3098 vxor 13,2,19
3099 vxor 8,8,11
3100
3101 .long 0x7C7B5699
3102 sub 5,5,31
3103 vxor 20,8,23
3104 vsrab 11,8,9
3105 vaddubm 8,8,8
3106 vsldoi 11,11,11,15
3107 vperm 3,3,3,6
3108 vand 11,11,10
3109 vxor 14,3,20
3110 vxor 8,8,11
3111
3112 .long 0x7C9C5699
3113 subi 5,5,0x60
3114 vxor 21,8,23
3115 vsrab 11,8,9
3116 vaddubm 8,8,8
3117 vsldoi 11,11,11,15
3118 vperm 4,4,4,6
3119 vand 11,11,10
3120 vxor 15,4,21
3121 vxor 8,8,11
3122
3123 .long 0x7CBD5699
3124 addi 10,10,0x60
3125 vxor 22,8,23
3126 vsrab 11,8,9
3127 vaddubm 8,8,8
3128 vsldoi 11,11,11,15
3129 vperm 5,5,5,6
3130 vand 11,11,10
3131 vxor 16,5,22
3132 vxor 8,8,11
3133
3134 vxor 31,31,23
3135 mtctr 9
Robert Sloan8ff03552017-06-14 12:40:58 -07003136 b .Loop_xts_dec6x
Robert Sloan572a4e22017-04-17 10:52:19 -07003137
3138.align 5
Robert Sloan8ff03552017-06-14 12:40:58 -07003139.Loop_xts_dec6x:
Robert Sloan572a4e22017-04-17 10:52:19 -07003140 .long 0x10E7C548
3141 .long 0x118CC548
3142 .long 0x11ADC548
3143 .long 0x11CEC548
3144 .long 0x11EFC548
3145 .long 0x1210C548
3146 lvx 24,26,7
3147 addi 7,7,0x20
3148
3149 .long 0x10E7CD48
3150 .long 0x118CCD48
3151 .long 0x11ADCD48
3152 .long 0x11CECD48
3153 .long 0x11EFCD48
3154 .long 0x1210CD48
3155 lvx 25,3,7
Robert Sloan8ff03552017-06-14 12:40:58 -07003156 bdnz .Loop_xts_dec6x
Robert Sloan572a4e22017-04-17 10:52:19 -07003157
3158 subic 5,5,96
3159 vxor 0,17,31
3160 .long 0x10E7C548
3161 .long 0x118CC548
3162 vsrab 11,8,9
3163 vxor 17,8,23
3164 vaddubm 8,8,8
3165 .long 0x11ADC548
3166 .long 0x11CEC548
3167 vsldoi 11,11,11,15
3168 .long 0x11EFC548
3169 .long 0x1210C548
3170
3171 subfe. 0,0,0
3172 vand 11,11,10
3173 .long 0x10E7CD48
3174 .long 0x118CCD48
3175 vxor 8,8,11
3176 .long 0x11ADCD48
3177 .long 0x11CECD48
3178 vxor 1,18,31
3179 vsrab 11,8,9
3180 vxor 18,8,23
3181 .long 0x11EFCD48
3182 .long 0x1210CD48
3183
3184 and 0,0,5
3185 vaddubm 8,8,8
3186 vsldoi 11,11,11,15
3187 .long 0x10E7D548
3188 .long 0x118CD548
3189 vand 11,11,10
3190 .long 0x11ADD548
3191 .long 0x11CED548
3192 vxor 8,8,11
3193 .long 0x11EFD548
3194 .long 0x1210D548
3195
3196 add 10,10,0
3197
3198
3199
3200 vxor 2,19,31
3201 vsrab 11,8,9
3202 vxor 19,8,23
3203 vaddubm 8,8,8
3204 .long 0x10E7DD48
3205 .long 0x118CDD48
3206 vsldoi 11,11,11,15
3207 .long 0x11ADDD48
3208 .long 0x11CEDD48
3209 vand 11,11,10
3210 .long 0x11EFDD48
3211 .long 0x1210DD48
3212
Robert Sloan8ff03552017-06-14 12:40:58 -07003213 addi 7,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07003214 vxor 8,8,11
3215 .long 0x10E7E548
3216 .long 0x118CE548
3217 vxor 3,20,31
3218 vsrab 11,8,9
3219 vxor 20,8,23
3220 .long 0x11ADE548
3221 .long 0x11CEE548
3222 vaddubm 8,8,8
3223 vsldoi 11,11,11,15
3224 .long 0x11EFE548
3225 .long 0x1210E548
3226 lvx 24,0,7
3227 vand 11,11,10
3228
3229 .long 0x10E7ED48
3230 .long 0x118CED48
3231 vxor 8,8,11
3232 .long 0x11ADED48
3233 .long 0x11CEED48
3234 vxor 4,21,31
3235 vsrab 11,8,9
3236 vxor 21,8,23
3237 .long 0x11EFED48
3238 .long 0x1210ED48
3239 lvx 25,3,7
3240 vaddubm 8,8,8
3241 vsldoi 11,11,11,15
3242
3243 .long 0x10E7F548
3244 .long 0x118CF548
3245 vand 11,11,10
3246 .long 0x11ADF548
3247 .long 0x11CEF548
3248 vxor 8,8,11
3249 .long 0x11EFF548
3250 .long 0x1210F548
3251 vxor 5,22,31
3252 vsrab 11,8,9
3253 vxor 22,8,23
3254
3255 .long 0x10E70549
3256 .long 0x7C005699
3257 vaddubm 8,8,8
3258 vsldoi 11,11,11,15
3259 .long 0x118C0D49
3260 .long 0x7C235699
3261 .long 0x11AD1549
3262 vperm 0,0,0,6
3263 .long 0x7C5A5699
3264 vand 11,11,10
3265 .long 0x11CE1D49
3266 vperm 1,1,1,6
3267 .long 0x7C7B5699
3268 .long 0x11EF2549
3269 vperm 2,2,2,6
3270 .long 0x7C9C5699
3271 vxor 8,8,11
3272 .long 0x12102D49
3273 vperm 3,3,3,6
3274 .long 0x7CBD5699
3275 addi 10,10,0x60
3276 vperm 4,4,4,6
3277 vperm 5,5,5,6
3278
3279 vperm 7,7,7,6
3280 vperm 12,12,12,6
3281 .long 0x7CE02799
3282 vxor 7,0,17
3283 vperm 13,13,13,6
3284 .long 0x7D832799
3285 vxor 12,1,18
3286 vperm 14,14,14,6
3287 .long 0x7DBA2799
3288 vxor 13,2,19
3289 vperm 15,15,15,6
3290 .long 0x7DDB2799
3291 vxor 14,3,20
3292 vperm 16,16,16,6
3293 .long 0x7DFC2799
3294 vxor 15,4,21
3295 .long 0x7E1D2799
3296 vxor 16,5,22
3297 addi 4,4,0x60
3298
3299 mtctr 9
Robert Sloan8ff03552017-06-14 12:40:58 -07003300 beq .Loop_xts_dec6x
Robert Sloan572a4e22017-04-17 10:52:19 -07003301
3302 addic. 5,5,0x60
Robert Sloan8ff03552017-06-14 12:40:58 -07003303 beq .Lxts_dec6x_zero
Robert Sloan572a4e22017-04-17 10:52:19 -07003304 cmpwi 5,0x20
Robert Sloan8ff03552017-06-14 12:40:58 -07003305 blt .Lxts_dec6x_one
Robert Sloan572a4e22017-04-17 10:52:19 -07003306 nop
Robert Sloan8ff03552017-06-14 12:40:58 -07003307 beq .Lxts_dec6x_two
Robert Sloan572a4e22017-04-17 10:52:19 -07003308 cmpwi 5,0x40
Robert Sloan8ff03552017-06-14 12:40:58 -07003309 blt .Lxts_dec6x_three
Robert Sloan572a4e22017-04-17 10:52:19 -07003310 nop
Robert Sloan8ff03552017-06-14 12:40:58 -07003311 beq .Lxts_dec6x_four
Robert Sloan572a4e22017-04-17 10:52:19 -07003312
Robert Sloan8ff03552017-06-14 12:40:58 -07003313.Lxts_dec6x_five:
Robert Sloan572a4e22017-04-17 10:52:19 -07003314 vxor 7,1,17
3315 vxor 12,2,18
3316 vxor 13,3,19
3317 vxor 14,4,20
3318 vxor 15,5,21
3319
3320 bl _aesp8_xts_dec5x
3321
3322 vperm 7,7,7,6
3323 vor 17,22,22
3324 vxor 18,8,23
3325 vperm 12,12,12,6
3326 .long 0x7CE02799
3327 vxor 7,0,18
3328 vperm 13,13,13,6
3329 .long 0x7D832799
3330 vperm 14,14,14,6
3331 .long 0x7DBA2799
3332 vperm 15,15,15,6
3333 .long 0x7DDB2799
3334 .long 0x7DFC2799
3335 addi 4,4,0x50
Robert Sloan8ff03552017-06-14 12:40:58 -07003336 bne .Lxts_dec6x_steal
3337 b .Lxts_dec6x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07003338
3339.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -07003340.Lxts_dec6x_four:
Robert Sloan572a4e22017-04-17 10:52:19 -07003341 vxor 7,2,17
3342 vxor 12,3,18
3343 vxor 13,4,19
3344 vxor 14,5,20
3345 vxor 15,15,15
3346
3347 bl _aesp8_xts_dec5x
3348
3349 vperm 7,7,7,6
3350 vor 17,21,21
3351 vor 18,22,22
3352 vperm 12,12,12,6
3353 .long 0x7CE02799
3354 vxor 7,0,22
3355 vperm 13,13,13,6
3356 .long 0x7D832799
3357 vperm 14,14,14,6
3358 .long 0x7DBA2799
3359 .long 0x7DDB2799
3360 addi 4,4,0x40
Robert Sloan8ff03552017-06-14 12:40:58 -07003361 bne .Lxts_dec6x_steal
3362 b .Lxts_dec6x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07003363
3364.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -07003365.Lxts_dec6x_three:
Robert Sloan572a4e22017-04-17 10:52:19 -07003366 vxor 7,3,17
3367 vxor 12,4,18
3368 vxor 13,5,19
3369 vxor 14,14,14
3370 vxor 15,15,15
3371
3372 bl _aesp8_xts_dec5x
3373
3374 vperm 7,7,7,6
3375 vor 17,20,20
3376 vor 18,21,21
3377 vperm 12,12,12,6
3378 .long 0x7CE02799
3379 vxor 7,0,21
3380 vperm 13,13,13,6
3381 .long 0x7D832799
3382 .long 0x7DBA2799
3383 addi 4,4,0x30
Robert Sloan8ff03552017-06-14 12:40:58 -07003384 bne .Lxts_dec6x_steal
3385 b .Lxts_dec6x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07003386
3387.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -07003388.Lxts_dec6x_two:
Robert Sloan572a4e22017-04-17 10:52:19 -07003389 vxor 7,4,17
3390 vxor 12,5,18
3391 vxor 13,13,13
3392 vxor 14,14,14
3393 vxor 15,15,15
3394
3395 bl _aesp8_xts_dec5x
3396
3397 vperm 7,7,7,6
3398 vor 17,19,19
3399 vor 18,20,20
3400 vperm 12,12,12,6
3401 .long 0x7CE02799
3402 vxor 7,0,20
3403 .long 0x7D832799
3404 addi 4,4,0x20
Robert Sloan8ff03552017-06-14 12:40:58 -07003405 bne .Lxts_dec6x_steal
3406 b .Lxts_dec6x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07003407
3408.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -07003409.Lxts_dec6x_one:
Robert Sloan572a4e22017-04-17 10:52:19 -07003410 vxor 7,5,17
3411 nop
Robert Sloan8ff03552017-06-14 12:40:58 -07003412.Loop_xts_dec1x:
Robert Sloan572a4e22017-04-17 10:52:19 -07003413 .long 0x10E7C548
3414 lvx 24,26,7
3415 addi 7,7,0x20
3416
3417 .long 0x10E7CD48
3418 lvx 25,3,7
Robert Sloan8ff03552017-06-14 12:40:58 -07003419 bdnz .Loop_xts_dec1x
Robert Sloan572a4e22017-04-17 10:52:19 -07003420
3421 subi 0,31,1
3422 .long 0x10E7C548
3423
3424 andi. 0,0,16
3425 cmpwi 31,0
3426 .long 0x10E7CD48
3427
3428 sub 10,10,0
3429 .long 0x10E7D548
3430
3431 .long 0x7C005699
3432 .long 0x10E7DD48
3433
Robert Sloan8ff03552017-06-14 12:40:58 -07003434 addi 7,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07003435 .long 0x10E7E548
3436 lvx 24,0,7
3437
3438 .long 0x10E7ED48
3439 lvx 25,3,7
3440 vxor 17,17,31
3441
3442 vperm 0,0,0,6
3443 .long 0x10E7F548
3444
3445 mtctr 9
3446 .long 0x10E78D49
3447
3448 vor 17,18,18
3449 vor 18,19,19
3450 vperm 7,7,7,6
3451 .long 0x7CE02799
3452 addi 4,4,0x10
3453 vxor 7,0,19
Robert Sloan8ff03552017-06-14 12:40:58 -07003454 bne .Lxts_dec6x_steal
3455 b .Lxts_dec6x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07003456
3457.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -07003458.Lxts_dec6x_zero:
Robert Sloan572a4e22017-04-17 10:52:19 -07003459 cmpwi 31,0
Robert Sloan8ff03552017-06-14 12:40:58 -07003460 beq .Lxts_dec6x_done
Robert Sloan572a4e22017-04-17 10:52:19 -07003461
3462 .long 0x7C005699
3463 vperm 0,0,0,6
3464 vxor 7,0,18
Robert Sloan8ff03552017-06-14 12:40:58 -07003465.Lxts_dec6x_steal:
Robert Sloan572a4e22017-04-17 10:52:19 -07003466 .long 0x10E7C548
3467 lvx 24,26,7
3468 addi 7,7,0x20
3469
3470 .long 0x10E7CD48
3471 lvx 25,3,7
Robert Sloan8ff03552017-06-14 12:40:58 -07003472 bdnz .Lxts_dec6x_steal
Robert Sloan572a4e22017-04-17 10:52:19 -07003473
3474 add 10,10,31
3475 .long 0x10E7C548
3476
3477 cmpwi 31,0
3478 .long 0x10E7CD48
3479
3480 .long 0x7C005699
3481 .long 0x10E7D548
3482
3483 lvsr 5,0,31
3484 .long 0x10E7DD48
3485
Robert Sloan8ff03552017-06-14 12:40:58 -07003486 addi 7,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07003487 .long 0x10E7E548
3488 lvx 24,0,7
3489
3490 .long 0x10E7ED48
3491 lvx 25,3,7
3492 vxor 18,18,31
3493
3494 vperm 0,0,0,6
3495 .long 0x10E7F548
3496
3497 vperm 0,0,0,5
3498 .long 0x11679549
3499
3500 vperm 7,11,11,6
3501 .long 0x7CE02799
3502
3503
3504 vxor 7,7,7
3505 vspltisb 12,-1
3506 vperm 7,7,12,5
3507 vsel 7,0,11,7
3508 vxor 7,7,17
3509
3510 subi 30,4,1
3511 mtctr 31
Robert Sloan8ff03552017-06-14 12:40:58 -07003512.Loop_xts_dec6x_steal:
Robert Sloan572a4e22017-04-17 10:52:19 -07003513 lbzu 0,1(30)
3514 stb 0,16(30)
Robert Sloan8ff03552017-06-14 12:40:58 -07003515 bdnz .Loop_xts_dec6x_steal
Robert Sloan572a4e22017-04-17 10:52:19 -07003516
3517 li 31,0
3518 mtctr 9
Robert Sloan8ff03552017-06-14 12:40:58 -07003519 b .Loop_xts_dec1x
Robert Sloan572a4e22017-04-17 10:52:19 -07003520
3521.align 4
Robert Sloan8ff03552017-06-14 12:40:58 -07003522.Lxts_dec6x_done:
Robert Sloan572a4e22017-04-17 10:52:19 -07003523 cmpldi 8,0
Robert Sloan8ff03552017-06-14 12:40:58 -07003524 beq .Lxts_dec6x_ret
Robert Sloan572a4e22017-04-17 10:52:19 -07003525
3526 vxor 8,17,23
3527 vperm 8,8,8,6
3528 .long 0x7D004799
3529
Robert Sloan8ff03552017-06-14 12:40:58 -07003530.Lxts_dec6x_ret:
Robert Sloan572a4e22017-04-17 10:52:19 -07003531 mtlr 11
3532 li 10,79
3533 li 11,95
3534 stvx 9,10,1
3535 addi 10,10,32
3536 stvx 9,11,1
3537 addi 11,11,32
3538 stvx 9,10,1
3539 addi 10,10,32
3540 stvx 9,11,1
3541 addi 11,11,32
3542 stvx 9,10,1
3543 addi 10,10,32
3544 stvx 9,11,1
3545 addi 11,11,32
3546 stvx 9,10,1
3547 addi 10,10,32
3548 stvx 9,11,1
3549 addi 11,11,32
3550
Robert Sloan8ff03552017-06-14 12:40:58 -07003551 or 12,12,12
Robert Sloan572a4e22017-04-17 10:52:19 -07003552 lvx 20,10,1
3553 addi 10,10,32
3554 lvx 21,11,1
3555 addi 11,11,32
3556 lvx 22,10,1
3557 addi 10,10,32
3558 lvx 23,11,1
3559 addi 11,11,32
3560 lvx 24,10,1
3561 addi 10,10,32
3562 lvx 25,11,1
3563 addi 11,11,32
3564 lvx 26,10,1
3565 addi 10,10,32
3566 lvx 27,11,1
3567 addi 11,11,32
3568 lvx 28,10,1
3569 addi 10,10,32
3570 lvx 29,11,1
3571 addi 11,11,32
3572 lvx 30,10,1
3573 lvx 31,11,1
3574 ld 26,400(1)
3575 ld 27,408(1)
3576 ld 28,416(1)
3577 ld 29,424(1)
3578 ld 30,432(1)
3579 ld 31,440(1)
3580 addi 1,1,448
3581 blr
3582.long 0
3583.byte 0,12,0x04,1,0x80,6,6,0
3584.long 0
3585
3586.align 5
3587_aesp8_xts_dec5x:
3588 .long 0x10E7C548
3589 .long 0x118CC548
3590 .long 0x11ADC548
3591 .long 0x11CEC548
3592 .long 0x11EFC548
3593 lvx 24,26,7
3594 addi 7,7,0x20
3595
3596 .long 0x10E7CD48
3597 .long 0x118CCD48
3598 .long 0x11ADCD48
3599 .long 0x11CECD48
3600 .long 0x11EFCD48
3601 lvx 25,3,7
Robert Sloan8ff03552017-06-14 12:40:58 -07003602 bdnz _aesp8_xts_dec5x
Robert Sloan572a4e22017-04-17 10:52:19 -07003603
3604 subi 0,31,1
3605 .long 0x10E7C548
3606 .long 0x118CC548
3607 .long 0x11ADC548
3608 .long 0x11CEC548
3609 .long 0x11EFC548
3610
3611 andi. 0,0,16
3612 cmpwi 31,0
3613 .long 0x10E7CD48
3614 .long 0x118CCD48
3615 .long 0x11ADCD48
3616 .long 0x11CECD48
3617 .long 0x11EFCD48
3618 vxor 17,17,31
3619
3620 sub 10,10,0
3621 .long 0x10E7D548
3622 .long 0x118CD548
3623 .long 0x11ADD548
3624 .long 0x11CED548
3625 .long 0x11EFD548
3626 vxor 1,18,31
3627
3628 .long 0x10E7DD48
3629 .long 0x7C005699
3630 .long 0x118CDD48
3631 .long 0x11ADDD48
3632 .long 0x11CEDD48
3633 .long 0x11EFDD48
3634 vxor 2,19,31
3635
Robert Sloan8ff03552017-06-14 12:40:58 -07003636 addi 7,1,79
Robert Sloan572a4e22017-04-17 10:52:19 -07003637 .long 0x10E7E548
3638 .long 0x118CE548
3639 .long 0x11ADE548
3640 .long 0x11CEE548
3641 .long 0x11EFE548
3642 lvx 24,0,7
3643 vxor 3,20,31
3644
3645 .long 0x10E7ED48
3646 vperm 0,0,0,6
3647 .long 0x118CED48
3648 .long 0x11ADED48
3649 .long 0x11CEED48
3650 .long 0x11EFED48
3651 lvx 25,3,7
3652 vxor 4,21,31
3653
3654 .long 0x10E7F548
3655 .long 0x118CF548
3656 .long 0x11ADF548
3657 .long 0x11CEF548
3658 .long 0x11EFF548
3659
3660 .long 0x10E78D49
3661 .long 0x118C0D49
3662 .long 0x11AD1549
3663 .long 0x11CE1D49
3664 .long 0x11EF2549
3665 mtctr 9
3666 blr
3667.long 0
3668.byte 0,12,0x14,0,0,0,0,0
Robert Sloan726e9d12018-09-11 11:45:04 -07003669#endif // !OPENSSL_NO_ASM && __powerpc64__