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

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

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