Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(383)

Side by Side Diff: third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S

Issue 1128293004: Revert of Roll src/third_party/boringssl/src 68de407:de12d6c (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Thanks Rietveld, Thietveld. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 1
2 @ ==================================================================== 2 @ ====================================================================
3 @ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL 3 @ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
4 @ project. The module is, however, dual licensed under OpenSSL and 4 @ project. The module is, however, dual licensed under OpenSSL and
5 @ CRYPTOGAMS licenses depending on where you obtain it. For further 5 @ CRYPTOGAMS licenses depending on where you obtain it. For further
6 @ details see http://www.openssl.org/~appro/cryptogams/. 6 @ details see http://www.openssl.org/~appro/cryptogams/.
7 @ 7 @
8 @ Specific modes and adaptation for Linux kernel by Ard Biesheuvel 8 @ Specific modes and adaptation for Linux kernel by Ard Biesheuvel
9 @ <ard.biesheuvel@linaro.org>. Permission to use under GPL terms is 9 @ <ard.biesheuvel@linaro.org>. Permission to use under GPL terms is
10 @ granted. 10 @ granted.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 # define VFP_ABI_PUSH vstmdb sp!,{d8-d15} 53 # define VFP_ABI_PUSH vstmdb sp!,{d8-d15}
54 # define VFP_ABI_POP vldmia sp!,{d8-d15} 54 # define VFP_ABI_POP vldmia sp!,{d8-d15}
55 # define VFP_ABI_FRAME 0x40 55 # define VFP_ABI_FRAME 0x40
56 #else 56 #else
57 # define VFP_ABI_PUSH 57 # define VFP_ABI_PUSH
58 # define VFP_ABI_POP 58 # define VFP_ABI_POP
59 # define VFP_ABI_FRAME 0 59 # define VFP_ABI_FRAME 0
60 # define BSAES_ASM_EXTENDED_KEY 60 # define BSAES_ASM_EXTENDED_KEY
61 # define XTS_CHAIN_TWEAK 61 # define XTS_CHAIN_TWEAK
62 # define __ARM_ARCH__ __LINUX_ARM_ARCH__ 62 # define __ARM_ARCH__ __LINUX_ARM_ARCH__
63 # define __ARM_MAX_ARCH__ 7
64 #endif 63 #endif
65 64
66 #ifdef __thumb__ 65 #ifdef __thumb__
67 # define adrl adr 66 # define adrl adr
68 #endif 67 #endif
69 68
70 #if __ARM_MAX_ARCH__>=7 69 #if __ARM_ARCH__>=7
71 .arch» armv7-a
72 .fpu» neon
73
74 .text 70 .text
75 .syntax unified @ ARMv7-capable assembler is expected to handle this 71 .syntax unified @ ARMv7-capable assembler is expected to handle this
76 #if defined(__thumb2__) && !defined(__APPLE__) 72 #ifdef __thumb2__
77 .thumb 73 .thumb
78 #else 74 #else
79 .code» 32 75 .code 32
80 #endif 76 #endif
81 77
78 .fpu neon
79
82 .type _bsaes_decrypt8,%function 80 .type _bsaes_decrypt8,%function
83 .align 4 81 .align 4
84 _bsaes_decrypt8: 82 _bsaes_decrypt8:
85 adr r6,_bsaes_decrypt8 83 adr r6,_bsaes_decrypt8
86 vldmia r4!, {q9} @ round 0 key 84 vldmia r4!, {q9} @ round 0 key
87 #ifdef __APPLE__
88 adr r6,.LM0ISR
89 #else
90 add r6,r6,#.LM0ISR-_bsaes_decrypt8 85 add r6,r6,#.LM0ISR-_bsaes_decrypt8
91 #endif
92 86
93 vldmia r6!, {q8} @ .LM0ISR 87 vldmia r6!, {q8} @ .LM0ISR
94 veor q10, q0, q9 @ xor with round0 key 88 veor q10, q0, q9 @ xor with round0 key
95 veor q11, q1, q9 89 veor q11, q1, q9
96 » vtbl.8» d0, {q10}, d16 90 » vtbl.8»d0, {q10}, d16
97 » vtbl.8» d1, {q10}, d17 91 » vtbl.8»d1, {q10}, d17
98 veor q12, q2, q9 92 veor q12, q2, q9
99 » vtbl.8» d2, {q11}, d16 93 » vtbl.8»d2, {q11}, d16
100 » vtbl.8» d3, {q11}, d17 94 » vtbl.8»d3, {q11}, d17
101 veor q13, q3, q9 95 veor q13, q3, q9
102 » vtbl.8» d4, {q12}, d16 96 » vtbl.8»d4, {q12}, d16
103 » vtbl.8» d5, {q12}, d17 97 » vtbl.8»d5, {q12}, d17
104 veor q14, q4, q9 98 veor q14, q4, q9
105 » vtbl.8» d6, {q13}, d16 99 » vtbl.8»d6, {q13}, d16
106 » vtbl.8» d7, {q13}, d17 100 » vtbl.8»d7, {q13}, d17
107 veor q15, q5, q9 101 veor q15, q5, q9
108 » vtbl.8» d8, {q14}, d16 102 » vtbl.8»d8, {q14}, d16
109 » vtbl.8» d9, {q14}, d17 103 » vtbl.8»d9, {q14}, d17
110 veor q10, q6, q9 104 veor q10, q6, q9
111 » vtbl.8» d10, {q15}, d16 105 » vtbl.8»d10, {q15}, d16
112 » vtbl.8» d11, {q15}, d17 106 » vtbl.8»d11, {q15}, d17
113 veor q11, q7, q9 107 veor q11, q7, q9
114 » vtbl.8» d12, {q10}, d16 108 » vtbl.8»d12, {q10}, d16
115 » vtbl.8» d13, {q10}, d17 109 » vtbl.8»d13, {q10}, d17
116 » vtbl.8» d14, {q11}, d16 110 » vtbl.8»d14, {q11}, d16
117 » vtbl.8» d15, {q11}, d17 111 » vtbl.8»d15, {q11}, d17
118 vmov.i8 q8,#0x55 @ compose .LBS0 112 vmov.i8 q8,#0x55 @ compose .LBS0
119 vmov.i8 q9,#0x33 @ compose .LBS1 113 vmov.i8 q9,#0x33 @ compose .LBS1
120 vshr.u64 q10, q6, #1 114 vshr.u64 q10, q6, #1
121 » vshr.u64» q11, q4, #1 115 » vshr.u64» q11, q4, #1
122 » veor» q10, q10, q7 116 » veor» » q10, q10, q7
123 » veor» q11, q11, q5 117 » veor» » q11, q11, q5
124 » vand» q10, q10, q8 118 » vand» » q10, q10, q8
125 » vand» q11, q11, q8 119 » vand» » q11, q11, q8
126 » veor» q7, q7, q10 120 » veor» » q7, q7, q10
127 vshl.u64 q10, q10, #1 121 vshl.u64 q10, q10, #1
128 » veor» q5, q5, q11 122 » veor» » q5, q5, q11
129 » vshl.u64» q11, q11, #1 123 » vshl.u64» q11, q11, #1
130 » veor» q6, q6, q10 124 » veor» » q6, q6, q10
131 » veor» q4, q4, q11 125 » veor» » q4, q4, q11
132 vshr.u64 q10, q2, #1 126 vshr.u64 q10, q2, #1
133 » vshr.u64» q11, q0, #1 127 » vshr.u64» q11, q0, #1
134 » veor» q10, q10, q3 128 » veor» » q10, q10, q3
135 » veor» q11, q11, q1 129 » veor» » q11, q11, q1
136 » vand» q10, q10, q8 130 » vand» » q10, q10, q8
137 » vand» q11, q11, q8 131 » vand» » q11, q11, q8
138 » veor» q3, q3, q10 132 » veor» » q3, q3, q10
139 vshl.u64 q10, q10, #1 133 vshl.u64 q10, q10, #1
140 » veor» q1, q1, q11 134 » veor» » q1, q1, q11
141 » vshl.u64» q11, q11, #1 135 » vshl.u64» q11, q11, #1
142 » veor» q2, q2, q10 136 » veor» » q2, q2, q10
143 » veor» q0, q0, q11 137 » veor» » q0, q0, q11
144 vmov.i8 q8,#0x0f @ compose .LBS2 138 vmov.i8 q8,#0x0f @ compose .LBS2
145 vshr.u64 q10, q5, #2 139 vshr.u64 q10, q5, #2
146 » vshr.u64» q11, q4, #2 140 » vshr.u64» q11, q4, #2
147 » veor» q10, q10, q7 141 » veor» » q10, q10, q7
148 » veor» q11, q11, q6 142 » veor» » q11, q11, q6
149 » vand» q10, q10, q9 143 » vand» » q10, q10, q9
150 » vand» q11, q11, q9 144 » vand» » q11, q11, q9
151 » veor» q7, q7, q10 145 » veor» » q7, q7, q10
152 vshl.u64 q10, q10, #2 146 vshl.u64 q10, q10, #2
153 » veor» q6, q6, q11 147 » veor» » q6, q6, q11
154 » vshl.u64» q11, q11, #2 148 » vshl.u64» q11, q11, #2
155 » veor» q5, q5, q10 149 » veor» » q5, q5, q10
156 » veor» q4, q4, q11 150 » veor» » q4, q4, q11
157 vshr.u64 q10, q1, #2 151 vshr.u64 q10, q1, #2
158 » vshr.u64» q11, q0, #2 152 » vshr.u64» q11, q0, #2
159 » veor» q10, q10, q3 153 » veor» » q10, q10, q3
160 » veor» q11, q11, q2 154 » veor» » q11, q11, q2
161 » vand» q10, q10, q9 155 » vand» » q10, q10, q9
162 » vand» q11, q11, q9 156 » vand» » q11, q11, q9
163 » veor» q3, q3, q10 157 » veor» » q3, q3, q10
164 vshl.u64 q10, q10, #2 158 vshl.u64 q10, q10, #2
165 » veor» q2, q2, q11 159 » veor» » q2, q2, q11
166 » vshl.u64» q11, q11, #2 160 » vshl.u64» q11, q11, #2
167 » veor» q1, q1, q10 161 » veor» » q1, q1, q10
168 » veor» q0, q0, q11 162 » veor» » q0, q0, q11
169 vshr.u64 q10, q3, #4 163 vshr.u64 q10, q3, #4
170 » vshr.u64» q11, q2, #4 164 » vshr.u64» q11, q2, #4
171 » veor» q10, q10, q7 165 » veor» » q10, q10, q7
172 » veor» q11, q11, q6 166 » veor» » q11, q11, q6
173 » vand» q10, q10, q8 167 » vand» » q10, q10, q8
174 » vand» q11, q11, q8 168 » vand» » q11, q11, q8
175 » veor» q7, q7, q10 169 » veor» » q7, q7, q10
176 vshl.u64 q10, q10, #4 170 vshl.u64 q10, q10, #4
177 » veor» q6, q6, q11 171 » veor» » q6, q6, q11
178 » vshl.u64» q11, q11, #4 172 » vshl.u64» q11, q11, #4
179 » veor» q3, q3, q10 173 » veor» » q3, q3, q10
180 » veor» q2, q2, q11 174 » veor» » q2, q2, q11
181 vshr.u64 q10, q1, #4 175 vshr.u64 q10, q1, #4
182 » vshr.u64» q11, q0, #4 176 » vshr.u64» q11, q0, #4
183 » veor» q10, q10, q5 177 » veor» » q10, q10, q5
184 » veor» q11, q11, q4 178 » veor» » q11, q11, q4
185 » vand» q10, q10, q8 179 » vand» » q10, q10, q8
186 » vand» q11, q11, q8 180 » vand» » q11, q11, q8
187 » veor» q5, q5, q10 181 » veor» » q5, q5, q10
188 vshl.u64 q10, q10, #4 182 vshl.u64 q10, q10, #4
189 » veor» q4, q4, q11 183 » veor» » q4, q4, q11
190 » vshl.u64» q11, q11, #4 184 » vshl.u64» q11, q11, #4
191 » veor» q1, q1, q10 185 » veor» » q1, q1, q10
192 » veor» q0, q0, q11 186 » veor» » q0, q0, q11
193 sub r5,r5,#1 187 sub r5,r5,#1
194 b .Ldec_sbox 188 b .Ldec_sbox
195 .align 4 189 .align 4
196 .Ldec_loop: 190 .Ldec_loop:
197 » vldmia» r4!, {q8,q9,q10,q11} 191 » vldmia» r4!, {q8-q11}
198 veor q8, q8, q0 192 veor q8, q8, q0
199 veor q9, q9, q1 193 veor q9, q9, q1
200 vtbl.8 d0, {q8}, d24 194 vtbl.8 d0, {q8}, d24
201 vtbl.8 d1, {q8}, d25 195 vtbl.8 d1, {q8}, d25
202 vldmia r4!, {q8} 196 vldmia r4!, {q8}
203 veor q10, q10, q2 197 veor q10, q10, q2
204 vtbl.8 d2, {q9}, d24 198 vtbl.8 d2, {q9}, d24
205 vtbl.8 d3, {q9}, d25 199 vtbl.8 d3, {q9}, d25
206 vldmia r4!, {q9} 200 vldmia r4!, {q9}
207 veor q11, q11, q3 201 veor q11, q11, q3
208 vtbl.8 d4, {q10}, d24 202 vtbl.8 d4, {q10}, d24
209 vtbl.8 d5, {q10}, d25 203 vtbl.8 d5, {q10}, d25
210 vldmia r4!, {q10} 204 vldmia r4!, {q10}
211 vtbl.8 d6, {q11}, d24 205 vtbl.8 d6, {q11}, d24
212 vtbl.8 d7, {q11}, d25 206 vtbl.8 d7, {q11}, d25
213 vldmia r4!, {q11} 207 vldmia r4!, {q11}
214 veor q8, q8, q4 208 veor q8, q8, q4
215 veor q9, q9, q5 209 veor q9, q9, q5
216 vtbl.8 d8, {q8}, d24 210 vtbl.8 d8, {q8}, d24
217 vtbl.8 d9, {q8}, d25 211 vtbl.8 d9, {q8}, d25
218 veor q10, q10, q6 212 veor q10, q10, q6
219 vtbl.8 d10, {q9}, d24 213 vtbl.8 d10, {q9}, d24
220 vtbl.8 d11, {q9}, d25 214 vtbl.8 d11, {q9}, d25
221 veor q11, q11, q7 215 veor q11, q11, q7
222 vtbl.8 d12, {q10}, d24 216 vtbl.8 d12, {q10}, d24
223 vtbl.8 d13, {q10}, d25 217 vtbl.8 d13, {q10}, d25
224 vtbl.8 d14, {q11}, d24 218 vtbl.8 d14, {q11}, d24
225 vtbl.8 d15, {q11}, d25 219 vtbl.8 d15, {q11}, d25
226 .Ldec_sbox: 220 .Ldec_sbox:
227 » veor» q1, q1, q4 221 » veor» q1, q1, q4
228 veor q3, q3, q4 222 veor q3, q3, q4
229 223
230 veor q4, q4, q7 224 veor q4, q4, q7
231 » veor» q1, q1, q6 225 » veor» q1, q1, q6
232 veor q2, q2, q7 226 veor q2, q2, q7
233 veor q6, q6, q4 227 veor q6, q6, q4
234 228
235 veor q0, q0, q1 229 veor q0, q0, q1
236 veor q2, q2, q5 230 veor q2, q2, q5
237 » veor» q7, q7, q6 231 » veor» q7, q7, q6
238 veor q3, q3, q0 232 veor q3, q3, q0
239 veor q5, q5, q0 233 veor q5, q5, q0
240 veor q1, q1, q3 234 veor q1, q1, q3
241 veor q11, q3, q0 235 veor q11, q3, q0
242 veor q10, q7, q4 236 veor q10, q7, q4
243 veor q9, q1, q6 237 veor q9, q1, q6
244 veor q13, q4, q0 238 veor q13, q4, q0
245 » vmov» q8, q10 239 » vmov» q8, q10
246 veor q12, q5, q2 240 veor q12, q5, q2
247 241
248 vorr q10, q10, q9 242 vorr q10, q10, q9
249 veor q15, q11, q8 243 veor q15, q11, q8
250 vand q14, q11, q12 244 vand q14, q11, q12
251 vorr q11, q11, q12 245 vorr q11, q11, q12
252 veor q12, q12, q9 246 veor q12, q12, q9
253 vand q8, q8, q9 247 vand q8, q8, q9
254 veor q9, q6, q2 248 veor q9, q6, q2
255 vand q15, q15, q12 249 vand q15, q15, q12
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 286
293 vbsl q12, q13, q14 287 vbsl q12, q13, q14
294 vbsl q8, q14, q13 288 vbsl q8, q14, q13
295 289
296 vand q14, q12, q15 290 vand q14, q12, q15
297 veor q9, q9, q8 291 veor q9, q9, q8
298 292
299 veor q14, q14, q11 293 veor q14, q14, q11
300 veor q12, q5, q2 294 veor q12, q5, q2
301 veor q8, q1, q6 295 veor q8, q1, q6
302 » veor» q10, q15, q14 296 » veor » q10, q15, q14
303 vand q10, q10, q5 297 vand q10, q10, q5
304 veor q5, q5, q1 298 veor q5, q5, q1
305 vand q11, q1, q15 299 vand q11, q1, q15
306 vand q5, q5, q14 300 vand q5, q5, q14
307 veor q1, q11, q10 301 veor q1, q11, q10
308 veor q5, q5, q11 302 veor q5, q5, q11
309 veor q15, q15, q13 303 veor q15, q15, q13
310 veor q14, q14, q9 304 veor q14, q14, q9
311 veor q11, q15, q14 305 veor q11, q15, q14
312 » veor» q10, q13, q9 306 » veor » q10, q13, q9
313 vand q11, q11, q12 307 vand q11, q11, q12
314 » vand» q10, q10, q2 308 » vand» q10, q10, q2
315 veor q12, q12, q8 309 veor q12, q12, q8
316 » veor» q2, q2, q6 310 » veor» q2, q2, q6
317 vand q8, q8, q15 311 vand q8, q8, q15
318 » vand» q6, q6, q13 312 » vand» q6, q6, q13
319 vand q12, q12, q14 313 vand q12, q12, q14
320 » vand» q2, q2, q9 314 » vand» q2, q2, q9
321 veor q8, q8, q12 315 veor q8, q8, q12
322 » veor» q2, q2, q6 316 » veor» q2, q2, q6
323 veor q12, q12, q11 317 veor q12, q12, q11
324 » veor» q6, q6, q10 318 » veor» q6, q6, q10
325 veor q5, q5, q12 319 veor q5, q5, q12
326 veor q2, q2, q12 320 veor q2, q2, q12
327 veor q1, q1, q8 321 veor q1, q1, q8
328 veor q6, q6, q8 322 veor q6, q6, q8
329 323
330 veor q12, q3, q0 324 veor q12, q3, q0
331 veor q8, q7, q4 325 veor q8, q7, q4
332 veor q11, q15, q14 326 veor q11, q15, q14
333 » veor» q10, q13, q9 327 » veor » q10, q13, q9
334 vand q11, q11, q12 328 vand q11, q11, q12
335 » vand» q10, q10, q0 329 » vand» q10, q10, q0
336 veor q12, q12, q8 330 veor q12, q12, q8
337 » veor» q0, q0, q4 331 » veor» q0, q0, q4
338 vand q8, q8, q15 332 vand q8, q8, q15
339 » vand» q4, q4, q13 333 » vand» q4, q4, q13
340 vand q12, q12, q14 334 vand q12, q12, q14
341 » vand» q0, q0, q9 335 » vand» q0, q0, q9
342 veor q8, q8, q12 336 veor q8, q8, q12
343 » veor» q0, q0, q4 337 » veor» q0, q0, q4
344 veor q12, q12, q11 338 veor q12, q12, q11
345 » veor» q4, q4, q10 339 » veor» q4, q4, q10
346 veor q15, q15, q13 340 veor q15, q15, q13
347 veor q14, q14, q9 341 veor q14, q14, q9
348 » veor» q10, q15, q14 342 » veor » q10, q15, q14
349 vand q10, q10, q3 343 vand q10, q10, q3
350 veor q3, q3, q7 344 veor q3, q3, q7
351 vand q11, q7, q15 345 vand q11, q7, q15
352 vand q3, q3, q14 346 vand q3, q3, q14
353 veor q7, q11, q10 347 veor q7, q11, q10
354 veor q3, q3, q11 348 veor q3, q3, q11
355 veor q3, q3, q12 349 veor q3, q3, q12
356 veor q0, q0, q12 350 veor q0, q0, q12
357 veor q7, q7, q8 351 veor q7, q7, q8
358 veor q4, q4, q8 352 veor q4, q4, q8
359 veor q1, q1, q7 353 veor q1, q1, q7
360 veor q6, q6, q5 354 veor q6, q6, q5
361 355
362 veor q4, q4, q1 356 veor q4, q4, q1
363 veor q2, q2, q7 357 veor q2, q2, q7
364 veor q5, q5, q7 358 veor q5, q5, q7
365 veor q4, q4, q2 359 veor q4, q4, q2
366 » veor» q7, q7, q0 360 » veor » q7, q7, q0
367 veor q4, q4, q5 361 veor q4, q4, q5
368 » veor» q3, q3, q6 362 » veor» q3, q3, q6
369 » veor» q6, q6, q1 363 » veor» q6, q6, q1
370 veor q3, q3, q4 364 veor q3, q3, q4
371 365
372 veor q4, q4, q0 366 veor q4, q4, q0
373 veor q7, q7, q3 367 veor q7, q7, q3
374 subs r5,r5,#1 368 subs r5,r5,#1
375 bcc .Ldec_done 369 bcc .Ldec_done
376 @ multiplication by 0x05-0x00-0x04-0x00 370 @ multiplication by 0x05-0x00-0x04-0x00
377 vext.8 q8, q0, q0, #8 371 vext.8 q8, q0, q0, #8
378 vext.8 q14, q3, q3, #8 372 vext.8 q14, q3, q3, #8
379 vext.8 q15, q5, q5, #8 373 vext.8 q15, q5, q5, #8
380 veor q8, q8, q0 374 veor q8, q8, q0
381 vext.8 q9, q1, q1, #8 375 vext.8 q9, q1, q1, #8
382 veor q14, q14, q3 376 veor q14, q14, q3
383 vext.8 q10, q6, q6, #8 377 vext.8 q10, q6, q6, #8
384 veor q15, q15, q5 378 veor q15, q15, q5
385 vext.8 q11, q4, q4, #8 379 vext.8 q11, q4, q4, #8
386 veor q9, q9, q1 380 veor q9, q9, q1
387 vext.8 q12, q2, q2, #8 381 vext.8 q12, q2, q2, #8
388 veor q10, q10, q6 382 veor q10, q10, q6
389 vext.8 q13, q7, q7, #8 383 vext.8 q13, q7, q7, #8
390 veor q11, q11, q4 384 veor q11, q11, q4
391 veor q12, q12, q2 385 veor q12, q12, q2
392 veor q13, q13, q7 386 veor q13, q13, q7
393 387
394 » veor» q0, q0, q14 388 » veor» q0, q0, q14
395 » veor» q1, q1, q14 389 » veor» q1, q1, q14
396 » veor» q6, q6, q8 390 » veor» q6, q6, q8
397 » veor» q2, q2, q10 391 » veor» q2, q2, q10
398 » veor» q4, q4, q9 392 » veor» q4, q4, q9
399 » veor» q1, q1, q15 393 » veor» q1, q1, q15
400 » veor» q6, q6, q15 394 » veor» q6, q6, q15
401 » veor» q2, q2, q14 395 » veor» q2, q2, q14
402 » veor» q7, q7, q11 396 » veor» q7, q7, q11
403 » veor» q4, q4, q14 397 » veor» q4, q4, q14
404 » veor» q3, q3, q12 398 » veor» q3, q3, q12
405 » veor» q2, q2, q15 399 » veor» q2, q2, q15
406 » veor» q7, q7, q15 400 » veor» q7, q7, q15
407 » veor» q5, q5, q13 401 » veor» q5, q5, q13
408 vext.8 q8, q0, q0, #12 @ x0 <<< 32 402 vext.8 q8, q0, q0, #12 @ x0 <<< 32
409 vext.8 q9, q1, q1, #12 403 vext.8 q9, q1, q1, #12
410 » veor» q0, q0, q8» » @ x0 ^ (x0 <<< 32) 404 » veor» q0, q0, q8» » @ x0 ^ (x0 <<< 32)
411 vext.8 q10, q6, q6, #12 405 vext.8 q10, q6, q6, #12
412 » veor» q1, q1, q9 406 » veor» q1, q1, q9
413 vext.8 q11, q4, q4, #12 407 vext.8 q11, q4, q4, #12
414 » veor» q6, q6, q10 408 » veor» q6, q6, q10
415 vext.8 q12, q2, q2, #12 409 vext.8 q12, q2, q2, #12
416 » veor» q4, q4, q11 410 » veor» q4, q4, q11
417 vext.8 q13, q7, q7, #12 411 vext.8 q13, q7, q7, #12
418 » veor» q2, q2, q12 412 » veor» q2, q2, q12
419 vext.8 q14, q3, q3, #12 413 vext.8 q14, q3, q3, #12
420 » veor» q7, q7, q13 414 » veor» q7, q7, q13
421 vext.8 q15, q5, q5, #12 415 vext.8 q15, q5, q5, #12
422 » veor» q3, q3, q14 416 » veor» q3, q3, q14
423 417
424 veor q9, q9, q0 418 veor q9, q9, q0
425 » veor» q5, q5, q15 419 » veor» q5, q5, q15
426 » vext.8» q0, q0, q0, #8» » @ (x0 ^ (x0 <<< 32)) <<< 64) 420 » vext.8»q0, q0, q0, #8» » @ (x0 ^ (x0 <<< 32)) <<< 64)
427 veor q10, q10, q1 421 veor q10, q10, q1
428 veor q8, q8, q5 422 veor q8, q8, q5
429 veor q9, q9, q5 423 veor q9, q9, q5
430 » vext.8» q1, q1, q1, #8 424 » vext.8»q1, q1, q1, #8
431 veor q13, q13, q2 425 veor q13, q13, q2
432 » veor» q0, q0, q8 426 » veor» q0, q0, q8
433 veor q14, q14, q7 427 veor q14, q14, q7
434 » veor» q1, q1, q9 428 » veor» q1, q1, q9
435 » vext.8» q8, q2, q2, #8 429 » vext.8»q8, q2, q2, #8
436 veor q12, q12, q4 430 veor q12, q12, q4
437 » vext.8» q9, q7, q7, #8 431 » vext.8»q9, q7, q7, #8
438 veor q15, q15, q3 432 veor q15, q15, q3
439 » vext.8» q2, q4, q4, #8 433 » vext.8»q2, q4, q4, #8
440 veor q11, q11, q6 434 veor q11, q11, q6
441 » vext.8» q7, q5, q5, #8 435 » vext.8»q7, q5, q5, #8
442 veor q12, q12, q5 436 veor q12, q12, q5
443 » vext.8» q4, q3, q3, #8 437 » vext.8»q4, q3, q3, #8
444 veor q11, q11, q5 438 veor q11, q11, q5
445 » vext.8» q3, q6, q6, #8 439 » vext.8»q3, q6, q6, #8
446 veor q5, q9, q13 440 veor q5, q9, q13
447 veor q11, q11, q2 441 veor q11, q11, q2
448 veor q7, q7, q15 442 veor q7, q7, q15
449 veor q6, q4, q14 443 veor q6, q4, q14
450 veor q4, q8, q12 444 veor q4, q8, q12
451 veor q2, q3, q10 445 veor q2, q3, q10
452 vmov q3, q11 446 vmov q3, q11
453 @ vmov q5, q9 447 @ vmov q5, q9
454 vldmia r6, {q12} @ .LISR 448 vldmia r6, {q12} @ .LISR
455 ite eq @ Thumb2 thing, sanity check in ARM 449 ite eq @ Thumb2 thing, sanity check in ARM
456 addeq r6,r6,#0x10 450 addeq r6,r6,#0x10
457 bne .Ldec_loop 451 bne .Ldec_loop
458 vldmia r6, {q12} @ .LISRM0 452 vldmia r6, {q12} @ .LISRM0
459 b .Ldec_loop 453 b .Ldec_loop
460 .align 4 454 .align 4
461 .Ldec_done: 455 .Ldec_done:
462 vmov.i8 q8,#0x55 @ compose .LBS0 456 vmov.i8 q8,#0x55 @ compose .LBS0
463 vmov.i8 q9,#0x33 @ compose .LBS1 457 vmov.i8 q9,#0x33 @ compose .LBS1
464 vshr.u64 q10, q3, #1 458 vshr.u64 q10, q3, #1
465 » vshr.u64» q11, q2, #1 459 » vshr.u64» q11, q2, #1
466 » veor» q10, q10, q5 460 » veor» » q10, q10, q5
467 » veor» q11, q11, q7 461 » veor» » q11, q11, q7
468 » vand» q10, q10, q8 462 » vand» » q10, q10, q8
469 » vand» q11, q11, q8 463 » vand» » q11, q11, q8
470 » veor» q5, q5, q10 464 » veor» » q5, q5, q10
471 vshl.u64 q10, q10, #1 465 vshl.u64 q10, q10, #1
472 » veor» q7, q7, q11 466 » veor» » q7, q7, q11
473 » vshl.u64» q11, q11, #1 467 » vshl.u64» q11, q11, #1
474 » veor» q3, q3, q10 468 » veor» » q3, q3, q10
475 » veor» q2, q2, q11 469 » veor» » q2, q2, q11
476 vshr.u64 q10, q6, #1 470 vshr.u64 q10, q6, #1
477 » vshr.u64» q11, q0, #1 471 » vshr.u64» q11, q0, #1
478 » veor» q10, q10, q4 472 » veor» » q10, q10, q4
479 » veor» q11, q11, q1 473 » veor» » q11, q11, q1
480 » vand» q10, q10, q8 474 » vand» » q10, q10, q8
481 » vand» q11, q11, q8 475 » vand» » q11, q11, q8
482 » veor» q4, q4, q10 476 » veor» » q4, q4, q10
483 vshl.u64 q10, q10, #1 477 vshl.u64 q10, q10, #1
484 » veor» q1, q1, q11 478 » veor» » q1, q1, q11
485 » vshl.u64» q11, q11, #1 479 » vshl.u64» q11, q11, #1
486 » veor» q6, q6, q10 480 » veor» » q6, q6, q10
487 » veor» q0, q0, q11 481 » veor» » q0, q0, q11
488 vmov.i8 q8,#0x0f @ compose .LBS2 482 vmov.i8 q8,#0x0f @ compose .LBS2
489 vshr.u64 q10, q7, #2 483 vshr.u64 q10, q7, #2
490 » vshr.u64» q11, q2, #2 484 » vshr.u64» q11, q2, #2
491 » veor» q10, q10, q5 485 » veor» » q10, q10, q5
492 » veor» q11, q11, q3 486 » veor» » q11, q11, q3
493 » vand» q10, q10, q9 487 » vand» » q10, q10, q9
494 » vand» q11, q11, q9 488 » vand» » q11, q11, q9
495 » veor» q5, q5, q10 489 » veor» » q5, q5, q10
496 vshl.u64 q10, q10, #2 490 vshl.u64 q10, q10, #2
497 » veor» q3, q3, q11 491 » veor» » q3, q3, q11
498 » vshl.u64» q11, q11, #2 492 » vshl.u64» q11, q11, #2
499 » veor» q7, q7, q10 493 » veor» » q7, q7, q10
500 » veor» q2, q2, q11 494 » veor» » q2, q2, q11
501 vshr.u64 q10, q1, #2 495 vshr.u64 q10, q1, #2
502 » vshr.u64» q11, q0, #2 496 » vshr.u64» q11, q0, #2
503 » veor» q10, q10, q4 497 » veor» » q10, q10, q4
504 » veor» q11, q11, q6 498 » veor» » q11, q11, q6
505 » vand» q10, q10, q9 499 » vand» » q10, q10, q9
506 » vand» q11, q11, q9 500 » vand» » q11, q11, q9
507 » veor» q4, q4, q10 501 » veor» » q4, q4, q10
508 vshl.u64 q10, q10, #2 502 vshl.u64 q10, q10, #2
509 » veor» q6, q6, q11 503 » veor» » q6, q6, q11
510 » vshl.u64» q11, q11, #2 504 » vshl.u64» q11, q11, #2
511 » veor» q1, q1, q10 505 » veor» » q1, q1, q10
512 » veor» q0, q0, q11 506 » veor» » q0, q0, q11
513 vshr.u64 q10, q4, #4 507 vshr.u64 q10, q4, #4
514 » vshr.u64» q11, q6, #4 508 » vshr.u64» q11, q6, #4
515 » veor» q10, q10, q5 509 » veor» » q10, q10, q5
516 » veor» q11, q11, q3 510 » veor» » q11, q11, q3
517 » vand» q10, q10, q8 511 » vand» » q10, q10, q8
518 » vand» q11, q11, q8 512 » vand» » q11, q11, q8
519 » veor» q5, q5, q10 513 » veor» » q5, q5, q10
520 vshl.u64 q10, q10, #4 514 vshl.u64 q10, q10, #4
521 » veor» q3, q3, q11 515 » veor» » q3, q3, q11
522 » vshl.u64» q11, q11, #4 516 » vshl.u64» q11, q11, #4
523 » veor» q4, q4, q10 517 » veor» » q4, q4, q10
524 » veor» q6, q6, q11 518 » veor» » q6, q6, q11
525 vshr.u64 q10, q1, #4 519 vshr.u64 q10, q1, #4
526 » vshr.u64» q11, q0, #4 520 » vshr.u64» q11, q0, #4
527 » veor» q10, q10, q7 521 » veor» » q10, q10, q7
528 » veor» q11, q11, q2 522 » veor» » q11, q11, q2
529 » vand» q10, q10, q8 523 » vand» » q10, q10, q8
530 » vand» q11, q11, q8 524 » vand» » q11, q11, q8
531 » veor» q7, q7, q10 525 » veor» » q7, q7, q10
532 vshl.u64 q10, q10, #4 526 vshl.u64 q10, q10, #4
533 » veor» q2, q2, q11 527 » veor» » q2, q2, q11
534 » vshl.u64» q11, q11, #4 528 » vshl.u64» q11, q11, #4
535 » veor» q1, q1, q10 529 » veor» » q1, q1, q10
536 » veor» q0, q0, q11 530 » veor» » q0, q0, q11
537 vldmia r4, {q8} @ last round key 531 vldmia r4, {q8} @ last round key
538 veor q6, q6, q8 532 veor q6, q6, q8
539 veor q4, q4, q8 533 veor q4, q4, q8
540 veor q2, q2, q8 534 veor q2, q2, q8
541 veor q7, q7, q8 535 veor q7, q7, q8
542 veor q3, q3, q8 536 veor q3, q3, q8
543 veor q5, q5, q8 537 veor q5, q5, q8
544 veor q0, q0, q8 538 veor q0, q0, q8
545 veor q1, q1, q8 539 veor q1, q1, q8
546 bx lr 540 bx lr
547 .size _bsaes_decrypt8,.-_bsaes_decrypt8 541 .size _bsaes_decrypt8,.-_bsaes_decrypt8
548 542
549 .type _bsaes_const,%object 543 .type _bsaes_const,%object
550 .align 6 544 .align 6
551 _bsaes_const: 545 _bsaes_const:
552 .LM0ISR:@ InvShiftRows constants 546 .LM0ISR:» @ InvShiftRows constants
553 .quad» 0x0a0e0206070b0f03, 0x0004080c0d010509 547 » .quad» 0x0a0e0206070b0f03, 0x0004080c0d010509
554 .LISR: 548 .LISR:
555 .quad» 0x0504070602010003, 0x0f0e0d0c080b0a09 549 » .quad» 0x0504070602010003, 0x0f0e0d0c080b0a09
556 .LISRM0: 550 .LISRM0:
557 .quad» 0x01040b0e0205080f, 0x0306090c00070a0d 551 » .quad» 0x01040b0e0205080f, 0x0306090c00070a0d
558 .LM0SR:@ ShiftRows constants 552 .LM0SR:»» @ ShiftRows constants
559 .quad» 0x0a0e02060f03070b, 0x0004080c05090d01 553 » .quad» 0x0a0e02060f03070b, 0x0004080c05090d01
560 .LSR: 554 .LSR:
561 .quad» 0x0504070600030201, 0x0f0e0d0c0a09080b 555 » .quad» 0x0504070600030201, 0x0f0e0d0c0a09080b
562 .LSRM0: 556 .LSRM0:
563 .quad» 0x0304090e00050a0f, 0x01060b0c0207080d 557 » .quad» 0x0304090e00050a0f, 0x01060b0c0207080d
564 .LM0: 558 .LM0:
565 .quad» 0x02060a0e03070b0f, 0x0004080c0105090d 559 » .quad» 0x02060a0e03070b0f, 0x0004080c0105090d
566 .LREVM0SR: 560 .LREVM0SR:
567 .quad» 0x090d01050c000408, 0x03070b0f060a0e02 561 » .quad» 0x090d01050c000408, 0x03070b0f060a0e02
568 .byte» 66,105,116,45,115,108,105,99,101,100,32,65,69,83,32,102,111,114,32,78,69 ,79,78,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 562 .asciz» "Bit-sliced AES for NEON, CRYPTOGAMS by <appro@openssl.org>"
569 .align» 2
570 .align 6 563 .align 6
571 .size _bsaes_const,.-_bsaes_const 564 .size _bsaes_const,.-_bsaes_const
572 565
573 .type _bsaes_encrypt8,%function 566 .type _bsaes_encrypt8,%function
574 .align 4 567 .align 4
575 _bsaes_encrypt8: 568 _bsaes_encrypt8:
576 adr r6,_bsaes_encrypt8 569 adr r6,_bsaes_encrypt8
577 vldmia r4!, {q9} @ round 0 key 570 vldmia r4!, {q9} @ round 0 key
578 #ifdef __APPLE__
579 adr r6,.LM0SR
580 #else
581 sub r6,r6,#_bsaes_encrypt8-.LM0SR 571 sub r6,r6,#_bsaes_encrypt8-.LM0SR
582 #endif
583 572
584 vldmia r6!, {q8} @ .LM0SR 573 vldmia r6!, {q8} @ .LM0SR
585 _bsaes_encrypt8_alt: 574 _bsaes_encrypt8_alt:
586 veor q10, q0, q9 @ xor with round0 key 575 veor q10, q0, q9 @ xor with round0 key
587 veor q11, q1, q9 576 veor q11, q1, q9
588 » vtbl.8» d0, {q10}, d16 577 » vtbl.8»d0, {q10}, d16
589 » vtbl.8» d1, {q10}, d17 578 » vtbl.8»d1, {q10}, d17
590 veor q12, q2, q9 579 veor q12, q2, q9
591 » vtbl.8» d2, {q11}, d16 580 » vtbl.8»d2, {q11}, d16
592 » vtbl.8» d3, {q11}, d17 581 » vtbl.8»d3, {q11}, d17
593 veor q13, q3, q9 582 veor q13, q3, q9
594 » vtbl.8» d4, {q12}, d16 583 » vtbl.8»d4, {q12}, d16
595 » vtbl.8» d5, {q12}, d17 584 » vtbl.8»d5, {q12}, d17
596 veor q14, q4, q9 585 veor q14, q4, q9
597 » vtbl.8» d6, {q13}, d16 586 » vtbl.8»d6, {q13}, d16
598 » vtbl.8» d7, {q13}, d17 587 » vtbl.8»d7, {q13}, d17
599 veor q15, q5, q9 588 veor q15, q5, q9
600 » vtbl.8» d8, {q14}, d16 589 » vtbl.8»d8, {q14}, d16
601 » vtbl.8» d9, {q14}, d17 590 » vtbl.8»d9, {q14}, d17
602 veor q10, q6, q9 591 veor q10, q6, q9
603 » vtbl.8» d10, {q15}, d16 592 » vtbl.8»d10, {q15}, d16
604 » vtbl.8» d11, {q15}, d17 593 » vtbl.8»d11, {q15}, d17
605 veor q11, q7, q9 594 veor q11, q7, q9
606 » vtbl.8» d12, {q10}, d16 595 » vtbl.8»d12, {q10}, d16
607 » vtbl.8» d13, {q10}, d17 596 » vtbl.8»d13, {q10}, d17
608 » vtbl.8» d14, {q11}, d16 597 » vtbl.8»d14, {q11}, d16
609 » vtbl.8» d15, {q11}, d17 598 » vtbl.8»d15, {q11}, d17
610 _bsaes_encrypt8_bitslice: 599 _bsaes_encrypt8_bitslice:
611 vmov.i8 q8,#0x55 @ compose .LBS0 600 vmov.i8 q8,#0x55 @ compose .LBS0
612 vmov.i8 q9,#0x33 @ compose .LBS1 601 vmov.i8 q9,#0x33 @ compose .LBS1
613 vshr.u64 q10, q6, #1 602 vshr.u64 q10, q6, #1
614 » vshr.u64» q11, q4, #1 603 » vshr.u64» q11, q4, #1
615 » veor» q10, q10, q7 604 » veor» » q10, q10, q7
616 » veor» q11, q11, q5 605 » veor» » q11, q11, q5
617 » vand» q10, q10, q8 606 » vand» » q10, q10, q8
618 » vand» q11, q11, q8 607 » vand» » q11, q11, q8
619 » veor» q7, q7, q10 608 » veor» » q7, q7, q10
620 vshl.u64 q10, q10, #1 609 vshl.u64 q10, q10, #1
621 » veor» q5, q5, q11 610 » veor» » q5, q5, q11
622 » vshl.u64» q11, q11, #1 611 » vshl.u64» q11, q11, #1
623 » veor» q6, q6, q10 612 » veor» » q6, q6, q10
624 » veor» q4, q4, q11 613 » veor» » q4, q4, q11
625 vshr.u64 q10, q2, #1 614 vshr.u64 q10, q2, #1
626 » vshr.u64» q11, q0, #1 615 » vshr.u64» q11, q0, #1
627 » veor» q10, q10, q3 616 » veor» » q10, q10, q3
628 » veor» q11, q11, q1 617 » veor» » q11, q11, q1
629 » vand» q10, q10, q8 618 » vand» » q10, q10, q8
630 » vand» q11, q11, q8 619 » vand» » q11, q11, q8
631 » veor» q3, q3, q10 620 » veor» » q3, q3, q10
632 vshl.u64 q10, q10, #1 621 vshl.u64 q10, q10, #1
633 » veor» q1, q1, q11 622 » veor» » q1, q1, q11
634 » vshl.u64» q11, q11, #1 623 » vshl.u64» q11, q11, #1
635 » veor» q2, q2, q10 624 » veor» » q2, q2, q10
636 » veor» q0, q0, q11 625 » veor» » q0, q0, q11
637 vmov.i8 q8,#0x0f @ compose .LBS2 626 vmov.i8 q8,#0x0f @ compose .LBS2
638 vshr.u64 q10, q5, #2 627 vshr.u64 q10, q5, #2
639 » vshr.u64» q11, q4, #2 628 » vshr.u64» q11, q4, #2
640 » veor» q10, q10, q7 629 » veor» » q10, q10, q7
641 » veor» q11, q11, q6 630 » veor» » q11, q11, q6
642 » vand» q10, q10, q9 631 » vand» » q10, q10, q9
643 » vand» q11, q11, q9 632 » vand» » q11, q11, q9
644 » veor» q7, q7, q10 633 » veor» » q7, q7, q10
645 vshl.u64 q10, q10, #2 634 vshl.u64 q10, q10, #2
646 » veor» q6, q6, q11 635 » veor» » q6, q6, q11
647 » vshl.u64» q11, q11, #2 636 » vshl.u64» q11, q11, #2
648 » veor» q5, q5, q10 637 » veor» » q5, q5, q10
649 » veor» q4, q4, q11 638 » veor» » q4, q4, q11
650 vshr.u64 q10, q1, #2 639 vshr.u64 q10, q1, #2
651 » vshr.u64» q11, q0, #2 640 » vshr.u64» q11, q0, #2
652 » veor» q10, q10, q3 641 » veor» » q10, q10, q3
653 » veor» q11, q11, q2 642 » veor» » q11, q11, q2
654 » vand» q10, q10, q9 643 » vand» » q10, q10, q9
655 » vand» q11, q11, q9 644 » vand» » q11, q11, q9
656 » veor» q3, q3, q10 645 » veor» » q3, q3, q10
657 vshl.u64 q10, q10, #2 646 vshl.u64 q10, q10, #2
658 » veor» q2, q2, q11 647 » veor» » q2, q2, q11
659 » vshl.u64» q11, q11, #2 648 » vshl.u64» q11, q11, #2
660 » veor» q1, q1, q10 649 » veor» » q1, q1, q10
661 » veor» q0, q0, q11 650 » veor» » q0, q0, q11
662 vshr.u64 q10, q3, #4 651 vshr.u64 q10, q3, #4
663 » vshr.u64» q11, q2, #4 652 » vshr.u64» q11, q2, #4
664 » veor» q10, q10, q7 653 » veor» » q10, q10, q7
665 » veor» q11, q11, q6 654 » veor» » q11, q11, q6
666 » vand» q10, q10, q8 655 » vand» » q10, q10, q8
667 » vand» q11, q11, q8 656 » vand» » q11, q11, q8
668 » veor» q7, q7, q10 657 » veor» » q7, q7, q10
669 vshl.u64 q10, q10, #4 658 vshl.u64 q10, q10, #4
670 » veor» q6, q6, q11 659 » veor» » q6, q6, q11
671 » vshl.u64» q11, q11, #4 660 » vshl.u64» q11, q11, #4
672 » veor» q3, q3, q10 661 » veor» » q3, q3, q10
673 » veor» q2, q2, q11 662 » veor» » q2, q2, q11
674 vshr.u64 q10, q1, #4 663 vshr.u64 q10, q1, #4
675 » vshr.u64» q11, q0, #4 664 » vshr.u64» q11, q0, #4
676 » veor» q10, q10, q5 665 » veor» » q10, q10, q5
677 » veor» q11, q11, q4 666 » veor» » q11, q11, q4
678 » vand» q10, q10, q8 667 » vand» » q10, q10, q8
679 » vand» q11, q11, q8 668 » vand» » q11, q11, q8
680 » veor» q5, q5, q10 669 » veor» » q5, q5, q10
681 vshl.u64 q10, q10, #4 670 vshl.u64 q10, q10, #4
682 » veor» q4, q4, q11 671 » veor» » q4, q4, q11
683 » vshl.u64» q11, q11, #4 672 » vshl.u64» q11, q11, #4
684 » veor» q1, q1, q10 673 » veor» » q1, q1, q10
685 » veor» q0, q0, q11 674 » veor» » q0, q0, q11
686 sub r5,r5,#1 675 sub r5,r5,#1
687 b .Lenc_sbox 676 b .Lenc_sbox
688 .align 4 677 .align 4
689 .Lenc_loop: 678 .Lenc_loop:
690 » vldmia» r4!, {q8,q9,q10,q11} 679 » vldmia» r4!, {q8-q11}
691 veor q8, q8, q0 680 veor q8, q8, q0
692 veor q9, q9, q1 681 veor q9, q9, q1
693 vtbl.8 d0, {q8}, d24 682 vtbl.8 d0, {q8}, d24
694 vtbl.8 d1, {q8}, d25 683 vtbl.8 d1, {q8}, d25
695 vldmia r4!, {q8} 684 vldmia r4!, {q8}
696 veor q10, q10, q2 685 veor q10, q10, q2
697 vtbl.8 d2, {q9}, d24 686 vtbl.8 d2, {q9}, d24
698 vtbl.8 d3, {q9}, d25 687 vtbl.8 d3, {q9}, d25
699 vldmia r4!, {q9} 688 vldmia r4!, {q9}
700 veor q11, q11, q3 689 veor q11, q11, q3
(...skipping 28 matching lines...) Expand all
729 veor q3, q3, q4 718 veor q3, q3, q4
730 veor q4, q4, q5 719 veor q4, q4, q5
731 720
732 veor q2, q2, q7 721 veor q2, q2, q7
733 veor q3, q3, q1 722 veor q3, q3, q1
734 veor q1, q1, q5 723 veor q1, q1, q5
735 veor q11, q7, q4 724 veor q11, q7, q4
736 veor q10, q1, q2 725 veor q10, q1, q2
737 veor q9, q5, q3 726 veor q9, q5, q3
738 veor q13, q2, q4 727 veor q13, q2, q4
739 » vmov» q8, q10 728 » vmov» q8, q10
740 veor q12, q6, q0 729 veor q12, q6, q0
741 730
742 vorr q10, q10, q9 731 vorr q10, q10, q9
743 veor q15, q11, q8 732 veor q15, q11, q8
744 vand q14, q11, q12 733 vand q14, q11, q12
745 vorr q11, q11, q12 734 vorr q11, q11, q12
746 veor q12, q12, q9 735 veor q12, q12, q9
747 vand q8, q8, q9 736 vand q8, q8, q9
748 veor q9, q3, q0 737 veor q9, q3, q0
749 vand q15, q15, q12 738 vand q15, q15, q12
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 775
787 vbsl q12, q13, q14 776 vbsl q12, q13, q14
788 vbsl q8, q14, q13 777 vbsl q8, q14, q13
789 778
790 vand q14, q12, q15 779 vand q14, q12, q15
791 veor q9, q9, q8 780 veor q9, q9, q8
792 781
793 veor q14, q14, q11 782 veor q14, q14, q11
794 veor q12, q6, q0 783 veor q12, q6, q0
795 veor q8, q5, q3 784 veor q8, q5, q3
796 » veor» q10, q15, q14 785 » veor » q10, q15, q14
797 vand q10, q10, q6 786 vand q10, q10, q6
798 veor q6, q6, q5 787 veor q6, q6, q5
799 vand q11, q5, q15 788 vand q11, q5, q15
800 vand q6, q6, q14 789 vand q6, q6, q14
801 veor q5, q11, q10 790 veor q5, q11, q10
802 veor q6, q6, q11 791 veor q6, q6, q11
803 veor q15, q15, q13 792 veor q15, q15, q13
804 veor q14, q14, q9 793 veor q14, q14, q9
805 veor q11, q15, q14 794 veor q11, q15, q14
806 » veor» q10, q13, q9 795 » veor » q10, q13, q9
807 vand q11, q11, q12 796 vand q11, q11, q12
808 » vand» q10, q10, q0 797 » vand» q10, q10, q0
809 veor q12, q12, q8 798 veor q12, q12, q8
810 » veor» q0, q0, q3 799 » veor» q0, q0, q3
811 vand q8, q8, q15 800 vand q8, q8, q15
812 » vand» q3, q3, q13 801 » vand» q3, q3, q13
813 vand q12, q12, q14 802 vand q12, q12, q14
814 » vand» q0, q0, q9 803 » vand» q0, q0, q9
815 veor q8, q8, q12 804 veor q8, q8, q12
816 » veor» q0, q0, q3 805 » veor» q0, q0, q3
817 veor q12, q12, q11 806 veor q12, q12, q11
818 » veor» q3, q3, q10 807 » veor» q3, q3, q10
819 veor q6, q6, q12 808 veor q6, q6, q12
820 veor q0, q0, q12 809 veor q0, q0, q12
821 veor q5, q5, q8 810 veor q5, q5, q8
822 veor q3, q3, q8 811 veor q3, q3, q8
823 812
824 veor q12, q7, q4 813 veor q12, q7, q4
825 veor q8, q1, q2 814 veor q8, q1, q2
826 veor q11, q15, q14 815 veor q11, q15, q14
827 » veor» q10, q13, q9 816 » veor » q10, q13, q9
828 vand q11, q11, q12 817 vand q11, q11, q12
829 » vand» q10, q10, q4 818 » vand» q10, q10, q4
830 veor q12, q12, q8 819 veor q12, q12, q8
831 » veor» q4, q4, q2 820 » veor» q4, q4, q2
832 vand q8, q8, q15 821 vand q8, q8, q15
833 » vand» q2, q2, q13 822 » vand» q2, q2, q13
834 vand q12, q12, q14 823 vand q12, q12, q14
835 » vand» q4, q4, q9 824 » vand» q4, q4, q9
836 veor q8, q8, q12 825 veor q8, q8, q12
837 » veor» q4, q4, q2 826 » veor» q4, q4, q2
838 veor q12, q12, q11 827 veor q12, q12, q11
839 » veor» q2, q2, q10 828 » veor» q2, q2, q10
840 veor q15, q15, q13 829 veor q15, q15, q13
841 veor q14, q14, q9 830 veor q14, q14, q9
842 » veor» q10, q15, q14 831 » veor » q10, q15, q14
843 vand q10, q10, q7 832 vand q10, q10, q7
844 veor q7, q7, q1 833 veor q7, q7, q1
845 vand q11, q1, q15 834 vand q11, q1, q15
846 vand q7, q7, q14 835 vand q7, q7, q14
847 veor q1, q11, q10 836 veor q1, q11, q10
848 veor q7, q7, q11 837 veor q7, q7, q11
849 veor q7, q7, q12 838 veor q7, q7, q12
850 veor q4, q4, q12 839 veor q4, q4, q12
851 veor q1, q1, q8 840 veor q1, q1, q8
852 veor q2, q2, q8 841 veor q2, q2, q8
853 veor q7, q7, q0 842 veor q7, q7, q0
854 veor q1, q1, q6 843 veor q1, q1, q6
855 veor q6, q6, q0 844 veor q6, q6, q0
856 veor q4, q4, q7 845 veor q4, q4, q7
857 veor q0, q0, q1 846 veor q0, q0, q1
858 847
859 veor q1, q1, q5 848 veor q1, q1, q5
860 veor q5, q5, q2 849 veor q5, q5, q2
861 veor q2, q2, q3 850 veor q2, q2, q3
862 veor q3, q3, q5 851 veor q3, q3, q5
863 veor q4, q4, q5 852 veor q4, q4, q5
864 853
865 veor q6, q6, q3 854 veor q6, q6, q3
866 subs r5,r5,#1 855 subs r5,r5,#1
867 bcc .Lenc_done 856 bcc .Lenc_done
868 vext.8 q8, q0, q0, #12 @ x0 <<< 32 857 vext.8 q8, q0, q0, #12 @ x0 <<< 32
869 vext.8 q9, q1, q1, #12 858 vext.8 q9, q1, q1, #12
870 » veor» q0, q0, q8» » @ x0 ^ (x0 <<< 32) 859 » veor» q0, q0, q8» » @ x0 ^ (x0 <<< 32)
871 vext.8 q10, q4, q4, #12 860 vext.8 q10, q4, q4, #12
872 » veor» q1, q1, q9 861 » veor» q1, q1, q9
873 vext.8 q11, q6, q6, #12 862 vext.8 q11, q6, q6, #12
874 » veor» q4, q4, q10 863 » veor» q4, q4, q10
875 vext.8 q12, q3, q3, #12 864 vext.8 q12, q3, q3, #12
876 » veor» q6, q6, q11 865 » veor» q6, q6, q11
877 vext.8 q13, q7, q7, #12 866 vext.8 q13, q7, q7, #12
878 » veor» q3, q3, q12 867 » veor» q3, q3, q12
879 vext.8 q14, q2, q2, #12 868 vext.8 q14, q2, q2, #12
880 » veor» q7, q7, q13 869 » veor» q7, q7, q13
881 vext.8 q15, q5, q5, #12 870 vext.8 q15, q5, q5, #12
882 » veor» q2, q2, q14 871 » veor» q2, q2, q14
883 872
884 veor q9, q9, q0 873 veor q9, q9, q0
885 » veor» q5, q5, q15 874 » veor» q5, q5, q15
886 » vext.8» q0, q0, q0, #8» » @ (x0 ^ (x0 <<< 32)) <<< 64) 875 » vext.8»q0, q0, q0, #8» » @ (x0 ^ (x0 <<< 32)) <<< 64)
887 veor q10, q10, q1 876 veor q10, q10, q1
888 veor q8, q8, q5 877 veor q8, q8, q5
889 veor q9, q9, q5 878 veor q9, q9, q5
890 » vext.8» q1, q1, q1, #8 879 » vext.8»q1, q1, q1, #8
891 veor q13, q13, q3 880 veor q13, q13, q3
892 » veor» q0, q0, q8 881 » veor» q0, q0, q8
893 veor q14, q14, q7 882 veor q14, q14, q7
894 » veor» q1, q1, q9 883 » veor» q1, q1, q9
895 » vext.8» q8, q3, q3, #8 884 » vext.8»q8, q3, q3, #8
896 veor q12, q12, q6 885 veor q12, q12, q6
897 » vext.8» q9, q7, q7, #8 886 » vext.8»q9, q7, q7, #8
898 veor q15, q15, q2 887 veor q15, q15, q2
899 » vext.8» q3, q6, q6, #8 888 » vext.8»q3, q6, q6, #8
900 veor q11, q11, q4 889 veor q11, q11, q4
901 » vext.8» q7, q5, q5, #8 890 » vext.8»q7, q5, q5, #8
902 veor q12, q12, q5 891 veor q12, q12, q5
903 » vext.8» q6, q2, q2, #8 892 » vext.8»q6, q2, q2, #8
904 veor q11, q11, q5 893 veor q11, q11, q5
905 » vext.8» q2, q4, q4, #8 894 » vext.8»q2, q4, q4, #8
906 veor q5, q9, q13 895 veor q5, q9, q13
907 veor q4, q8, q12 896 veor q4, q8, q12
908 veor q3, q3, q11 897 veor q3, q3, q11
909 veor q7, q7, q15 898 veor q7, q7, q15
910 veor q6, q6, q14 899 veor q6, q6, q14
911 @ vmov q4, q8 900 @ vmov q4, q8
912 veor q2, q2, q10 901 veor q2, q2, q10
913 @ vmov q5, q9 902 @ vmov q5, q9
914 vldmia r6, {q12} @ .LSR 903 vldmia r6, {q12} @ .LSR
915 ite eq @ Thumb2 thing, samity check in ARM 904 ite eq @ Thumb2 thing, samity check in ARM
916 addeq r6,r6,#0x10 905 addeq r6,r6,#0x10
917 bne .Lenc_loop 906 bne .Lenc_loop
918 vldmia r6, {q12} @ .LSRM0 907 vldmia r6, {q12} @ .LSRM0
919 b .Lenc_loop 908 b .Lenc_loop
920 .align 4 909 .align 4
921 .Lenc_done: 910 .Lenc_done:
922 vmov.i8 q8,#0x55 @ compose .LBS0 911 vmov.i8 q8,#0x55 @ compose .LBS0
923 vmov.i8 q9,#0x33 @ compose .LBS1 912 vmov.i8 q9,#0x33 @ compose .LBS1
924 vshr.u64 q10, q2, #1 913 vshr.u64 q10, q2, #1
925 » vshr.u64» q11, q3, #1 914 » vshr.u64» q11, q3, #1
926 » veor» q10, q10, q5 915 » veor» » q10, q10, q5
927 » veor» q11, q11, q7 916 » veor» » q11, q11, q7
928 » vand» q10, q10, q8 917 » vand» » q10, q10, q8
929 » vand» q11, q11, q8 918 » vand» » q11, q11, q8
930 » veor» q5, q5, q10 919 » veor» » q5, q5, q10
931 vshl.u64 q10, q10, #1 920 vshl.u64 q10, q10, #1
932 » veor» q7, q7, q11 921 » veor» » q7, q7, q11
933 » vshl.u64» q11, q11, #1 922 » vshl.u64» q11, q11, #1
934 » veor» q2, q2, q10 923 » veor» » q2, q2, q10
935 » veor» q3, q3, q11 924 » veor» » q3, q3, q11
936 vshr.u64 q10, q4, #1 925 vshr.u64 q10, q4, #1
937 » vshr.u64» q11, q0, #1 926 » vshr.u64» q11, q0, #1
938 » veor» q10, q10, q6 927 » veor» » q10, q10, q6
939 » veor» q11, q11, q1 928 » veor» » q11, q11, q1
940 » vand» q10, q10, q8 929 » vand» » q10, q10, q8
941 » vand» q11, q11, q8 930 » vand» » q11, q11, q8
942 » veor» q6, q6, q10 931 » veor» » q6, q6, q10
943 vshl.u64 q10, q10, #1 932 vshl.u64 q10, q10, #1
944 » veor» q1, q1, q11 933 » veor» » q1, q1, q11
945 » vshl.u64» q11, q11, #1 934 » vshl.u64» q11, q11, #1
946 » veor» q4, q4, q10 935 » veor» » q4, q4, q10
947 » veor» q0, q0, q11 936 » veor» » q0, q0, q11
948 vmov.i8 q8,#0x0f @ compose .LBS2 937 vmov.i8 q8,#0x0f @ compose .LBS2
949 vshr.u64 q10, q7, #2 938 vshr.u64 q10, q7, #2
950 » vshr.u64» q11, q3, #2 939 » vshr.u64» q11, q3, #2
951 » veor» q10, q10, q5 940 » veor» » q10, q10, q5
952 » veor» q11, q11, q2 941 » veor» » q11, q11, q2
953 » vand» q10, q10, q9 942 » vand» » q10, q10, q9
954 » vand» q11, q11, q9 943 » vand» » q11, q11, q9
955 » veor» q5, q5, q10 944 » veor» » q5, q5, q10
956 vshl.u64 q10, q10, #2 945 vshl.u64 q10, q10, #2
957 » veor» q2, q2, q11 946 » veor» » q2, q2, q11
958 » vshl.u64» q11, q11, #2 947 » vshl.u64» q11, q11, #2
959 » veor» q7, q7, q10 948 » veor» » q7, q7, q10
960 » veor» q3, q3, q11 949 » veor» » q3, q3, q11
961 vshr.u64 q10, q1, #2 950 vshr.u64 q10, q1, #2
962 » vshr.u64» q11, q0, #2 951 » vshr.u64» q11, q0, #2
963 » veor» q10, q10, q6 952 » veor» » q10, q10, q6
964 » veor» q11, q11, q4 953 » veor» » q11, q11, q4
965 » vand» q10, q10, q9 954 » vand» » q10, q10, q9
966 » vand» q11, q11, q9 955 » vand» » q11, q11, q9
967 » veor» q6, q6, q10 956 » veor» » q6, q6, q10
968 vshl.u64 q10, q10, #2 957 vshl.u64 q10, q10, #2
969 » veor» q4, q4, q11 958 » veor» » q4, q4, q11
970 » vshl.u64» q11, q11, #2 959 » vshl.u64» q11, q11, #2
971 » veor» q1, q1, q10 960 » veor» » q1, q1, q10
972 » veor» q0, q0, q11 961 » veor» » q0, q0, q11
973 vshr.u64 q10, q6, #4 962 vshr.u64 q10, q6, #4
974 » vshr.u64» q11, q4, #4 963 » vshr.u64» q11, q4, #4
975 » veor» q10, q10, q5 964 » veor» » q10, q10, q5
976 » veor» q11, q11, q2 965 » veor» » q11, q11, q2
977 » vand» q10, q10, q8 966 » vand» » q10, q10, q8
978 » vand» q11, q11, q8 967 » vand» » q11, q11, q8
979 » veor» q5, q5, q10 968 » veor» » q5, q5, q10
980 vshl.u64 q10, q10, #4 969 vshl.u64 q10, q10, #4
981 » veor» q2, q2, q11 970 » veor» » q2, q2, q11
982 » vshl.u64» q11, q11, #4 971 » vshl.u64» q11, q11, #4
983 » veor» q6, q6, q10 972 » veor» » q6, q6, q10
984 » veor» q4, q4, q11 973 » veor» » q4, q4, q11
985 vshr.u64 q10, q1, #4 974 vshr.u64 q10, q1, #4
986 » vshr.u64» q11, q0, #4 975 » vshr.u64» q11, q0, #4
987 » veor» q10, q10, q7 976 » veor» » q10, q10, q7
988 » veor» q11, q11, q3 977 » veor» » q11, q11, q3
989 » vand» q10, q10, q8 978 » vand» » q10, q10, q8
990 » vand» q11, q11, q8 979 » vand» » q11, q11, q8
991 » veor» q7, q7, q10 980 » veor» » q7, q7, q10
992 vshl.u64 q10, q10, #4 981 vshl.u64 q10, q10, #4
993 » veor» q3, q3, q11 982 » veor» » q3, q3, q11
994 » vshl.u64» q11, q11, #4 983 » vshl.u64» q11, q11, #4
995 » veor» q1, q1, q10 984 » veor» » q1, q1, q10
996 » veor» q0, q0, q11 985 » veor» » q0, q0, q11
997 vldmia r4, {q8} @ last round key 986 vldmia r4, {q8} @ last round key
998 veor q4, q4, q8 987 veor q4, q4, q8
999 veor q6, q6, q8 988 veor q6, q6, q8
1000 veor q3, q3, q8 989 veor q3, q3, q8
1001 veor q7, q7, q8 990 veor q7, q7, q8
1002 veor q2, q2, q8 991 veor q2, q2, q8
1003 veor q5, q5, q8 992 veor q5, q5, q8
1004 veor q0, q0, q8 993 veor q0, q0, q8
1005 veor q1, q1, q8 994 veor q1, q1, q8
1006 bx lr 995 bx lr
1007 .size _bsaes_encrypt8,.-_bsaes_encrypt8 996 .size _bsaes_encrypt8,.-_bsaes_encrypt8
1008 .type _bsaes_key_convert,%function 997 .type _bsaes_key_convert,%function
1009 .align 4 998 .align 4
1010 _bsaes_key_convert: 999 _bsaes_key_convert:
1011 adr r6,_bsaes_key_convert 1000 adr r6,_bsaes_key_convert
1012 vld1.8 {q7}, [r4]! @ load round 0 key 1001 vld1.8 {q7}, [r4]! @ load round 0 key
1013 #ifdef __APPLE__
1014 adr r6,.LM0
1015 #else
1016 sub r6,r6,#_bsaes_key_convert-.LM0 1002 sub r6,r6,#_bsaes_key_convert-.LM0
1017 #endif
1018 vld1.8 {q15}, [r4]! @ load round 1 key 1003 vld1.8 {q15}, [r4]! @ load round 1 key
1019 1004
1020 vmov.i8 q8, #0x01 @ bit masks 1005 vmov.i8 q8, #0x01 @ bit masks
1021 vmov.i8 q9, #0x02 1006 vmov.i8 q9, #0x02
1022 vmov.i8 q10, #0x04 1007 vmov.i8 q10, #0x04
1023 vmov.i8 q11, #0x08 1008 vmov.i8 q11, #0x08
1024 vmov.i8 q12, #0x10 1009 vmov.i8 q12, #0x10
1025 vmov.i8 q13, #0x20 1010 vmov.i8 q13, #0x20
1026 vldmia r6, {q14} @ .LM0 1011 vldmia r6, {q14} @ .LM0
1027 1012
(...skipping 22 matching lines...) Expand all
1050 vtst.8 q7, q7, q15 1035 vtst.8 q7, q7, q15
1051 vld1.8 {q15}, [r4]! @ load next round key 1036 vld1.8 {q15}, [r4]! @ load next round key
1052 vmvn q0, q0 @ "pnot" 1037 vmvn q0, q0 @ "pnot"
1053 vmvn q1, q1 1038 vmvn q1, q1
1054 vmvn q5, q5 1039 vmvn q5, q5
1055 vmvn q6, q6 1040 vmvn q6, q6
1056 #ifdef __ARMEL__ 1041 #ifdef __ARMEL__
1057 vrev32.8 q15, q15 1042 vrev32.8 q15, q15
1058 #endif 1043 #endif
1059 subs r5,r5,#1 1044 subs r5,r5,#1
1060 » vstmia» r12!,{q0,q1,q2,q3,q4,q5,q6,q7}» » @ write bit-sliced round key 1045 » vstmia» r12!,{q0-q7}» » @ write bit-sliced round key
1061 bne .Lkey_loop 1046 bne .Lkey_loop
1062 1047
1063 vmov.i8 q7,#0x63 @ compose .L63 1048 vmov.i8 q7,#0x63 @ compose .L63
1064 @ don't save last round key 1049 @ don't save last round key
1065 bx lr 1050 bx lr
1066 .size _bsaes_key_convert,.-_bsaes_key_convert 1051 .size _bsaes_key_convert,.-_bsaes_key_convert
1052 .extern AES_cbc_encrypt
1053 .extern AES_decrypt
1067 1054
1068 1055 .global»bsaes_cbc_encrypt
1069
1070 .globl» bsaes_cbc_encrypt
1071 .hidden bsaes_cbc_encrypt 1056 .hidden bsaes_cbc_encrypt
1072 .type bsaes_cbc_encrypt,%function 1057 .type bsaes_cbc_encrypt,%function
1073 .align 5 1058 .align 5
1074 bsaes_cbc_encrypt: 1059 bsaes_cbc_encrypt:
1075 #ifndef __KERNEL__ 1060 #ifndef __KERNEL__
1076 cmp r2, #128 1061 cmp r2, #128
1077 #ifndef __thumb__ 1062 #ifndef __thumb__
1078 blo AES_cbc_encrypt 1063 blo AES_cbc_encrypt
1079 #else 1064 #else
1080 bhs 1f 1065 bhs 1f
1081 b AES_cbc_encrypt 1066 b AES_cbc_encrypt
1082 1: 1067 1:
1083 #endif 1068 #endif
1084 #endif 1069 #endif
1085 1070
1086 @ it is up to the caller to make sure we are called with enc == 0 1071 @ it is up to the caller to make sure we are called with enc == 0
1087 1072
1088 mov ip, sp 1073 mov ip, sp
1089 » stmdb» sp!, {r4,r5,r6,r7,r8,r9,r10, lr} 1074 » stmdb» sp!, {r4-r10, lr}
1090 VFP_ABI_PUSH 1075 VFP_ABI_PUSH
1091 ldr r8, [ip] @ IV is 1st arg on the stack 1076 ldr r8, [ip] @ IV is 1st arg on the stack
1092 mov r2, r2, lsr#4 @ len in 16 byte blocks 1077 mov r2, r2, lsr#4 @ len in 16 byte blocks
1093 sub sp, #0x10 @ scratch space to carry over th e IV 1078 sub sp, #0x10 @ scratch space to carry over th e IV
1094 mov r9, sp @ save sp 1079 mov r9, sp @ save sp
1095 1080
1096 ldr r10, [r3, #240] @ get # of rounds 1081 ldr r10, [r3, #240] @ get # of rounds
1097 #ifndef BSAES_ASM_EXTENDED_KEY 1082 #ifndef BSAES_ASM_EXTENDED_KEY
1098 @ allocate the key schedule on the stack 1083 @ allocate the key schedule on the stack
1099 sub r12, sp, r10, lsl#7 @ 128 bytes per inner round key 1084 sub r12, sp, r10, lsl#7 @ 128 bytes per inner round key
(...skipping 19 matching lines...) Expand all
1119 mov r5, r10 @ pass # of rounds 1104 mov r5, r10 @ pass # of rounds
1120 add r12, r3, #248 @ pass key schedule 1105 add r12, r3, #248 @ pass key schedule
1121 bl _bsaes_key_convert 1106 bl _bsaes_key_convert
1122 add r4, r3, #248 1107 add r4, r3, #248
1123 vldmia r4, {q6} 1108 vldmia r4, {q6}
1124 vstmia r12, {q15} @ save last round key 1109 vstmia r12, {q15} @ save last round key
1125 veor q7, q7, q6 @ fix up round 0 key 1110 veor q7, q7, q6 @ fix up round 0 key
1126 vstmia r4, {q7} 1111 vstmia r4, {q7}
1127 1112
1128 .align 2 1113 .align 2
1129 1114 0:
1130 #endif 1115 #endif
1131 1116
1132 vld1.8 {q15}, [r8] @ load IV 1117 vld1.8 {q15}, [r8] @ load IV
1133 b .Lcbc_dec_loop 1118 b .Lcbc_dec_loop
1134 1119
1135 .align 4 1120 .align 4
1136 .Lcbc_dec_loop: 1121 .Lcbc_dec_loop:
1137 subs r2, r2, #0x8 1122 subs r2, r2, #0x8
1138 bmi .Lcbc_dec_loop_finish 1123 bmi .Lcbc_dec_loop_finish
1139 1124
1140 » vld1.8» {q0,q1}, [r0]!» @ load input 1125 » vld1.8» {q0-q1}, [r0]!» @ load input
1141 » vld1.8» {q2,q3}, [r0]! 1126 » vld1.8» {q2-q3}, [r0]!
1142 #ifndef BSAES_ASM_EXTENDED_KEY 1127 #ifndef BSAES_ASM_EXTENDED_KEY
1143 mov r4, sp @ pass the key 1128 mov r4, sp @ pass the key
1144 #else 1129 #else
1145 add r4, r3, #248 1130 add r4, r3, #248
1146 #endif 1131 #endif
1147 » vld1.8» {q4,q5}, [r0]! 1132 » vld1.8» {q4-q5}, [r0]!
1148 mov r5, r10 1133 mov r5, r10
1149 » vld1.8» {q6,q7}, [r0] 1134 » vld1.8» {q6-q7}, [r0]
1150 sub r0, r0, #0x60 1135 sub r0, r0, #0x60
1151 vstmia r9, {q15} @ put aside IV 1136 vstmia r9, {q15} @ put aside IV
1152 1137
1153 bl _bsaes_decrypt8 1138 bl _bsaes_decrypt8
1154 1139
1155 vldmia r9, {q14} @ reload IV 1140 vldmia r9, {q14} @ reload IV
1156 » vld1.8» {q8,q9}, [r0]!» @ reload input 1141 » vld1.8» {q8-q9}, [r0]!» @ reload input
1157 veor q0, q0, q14 @ ^= IV 1142 veor q0, q0, q14 @ ^= IV
1158 » vld1.8» {q10,q11}, [r0]! 1143 » vld1.8» {q10-q11}, [r0]!
1159 veor q1, q1, q8 1144 veor q1, q1, q8
1160 veor q6, q6, q9 1145 veor q6, q6, q9
1161 » vld1.8» {q12,q13}, [r0]! 1146 » vld1.8» {q12-q13}, [r0]!
1162 veor q4, q4, q10 1147 veor q4, q4, q10
1163 veor q2, q2, q11 1148 veor q2, q2, q11
1164 » vld1.8» {q14,q15}, [r0]! 1149 » vld1.8» {q14-q15}, [r0]!
1165 veor q7, q7, q12 1150 veor q7, q7, q12
1166 » vst1.8» {q0,q1}, [r1]!» @ write output 1151 » vst1.8» {q0-q1}, [r1]!» @ write output
1167 veor q3, q3, q13 1152 veor q3, q3, q13
1168 vst1.8 {q6}, [r1]! 1153 vst1.8 {q6}, [r1]!
1169 veor q5, q5, q14 1154 veor q5, q5, q14
1170 vst1.8 {q4}, [r1]! 1155 vst1.8 {q4}, [r1]!
1171 vst1.8 {q2}, [r1]! 1156 vst1.8 {q2}, [r1]!
1172 vst1.8 {q7}, [r1]! 1157 vst1.8 {q7}, [r1]!
1173 vst1.8 {q3}, [r1]! 1158 vst1.8 {q3}, [r1]!
1174 vst1.8 {q5}, [r1]! 1159 vst1.8 {q5}, [r1]!
1175 1160
1176 b .Lcbc_dec_loop 1161 b .Lcbc_dec_loop
(...skipping 23 matching lines...) Expand all
1200 cmp r2, #6 1185 cmp r2, #6
1201 blo .Lcbc_dec_five 1186 blo .Lcbc_dec_five
1202 vld1.8 {q5}, [r0]! 1187 vld1.8 {q5}, [r0]!
1203 beq .Lcbc_dec_six 1188 beq .Lcbc_dec_six
1204 vld1.8 {q6}, [r0]! 1189 vld1.8 {q6}, [r0]!
1205 sub r0, r0, #0x70 1190 sub r0, r0, #0x70
1206 1191
1207 bl _bsaes_decrypt8 1192 bl _bsaes_decrypt8
1208 1193
1209 vldmia r9, {q14} @ reload IV 1194 vldmia r9, {q14} @ reload IV
1210 » vld1.8» {q8,q9}, [r0]!» @ reload input 1195 » vld1.8» {q8-q9}, [r0]!» @ reload input
1211 veor q0, q0, q14 @ ^= IV 1196 veor q0, q0, q14 @ ^= IV
1212 » vld1.8» {q10,q11}, [r0]! 1197 » vld1.8» {q10-q11}, [r0]!
1213 veor q1, q1, q8 1198 veor q1, q1, q8
1214 veor q6, q6, q9 1199 veor q6, q6, q9
1215 » vld1.8» {q12,q13}, [r0]! 1200 » vld1.8» {q12-q13}, [r0]!
1216 veor q4, q4, q10 1201 veor q4, q4, q10
1217 veor q2, q2, q11 1202 veor q2, q2, q11
1218 vld1.8 {q15}, [r0]! 1203 vld1.8 {q15}, [r0]!
1219 veor q7, q7, q12 1204 veor q7, q7, q12
1220 » vst1.8» {q0,q1}, [r1]!» @ write output 1205 » vst1.8» {q0-q1}, [r1]!» @ write output
1221 veor q3, q3, q13 1206 veor q3, q3, q13
1222 vst1.8 {q6}, [r1]! 1207 vst1.8 {q6}, [r1]!
1223 vst1.8 {q4}, [r1]! 1208 vst1.8 {q4}, [r1]!
1224 vst1.8 {q2}, [r1]! 1209 vst1.8 {q2}, [r1]!
1225 vst1.8 {q7}, [r1]! 1210 vst1.8 {q7}, [r1]!
1226 vst1.8 {q3}, [r1]! 1211 vst1.8 {q3}, [r1]!
1227 b .Lcbc_dec_done 1212 b .Lcbc_dec_done
1228 .align 4 1213 .align 4
1229 .Lcbc_dec_six: 1214 .Lcbc_dec_six:
1230 sub r0, r0, #0x60 1215 sub r0, r0, #0x60
1231 bl _bsaes_decrypt8 1216 bl _bsaes_decrypt8
1232 vldmia r9,{q14} @ reload IV 1217 vldmia r9,{q14} @ reload IV
1233 » vld1.8» {q8,q9}, [r0]!» @ reload input 1218 » vld1.8» {q8-q9}, [r0]!» @ reload input
1234 veor q0, q0, q14 @ ^= IV 1219 veor q0, q0, q14 @ ^= IV
1235 » vld1.8» {q10,q11}, [r0]! 1220 » vld1.8» {q10-q11}, [r0]!
1236 veor q1, q1, q8 1221 veor q1, q1, q8
1237 veor q6, q6, q9 1222 veor q6, q6, q9
1238 vld1.8 {q12}, [r0]! 1223 vld1.8 {q12}, [r0]!
1239 veor q4, q4, q10 1224 veor q4, q4, q10
1240 veor q2, q2, q11 1225 veor q2, q2, q11
1241 vld1.8 {q15}, [r0]! 1226 vld1.8 {q15}, [r0]!
1242 veor q7, q7, q12 1227 veor q7, q7, q12
1243 » vst1.8» {q0,q1}, [r1]!» @ write output 1228 » vst1.8» {q0-q1}, [r1]!» @ write output
1244 vst1.8 {q6}, [r1]! 1229 vst1.8 {q6}, [r1]!
1245 vst1.8 {q4}, [r1]! 1230 vst1.8 {q4}, [r1]!
1246 vst1.8 {q2}, [r1]! 1231 vst1.8 {q2}, [r1]!
1247 vst1.8 {q7}, [r1]! 1232 vst1.8 {q7}, [r1]!
1248 b .Lcbc_dec_done 1233 b .Lcbc_dec_done
1249 .align 4 1234 .align 4
1250 .Lcbc_dec_five: 1235 .Lcbc_dec_five:
1251 sub r0, r0, #0x50 1236 sub r0, r0, #0x50
1252 bl _bsaes_decrypt8 1237 bl _bsaes_decrypt8
1253 vldmia r9, {q14} @ reload IV 1238 vldmia r9, {q14} @ reload IV
1254 » vld1.8» {q8,q9}, [r0]!» @ reload input 1239 » vld1.8» {q8-q9}, [r0]!» @ reload input
1255 veor q0, q0, q14 @ ^= IV 1240 veor q0, q0, q14 @ ^= IV
1256 » vld1.8» {q10,q11}, [r0]! 1241 » vld1.8» {q10-q11}, [r0]!
1257 veor q1, q1, q8 1242 veor q1, q1, q8
1258 veor q6, q6, q9 1243 veor q6, q6, q9
1259 vld1.8 {q15}, [r0]! 1244 vld1.8 {q15}, [r0]!
1260 veor q4, q4, q10 1245 veor q4, q4, q10
1261 » vst1.8» {q0,q1}, [r1]!» @ write output 1246 » vst1.8» {q0-q1}, [r1]!» @ write output
1262 veor q2, q2, q11 1247 veor q2, q2, q11
1263 vst1.8 {q6}, [r1]! 1248 vst1.8 {q6}, [r1]!
1264 vst1.8 {q4}, [r1]! 1249 vst1.8 {q4}, [r1]!
1265 vst1.8 {q2}, [r1]! 1250 vst1.8 {q2}, [r1]!
1266 b .Lcbc_dec_done 1251 b .Lcbc_dec_done
1267 .align 4 1252 .align 4
1268 .Lcbc_dec_four: 1253 .Lcbc_dec_four:
1269 sub r0, r0, #0x40 1254 sub r0, r0, #0x40
1270 bl _bsaes_decrypt8 1255 bl _bsaes_decrypt8
1271 vldmia r9, {q14} @ reload IV 1256 vldmia r9, {q14} @ reload IV
1272 » vld1.8» {q8,q9}, [r0]!» @ reload input 1257 » vld1.8» {q8-q9}, [r0]!» @ reload input
1273 veor q0, q0, q14 @ ^= IV 1258 veor q0, q0, q14 @ ^= IV
1274 vld1.8 {q10}, [r0]! 1259 vld1.8 {q10}, [r0]!
1275 veor q1, q1, q8 1260 veor q1, q1, q8
1276 veor q6, q6, q9 1261 veor q6, q6, q9
1277 vld1.8 {q15}, [r0]! 1262 vld1.8 {q15}, [r0]!
1278 veor q4, q4, q10 1263 veor q4, q4, q10
1279 » vst1.8» {q0,q1}, [r1]!» @ write output 1264 » vst1.8» {q0-q1}, [r1]!» @ write output
1280 vst1.8 {q6}, [r1]! 1265 vst1.8 {q6}, [r1]!
1281 vst1.8 {q4}, [r1]! 1266 vst1.8 {q4}, [r1]!
1282 b .Lcbc_dec_done 1267 b .Lcbc_dec_done
1283 .align 4 1268 .align 4
1284 .Lcbc_dec_three: 1269 .Lcbc_dec_three:
1285 sub r0, r0, #0x30 1270 sub r0, r0, #0x30
1286 bl _bsaes_decrypt8 1271 bl _bsaes_decrypt8
1287 vldmia r9, {q14} @ reload IV 1272 vldmia r9, {q14} @ reload IV
1288 » vld1.8» {q8,q9}, [r0]!» @ reload input 1273 » vld1.8» {q8-q9}, [r0]!» @ reload input
1289 veor q0, q0, q14 @ ^= IV 1274 veor q0, q0, q14 @ ^= IV
1290 vld1.8 {q15}, [r0]! 1275 vld1.8 {q15}, [r0]!
1291 veor q1, q1, q8 1276 veor q1, q1, q8
1292 veor q6, q6, q9 1277 veor q6, q6, q9
1293 » vst1.8» {q0,q1}, [r1]!» @ write output 1278 » vst1.8» {q0-q1}, [r1]!» @ write output
1294 vst1.8 {q6}, [r1]! 1279 vst1.8 {q6}, [r1]!
1295 b .Lcbc_dec_done 1280 b .Lcbc_dec_done
1296 .align 4 1281 .align 4
1297 .Lcbc_dec_two: 1282 .Lcbc_dec_two:
1298 sub r0, r0, #0x20 1283 sub r0, r0, #0x20
1299 bl _bsaes_decrypt8 1284 bl _bsaes_decrypt8
1300 vldmia r9, {q14} @ reload IV 1285 vldmia r9, {q14} @ reload IV
1301 vld1.8 {q8}, [r0]! @ reload input 1286 vld1.8 {q8}, [r0]! @ reload input
1302 veor q0, q0, q14 @ ^= IV 1287 veor q0, q0, q14 @ ^= IV
1303 vld1.8 {q15}, [r0]! @ reload input 1288 vld1.8 {q15}, [r0]! @ reload input
1304 veor q1, q1, q8 1289 veor q1, q1, q8
1305 » vst1.8» {q0,q1}, [r1]!» @ write output 1290 » vst1.8» {q0-q1}, [r1]!» @ write output
1306 b .Lcbc_dec_done 1291 b .Lcbc_dec_done
1307 .align 4 1292 .align 4
1308 .Lcbc_dec_one: 1293 .Lcbc_dec_one:
1309 sub r0, r0, #0x10 1294 sub r0, r0, #0x10
1310 mov r10, r1 @ save original out pointer 1295 mov r10, r1 @ save original out pointer
1311 mov r1, r9 @ use the iv scratch space as out buffer 1296 mov r1, r9 @ use the iv scratch space as out buffer
1312 mov r2, r3 1297 mov r2, r3
1313 vmov q4,q15 @ just in case ensure that IV 1298 vmov q4,q15 @ just in case ensure that IV
1314 vmov q5,q0 @ and input are preserved 1299 vmov q5,q0 @ and input are preserved
1315 bl AES_decrypt 1300 bl AES_decrypt
1316 vld1.8 {q0}, [r9,:64] @ load result 1301 vld1.8 {q0}, [r9,:64] @ load result
1317 veor q0, q0, q4 @ ^= IV 1302 veor q0, q0, q4 @ ^= IV
1318 vmov q15, q5 @ q5 holds input 1303 vmov q15, q5 @ q5 holds input
1319 vst1.8 {q0}, [r10] @ write output 1304 vst1.8 {q0}, [r10] @ write output
1320 1305
1321 .Lcbc_dec_done: 1306 .Lcbc_dec_done:
1322 #ifndef BSAES_ASM_EXTENDED_KEY 1307 #ifndef BSAES_ASM_EXTENDED_KEY
1323 vmov.i32 q0, #0 1308 vmov.i32 q0, #0
1324 vmov.i32 q1, #0 1309 vmov.i32 q1, #0
1325 .Lcbc_dec_bzero:@ wipe key schedule [if any] 1310 .Lcbc_dec_bzero:» » » » @ wipe key schedule [if any]
1326 » vstmia» sp!, {q0,q1} 1311 » vstmia» » sp!, {q0-q1}
1327 » cmp» sp, r9 1312 » cmp» » sp, r9
1328 » bne» .Lcbc_dec_bzero 1313 » bne» » .Lcbc_dec_bzero
1329 #endif 1314 #endif
1330 1315
1331 mov sp, r9 1316 mov sp, r9
1332 add sp, #0x10 @ add sp,r9,#0x10 is no good for thumb 1317 add sp, #0x10 @ add sp,r9,#0x10 is no good for thumb
1333 vst1.8 {q15}, [r8] @ return IV 1318 vst1.8 {q15}, [r8] @ return IV
1334 VFP_ABI_POP 1319 VFP_ABI_POP
1335 » ldmia» sp!, {r4,r5,r6,r7,r8,r9,r10, pc} 1320 » ldmia» sp!, {r4-r10, pc}
1336 .size bsaes_cbc_encrypt,.-bsaes_cbc_encrypt 1321 .size bsaes_cbc_encrypt,.-bsaes_cbc_encrypt
1337 1322 .extern»AES_encrypt
1338 .globl» bsaes_ctr32_encrypt_blocks 1323 .global»bsaes_ctr32_encrypt_blocks
1339 .hidden bsaes_ctr32_encrypt_blocks 1324 .hidden bsaes_ctr32_encrypt_blocks
1340 .type bsaes_ctr32_encrypt_blocks,%function 1325 .type bsaes_ctr32_encrypt_blocks,%function
1341 .align 5 1326 .align 5
1342 bsaes_ctr32_encrypt_blocks: 1327 bsaes_ctr32_encrypt_blocks:
1343 cmp r2, #8 @ use plain AES for 1328 cmp r2, #8 @ use plain AES for
1344 blo .Lctr_enc_short @ small sizes 1329 blo .Lctr_enc_short @ small sizes
1345 1330
1346 mov ip, sp 1331 mov ip, sp
1347 » stmdb» sp!, {r4,r5,r6,r7,r8,r9,r10, lr} 1332 » stmdb» sp!, {r4-r10, lr}
1348 VFP_ABI_PUSH 1333 VFP_ABI_PUSH
1349 ldr r8, [ip] @ ctr is 1st arg on the stack 1334 ldr r8, [ip] @ ctr is 1st arg on the stack
1350 sub sp, sp, #0x10 @ scratch space to carry over th e ctr 1335 sub sp, sp, #0x10 @ scratch space to carry over th e ctr
1351 mov r9, sp @ save sp 1336 mov r9, sp @ save sp
1352 1337
1353 ldr r10, [r3, #240] @ get # of rounds 1338 ldr r10, [r3, #240] @ get # of rounds
1354 #ifndef BSAES_ASM_EXTENDED_KEY 1339 #ifndef BSAES_ASM_EXTENDED_KEY
1355 @ allocate the key schedule on the stack 1340 @ allocate the key schedule on the stack
1356 sub r12, sp, r10, lsl#7 @ 128 bytes per inner round key 1341 sub r12, sp, r10, lsl#7 @ 128 bytes per inner round key
1357 add r12, #96 @ size of bit-sliced key schedul e 1342 add r12, #96 @ size of bit-sliced key schedul e
1358 1343
1359 @ populate the key schedule 1344 @ populate the key schedule
1360 mov r4, r3 @ pass key 1345 mov r4, r3 @ pass key
1361 mov r5, r10 @ pass # of rounds 1346 mov r5, r10 @ pass # of rounds
1362 mov sp, r12 @ sp is sp 1347 mov sp, r12 @ sp is sp
1363 bl _bsaes_key_convert 1348 bl _bsaes_key_convert
1364 veor q7,q7,q15 @ fix up last round key 1349 veor q7,q7,q15 @ fix up last round key
1365 vstmia r12, {q7} @ save last round key 1350 vstmia r12, {q7} @ save last round key
1366 1351
1367 vld1.8 {q0}, [r8] @ load counter 1352 vld1.8 {q0}, [r8] @ load counter
1368 #ifdef __APPLE__
1369 mov r8, #.LREVM0SR-.LM0
1370 add r8, r6, r8
1371 #else
1372 add r8, r6, #.LREVM0SR-.LM0 @ borrow r8 1353 add r8, r6, #.LREVM0SR-.LM0 @ borrow r8
1373 #endif
1374 vldmia sp, {q4} @ load round0 key 1354 vldmia sp, {q4} @ load round0 key
1375 #else 1355 #else
1376 ldr r12, [r3, #244] 1356 ldr r12, [r3, #244]
1377 eors r12, #1 1357 eors r12, #1
1378 beq 0f 1358 beq 0f
1379 1359
1380 @ populate the key schedule 1360 @ populate the key schedule
1381 str r12, [r3, #244] 1361 str r12, [r3, #244]
1382 mov r4, r3 @ pass key 1362 mov r4, r3 @ pass key
1383 mov r5, r10 @ pass # of rounds 1363 mov r5, r10 @ pass # of rounds
1384 add r12, r3, #248 @ pass key schedule 1364 add r12, r3, #248 @ pass key schedule
1385 bl _bsaes_key_convert 1365 bl _bsaes_key_convert
1386 veor q7,q7,q15 @ fix up last round key 1366 veor q7,q7,q15 @ fix up last round key
1387 vstmia r12, {q7} @ save last round key 1367 vstmia r12, {q7} @ save last round key
1388 1368
1389 .align 2 1369 .align 2
1390 » add» r12, r3, #248 1370 0:» add» r12, r3, #248
1391 vld1.8 {q0}, [r8] @ load counter 1371 vld1.8 {q0}, [r8] @ load counter
1392 adrl r8, .LREVM0SR @ borrow r8 1372 adrl r8, .LREVM0SR @ borrow r8
1393 vldmia r12, {q4} @ load round0 key 1373 vldmia r12, {q4} @ load round0 key
1394 sub sp, #0x10 @ place for adjusted round0 key 1374 sub sp, #0x10 @ place for adjusted round0 key
1395 #endif 1375 #endif
1396 1376
1397 vmov.i32 q8,#1 @ compose 1<<96 1377 vmov.i32 q8,#1 @ compose 1<<96
1398 » veor» q9,q9,q9 1378 » veor» » q9,q9,q9
1399 vrev32.8 q0,q0 1379 vrev32.8 q0,q0
1400 » vext.8» q8,q9,q8,#4 1380 » vext.8» » q8,q9,q8,#4
1401 vrev32.8 q4,q4 1381 vrev32.8 q4,q4
1402 vadd.u32 q9,q8,q8 @ compose 2<<96 1382 vadd.u32 q9,q8,q8 @ compose 2<<96
1403 vstmia sp, {q4} @ save adjusted round0 key 1383 vstmia sp, {q4} @ save adjusted round0 key
1404 b .Lctr_enc_loop 1384 b .Lctr_enc_loop
1405 1385
1406 .align 4 1386 .align 4
1407 .Lctr_enc_loop: 1387 .Lctr_enc_loop:
1408 vadd.u32 q10, q8, q9 @ compose 3<<96 1388 vadd.u32 q10, q8, q9 @ compose 3<<96
1409 vadd.u32 q1, q0, q8 @ +1 1389 vadd.u32 q1, q0, q8 @ +1
1410 vadd.u32 q2, q0, q9 @ +2 1390 vadd.u32 q2, q0, q9 @ +2
1411 vadd.u32 q3, q0, q10 @ +3 1391 vadd.u32 q3, q0, q10 @ +3
1412 vadd.u32 q4, q1, q10 1392 vadd.u32 q4, q1, q10
1413 vadd.u32 q5, q2, q10 1393 vadd.u32 q5, q2, q10
1414 vadd.u32 q6, q3, q10 1394 vadd.u32 q6, q3, q10
1415 vadd.u32 q7, q4, q10 1395 vadd.u32 q7, q4, q10
1416 vadd.u32 q10, q5, q10 @ next counter 1396 vadd.u32 q10, q5, q10 @ next counter
1417 1397
1418 @ Borrow prologue from _bsaes_encrypt8 to use the opportunity 1398 @ Borrow prologue from _bsaes_encrypt8 to use the opportunity
1419 @ to flip byte order in 32-bit counter 1399 @ to flip byte order in 32-bit counter
1420 1400
1421 » vldmia» sp, {q9}» » @ load round0 key 1401 » vldmia» » sp, {q9}» » @ load round0 key
1422 #ifndef BSAES_ASM_EXTENDED_KEY 1402 #ifndef BSAES_ASM_EXTENDED_KEY
1423 » add» r4, sp, #0x10» » @ pass next round key 1403 » add» » r4, sp, #0x10» » @ pass next round key
1424 #else 1404 #else
1425 » add» r4, r3, #264 1405 » add» » r4, r3, #264
1426 #endif 1406 #endif
1427 » vldmia» r8, {q8}» » » @ .LREVM0SR 1407 » vldmia» » r8, {q8}» » » @ .LREVM0SR
1428 » mov» r5, r10»» » @ pass rounds 1408 » mov» » r5, r10»» » @ pass rounds
1429 » vstmia» r9, {q10}» » » @ save next counter 1409 » vstmia» » r9, {q10}» » » @ save next counter
1430 #ifdef» __APPLE__ 1410 » sub» » r6, r8, #.LREVM0SR-.LSR»@ pass constants
1431 » mov» r6, #.LREVM0SR-.LSR
1432 » sub» r6, r8, r6
1433 #else
1434 » sub» r6, r8, #.LREVM0SR-.LSR»@ pass constants
1435 #endif
1436 1411
1437 » bl» _bsaes_encrypt8_alt 1412 » bl» » _bsaes_encrypt8_alt
1438 1413
1439 » subs» r2, r2, #8 1414 » subs» » r2, r2, #8
1440 » blo» .Lctr_enc_loop_done 1415 » blo» » .Lctr_enc_loop_done
1441 1416
1442 » vld1.8» {q8,q9}, [r0]!» @ load input 1417 » vld1.8» » {q8-q9}, [r0]!» @ load input
1443 » vld1.8» {q10,q11}, [r0]! 1418 » vld1.8» » {q10-q11}, [r0]!
1444 » veor» q0, q8 1419 » veor» » q0, q8
1445 » veor» q1, q9 1420 » veor» » q1, q9
1446 » vld1.8» {q12,q13}, [r0]! 1421 » vld1.8» » {q12-q13}, [r0]!
1447 » veor» q4, q10 1422 » veor» » q4, q10
1448 » veor» q6, q11 1423 » veor» » q6, q11
1449 » vld1.8» {q14,q15}, [r0]! 1424 » vld1.8» » {q14-q15}, [r0]!
1450 » veor» q3, q12 1425 » veor» » q3, q12
1451 » vst1.8» {q0,q1}, [r1]!» @ write output 1426 » vst1.8» » {q0-q1}, [r1]!» @ write output
1452 » veor» q7, q13 1427 » veor» » q7, q13
1453 » veor» q2, q14 1428 » veor» » q2, q14
1454 » vst1.8» {q4}, [r1]! 1429 » vst1.8» » {q4}, [r1]!
1455 » veor» q5, q15 1430 » veor» » q5, q15
1456 » vst1.8» {q6}, [r1]! 1431 » vst1.8» » {q6}, [r1]!
1457 vmov.i32 q8, #1 @ compose 1<<96 1432 vmov.i32 q8, #1 @ compose 1<<96
1458 » vst1.8» {q3}, [r1]! 1433 » vst1.8» » {q3}, [r1]!
1459 » veor» q9, q9, q9 1434 » veor» » q9, q9, q9
1460 » vst1.8» {q7}, [r1]! 1435 » vst1.8» » {q7}, [r1]!
1461 » vext.8» q8, q9, q8, #4 1436 » vext.8» » q8, q9, q8, #4
1462 » vst1.8» {q2}, [r1]! 1437 » vst1.8» » {q2}, [r1]!
1463 vadd.u32 q9,q8,q8 @ compose 2<<96 1438 vadd.u32 q9,q8,q8 @ compose 2<<96
1464 » vst1.8» {q5}, [r1]! 1439 » vst1.8» » {q5}, [r1]!
1465 » vldmia» r9, {q0}» » » @ load counter 1440 » vldmia» » r9, {q0}» » » @ load counter
1466 1441
1467 » bne» .Lctr_enc_loop 1442 » bne» » .Lctr_enc_loop
1468 » b» .Lctr_enc_done 1443 » b» » .Lctr_enc_done
1469 1444
1470 .align 4 1445 .align 4
1471 .Lctr_enc_loop_done: 1446 .Lctr_enc_loop_done:
1472 » add» r2, r2, #8 1447 » add» » r2, r2, #8
1473 » vld1.8» {q8}, [r0]!» @ load input 1448 » vld1.8» » {q8}, [r0]!» @ load input
1474 » veor» q0, q8 1449 » veor» » q0, q8
1475 » vst1.8» {q0}, [r1]!» @ write output 1450 » vst1.8» » {q0}, [r1]!» @ write output
1476 » cmp» r2, #2 1451 » cmp» » r2, #2
1477 » blo» .Lctr_enc_done 1452 » blo» » .Lctr_enc_done
1478 » vld1.8» {q9}, [r0]! 1453 » vld1.8» » {q9}, [r0]!
1479 » veor» q1, q9 1454 » veor» » q1, q9
1480 » vst1.8» {q1}, [r1]! 1455 » vst1.8» » {q1}, [r1]!
1481 » beq» .Lctr_enc_done 1456 » beq» » .Lctr_enc_done
1482 » vld1.8» {q10}, [r0]! 1457 » vld1.8» » {q10}, [r0]!
1483 » veor» q4, q10 1458 » veor» » q4, q10
1484 » vst1.8» {q4}, [r1]! 1459 » vst1.8» » {q4}, [r1]!
1485 » cmp» r2, #4 1460 » cmp» » r2, #4
1486 » blo» .Lctr_enc_done 1461 » blo» » .Lctr_enc_done
1487 » vld1.8» {q11}, [r0]! 1462 » vld1.8» » {q11}, [r0]!
1488 » veor» q6, q11 1463 » veor» » q6, q11
1489 » vst1.8» {q6}, [r1]! 1464 » vst1.8» » {q6}, [r1]!
1490 » beq» .Lctr_enc_done 1465 » beq» » .Lctr_enc_done
1491 » vld1.8» {q12}, [r0]! 1466 » vld1.8» » {q12}, [r0]!
1492 » veor» q3, q12 1467 » veor» » q3, q12
1493 » vst1.8» {q3}, [r1]! 1468 » vst1.8» » {q3}, [r1]!
1494 » cmp» r2, #6 1469 » cmp» » r2, #6
1495 » blo» .Lctr_enc_done 1470 » blo» » .Lctr_enc_done
1496 » vld1.8» {q13}, [r0]! 1471 » vld1.8» » {q13}, [r0]!
1497 » veor» q7, q13 1472 » veor» » q7, q13
1498 » vst1.8» {q7}, [r1]! 1473 » vst1.8» » {q7}, [r1]!
1499 » beq» .Lctr_enc_done 1474 » beq» » .Lctr_enc_done
1500 » vld1.8» {q14}, [r0] 1475 » vld1.8» » {q14}, [r0]
1501 » veor» q2, q14 1476 » veor» » q2, q14
1502 » vst1.8» {q2}, [r1]! 1477 » vst1.8» » {q2}, [r1]!
1503 1478
1504 .Lctr_enc_done: 1479 .Lctr_enc_done:
1505 vmov.i32 q0, #0 1480 vmov.i32 q0, #0
1506 vmov.i32 q1, #0 1481 vmov.i32 q1, #0
1507 #ifndef BSAES_ASM_EXTENDED_KEY 1482 #ifndef BSAES_ASM_EXTENDED_KEY
1508 .Lctr_enc_bzero:@ wipe key schedule [if any] 1483 .Lctr_enc_bzero:» » » @ wipe key schedule [if any]
1509 » vstmia» sp!, {q0,q1} 1484 » vstmia» » sp!, {q0-q1}
1510 » cmp» sp, r9 1485 » cmp» » sp, r9
1511 » bne» .Lctr_enc_bzero 1486 » bne» » .Lctr_enc_bzero
1512 #else 1487 #else
1513 » vstmia» sp, {q0,q1} 1488 » vstmia» » sp, {q0-q1}
1514 #endif 1489 #endif
1515 1490
1516 mov sp, r9 1491 mov sp, r9
1517 add sp, #0x10 @ add sp,r9,#0x10 is no good for thumb 1492 add sp, #0x10 @ add sp,r9,#0x10 is no good for thumb
1518 VFP_ABI_POP 1493 VFP_ABI_POP
1519 » ldmia» sp!, {r4,r5,r6,r7,r8,r9,r10, pc}» @ return 1494 » ldmia» sp!, {r4-r10, pc}» @ return
1520 1495
1521 .align 4 1496 .align 4
1522 .Lctr_enc_short: 1497 .Lctr_enc_short:
1523 ldr ip, [sp] @ ctr pointer is passed on stack 1498 ldr ip, [sp] @ ctr pointer is passed on stack
1524 » stmdb» sp!, {r4,r5,r6,r7,r8, lr} 1499 » stmdb» sp!, {r4-r8, lr}
1525 1500
1526 mov r4, r0 @ copy arguments 1501 mov r4, r0 @ copy arguments
1527 mov r5, r1 1502 mov r5, r1
1528 mov r6, r2 1503 mov r6, r2
1529 mov r7, r3 1504 mov r7, r3
1530 » ldr» r8, [ip, #12]» » @ load counter .LSW 1505 » ldr» r8, [ip, #12]» » @ load counter LSW
1531 vld1.8 {q1}, [ip] @ load whole counter value 1506 vld1.8 {q1}, [ip] @ load whole counter value
1532 #ifdef __ARMEL__ 1507 #ifdef __ARMEL__
1533 rev r8, r8 1508 rev r8, r8
1534 #endif 1509 #endif
1535 sub sp, sp, #0x10 1510 sub sp, sp, #0x10
1536 » vst1.8» {q1}, [sp]» » @ copy counter value 1511 » vst1.8» {q1}, [sp,:64]» @ copy counter value
1537 sub sp, sp, #0x10 1512 sub sp, sp, #0x10
1538 1513
1539 .Lctr_enc_short_loop: 1514 .Lctr_enc_short_loop:
1540 add r0, sp, #0x10 @ input counter value 1515 add r0, sp, #0x10 @ input counter value
1541 mov r1, sp @ output on the stack 1516 mov r1, sp @ output on the stack
1542 mov r2, r7 @ key 1517 mov r2, r7 @ key
1543 1518
1544 bl AES_encrypt 1519 bl AES_encrypt
1545 1520
1546 vld1.8 {q0}, [r4]! @ load input 1521 vld1.8 {q0}, [r4]! @ load input
1547 » vld1.8» {q1}, [sp]» » @ load encrypted counter 1522 » vld1.8» {q1}, [sp,:64]» @ load encrypted counter
1548 add r8, r8, #1 1523 add r8, r8, #1
1549 #ifdef __ARMEL__ 1524 #ifdef __ARMEL__
1550 rev r0, r8 1525 rev r0, r8
1551 str r0, [sp, #0x1c] @ next counter value 1526 str r0, [sp, #0x1c] @ next counter value
1552 #else 1527 #else
1553 str r8, [sp, #0x1c] @ next counter value 1528 str r8, [sp, #0x1c] @ next counter value
1554 #endif 1529 #endif
1555 veor q0,q0,q1 1530 veor q0,q0,q1
1556 vst1.8 {q0}, [r5]! @ store output 1531 vst1.8 {q0}, [r5]! @ store output
1557 subs r6, r6, #1 1532 subs r6, r6, #1
1558 bne .Lctr_enc_short_loop 1533 bne .Lctr_enc_short_loop
1559 1534
1560 vmov.i32 q0, #0 1535 vmov.i32 q0, #0
1561 vmov.i32 q1, #0 1536 vmov.i32 q1, #0
1562 » vstmia» sp!, {q0,q1} 1537 » vstmia» » sp!, {q0-q1}
1563 1538
1564 » ldmia» sp!, {r4,r5,r6,r7,r8, pc} 1539 » ldmia» sp!, {r4-r8, pc}
1565 .size bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks 1540 .size bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks
1566 .globl bsaes_xts_encrypt 1541 .globl bsaes_xts_encrypt
1567 .hidden bsaes_xts_encrypt 1542 .hidden bsaes_xts_encrypt
1568 .type bsaes_xts_encrypt,%function 1543 .type bsaes_xts_encrypt,%function
1569 .align 4 1544 .align 4
1570 bsaes_xts_encrypt: 1545 bsaes_xts_encrypt:
1571 mov ip, sp 1546 mov ip, sp
1572 » stmdb» sp!, {r4,r5,r6,r7,r8,r9,r10, lr}» » @ 0x20 1547 » stmdb» sp!, {r4-r10, lr}» » @ 0x20
1573 VFP_ABI_PUSH 1548 VFP_ABI_PUSH
1574 mov r6, sp @ future r3 1549 mov r6, sp @ future r3
1575 1550
1576 mov r7, r0 1551 mov r7, r0
1577 mov r8, r1 1552 mov r8, r1
1578 mov r9, r2 1553 mov r9, r2
1579 mov r10, r3 1554 mov r10, r3
1580 1555
1581 sub r0, sp, #0x10 @ 0x10 1556 sub r0, sp, #0x10 @ 0x10
1582 bic r0, #0xf @ align at 16 bytes 1557 bic r0, #0xf @ align at 16 bytes
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1616 1591
1617 str r12, [r10, #244] 1592 str r12, [r10, #244]
1618 mov r4, r10 @ pass key 1593 mov r4, r10 @ pass key
1619 mov r5, r1 @ pass # of rounds 1594 mov r5, r1 @ pass # of rounds
1620 add r12, r10, #248 @ pass key schedule 1595 add r12, r10, #248 @ pass key schedule
1621 bl _bsaes_key_convert 1596 bl _bsaes_key_convert
1622 veor q7, q7, q15 @ fix up last round key 1597 veor q7, q7, q15 @ fix up last round key
1623 vstmia r12, {q7} 1598 vstmia r12, {q7}
1624 1599
1625 .align 2 1600 .align 2
1626 » sub» sp, #0x90» » » @ place for tweak[9] 1601 0:» sub» sp, #0x90» » » @ place for tweak[9]
1627 #endif 1602 #endif
1628 1603
1629 vld1.8 {q8}, [r0] @ initial tweak 1604 vld1.8 {q8}, [r0] @ initial tweak
1630 adr r2, .Lxts_magic 1605 adr r2, .Lxts_magic
1631 1606
1632 subs r9, #0x80 1607 subs r9, #0x80
1633 blo .Lxts_enc_short 1608 blo .Lxts_enc_short
1634 b .Lxts_enc_loop 1609 b .Lxts_enc_loop
1635 1610
1636 .align 4 1611 .align 4
1637 .Lxts_enc_loop: 1612 .Lxts_enc_loop:
1638 » vldmia» r2, {q5}» @ load XTS magic 1613 » vldmia» » r2, {q5}» @ load XTS magic
1639 vshr.s64 q6, q8, #63 1614 vshr.s64 q6, q8, #63
1640 » mov» r0, sp 1615 » mov» » r0, sp
1641 » vand» q6, q6, q5 1616 » vand» » q6, q6, q5
1642 vadd.u64 q9, q8, q8 1617 vadd.u64 q9, q8, q8
1643 » vst1.64»{q8}, [r0,:128]! 1618 » vst1.64»» {q8}, [r0,:128]!
1644 » vswp» d13,d12 1619 » vswp» » d13,d12
1645 vshr.s64 q7, q9, #63 1620 vshr.s64 q7, q9, #63
1646 » veor» q9, q9, q6 1621 » veor» » q9, q9, q6
1647 » vand» q7, q7, q5 1622 » vand» » q7, q7, q5
1648 vadd.u64 q10, q9, q9 1623 vadd.u64 q10, q9, q9
1649 » vst1.64»{q9}, [r0,:128]! 1624 » vst1.64»» {q9}, [r0,:128]!
1650 » vswp» d15,d14 1625 » vswp» » d15,d14
1651 vshr.s64 q6, q10, #63 1626 vshr.s64 q6, q10, #63
1652 » veor» q10, q10, q7 1627 » veor» » q10, q10, q7
1653 » vand» q6, q6, q5 1628 » vand» » q6, q6, q5
1654 » vld1.8» {q0}, [r7]! 1629 » vld1.8» » {q0}, [r7]!
1655 vadd.u64 q11, q10, q10 1630 vadd.u64 q11, q10, q10
1656 » vst1.64»{q10}, [r0,:128]! 1631 » vst1.64»» {q10}, [r0,:128]!
1657 » vswp» d13,d12 1632 » vswp» » d13,d12
1658 vshr.s64 q7, q11, #63 1633 vshr.s64 q7, q11, #63
1659 » veor» q11, q11, q6 1634 » veor» » q11, q11, q6
1660 » vand» q7, q7, q5 1635 » vand» » q7, q7, q5
1661 » vld1.8» {q1}, [r7]! 1636 » vld1.8» » {q1}, [r7]!
1662 » veor» q0, q0, q8 1637 » veor» » q0, q0, q8
1663 vadd.u64 q12, q11, q11 1638 vadd.u64 q12, q11, q11
1664 » vst1.64»{q11}, [r0,:128]! 1639 » vst1.64»» {q11}, [r0,:128]!
1665 » vswp» d15,d14 1640 » vswp» » d15,d14
1666 vshr.s64 q6, q12, #63 1641 vshr.s64 q6, q12, #63
1667 » veor» q12, q12, q7 1642 » veor» » q12, q12, q7
1668 » vand» q6, q6, q5 1643 » vand» » q6, q6, q5
1669 » vld1.8» {q2}, [r7]! 1644 » vld1.8» » {q2}, [r7]!
1670 » veor» q1, q1, q9 1645 » veor» » q1, q1, q9
1671 vadd.u64 q13, q12, q12 1646 vadd.u64 q13, q12, q12
1672 » vst1.64»{q12}, [r0,:128]! 1647 » vst1.64»» {q12}, [r0,:128]!
1673 » vswp» d13,d12 1648 » vswp» » d13,d12
1674 vshr.s64 q7, q13, #63 1649 vshr.s64 q7, q13, #63
1675 » veor» q13, q13, q6 1650 » veor» » q13, q13, q6
1676 » vand» q7, q7, q5 1651 » vand» » q7, q7, q5
1677 » vld1.8» {q3}, [r7]! 1652 » vld1.8» » {q3}, [r7]!
1678 » veor» q2, q2, q10 1653 » veor» » q2, q2, q10
1679 vadd.u64 q14, q13, q13 1654 vadd.u64 q14, q13, q13
1680 » vst1.64»{q13}, [r0,:128]! 1655 » vst1.64»» {q13}, [r0,:128]!
1681 » vswp» d15,d14 1656 » vswp» » d15,d14
1682 vshr.s64 q6, q14, #63 1657 vshr.s64 q6, q14, #63
1683 » veor» q14, q14, q7 1658 » veor» » q14, q14, q7
1684 » vand» q6, q6, q5 1659 » vand» » q6, q6, q5
1685 » vld1.8» {q4}, [r7]! 1660 » vld1.8» » {q4}, [r7]!
1686 » veor» q3, q3, q11 1661 » veor» » q3, q3, q11
1687 vadd.u64 q15, q14, q14 1662 vadd.u64 q15, q14, q14
1688 » vst1.64»{q14}, [r0,:128]! 1663 » vst1.64»» {q14}, [r0,:128]!
1689 » vswp» d13,d12 1664 » vswp» » d13,d12
1690 vshr.s64 q7, q15, #63 1665 vshr.s64 q7, q15, #63
1691 » veor» q15, q15, q6 1666 » veor» » q15, q15, q6
1692 » vand» q7, q7, q5 1667 » vand» » q7, q7, q5
1693 » vld1.8» {q5}, [r7]! 1668 » vld1.8» » {q5}, [r7]!
1694 » veor» q4, q4, q12 1669 » veor» » q4, q4, q12
1695 vadd.u64 q8, q15, q15 1670 vadd.u64 q8, q15, q15
1696 » vst1.64»{q15}, [r0,:128]! 1671 » vst1.64»» {q15}, [r0,:128]!
1697 » vswp» d15,d14 1672 » vswp» » d15,d14
1698 » veor» q8, q8, q7 1673 » veor» » q8, q8, q7
1699 » vst1.64»{q8}, [r0,:128]»» @ next round tweak 1674 » vst1.64»» {q8}, [r0,:128]»» @ next round tweak
1700 1675
1701 » vld1.8» {q6,q7}, [r7]! 1676 » vld1.8» » {q6-q7}, [r7]!
1702 » veor» q5, q5, q13 1677 » veor» » q5, q5, q13
1703 #ifndef»BSAES_ASM_EXTENDED_KEY 1678 #ifndef»BSAES_ASM_EXTENDED_KEY
1704 » add» r4, sp, #0x90» » » @ pass key schedule 1679 » add» » r4, sp, #0x90» » » @ pass key schedule
1705 #else 1680 #else
1706 » add» r4, r10, #248» » » @ pass key schedule 1681 » add» » r4, r10, #248» » » @ pass key schedule
1707 #endif 1682 #endif
1708 » veor» q6, q6, q14 1683 » veor» » q6, q6, q14
1709 » mov» r5, r1» » » @ pass rounds 1684 » mov» » r5, r1» » » @ pass rounds
1710 » veor» q7, q7, q15 1685 » veor» » q7, q7, q15
1711 » mov» r0, sp 1686 » mov» » r0, sp
1712 1687
1713 » bl» _bsaes_encrypt8 1688 » bl» » _bsaes_encrypt8
1714 1689
1715 » vld1.64»{q8,q9}, [r0,:128]! 1690 » vld1.64»» {q8-q9}, [r0,:128]!
1716 » vld1.64»{q10,q11}, [r0,:128]! 1691 » vld1.64»» {q10-q11}, [r0,:128]!
1717 » veor» q0, q0, q8 1692 » veor» » q0, q0, q8
1718 » vld1.64»{q12,q13}, [r0,:128]! 1693 » vld1.64»» {q12-q13}, [r0,:128]!
1719 » veor» q1, q1, q9 1694 » veor» » q1, q1, q9
1720 » veor» q8, q4, q10 1695 » veor» » q8, q4, q10
1721 » vst1.8» {q0,q1}, [r8]! 1696 » vst1.8» » {q0-q1}, [r8]!
1722 » veor» q9, q6, q11 1697 » veor» » q9, q6, q11
1723 » vld1.64»{q14,q15}, [r0,:128]! 1698 » vld1.64»» {q14-q15}, [r0,:128]!
1724 » veor» q10, q3, q12 1699 » veor» » q10, q3, q12
1725 » vst1.8» {q8,q9}, [r8]! 1700 » vst1.8» » {q8-q9}, [r8]!
1726 » veor» q11, q7, q13 1701 » veor» » q11, q7, q13
1727 » veor» q12, q2, q14 1702 » veor» » q12, q2, q14
1728 » vst1.8» {q10,q11}, [r8]! 1703 » vst1.8» » {q10-q11}, [r8]!
1729 » veor» q13, q5, q15 1704 » veor» » q13, q5, q15
1730 » vst1.8» {q12,q13}, [r8]! 1705 » vst1.8» » {q12-q13}, [r8]!
1731 1706
1732 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 1707 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
1733 1708
1734 » subs» r9, #0x80 1709 » subs» » r9, #0x80
1735 » bpl» .Lxts_enc_loop 1710 » bpl» » .Lxts_enc_loop
1736 1711
1737 .Lxts_enc_short: 1712 .Lxts_enc_short:
1738 » adds» r9, #0x70 1713 » adds» » r9, #0x70
1739 » bmi» .Lxts_enc_done 1714 » bmi» » .Lxts_enc_done
1740 1715
1741 » vldmia» r2, {q5}» @ load XTS magic 1716 » vldmia» » r2, {q5}» @ load XTS magic
1742 vshr.s64 q7, q8, #63 1717 vshr.s64 q7, q8, #63
1743 » mov» r0, sp 1718 » mov» » r0, sp
1744 » vand» q7, q7, q5 1719 » vand» » q7, q7, q5
1745 vadd.u64 q9, q8, q8 1720 vadd.u64 q9, q8, q8
1746 » vst1.64»{q8}, [r0,:128]! 1721 » vst1.64»» {q8}, [r0,:128]!
1747 » vswp» d15,d14 1722 » vswp» » d15,d14
1748 vshr.s64 q6, q9, #63 1723 vshr.s64 q6, q9, #63
1749 » veor» q9, q9, q7 1724 » veor» » q9, q9, q7
1750 » vand» q6, q6, q5 1725 » vand» » q6, q6, q5
1751 vadd.u64 q10, q9, q9 1726 vadd.u64 q10, q9, q9
1752 » vst1.64»{q9}, [r0,:128]! 1727 » vst1.64»» {q9}, [r0,:128]!
1753 » vswp» d13,d12 1728 » vswp» » d13,d12
1754 vshr.s64 q7, q10, #63 1729 vshr.s64 q7, q10, #63
1755 » veor» q10, q10, q6 1730 » veor» » q10, q10, q6
1756 » vand» q7, q7, q5 1731 » vand» » q7, q7, q5
1757 » vld1.8» {q0}, [r7]! 1732 » vld1.8» » {q0}, [r7]!
1758 » subs» r9, #0x10 1733 » subs» » r9, #0x10
1759 » bmi» .Lxts_enc_1 1734 » bmi» » .Lxts_enc_1
1760 vadd.u64 q11, q10, q10 1735 vadd.u64 q11, q10, q10
1761 » vst1.64»{q10}, [r0,:128]! 1736 » vst1.64»» {q10}, [r0,:128]!
1762 » vswp» d15,d14 1737 » vswp» » d15,d14
1763 vshr.s64 q6, q11, #63 1738 vshr.s64 q6, q11, #63
1764 » veor» q11, q11, q7 1739 » veor» » q11, q11, q7
1765 » vand» q6, q6, q5 1740 » vand» » q6, q6, q5
1766 » vld1.8» {q1}, [r7]! 1741 » vld1.8» » {q1}, [r7]!
1767 » subs» r9, #0x10 1742 » subs» » r9, #0x10
1768 » bmi» .Lxts_enc_2 1743 » bmi» » .Lxts_enc_2
1769 » veor» q0, q0, q8 1744 » veor» » q0, q0, q8
1770 vadd.u64 q12, q11, q11 1745 vadd.u64 q12, q11, q11
1771 » vst1.64»{q11}, [r0,:128]! 1746 » vst1.64»» {q11}, [r0,:128]!
1772 » vswp» d13,d12 1747 » vswp» » d13,d12
1773 vshr.s64 q7, q12, #63 1748 vshr.s64 q7, q12, #63
1774 » veor» q12, q12, q6 1749 » veor» » q12, q12, q6
1775 » vand» q7, q7, q5 1750 » vand» » q7, q7, q5
1776 » vld1.8» {q2}, [r7]! 1751 » vld1.8» » {q2}, [r7]!
1777 » subs» r9, #0x10 1752 » subs» » r9, #0x10
1778 » bmi» .Lxts_enc_3 1753 » bmi» » .Lxts_enc_3
1779 » veor» q1, q1, q9 1754 » veor» » q1, q1, q9
1780 vadd.u64 q13, q12, q12 1755 vadd.u64 q13, q12, q12
1781 » vst1.64»{q12}, [r0,:128]! 1756 » vst1.64»» {q12}, [r0,:128]!
1782 » vswp» d15,d14 1757 » vswp» » d15,d14
1783 vshr.s64 q6, q13, #63 1758 vshr.s64 q6, q13, #63
1784 » veor» q13, q13, q7 1759 » veor» » q13, q13, q7
1785 » vand» q6, q6, q5 1760 » vand» » q6, q6, q5
1786 » vld1.8» {q3}, [r7]! 1761 » vld1.8» » {q3}, [r7]!
1787 » subs» r9, #0x10 1762 » subs» » r9, #0x10
1788 » bmi» .Lxts_enc_4 1763 » bmi» » .Lxts_enc_4
1789 » veor» q2, q2, q10 1764 » veor» » q2, q2, q10
1790 vadd.u64 q14, q13, q13 1765 vadd.u64 q14, q13, q13
1791 » vst1.64»{q13}, [r0,:128]! 1766 » vst1.64»» {q13}, [r0,:128]!
1792 » vswp» d13,d12 1767 » vswp» » d13,d12
1793 vshr.s64 q7, q14, #63 1768 vshr.s64 q7, q14, #63
1794 » veor» q14, q14, q6 1769 » veor» » q14, q14, q6
1795 » vand» q7, q7, q5 1770 » vand» » q7, q7, q5
1796 » vld1.8» {q4}, [r7]! 1771 » vld1.8» » {q4}, [r7]!
1797 » subs» r9, #0x10 1772 » subs» » r9, #0x10
1798 » bmi» .Lxts_enc_5 1773 » bmi» » .Lxts_enc_5
1799 » veor» q3, q3, q11 1774 » veor» » q3, q3, q11
1800 vadd.u64 q15, q14, q14 1775 vadd.u64 q15, q14, q14
1801 » vst1.64»{q14}, [r0,:128]! 1776 » vst1.64»» {q14}, [r0,:128]!
1802 » vswp» d15,d14 1777 » vswp» » d15,d14
1803 vshr.s64 q6, q15, #63 1778 vshr.s64 q6, q15, #63
1804 » veor» q15, q15, q7 1779 » veor» » q15, q15, q7
1805 » vand» q6, q6, q5 1780 » vand» » q6, q6, q5
1806 » vld1.8» {q5}, [r7]! 1781 » vld1.8» » {q5}, [r7]!
1807 » subs» r9, #0x10 1782 » subs» » r9, #0x10
1808 » bmi» .Lxts_enc_6 1783 » bmi» » .Lxts_enc_6
1809 » veor» q4, q4, q12 1784 » veor» » q4, q4, q12
1810 » sub» r9, #0x10 1785 » sub» » r9, #0x10
1811 » vst1.64»{q15}, [r0,:128]» » @ next round tweak 1786 » vst1.64»» {q15}, [r0,:128]» » @ next round tweak
1812 1787
1813 » vld1.8» {q6}, [r7]! 1788 » vld1.8» » {q6}, [r7]!
1814 » veor» q5, q5, q13 1789 » veor» » q5, q5, q13
1815 #ifndef»BSAES_ASM_EXTENDED_KEY 1790 #ifndef»BSAES_ASM_EXTENDED_KEY
1816 » add» r4, sp, #0x90» » » @ pass key schedule 1791 » add» » r4, sp, #0x90» » » @ pass key schedule
1817 #else 1792 #else
1818 » add» r4, r10, #248» » » @ pass key schedule 1793 » add» » r4, r10, #248» » » @ pass key schedule
1819 #endif 1794 #endif
1820 » veor» q6, q6, q14 1795 » veor» » q6, q6, q14
1821 » mov» r5, r1» » » @ pass rounds 1796 » mov» » r5, r1» » » @ pass rounds
1822 » mov» r0, sp 1797 » mov» » r0, sp
1823 1798
1824 » bl» _bsaes_encrypt8 1799 » bl» » _bsaes_encrypt8
1825 1800
1826 » vld1.64»{q8,q9}, [r0,:128]! 1801 » vld1.64»» {q8-q9}, [r0,:128]!
1827 » vld1.64»{q10,q11}, [r0,:128]! 1802 » vld1.64»» {q10-q11}, [r0,:128]!
1828 » veor» q0, q0, q8 1803 » veor» » q0, q0, q8
1829 » vld1.64»{q12,q13}, [r0,:128]! 1804 » vld1.64»» {q12-q13}, [r0,:128]!
1830 » veor» q1, q1, q9 1805 » veor» » q1, q1, q9
1831 » veor» q8, q4, q10 1806 » veor» » q8, q4, q10
1832 » vst1.8» {q0,q1}, [r8]! 1807 » vst1.8» » {q0-q1}, [r8]!
1833 » veor» q9, q6, q11 1808 » veor» » q9, q6, q11
1834 » vld1.64»{q14}, [r0,:128]! 1809 » vld1.64»» {q14}, [r0,:128]!
1835 » veor» q10, q3, q12 1810 » veor» » q10, q3, q12
1836 » vst1.8» {q8,q9}, [r8]! 1811 » vst1.8» » {q8-q9}, [r8]!
1837 » veor» q11, q7, q13 1812 » veor» » q11, q7, q13
1838 » veor» q12, q2, q14 1813 » veor» » q12, q2, q14
1839 » vst1.8» {q10,q11}, [r8]! 1814 » vst1.8» » {q10-q11}, [r8]!
1840 » vst1.8» {q12}, [r8]! 1815 » vst1.8» » {q12}, [r8]!
1841 1816
1842 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 1817 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
1843 » b» .Lxts_enc_done 1818 » b» » .Lxts_enc_done
1844 .align 4 1819 .align 4
1845 .Lxts_enc_6: 1820 .Lxts_enc_6:
1846 » vst1.64»{q14}, [r0,:128]» » @ next round tweak 1821 » vst1.64»» {q14}, [r0,:128]» » @ next round tweak
1847 1822
1848 » veor» q4, q4, q12 1823 » veor» » q4, q4, q12
1849 #ifndef»BSAES_ASM_EXTENDED_KEY 1824 #ifndef»BSAES_ASM_EXTENDED_KEY
1850 » add» r4, sp, #0x90» » » @ pass key schedule 1825 » add» » r4, sp, #0x90» » » @ pass key schedule
1851 #else 1826 #else
1852 » add» r4, r10, #248» » » @ pass key schedule 1827 » add» » r4, r10, #248» » » @ pass key schedule
1853 #endif 1828 #endif
1854 » veor» q5, q5, q13 1829 » veor» » q5, q5, q13
1855 » mov» r5, r1» » » @ pass rounds 1830 » mov» » r5, r1» » » @ pass rounds
1856 » mov» r0, sp 1831 » mov» » r0, sp
1857 1832
1858 » bl» _bsaes_encrypt8 1833 » bl» » _bsaes_encrypt8
1859 1834
1860 » vld1.64»{q8,q9}, [r0,:128]! 1835 » vld1.64»» {q8-q9}, [r0,:128]!
1861 » vld1.64»{q10,q11}, [r0,:128]! 1836 » vld1.64»» {q10-q11}, [r0,:128]!
1862 » veor» q0, q0, q8 1837 » veor» » q0, q0, q8
1863 » vld1.64»{q12,q13}, [r0,:128]! 1838 » vld1.64»» {q12-q13}, [r0,:128]!
1864 » veor» q1, q1, q9 1839 » veor» » q1, q1, q9
1865 » veor» q8, q4, q10 1840 » veor» » q8, q4, q10
1866 » vst1.8» {q0,q1}, [r8]! 1841 » vst1.8» » {q0-q1}, [r8]!
1867 » veor» q9, q6, q11 1842 » veor» » q9, q6, q11
1868 » veor» q10, q3, q12 1843 » veor» » q10, q3, q12
1869 » vst1.8» {q8,q9}, [r8]! 1844 » vst1.8» » {q8-q9}, [r8]!
1870 » veor» q11, q7, q13 1845 » veor» » q11, q7, q13
1871 » vst1.8» {q10,q11}, [r8]! 1846 » vst1.8» » {q10-q11}, [r8]!
1872 1847
1873 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 1848 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
1874 » b» .Lxts_enc_done 1849 » b» » .Lxts_enc_done
1875 1850
1876 @ put this in range for both ARM and Thumb mode adr instructions 1851 @ put this in range for both ARM and Thumb mode adr instructions
1877 .align 5 1852 .align 5
1878 .Lxts_magic: 1853 .Lxts_magic:
1879 .quad» 1, 0x87 1854 » .quad» 1, 0x87
1880 1855
1881 .align 5 1856 .align 5
1882 .Lxts_enc_5: 1857 .Lxts_enc_5:
1883 » vst1.64»{q13}, [r0,:128]» » @ next round tweak 1858 » vst1.64»» {q13}, [r0,:128]» » @ next round tweak
1884 1859
1885 » veor» q3, q3, q11 1860 » veor» » q3, q3, q11
1886 #ifndef»BSAES_ASM_EXTENDED_KEY 1861 #ifndef»BSAES_ASM_EXTENDED_KEY
1887 » add» r4, sp, #0x90» » » @ pass key schedule 1862 » add» » r4, sp, #0x90» » » @ pass key schedule
1888 #else 1863 #else
1889 » add» r4, r10, #248» » » @ pass key schedule 1864 » add» » r4, r10, #248» » » @ pass key schedule
1890 #endif 1865 #endif
1891 » veor» q4, q4, q12 1866 » veor» » q4, q4, q12
1892 » mov» r5, r1» » » @ pass rounds 1867 » mov» » r5, r1» » » @ pass rounds
1893 » mov» r0, sp 1868 » mov» » r0, sp
1894 1869
1895 » bl» _bsaes_encrypt8 1870 » bl» » _bsaes_encrypt8
1896 1871
1897 » vld1.64»{q8,q9}, [r0,:128]! 1872 » vld1.64»» {q8-q9}, [r0,:128]!
1898 » vld1.64»{q10,q11}, [r0,:128]! 1873 » vld1.64»» {q10-q11}, [r0,:128]!
1899 » veor» q0, q0, q8 1874 » veor» » q0, q0, q8
1900 » vld1.64»{q12}, [r0,:128]! 1875 » vld1.64»» {q12}, [r0,:128]!
1901 » veor» q1, q1, q9 1876 » veor» » q1, q1, q9
1902 » veor» q8, q4, q10 1877 » veor» » q8, q4, q10
1903 » vst1.8» {q0,q1}, [r8]! 1878 » vst1.8» » {q0-q1}, [r8]!
1904 » veor» q9, q6, q11 1879 » veor» » q9, q6, q11
1905 » veor» q10, q3, q12 1880 » veor» » q10, q3, q12
1906 » vst1.8» {q8,q9}, [r8]! 1881 » vst1.8» » {q8-q9}, [r8]!
1907 » vst1.8» {q10}, [r8]! 1882 » vst1.8» » {q10}, [r8]!
1908 1883
1909 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 1884 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
1910 » b» .Lxts_enc_done 1885 » b» » .Lxts_enc_done
1911 .align 4 1886 .align 4
1912 .Lxts_enc_4: 1887 .Lxts_enc_4:
1913 » vst1.64»{q12}, [r0,:128]» » @ next round tweak 1888 » vst1.64»» {q12}, [r0,:128]» » @ next round tweak
1914 1889
1915 » veor» q2, q2, q10 1890 » veor» » q2, q2, q10
1916 #ifndef»BSAES_ASM_EXTENDED_KEY 1891 #ifndef»BSAES_ASM_EXTENDED_KEY
1917 » add» r4, sp, #0x90» » » @ pass key schedule 1892 » add» » r4, sp, #0x90» » » @ pass key schedule
1918 #else 1893 #else
1919 » add» r4, r10, #248» » » @ pass key schedule 1894 » add» » r4, r10, #248» » » @ pass key schedule
1920 #endif 1895 #endif
1921 » veor» q3, q3, q11 1896 » veor» » q3, q3, q11
1922 » mov» r5, r1» » » @ pass rounds 1897 » mov» » r5, r1» » » @ pass rounds
1923 » mov» r0, sp 1898 » mov» » r0, sp
1924 1899
1925 » bl» _bsaes_encrypt8 1900 » bl» » _bsaes_encrypt8
1926 1901
1927 » vld1.64»{q8,q9}, [r0,:128]! 1902 » vld1.64»» {q8-q9}, [r0,:128]!
1928 » vld1.64»{q10,q11}, [r0,:128]! 1903 » vld1.64»» {q10-q11}, [r0,:128]!
1929 » veor» q0, q0, q8 1904 » veor» » q0, q0, q8
1930 » veor» q1, q1, q9 1905 » veor» » q1, q1, q9
1931 » veor» q8, q4, q10 1906 » veor» » q8, q4, q10
1932 » vst1.8» {q0,q1}, [r8]! 1907 » vst1.8» » {q0-q1}, [r8]!
1933 » veor» q9, q6, q11 1908 » veor» » q9, q6, q11
1934 » vst1.8» {q8,q9}, [r8]! 1909 » vst1.8» » {q8-q9}, [r8]!
1935 1910
1936 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 1911 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
1937 » b» .Lxts_enc_done 1912 » b» » .Lxts_enc_done
1938 .align 4 1913 .align 4
1939 .Lxts_enc_3: 1914 .Lxts_enc_3:
1940 » vst1.64»{q11}, [r0,:128]» » @ next round tweak 1915 » vst1.64»» {q11}, [r0,:128]» » @ next round tweak
1941 1916
1942 » veor» q1, q1, q9 1917 » veor» » q1, q1, q9
1943 #ifndef»BSAES_ASM_EXTENDED_KEY 1918 #ifndef»BSAES_ASM_EXTENDED_KEY
1944 » add» r4, sp, #0x90» » » @ pass key schedule 1919 » add» » r4, sp, #0x90» » » @ pass key schedule
1945 #else 1920 #else
1946 » add» r4, r10, #248» » » @ pass key schedule 1921 » add» » r4, r10, #248» » » @ pass key schedule
1947 #endif 1922 #endif
1948 » veor» q2, q2, q10 1923 » veor» » q2, q2, q10
1949 » mov» r5, r1» » » @ pass rounds 1924 » mov» » r5, r1» » » @ pass rounds
1950 » mov» r0, sp 1925 » mov» » r0, sp
1951 1926
1952 » bl» _bsaes_encrypt8 1927 » bl» » _bsaes_encrypt8
1953 1928
1954 » vld1.64»{q8,q9}, [r0,:128]! 1929 » vld1.64»» {q8-q9}, [r0,:128]!
1955 » vld1.64»{q10}, [r0,:128]! 1930 » vld1.64»» {q10}, [r0,:128]!
1956 » veor» q0, q0, q8 1931 » veor» » q0, q0, q8
1957 » veor» q1, q1, q9 1932 » veor» » q1, q1, q9
1958 » veor» q8, q4, q10 1933 » veor» » q8, q4, q10
1959 » vst1.8» {q0,q1}, [r8]! 1934 » vst1.8» » {q0-q1}, [r8]!
1960 » vst1.8» {q8}, [r8]! 1935 » vst1.8» » {q8}, [r8]!
1961 1936
1962 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 1937 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
1963 » b» .Lxts_enc_done 1938 » b» » .Lxts_enc_done
1964 .align 4 1939 .align 4
1965 .Lxts_enc_2: 1940 .Lxts_enc_2:
1966 » vst1.64»{q10}, [r0,:128]» » @ next round tweak 1941 » vst1.64»» {q10}, [r0,:128]» » @ next round tweak
1967 1942
1968 » veor» q0, q0, q8 1943 » veor» » q0, q0, q8
1969 #ifndef»BSAES_ASM_EXTENDED_KEY 1944 #ifndef»BSAES_ASM_EXTENDED_KEY
1970 » add» r4, sp, #0x90» » » @ pass key schedule 1945 » add» » r4, sp, #0x90» » » @ pass key schedule
1971 #else 1946 #else
1972 » add» r4, r10, #248» » » @ pass key schedule 1947 » add» » r4, r10, #248» » » @ pass key schedule
1973 #endif 1948 #endif
1974 » veor» q1, q1, q9 1949 » veor» » q1, q1, q9
1975 » mov» r5, r1» » » @ pass rounds 1950 » mov» » r5, r1» » » @ pass rounds
1976 » mov» r0, sp 1951 » mov» » r0, sp
1977 1952
1978 » bl» _bsaes_encrypt8 1953 » bl» » _bsaes_encrypt8
1979 1954
1980 » vld1.64»{q8,q9}, [r0,:128]! 1955 » vld1.64»» {q8-q9}, [r0,:128]!
1981 » veor» q0, q0, q8 1956 » veor» » q0, q0, q8
1982 » veor» q1, q1, q9 1957 » veor» » q1, q1, q9
1983 » vst1.8» {q0,q1}, [r8]! 1958 » vst1.8» » {q0-q1}, [r8]!
1984 1959
1985 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 1960 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
1986 » b» .Lxts_enc_done 1961 » b» » .Lxts_enc_done
1987 .align 4 1962 .align 4
1988 .Lxts_enc_1: 1963 .Lxts_enc_1:
1989 » mov» r0, sp 1964 » mov» » r0, sp
1990 » veor» q0, q8 1965 » veor» » q0, q8
1991 » mov» r1, sp 1966 » mov» » r1, sp
1992 » vst1.8» {q0}, [sp,:128] 1967 » vst1.8» » {q0}, [sp,:128]
1993 » mov» r2, r10 1968 » mov» » r2, r10
1994 » mov» r4, r3» » » » @ preserve fp 1969 » mov» » r4, r3» » » » @ preserve fp
1995 1970
1996 » bl» AES_encrypt 1971 » bl» » AES_encrypt
1997 1972
1998 » vld1.8» {q0}, [sp,:128] 1973 » vld1.8» » {q0}, [sp,:128]
1999 » veor» q0, q0, q8 1974 » veor» » q0, q0, q8
2000 » vst1.8» {q0}, [r8]! 1975 » vst1.8» » {q0}, [r8]!
2001 » mov» r3, r4 1976 » mov» » r3, r4
2002 1977
2003 » vmov» q8, q9» » @ next round tweak 1978 » vmov» » q8, q9» » @ next round tweak
2004 1979
2005 .Lxts_enc_done: 1980 .Lxts_enc_done:
2006 #ifndef XTS_CHAIN_TWEAK 1981 #ifndef XTS_CHAIN_TWEAK
2007 » adds» r9, #0x10 1982 » adds» » r9, #0x10
2008 » beq» .Lxts_enc_ret 1983 » beq» » .Lxts_enc_ret
2009 » sub» r6, r8, #0x10 1984 » sub» » r6, r8, #0x10
2010 1985
2011 .Lxts_enc_steal: 1986 .Lxts_enc_steal:
2012 » ldrb» r0, [r7], #1 1987 » ldrb» » r0, [r7], #1
2013 » ldrb» r1, [r8, #-0x10] 1988 » ldrb» » r1, [r8, #-0x10]
2014 » strb» r0, [r8, #-0x10] 1989 » strb» » r0, [r8, #-0x10]
2015 » strb» r1, [r8], #1 1990 » strb» » r1, [r8], #1
2016 1991
2017 » subs» r9, #1 1992 » subs» » r9, #1
2018 » bhi» .Lxts_enc_steal 1993 » bhi» » .Lxts_enc_steal
2019 1994
2020 » vld1.8» {q0}, [r6] 1995 » vld1.8» » {q0}, [r6]
2021 » mov» r0, sp 1996 » mov» » r0, sp
2022 » veor» q0, q0, q8 1997 » veor» » q0, q0, q8
2023 » mov» r1, sp 1998 » mov» » r1, sp
2024 » vst1.8» {q0}, [sp,:128] 1999 » vst1.8» » {q0}, [sp,:128]
2025 » mov» r2, r10 2000 » mov» » r2, r10
2026 » mov» r4, r3» » » @ preserve fp 2001 » mov» » r4, r3» » » @ preserve fp
2027 2002
2028 » bl» AES_encrypt 2003 » bl» » AES_encrypt
2029 2004
2030 » vld1.8» {q0}, [sp,:128] 2005 » vld1.8» » {q0}, [sp,:128]
2031 » veor» q0, q0, q8 2006 » veor» » q0, q0, q8
2032 » vst1.8» {q0}, [r6] 2007 » vst1.8» » {q0}, [r6]
2033 » mov» r3, r4 2008 » mov» » r3, r4
2034 #endif 2009 #endif
2035 2010
2036 .Lxts_enc_ret: 2011 .Lxts_enc_ret:
2037 » bic» r0, r3, #0xf 2012 » bic» » r0, r3, #0xf
2038 vmov.i32 q0, #0 2013 vmov.i32 q0, #0
2039 vmov.i32 q1, #0 2014 vmov.i32 q1, #0
2040 #ifdef XTS_CHAIN_TWEAK 2015 #ifdef XTS_CHAIN_TWEAK
2041 » ldr» r1, [r3, #0x20+VFP_ABI_FRAME]» @ chain tweak 2016 » ldr» » r1, [r3, #0x20+VFP_ABI_FRAME]» @ chain tweak
2042 #endif 2017 #endif
2043 .Lxts_enc_bzero:@ wipe key schedule [if any] 2018 .Lxts_enc_bzero:» » » » @ wipe key schedule [if any]
2044 » vstmia» sp!, {q0,q1} 2019 » vstmia» » sp!, {q0-q1}
2045 » cmp» sp, r0 2020 » cmp» » sp, r0
2046 » bne» .Lxts_enc_bzero 2021 » bne» » .Lxts_enc_bzero
2047 2022
2048 » mov» sp, r3 2023 » mov» » sp, r3
2049 #ifdef XTS_CHAIN_TWEAK 2024 #ifdef XTS_CHAIN_TWEAK
2050 » vst1.8» {q8}, [r1] 2025 » vst1.8» » {q8}, [r1]
2051 #endif 2026 #endif
2052 VFP_ABI_POP 2027 VFP_ABI_POP
2053 » ldmia» sp!, {r4,r5,r6,r7,r8,r9,r10, pc}» @ return 2028 » ldmia» » sp!, {r4-r10, pc}» @ return
2054 2029
2055 .size bsaes_xts_encrypt,.-bsaes_xts_encrypt 2030 .size bsaes_xts_encrypt,.-bsaes_xts_encrypt
2056 2031
2057 .globl bsaes_xts_decrypt 2032 .globl bsaes_xts_decrypt
2058 .hidden bsaes_xts_decrypt 2033 .hidden bsaes_xts_decrypt
2059 .type bsaes_xts_decrypt,%function 2034 .type bsaes_xts_decrypt,%function
2060 .align 4 2035 .align 4
2061 bsaes_xts_decrypt: 2036 bsaes_xts_decrypt:
2062 mov ip, sp 2037 mov ip, sp
2063 » stmdb» sp!, {r4,r5,r6,r7,r8,r9,r10, lr}» » @ 0x20 2038 » stmdb» sp!, {r4-r10, lr}» » @ 0x20
2064 VFP_ABI_PUSH 2039 VFP_ABI_PUSH
2065 mov r6, sp @ future r3 2040 mov r6, sp @ future r3
2066 2041
2067 mov r7, r0 2042 mov r7, r0
2068 mov r8, r1 2043 mov r8, r1
2069 mov r9, r2 2044 mov r9, r2
2070 mov r10, r3 2045 mov r10, r3
2071 2046
2072 sub r0, sp, #0x10 @ 0x10 2047 sub r0, sp, #0x10 @ 0x10
2073 bic r0, #0xf @ align at 16 bytes 2048 bic r0, #0xf @ align at 16 bytes
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2113 mov r5, r1 @ pass # of rounds 2088 mov r5, r1 @ pass # of rounds
2114 add r12, r10, #248 @ pass key schedule 2089 add r12, r10, #248 @ pass key schedule
2115 bl _bsaes_key_convert 2090 bl _bsaes_key_convert
2116 add r4, r10, #248 2091 add r4, r10, #248
2117 vldmia r4, {q6} 2092 vldmia r4, {q6}
2118 vstmia r12, {q15} @ save last round key 2093 vstmia r12, {q15} @ save last round key
2119 veor q7, q7, q6 @ fix up round 0 key 2094 veor q7, q7, q6 @ fix up round 0 key
2120 vstmia r4, {q7} 2095 vstmia r4, {q7}
2121 2096
2122 .align 2 2097 .align 2
2123 » sub» sp, #0x90» » » @ place for tweak[9] 2098 0:» sub» sp, #0x90» » » @ place for tweak[9]
2124 #endif 2099 #endif
2125 vld1.8 {q8}, [r0] @ initial tweak 2100 vld1.8 {q8}, [r0] @ initial tweak
2126 adr r2, .Lxts_magic 2101 adr r2, .Lxts_magic
2127 2102
2128 #ifndef XTS_CHAIN_TWEAK
2129 tst r9, #0xf @ if not multiple of 16 2103 tst r9, #0xf @ if not multiple of 16
2130 it ne @ Thumb2 thing, sanity check in ARM 2104 it ne @ Thumb2 thing, sanity check in ARM
2131 subne r9, #0x10 @ subtract another 16 bytes 2105 subne r9, #0x10 @ subtract another 16 bytes
2132 #endif
2133 subs r9, #0x80 2106 subs r9, #0x80
2134 2107
2135 blo .Lxts_dec_short 2108 blo .Lxts_dec_short
2136 b .Lxts_dec_loop 2109 b .Lxts_dec_loop
2137 2110
2138 .align 4 2111 .align 4
2139 .Lxts_dec_loop: 2112 .Lxts_dec_loop:
2140 » vldmia» r2, {q5}» @ load XTS magic 2113 » vldmia» » r2, {q5}» @ load XTS magic
2141 vshr.s64 q6, q8, #63 2114 vshr.s64 q6, q8, #63
2142 » mov» r0, sp 2115 » mov» » r0, sp
2143 » vand» q6, q6, q5 2116 » vand» » q6, q6, q5
2144 vadd.u64 q9, q8, q8 2117 vadd.u64 q9, q8, q8
2145 » vst1.64»{q8}, [r0,:128]! 2118 » vst1.64»» {q8}, [r0,:128]!
2146 » vswp» d13,d12 2119 » vswp» » d13,d12
2147 vshr.s64 q7, q9, #63 2120 vshr.s64 q7, q9, #63
2148 » veor» q9, q9, q6 2121 » veor» » q9, q9, q6
2149 » vand» q7, q7, q5 2122 » vand» » q7, q7, q5
2150 vadd.u64 q10, q9, q9 2123 vadd.u64 q10, q9, q9
2151 » vst1.64»{q9}, [r0,:128]! 2124 » vst1.64»» {q9}, [r0,:128]!
2152 » vswp» d15,d14 2125 » vswp» » d15,d14
2153 vshr.s64 q6, q10, #63 2126 vshr.s64 q6, q10, #63
2154 » veor» q10, q10, q7 2127 » veor» » q10, q10, q7
2155 » vand» q6, q6, q5 2128 » vand» » q6, q6, q5
2156 » vld1.8» {q0}, [r7]! 2129 » vld1.8» » {q0}, [r7]!
2157 vadd.u64 q11, q10, q10 2130 vadd.u64 q11, q10, q10
2158 » vst1.64»{q10}, [r0,:128]! 2131 » vst1.64»» {q10}, [r0,:128]!
2159 » vswp» d13,d12 2132 » vswp» » d13,d12
2160 vshr.s64 q7, q11, #63 2133 vshr.s64 q7, q11, #63
2161 » veor» q11, q11, q6 2134 » veor» » q11, q11, q6
2162 » vand» q7, q7, q5 2135 » vand» » q7, q7, q5
2163 » vld1.8» {q1}, [r7]! 2136 » vld1.8» » {q1}, [r7]!
2164 » veor» q0, q0, q8 2137 » veor» » q0, q0, q8
2165 vadd.u64 q12, q11, q11 2138 vadd.u64 q12, q11, q11
2166 » vst1.64»{q11}, [r0,:128]! 2139 » vst1.64»» {q11}, [r0,:128]!
2167 » vswp» d15,d14 2140 » vswp» » d15,d14
2168 vshr.s64 q6, q12, #63 2141 vshr.s64 q6, q12, #63
2169 » veor» q12, q12, q7 2142 » veor» » q12, q12, q7
2170 » vand» q6, q6, q5 2143 » vand» » q6, q6, q5
2171 » vld1.8» {q2}, [r7]! 2144 » vld1.8» » {q2}, [r7]!
2172 » veor» q1, q1, q9 2145 » veor» » q1, q1, q9
2173 vadd.u64 q13, q12, q12 2146 vadd.u64 q13, q12, q12
2174 » vst1.64»{q12}, [r0,:128]! 2147 » vst1.64»» {q12}, [r0,:128]!
2175 » vswp» d13,d12 2148 » vswp» » d13,d12
2176 vshr.s64 q7, q13, #63 2149 vshr.s64 q7, q13, #63
2177 » veor» q13, q13, q6 2150 » veor» » q13, q13, q6
2178 » vand» q7, q7, q5 2151 » vand» » q7, q7, q5
2179 » vld1.8» {q3}, [r7]! 2152 » vld1.8» » {q3}, [r7]!
2180 » veor» q2, q2, q10 2153 » veor» » q2, q2, q10
2181 vadd.u64 q14, q13, q13 2154 vadd.u64 q14, q13, q13
2182 » vst1.64»{q13}, [r0,:128]! 2155 » vst1.64»» {q13}, [r0,:128]!
2183 » vswp» d15,d14 2156 » vswp» » d15,d14
2184 vshr.s64 q6, q14, #63 2157 vshr.s64 q6, q14, #63
2185 » veor» q14, q14, q7 2158 » veor» » q14, q14, q7
2186 » vand» q6, q6, q5 2159 » vand» » q6, q6, q5
2187 » vld1.8» {q4}, [r7]! 2160 » vld1.8» » {q4}, [r7]!
2188 » veor» q3, q3, q11 2161 » veor» » q3, q3, q11
2189 vadd.u64 q15, q14, q14 2162 vadd.u64 q15, q14, q14
2190 » vst1.64»{q14}, [r0,:128]! 2163 » vst1.64»» {q14}, [r0,:128]!
2191 » vswp» d13,d12 2164 » vswp» » d13,d12
2192 vshr.s64 q7, q15, #63 2165 vshr.s64 q7, q15, #63
2193 » veor» q15, q15, q6 2166 » veor» » q15, q15, q6
2194 » vand» q7, q7, q5 2167 » vand» » q7, q7, q5
2195 » vld1.8» {q5}, [r7]! 2168 » vld1.8» » {q5}, [r7]!
2196 » veor» q4, q4, q12 2169 » veor» » q4, q4, q12
2197 vadd.u64 q8, q15, q15 2170 vadd.u64 q8, q15, q15
2198 » vst1.64»{q15}, [r0,:128]! 2171 » vst1.64»» {q15}, [r0,:128]!
2199 » vswp» d15,d14 2172 » vswp» » d15,d14
2200 » veor» q8, q8, q7 2173 » veor» » q8, q8, q7
2201 » vst1.64»{q8}, [r0,:128]»» @ next round tweak 2174 » vst1.64»» {q8}, [r0,:128]»» @ next round tweak
2202 2175
2203 » vld1.8» {q6,q7}, [r7]! 2176 » vld1.8» » {q6-q7}, [r7]!
2204 » veor» q5, q5, q13 2177 » veor» » q5, q5, q13
2205 #ifndef»BSAES_ASM_EXTENDED_KEY 2178 #ifndef»BSAES_ASM_EXTENDED_KEY
2206 » add» r4, sp, #0x90» » » @ pass key schedule 2179 » add» » r4, sp, #0x90» » » @ pass key schedule
2207 #else 2180 #else
2208 » add» r4, r10, #248» » » @ pass key schedule 2181 » add» » r4, r10, #248» » » @ pass key schedule
2209 #endif 2182 #endif
2210 » veor» q6, q6, q14 2183 » veor» » q6, q6, q14
2211 » mov» r5, r1» » » @ pass rounds 2184 » mov» » r5, r1» » » @ pass rounds
2212 » veor» q7, q7, q15 2185 » veor» » q7, q7, q15
2213 » mov» r0, sp 2186 » mov» » r0, sp
2214 2187
2215 » bl» _bsaes_decrypt8 2188 » bl» » _bsaes_decrypt8
2216 2189
2217 » vld1.64»{q8,q9}, [r0,:128]! 2190 » vld1.64»» {q8-q9}, [r0,:128]!
2218 » vld1.64»{q10,q11}, [r0,:128]! 2191 » vld1.64»» {q10-q11}, [r0,:128]!
2219 » veor» q0, q0, q8 2192 » veor» » q0, q0, q8
2220 » vld1.64»{q12,q13}, [r0,:128]! 2193 » vld1.64»» {q12-q13}, [r0,:128]!
2221 » veor» q1, q1, q9 2194 » veor» » q1, q1, q9
2222 » veor» q8, q6, q10 2195 » veor» » q8, q6, q10
2223 » vst1.8» {q0,q1}, [r8]! 2196 » vst1.8» » {q0-q1}, [r8]!
2224 » veor» q9, q4, q11 2197 » veor» » q9, q4, q11
2225 » vld1.64»{q14,q15}, [r0,:128]! 2198 » vld1.64»» {q14-q15}, [r0,:128]!
2226 » veor» q10, q2, q12 2199 » veor» » q10, q2, q12
2227 » vst1.8» {q8,q9}, [r8]! 2200 » vst1.8» » {q8-q9}, [r8]!
2228 » veor» q11, q7, q13 2201 » veor» » q11, q7, q13
2229 » veor» q12, q3, q14 2202 » veor» » q12, q3, q14
2230 » vst1.8» {q10,q11}, [r8]! 2203 » vst1.8» » {q10-q11}, [r8]!
2231 » veor» q13, q5, q15 2204 » veor» » q13, q5, q15
2232 » vst1.8» {q12,q13}, [r8]! 2205 » vst1.8» » {q12-q13}, [r8]!
2233 2206
2234 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 2207 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
2235 2208
2236 » subs» r9, #0x80 2209 » subs» » r9, #0x80
2237 » bpl» .Lxts_dec_loop 2210 » bpl» » .Lxts_dec_loop
2238 2211
2239 .Lxts_dec_short: 2212 .Lxts_dec_short:
2240 » adds» r9, #0x70 2213 » adds» » r9, #0x70
2241 » bmi» .Lxts_dec_done 2214 » bmi» » .Lxts_dec_done
2242 2215
2243 » vldmia» r2, {q5}» @ load XTS magic 2216 » vldmia» » r2, {q5}» @ load XTS magic
2244 vshr.s64 q7, q8, #63 2217 vshr.s64 q7, q8, #63
2245 » mov» r0, sp 2218 » mov» » r0, sp
2246 » vand» q7, q7, q5 2219 » vand» » q7, q7, q5
2247 vadd.u64 q9, q8, q8 2220 vadd.u64 q9, q8, q8
2248 » vst1.64»{q8}, [r0,:128]! 2221 » vst1.64»» {q8}, [r0,:128]!
2249 » vswp» d15,d14 2222 » vswp» » d15,d14
2250 vshr.s64 q6, q9, #63 2223 vshr.s64 q6, q9, #63
2251 » veor» q9, q9, q7 2224 » veor» » q9, q9, q7
2252 » vand» q6, q6, q5 2225 » vand» » q6, q6, q5
2253 vadd.u64 q10, q9, q9 2226 vadd.u64 q10, q9, q9
2254 » vst1.64»{q9}, [r0,:128]! 2227 » vst1.64»» {q9}, [r0,:128]!
2255 » vswp» d13,d12 2228 » vswp» » d13,d12
2256 vshr.s64 q7, q10, #63 2229 vshr.s64 q7, q10, #63
2257 » veor» q10, q10, q6 2230 » veor» » q10, q10, q6
2258 » vand» q7, q7, q5 2231 » vand» » q7, q7, q5
2259 » vld1.8» {q0}, [r7]! 2232 » vld1.8» » {q0}, [r7]!
2260 » subs» r9, #0x10 2233 » subs» » r9, #0x10
2261 » bmi» .Lxts_dec_1 2234 » bmi» » .Lxts_dec_1
2262 vadd.u64 q11, q10, q10 2235 vadd.u64 q11, q10, q10
2263 » vst1.64»{q10}, [r0,:128]! 2236 » vst1.64»» {q10}, [r0,:128]!
2264 » vswp» d15,d14 2237 » vswp» » d15,d14
2265 vshr.s64 q6, q11, #63 2238 vshr.s64 q6, q11, #63
2266 » veor» q11, q11, q7 2239 » veor» » q11, q11, q7
2267 » vand» q6, q6, q5 2240 » vand» » q6, q6, q5
2268 » vld1.8» {q1}, [r7]! 2241 » vld1.8» » {q1}, [r7]!
2269 » subs» r9, #0x10 2242 » subs» » r9, #0x10
2270 » bmi» .Lxts_dec_2 2243 » bmi» » .Lxts_dec_2
2271 » veor» q0, q0, q8 2244 » veor» » q0, q0, q8
2272 vadd.u64 q12, q11, q11 2245 vadd.u64 q12, q11, q11
2273 » vst1.64»{q11}, [r0,:128]! 2246 » vst1.64»» {q11}, [r0,:128]!
2274 » vswp» d13,d12 2247 » vswp» » d13,d12
2275 vshr.s64 q7, q12, #63 2248 vshr.s64 q7, q12, #63
2276 » veor» q12, q12, q6 2249 » veor» » q12, q12, q6
2277 » vand» q7, q7, q5 2250 » vand» » q7, q7, q5
2278 » vld1.8» {q2}, [r7]! 2251 » vld1.8» » {q2}, [r7]!
2279 » subs» r9, #0x10 2252 » subs» » r9, #0x10
2280 » bmi» .Lxts_dec_3 2253 » bmi» » .Lxts_dec_3
2281 » veor» q1, q1, q9 2254 » veor» » q1, q1, q9
2282 vadd.u64 q13, q12, q12 2255 vadd.u64 q13, q12, q12
2283 » vst1.64»{q12}, [r0,:128]! 2256 » vst1.64»» {q12}, [r0,:128]!
2284 » vswp» d15,d14 2257 » vswp» » d15,d14
2285 vshr.s64 q6, q13, #63 2258 vshr.s64 q6, q13, #63
2286 » veor» q13, q13, q7 2259 » veor» » q13, q13, q7
2287 » vand» q6, q6, q5 2260 » vand» » q6, q6, q5
2288 » vld1.8» {q3}, [r7]! 2261 » vld1.8» » {q3}, [r7]!
2289 » subs» r9, #0x10 2262 » subs» » r9, #0x10
2290 » bmi» .Lxts_dec_4 2263 » bmi» » .Lxts_dec_4
2291 » veor» q2, q2, q10 2264 » veor» » q2, q2, q10
2292 vadd.u64 q14, q13, q13 2265 vadd.u64 q14, q13, q13
2293 » vst1.64»{q13}, [r0,:128]! 2266 » vst1.64»» {q13}, [r0,:128]!
2294 » vswp» d13,d12 2267 » vswp» » d13,d12
2295 vshr.s64 q7, q14, #63 2268 vshr.s64 q7, q14, #63
2296 » veor» q14, q14, q6 2269 » veor» » q14, q14, q6
2297 » vand» q7, q7, q5 2270 » vand» » q7, q7, q5
2298 » vld1.8» {q4}, [r7]! 2271 » vld1.8» » {q4}, [r7]!
2299 » subs» r9, #0x10 2272 » subs» » r9, #0x10
2300 » bmi» .Lxts_dec_5 2273 » bmi» » .Lxts_dec_5
2301 » veor» q3, q3, q11 2274 » veor» » q3, q3, q11
2302 vadd.u64 q15, q14, q14 2275 vadd.u64 q15, q14, q14
2303 » vst1.64»{q14}, [r0,:128]! 2276 » vst1.64»» {q14}, [r0,:128]!
2304 » vswp» d15,d14 2277 » vswp» » d15,d14
2305 vshr.s64 q6, q15, #63 2278 vshr.s64 q6, q15, #63
2306 » veor» q15, q15, q7 2279 » veor» » q15, q15, q7
2307 » vand» q6, q6, q5 2280 » vand» » q6, q6, q5
2308 » vld1.8» {q5}, [r7]! 2281 » vld1.8» » {q5}, [r7]!
2309 » subs» r9, #0x10 2282 » subs» » r9, #0x10
2310 » bmi» .Lxts_dec_6 2283 » bmi» » .Lxts_dec_6
2311 » veor» q4, q4, q12 2284 » veor» » q4, q4, q12
2312 » sub» r9, #0x10 2285 » sub» » r9, #0x10
2313 » vst1.64»{q15}, [r0,:128]» » @ next round tweak 2286 » vst1.64»» {q15}, [r0,:128]» » @ next round tweak
2314 2287
2315 » vld1.8» {q6}, [r7]! 2288 » vld1.8» » {q6}, [r7]!
2316 » veor» q5, q5, q13 2289 » veor» » q5, q5, q13
2317 #ifndef»BSAES_ASM_EXTENDED_KEY 2290 #ifndef»BSAES_ASM_EXTENDED_KEY
2318 » add» r4, sp, #0x90» » » @ pass key schedule 2291 » add» » r4, sp, #0x90» » » @ pass key schedule
2319 #else 2292 #else
2320 » add» r4, r10, #248» » » @ pass key schedule 2293 » add» » r4, r10, #248» » » @ pass key schedule
2321 #endif 2294 #endif
2322 » veor» q6, q6, q14 2295 » veor» » q6, q6, q14
2323 » mov» r5, r1» » » @ pass rounds 2296 » mov» » r5, r1» » » @ pass rounds
2324 » mov» r0, sp 2297 » mov» » r0, sp
2325 2298
2326 » bl» _bsaes_decrypt8 2299 » bl» » _bsaes_decrypt8
2327 2300
2328 » vld1.64»{q8,q9}, [r0,:128]! 2301 » vld1.64»» {q8-q9}, [r0,:128]!
2329 » vld1.64»{q10,q11}, [r0,:128]! 2302 » vld1.64»» {q10-q11}, [r0,:128]!
2330 » veor» q0, q0, q8 2303 » veor» » q0, q0, q8
2331 » vld1.64»{q12,q13}, [r0,:128]! 2304 » vld1.64»» {q12-q13}, [r0,:128]!
2332 » veor» q1, q1, q9 2305 » veor» » q1, q1, q9
2333 » veor» q8, q6, q10 2306 » veor» » q8, q6, q10
2334 » vst1.8» {q0,q1}, [r8]! 2307 » vst1.8» » {q0-q1}, [r8]!
2335 » veor» q9, q4, q11 2308 » veor» » q9, q4, q11
2336 » vld1.64»{q14}, [r0,:128]! 2309 » vld1.64»» {q14}, [r0,:128]!
2337 » veor» q10, q2, q12 2310 » veor» » q10, q2, q12
2338 » vst1.8» {q8,q9}, [r8]! 2311 » vst1.8» » {q8-q9}, [r8]!
2339 » veor» q11, q7, q13 2312 » veor» » q11, q7, q13
2340 » veor» q12, q3, q14 2313 » veor» » q12, q3, q14
2341 » vst1.8» {q10,q11}, [r8]! 2314 » vst1.8» » {q10-q11}, [r8]!
2342 » vst1.8» {q12}, [r8]! 2315 » vst1.8» » {q12}, [r8]!
2343 2316
2344 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 2317 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
2345 » b» .Lxts_dec_done 2318 » b» » .Lxts_dec_done
2346 .align 4 2319 .align 4
2347 .Lxts_dec_6: 2320 .Lxts_dec_6:
2348 » vst1.64»{q14}, [r0,:128]» » @ next round tweak 2321 » vst1.64»» {q14}, [r0,:128]» » @ next round tweak
2349 2322
2350 » veor» q4, q4, q12 2323 » veor» » q4, q4, q12
2351 #ifndef»BSAES_ASM_EXTENDED_KEY 2324 #ifndef»BSAES_ASM_EXTENDED_KEY
2352 » add» r4, sp, #0x90» » » @ pass key schedule 2325 » add» » r4, sp, #0x90» » » @ pass key schedule
2353 #else 2326 #else
2354 » add» r4, r10, #248» » » @ pass key schedule 2327 » add» » r4, r10, #248» » » @ pass key schedule
2355 #endif 2328 #endif
2356 » veor» q5, q5, q13 2329 » veor» » q5, q5, q13
2357 » mov» r5, r1» » » @ pass rounds 2330 » mov» » r5, r1» » » @ pass rounds
2358 » mov» r0, sp 2331 » mov» » r0, sp
2359 2332
2360 » bl» _bsaes_decrypt8 2333 » bl» » _bsaes_decrypt8
2361 2334
2362 » vld1.64»{q8,q9}, [r0,:128]! 2335 » vld1.64»» {q8-q9}, [r0,:128]!
2363 » vld1.64»{q10,q11}, [r0,:128]! 2336 » vld1.64»» {q10-q11}, [r0,:128]!
2364 » veor» q0, q0, q8 2337 » veor» » q0, q0, q8
2365 » vld1.64»{q12,q13}, [r0,:128]! 2338 » vld1.64»» {q12-q13}, [r0,:128]!
2366 » veor» q1, q1, q9 2339 » veor» » q1, q1, q9
2367 » veor» q8, q6, q10 2340 » veor» » q8, q6, q10
2368 » vst1.8» {q0,q1}, [r8]! 2341 » vst1.8» » {q0-q1}, [r8]!
2369 » veor» q9, q4, q11 2342 » veor» » q9, q4, q11
2370 » veor» q10, q2, q12 2343 » veor» » q10, q2, q12
2371 » vst1.8» {q8,q9}, [r8]! 2344 » vst1.8» » {q8-q9}, [r8]!
2372 » veor» q11, q7, q13 2345 » veor» » q11, q7, q13
2373 » vst1.8» {q10,q11}, [r8]! 2346 » vst1.8» » {q10-q11}, [r8]!
2374 2347
2375 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 2348 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
2376 » b» .Lxts_dec_done 2349 » b» » .Lxts_dec_done
2377 .align 4 2350 .align 4
2378 .Lxts_dec_5: 2351 .Lxts_dec_5:
2379 » vst1.64»{q13}, [r0,:128]» » @ next round tweak 2352 » vst1.64»» {q13}, [r0,:128]» » @ next round tweak
2380 2353
2381 » veor» q3, q3, q11 2354 » veor» » q3, q3, q11
2382 #ifndef»BSAES_ASM_EXTENDED_KEY 2355 #ifndef»BSAES_ASM_EXTENDED_KEY
2383 » add» r4, sp, #0x90» » » @ pass key schedule 2356 » add» » r4, sp, #0x90» » » @ pass key schedule
2384 #else 2357 #else
2385 » add» r4, r10, #248» » » @ pass key schedule 2358 » add» » r4, r10, #248» » » @ pass key schedule
2386 #endif 2359 #endif
2387 » veor» q4, q4, q12 2360 » veor» » q4, q4, q12
2388 » mov» r5, r1» » » @ pass rounds 2361 » mov» » r5, r1» » » @ pass rounds
2389 » mov» r0, sp 2362 » mov» » r0, sp
2390 2363
2391 » bl» _bsaes_decrypt8 2364 » bl» » _bsaes_decrypt8
2392 2365
2393 » vld1.64»{q8,q9}, [r0,:128]! 2366 » vld1.64»» {q8-q9}, [r0,:128]!
2394 » vld1.64»{q10,q11}, [r0,:128]! 2367 » vld1.64»» {q10-q11}, [r0,:128]!
2395 » veor» q0, q0, q8 2368 » veor» » q0, q0, q8
2396 » vld1.64»{q12}, [r0,:128]! 2369 » vld1.64»» {q12}, [r0,:128]!
2397 » veor» q1, q1, q9 2370 » veor» » q1, q1, q9
2398 » veor» q8, q6, q10 2371 » veor» » q8, q6, q10
2399 » vst1.8» {q0,q1}, [r8]! 2372 » vst1.8» » {q0-q1}, [r8]!
2400 » veor» q9, q4, q11 2373 » veor» » q9, q4, q11
2401 » veor» q10, q2, q12 2374 » veor» » q10, q2, q12
2402 » vst1.8» {q8,q9}, [r8]! 2375 » vst1.8» » {q8-q9}, [r8]!
2403 » vst1.8» {q10}, [r8]! 2376 » vst1.8» » {q10}, [r8]!
2404 2377
2405 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 2378 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
2406 » b» .Lxts_dec_done 2379 » b» » .Lxts_dec_done
2407 .align 4 2380 .align 4
2408 .Lxts_dec_4: 2381 .Lxts_dec_4:
2409 » vst1.64»{q12}, [r0,:128]» » @ next round tweak 2382 » vst1.64»» {q12}, [r0,:128]» » @ next round tweak
2410 2383
2411 » veor» q2, q2, q10 2384 » veor» » q2, q2, q10
2412 #ifndef»BSAES_ASM_EXTENDED_KEY 2385 #ifndef»BSAES_ASM_EXTENDED_KEY
2413 » add» r4, sp, #0x90» » » @ pass key schedule 2386 » add» » r4, sp, #0x90» » » @ pass key schedule
2414 #else 2387 #else
2415 » add» r4, r10, #248» » » @ pass key schedule 2388 » add» » r4, r10, #248» » » @ pass key schedule
2416 #endif 2389 #endif
2417 » veor» q3, q3, q11 2390 » veor» » q3, q3, q11
2418 » mov» r5, r1» » » @ pass rounds 2391 » mov» » r5, r1» » » @ pass rounds
2419 » mov» r0, sp 2392 » mov» » r0, sp
2420 2393
2421 » bl» _bsaes_decrypt8 2394 » bl» » _bsaes_decrypt8
2422 2395
2423 » vld1.64»{q8,q9}, [r0,:128]! 2396 » vld1.64»» {q8-q9}, [r0,:128]!
2424 » vld1.64»{q10,q11}, [r0,:128]! 2397 » vld1.64»» {q10-q11}, [r0,:128]!
2425 » veor» q0, q0, q8 2398 » veor» » q0, q0, q8
2426 » veor» q1, q1, q9 2399 » veor» » q1, q1, q9
2427 » veor» q8, q6, q10 2400 » veor» » q8, q6, q10
2428 » vst1.8» {q0,q1}, [r8]! 2401 » vst1.8» » {q0-q1}, [r8]!
2429 » veor» q9, q4, q11 2402 » veor» » q9, q4, q11
2430 » vst1.8» {q8,q9}, [r8]! 2403 » vst1.8» » {q8-q9}, [r8]!
2431 2404
2432 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 2405 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
2433 » b» .Lxts_dec_done 2406 » b» » .Lxts_dec_done
2434 .align 4 2407 .align 4
2435 .Lxts_dec_3: 2408 .Lxts_dec_3:
2436 » vst1.64»{q11}, [r0,:128]» » @ next round tweak 2409 » vst1.64»» {q11}, [r0,:128]» » @ next round tweak
2437 2410
2438 » veor» q1, q1, q9 2411 » veor» » q1, q1, q9
2439 #ifndef»BSAES_ASM_EXTENDED_KEY 2412 #ifndef»BSAES_ASM_EXTENDED_KEY
2440 » add» r4, sp, #0x90» » » @ pass key schedule 2413 » add» » r4, sp, #0x90» » » @ pass key schedule
2441 #else 2414 #else
2442 » add» r4, r10, #248» » » @ pass key schedule 2415 » add» » r4, r10, #248» » » @ pass key schedule
2443 #endif 2416 #endif
2444 » veor» q2, q2, q10 2417 » veor» » q2, q2, q10
2445 » mov» r5, r1» » » @ pass rounds 2418 » mov» » r5, r1» » » @ pass rounds
2446 » mov» r0, sp 2419 » mov» » r0, sp
2447 2420
2448 » bl» _bsaes_decrypt8 2421 » bl» » _bsaes_decrypt8
2449 2422
2450 » vld1.64»{q8,q9}, [r0,:128]! 2423 » vld1.64»» {q8-q9}, [r0,:128]!
2451 » vld1.64»{q10}, [r0,:128]! 2424 » vld1.64»» {q10}, [r0,:128]!
2452 » veor» q0, q0, q8 2425 » veor» » q0, q0, q8
2453 » veor» q1, q1, q9 2426 » veor» » q1, q1, q9
2454 » veor» q8, q6, q10 2427 » veor» » q8, q6, q10
2455 » vst1.8» {q0,q1}, [r8]! 2428 » vst1.8» » {q0-q1}, [r8]!
2456 » vst1.8» {q8}, [r8]! 2429 » vst1.8» » {q8}, [r8]!
2457 2430
2458 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 2431 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
2459 » b» .Lxts_dec_done 2432 » b» » .Lxts_dec_done
2460 .align 4 2433 .align 4
2461 .Lxts_dec_2: 2434 .Lxts_dec_2:
2462 » vst1.64»{q10}, [r0,:128]» » @ next round tweak 2435 » vst1.64»» {q10}, [r0,:128]» » @ next round tweak
2463 2436
2464 » veor» q0, q0, q8 2437 » veor» » q0, q0, q8
2465 #ifndef»BSAES_ASM_EXTENDED_KEY 2438 #ifndef»BSAES_ASM_EXTENDED_KEY
2466 » add» r4, sp, #0x90» » » @ pass key schedule 2439 » add» » r4, sp, #0x90» » » @ pass key schedule
2467 #else 2440 #else
2468 » add» r4, r10, #248» » » @ pass key schedule 2441 » add» » r4, r10, #248» » » @ pass key schedule
2469 #endif 2442 #endif
2470 » veor» q1, q1, q9 2443 » veor» » q1, q1, q9
2471 » mov» r5, r1» » » @ pass rounds 2444 » mov» » r5, r1» » » @ pass rounds
2472 » mov» r0, sp 2445 » mov» » r0, sp
2473 2446
2474 » bl» _bsaes_decrypt8 2447 » bl» » _bsaes_decrypt8
2475 2448
2476 » vld1.64»{q8,q9}, [r0,:128]! 2449 » vld1.64»» {q8-q9}, [r0,:128]!
2477 » veor» q0, q0, q8 2450 » veor» » q0, q0, q8
2478 » veor» q1, q1, q9 2451 » veor» » q1, q1, q9
2479 » vst1.8» {q0,q1}, [r8]! 2452 » vst1.8» » {q0-q1}, [r8]!
2480 2453
2481 » vld1.64»{q8}, [r0,:128]»» @ next round tweak 2454 » vld1.64»» {q8}, [r0,:128]»» @ next round tweak
2482 » b» .Lxts_dec_done 2455 » b» » .Lxts_dec_done
2483 .align 4 2456 .align 4
2484 .Lxts_dec_1: 2457 .Lxts_dec_1:
2485 » mov» r0, sp 2458 » mov» » r0, sp
2486 » veor» q0, q8 2459 » veor» » q0, q8
2487 » mov» r1, sp 2460 » mov» » r1, sp
2488 » vst1.8» {q0}, [sp,:128] 2461 » vst1.8» » {q0}, [sp,:128]
2489 » mov» r2, r10 2462 » mov» » r2, r10
2490 » mov» r4, r3» » » » @ preserve fp 2463 » mov» » r4, r3» » » » @ preserve fp
2491 » mov» r5, r2» » » @ preserve magic 2464 » mov» » r5, r2» » » @ preserve magic
2492 2465
2493 » bl» AES_decrypt 2466 » bl» » AES_decrypt
2494 2467
2495 » vld1.8» {q0}, [sp,:128] 2468 » vld1.8» » {q0}, [sp,:128]
2496 » veor» q0, q0, q8 2469 » veor» » q0, q0, q8
2497 » vst1.8» {q0}, [r8]! 2470 » vst1.8» » {q0}, [r8]!
2498 » mov» r3, r4 2471 » mov» » r3, r4
2499 » mov» r2, r5 2472 » mov» » r2, r5
2500 2473
2501 » vmov» q8, q9» » @ next round tweak 2474 » vmov» » q8, q9» » @ next round tweak
2502 2475
2503 .Lxts_dec_done: 2476 .Lxts_dec_done:
2504 #ifndef XTS_CHAIN_TWEAK 2477 #ifndef XTS_CHAIN_TWEAK
2505 » adds» r9, #0x10 2478 » adds» » r9, #0x10
2506 » beq» .Lxts_dec_ret 2479 » beq» » .Lxts_dec_ret
2507 2480
2508 @ calculate one round of extra tweak for the stolen ciphertext 2481 @ calculate one round of extra tweak for the stolen ciphertext
2509 » vldmia» r2, {q5} 2482 » vldmia» » r2, {q5}
2510 vshr.s64 q6, q8, #63 2483 vshr.s64 q6, q8, #63
2511 » vand» q6, q6, q5 2484 » vand» » q6, q6, q5
2512 vadd.u64 q9, q8, q8 2485 vadd.u64 q9, q8, q8
2513 » vswp» d13,d12 2486 » vswp» » d13,d12
2514 » veor» q9, q9, q6 2487 » veor» » q9, q9, q6
2515 2488
2516 @ perform the final decryption with the last tweak value 2489 @ perform the final decryption with the last tweak value
2517 » vld1.8» {q0}, [r7]! 2490 » vld1.8» » {q0}, [r7]!
2518 » mov» r0, sp 2491 » mov» » r0, sp
2519 » veor» q0, q0, q9 2492 » veor» » q0, q0, q9
2520 » mov» r1, sp 2493 » mov» » r1, sp
2521 » vst1.8» {q0}, [sp,:128] 2494 » vst1.8» » {q0}, [sp,:128]
2522 » mov» r2, r10 2495 » mov» » r2, r10
2523 » mov» r4, r3» » » @ preserve fp 2496 » mov» » r4, r3» » » @ preserve fp
2524 2497
2525 » bl» AES_decrypt 2498 » bl» » AES_decrypt
2526 2499
2527 » vld1.8» {q0}, [sp,:128] 2500 » vld1.8» » {q0}, [sp,:128]
2528 » veor» q0, q0, q9 2501 » veor» » q0, q0, q9
2529 » vst1.8» {q0}, [r8] 2502 » vst1.8» » {q0}, [r8]
2530 2503
2531 » mov» r6, r8 2504 » mov» » r6, r8
2532 .Lxts_dec_steal: 2505 .Lxts_dec_steal:
2533 » ldrb» r1, [r8] 2506 » ldrb» » r1, [r8]
2534 » ldrb» r0, [r7], #1 2507 » ldrb» » r0, [r7], #1
2535 » strb» r1, [r8, #0x10] 2508 » strb» » r1, [r8, #0x10]
2536 » strb» r0, [r8], #1 2509 » strb» » r0, [r8], #1
2537 2510
2538 » subs» r9, #1 2511 » subs» » r9, #1
2539 » bhi» .Lxts_dec_steal 2512 » bhi» » .Lxts_dec_steal
2540 2513
2541 » vld1.8» {q0}, [r6] 2514 » vld1.8» » {q0}, [r6]
2542 » mov» r0, sp 2515 » mov» » r0, sp
2543 » veor» q0, q8 2516 » veor» » q0, q8
2544 » mov» r1, sp 2517 » mov» » r1, sp
2545 » vst1.8» {q0}, [sp,:128] 2518 » vst1.8» » {q0}, [sp,:128]
2546 » mov» r2, r10 2519 » mov» » r2, r10
2547 2520
2548 » bl» AES_decrypt 2521 » bl» » AES_decrypt
2549 2522
2550 » vld1.8» {q0}, [sp,:128] 2523 » vld1.8» » {q0}, [sp,:128]
2551 » veor» q0, q0, q8 2524 » veor» » q0, q0, q8
2552 » vst1.8» {q0}, [r6] 2525 » vst1.8» » {q0}, [r6]
2553 » mov» r3, r4 2526 » mov» » r3, r4
2554 #endif 2527 #endif
2555 2528
2556 .Lxts_dec_ret: 2529 .Lxts_dec_ret:
2557 » bic» r0, r3, #0xf 2530 » bic» » r0, r3, #0xf
2558 vmov.i32 q0, #0 2531 vmov.i32 q0, #0
2559 vmov.i32 q1, #0 2532 vmov.i32 q1, #0
2560 #ifdef XTS_CHAIN_TWEAK 2533 #ifdef XTS_CHAIN_TWEAK
2561 » ldr» r1, [r3, #0x20+VFP_ABI_FRAME]» @ chain tweak 2534 » ldr» » r1, [r3, #0x20+VFP_ABI_FRAME]» @ chain tweak
2562 #endif 2535 #endif
2563 .Lxts_dec_bzero:@ wipe key schedule [if any] 2536 .Lxts_dec_bzero:» » » » @ wipe key schedule [if any]
2564 » vstmia» sp!, {q0,q1} 2537 » vstmia» » sp!, {q0-q1}
2565 » cmp» sp, r0 2538 » cmp» » sp, r0
2566 » bne» .Lxts_dec_bzero 2539 » bne» » .Lxts_dec_bzero
2567 2540
2568 » mov» sp, r3 2541 » mov» » sp, r3
2569 #ifdef XTS_CHAIN_TWEAK 2542 #ifdef XTS_CHAIN_TWEAK
2570 » vst1.8» {q8}, [r1] 2543 » vst1.8» » {q8}, [r1]
2571 #endif 2544 #endif
2572 VFP_ABI_POP 2545 VFP_ABI_POP
2573 » ldmia» sp!, {r4,r5,r6,r7,r8,r9,r10, pc}» @ return 2546 » ldmia» » sp!, {r4-r10, pc}» @ return
2574 2547
2575 .size bsaes_xts_decrypt,.-bsaes_xts_decrypt 2548 .size bsaes_xts_decrypt,.-bsaes_xts_decrypt
2576 #endif 2549 #endif
2577 #endif 2550 #endif
OLDNEW
« no previous file with comments | « third_party/boringssl/linux-arm/crypto/aes/aes-armv4.S ('k') | third_party/boringssl/linux-arm/crypto/bn/armv4-mont.S » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698