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

Side by Side Diff: third_party/boringssl/linux-arm/crypto/modes/ghash-armv4.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 #if defined(__arm__) 1 #if defined(__arm__)
2 #include "arm_arch.h" 2 #include "arm_arch.h"
3 3
4 .syntax unified 4 .syntax»unified
5 5
6 .text 6 .text
7 .code 32 7 .code 32
8 8
9 #ifdef __APPLE__
10 #define ldrplb ldrbpl
11 #define ldrneb ldrbne
12 #endif
13
9 .type rem_4bit,%object 14 .type rem_4bit,%object
10 .align 5 15 .align 5
11 rem_4bit: 16 rem_4bit:
12 .short 0x0000,0x1C20,0x3840,0x2460 17 .short 0x0000,0x1C20,0x3840,0x2460
13 .short 0x7080,0x6CA0,0x48C0,0x54E0 18 .short 0x7080,0x6CA0,0x48C0,0x54E0
14 .short 0xE100,0xFD20,0xD940,0xC560 19 .short 0xE100,0xFD20,0xD940,0xC560
15 .short 0x9180,0x8DA0,0xA9C0,0xB5E0 20 .short 0x9180,0x8DA0,0xA9C0,0xB5E0
16 .size rem_4bit,.-rem_4bit 21 .size rem_4bit,.-rem_4bit
17 22
18 .type rem_4bit_get,%function 23 .type rem_4bit_get,%function
19 rem_4bit_get: 24 rem_4bit_get:
20 sub r2,pc,#8 25 sub r2,pc,#8
21 sub r2,r2,#32 @ &rem_4bit 26 sub r2,r2,#32 @ &rem_4bit
22 b .Lrem_4bit_got 27 b .Lrem_4bit_got
23 nop 28 nop
24 .size rem_4bit_get,.-rem_4bit_get 29 .size rem_4bit_get,.-rem_4bit_get
25 30
26 .global»gcm_ghash_4bit 31 .globl» gcm_ghash_4bit
27 .hidden gcm_ghash_4bit 32 .hidden gcm_ghash_4bit
28 .type gcm_ghash_4bit,%function 33 .type gcm_ghash_4bit,%function
29 gcm_ghash_4bit: 34 gcm_ghash_4bit:
30 sub r12,pc,#8 35 sub r12,pc,#8
31 add r3,r2,r3 @ r3 to point at the end 36 add r3,r2,r3 @ r3 to point at the end
32 » stmdb» sp!,{r3-r11,lr}»» @ save r3/end too 37 » stmdb» sp!,{r3,r4,r5,r6,r7,r8,r9,r10,r11,lr}» » @ save r3/end to o
33 sub r12,r12,#48 @ &rem_4bit 38 sub r12,r12,#48 @ &rem_4bit
34 39
35 » ldmia» r12,{r4-r11}» » @ copy rem_4bit ... 40 » ldmia» r12,{r4,r5,r6,r7,r8,r9,r10,r11}»» @ copy rem_4bit ...
36 » stmdb» sp!,{r4-r11}» » @ ... to stack 41 » stmdb» sp!,{r4,r5,r6,r7,r8,r9,r10,r11}»» @ ... to stack
37 42
38 ldrb r12,[r2,#15] 43 ldrb r12,[r2,#15]
39 ldrb r14,[r0,#15] 44 ldrb r14,[r0,#15]
40 .Louter: 45 .Louter:
41 eor r12,r12,r14 46 eor r12,r12,r14
42 and r14,r12,#0xf0 47 and r14,r12,#0xf0
43 and r12,r12,#0x0f 48 and r12,r12,#0x0f
44 mov r3,#14 49 mov r3,#14
45 50
46 add r7,r1,r12,lsl#4 51 add r7,r1,r12,lsl#4
47 » ldmia» r7,{r4-r7}» @ load Htbl[nlo] 52 » ldmia» r7,{r4,r5,r6,r7}» @ load Htbl[nlo]
48 add r11,r1,r14 53 add r11,r1,r14
49 ldrb r12,[r2,#14] 54 ldrb r12,[r2,#14]
50 55
51 and r14,r4,#0xf @ rem 56 and r14,r4,#0xf @ rem
52 » ldmia» r11,{r8-r11}» @ load Htbl[nhi] 57 » ldmia» r11,{r8,r9,r10,r11}» @ load Htbl[nhi]
53 add r14,r14,r14 58 add r14,r14,r14
54 eor r4,r8,r4,lsr#4 59 eor r4,r8,r4,lsr#4
55 ldrh r8,[sp,r14] @ rem_4bit[rem] 60 ldrh r8,[sp,r14] @ rem_4bit[rem]
56 eor r4,r4,r5,lsl#28 61 eor r4,r4,r5,lsl#28
57 ldrb r14,[r0,#14] 62 ldrb r14,[r0,#14]
58 eor r5,r9,r5,lsr#4 63 eor r5,r9,r5,lsr#4
59 eor r5,r5,r6,lsl#28 64 eor r5,r5,r6,lsl#28
60 eor r6,r10,r6,lsr#4 65 eor r6,r10,r6,lsr#4
61 eor r6,r6,r7,lsl#28 66 eor r6,r6,r7,lsl#28
62 eor r7,r11,r7,lsr#4 67 eor r7,r11,r7,lsr#4
63 eor r12,r12,r14 68 eor r12,r12,r14
64 and r14,r12,#0xf0 69 and r14,r12,#0xf0
65 and r12,r12,#0x0f 70 and r12,r12,#0x0f
66 eor r7,r7,r8,lsl#16 71 eor r7,r7,r8,lsl#16
67 72
68 .Linner: 73 .Linner:
69 add r11,r1,r12,lsl#4 74 add r11,r1,r12,lsl#4
70 and r12,r4,#0xf @ rem 75 and r12,r4,#0xf @ rem
71 subs r3,r3,#1 76 subs r3,r3,#1
72 add r12,r12,r12 77 add r12,r12,r12
73 » ldmia» r11,{r8-r11}» @ load Htbl[nlo] 78 » ldmia» r11,{r8,r9,r10,r11}» @ load Htbl[nlo]
74 eor r4,r8,r4,lsr#4 79 eor r4,r8,r4,lsr#4
75 eor r4,r4,r5,lsl#28 80 eor r4,r4,r5,lsl#28
76 eor r5,r9,r5,lsr#4 81 eor r5,r9,r5,lsr#4
77 eor r5,r5,r6,lsl#28 82 eor r5,r5,r6,lsl#28
78 ldrh r8,[sp,r12] @ rem_4bit[rem] 83 ldrh r8,[sp,r12] @ rem_4bit[rem]
79 eor r6,r10,r6,lsr#4 84 eor r6,r10,r6,lsr#4
80 ldrbpl r12,[r2,r3] 85 ldrbpl r12,[r2,r3]
81 eor r6,r6,r7,lsl#28 86 eor r6,r6,r7,lsl#28
82 eor r7,r11,r7,lsr#4 87 eor r7,r11,r7,lsr#4
83 88
84 add r11,r1,r14 89 add r11,r1,r14
85 and r14,r4,#0xf @ rem 90 and r14,r4,#0xf @ rem
86 eor r7,r7,r8,lsl#16 @ ^= rem_4bit[rem] 91 eor r7,r7,r8,lsl#16 @ ^= rem_4bit[rem]
87 add r14,r14,r14 92 add r14,r14,r14
88 » ldmia» r11,{r8-r11}» @ load Htbl[nhi] 93 » ldmia» r11,{r8,r9,r10,r11}» @ load Htbl[nhi]
89 eor r4,r8,r4,lsr#4 94 eor r4,r8,r4,lsr#4
90 ldrbpl r8,[r0,r3] 95 ldrbpl r8,[r0,r3]
91 eor r4,r4,r5,lsl#28 96 eor r4,r4,r5,lsl#28
92 eor r5,r9,r5,lsr#4 97 eor r5,r9,r5,lsr#4
93 ldrh r9,[sp,r14] 98 ldrh r9,[sp,r14]
94 eor r5,r5,r6,lsl#28 99 eor r5,r5,r6,lsl#28
95 eor r6,r10,r6,lsr#4 100 eor r6,r10,r6,lsr#4
96 eor r6,r6,r7,lsl#28 101 eor r6,r6,r7,lsl#28
97 eorpl r12,r12,r8 102 eorpl r12,r12,r8
98 eor r7,r11,r7,lsr#4 103 eor r7,r11,r7,lsr#4
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 str r6,[r0,#4] 146 str r6,[r0,#4]
142 #else 147 #else
143 mov r9,r6,lsr#8 148 mov r9,r6,lsr#8
144 strb r6,[r0,#4+3] 149 strb r6,[r0,#4+3]
145 mov r10,r6,lsr#16 150 mov r10,r6,lsr#16
146 strb r9,[r0,#4+2] 151 strb r9,[r0,#4+2]
147 mov r11,r6,lsr#24 152 mov r11,r6,lsr#24
148 strb r10,[r0,#4+1] 153 strb r10,[r0,#4+1]
149 strb r11,[r0,#4] 154 strb r11,[r0,#4]
150 #endif 155 #endif
151 » 156
152 #if __ARM_ARCH__>=7 && defined(__ARMEL__) 157 #if __ARM_ARCH__>=7 && defined(__ARMEL__)
153 rev r7,r7 158 rev r7,r7
154 str r7,[r0,#0] 159 str r7,[r0,#0]
155 #elif defined(__ARMEB__) 160 #elif defined(__ARMEB__)
156 str r7,[r0,#0] 161 str r7,[r0,#0]
157 #else 162 #else
158 mov r9,r7,lsr#8 163 mov r9,r7,lsr#8
159 strb r7,[r0,#0+3] 164 strb r7,[r0,#0+3]
160 mov r10,r7,lsr#16 165 mov r10,r7,lsr#16
161 strb r9,[r0,#0+2] 166 strb r9,[r0,#0+2]
162 mov r11,r7,lsr#24 167 mov r11,r7,lsr#24
163 strb r10,[r0,#0+1] 168 strb r10,[r0,#0+1]
164 strb r11,[r0,#0] 169 strb r11,[r0,#0]
165 #endif 170 #endif
166 » 171
167 bne .Louter 172 bne .Louter
168 173
169 add sp,sp,#36 174 add sp,sp,#36
170 #if __ARM_ARCH__>=5 175 #if __ARM_ARCH__>=5
171 » ldmia» sp!,{r4-r11,pc} 176 » ldmia» sp!,{r4,r5,r6,r7,r8,r9,r10,r11,pc}
172 #else 177 #else
173 » ldmia» sp!,{r4-r11,lr} 178 » ldmia» sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr}
174 tst lr,#1 179 tst lr,#1
175 moveq pc,lr @ be binary compatible with V4, yet 180 moveq pc,lr @ be binary compatible with V4, yet
176 » .word» 0xe12fff1e» » » @ interoperable with Thumb ISA:- ) 181 .word» 0xe12fff1e» » » @ interoperable with Thumb ISA:-)
177 #endif 182 #endif
178 .size gcm_ghash_4bit,.-gcm_ghash_4bit 183 .size gcm_ghash_4bit,.-gcm_ghash_4bit
179 184
180 .global»gcm_gmult_4bit 185 .globl» gcm_gmult_4bit
181 .hidden gcm_gmult_4bit 186 .hidden gcm_gmult_4bit
182 .type gcm_gmult_4bit,%function 187 .type gcm_gmult_4bit,%function
183 gcm_gmult_4bit: 188 gcm_gmult_4bit:
184 » stmdb» sp!,{r4-r11,lr} 189 » stmdb» sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr}
185 ldrb r12,[r0,#15] 190 ldrb r12,[r0,#15]
186 b rem_4bit_get 191 b rem_4bit_get
187 .Lrem_4bit_got: 192 .Lrem_4bit_got:
188 and r14,r12,#0xf0 193 and r14,r12,#0xf0
189 and r12,r12,#0x0f 194 and r12,r12,#0x0f
190 mov r3,#14 195 mov r3,#14
191 196
192 add r7,r1,r12,lsl#4 197 add r7,r1,r12,lsl#4
193 » ldmia» r7,{r4-r7}» @ load Htbl[nlo] 198 » ldmia» r7,{r4,r5,r6,r7}» @ load Htbl[nlo]
194 ldrb r12,[r0,#14] 199 ldrb r12,[r0,#14]
195 200
196 add r11,r1,r14 201 add r11,r1,r14
197 and r14,r4,#0xf @ rem 202 and r14,r4,#0xf @ rem
198 » ldmia» r11,{r8-r11}» @ load Htbl[nhi] 203 » ldmia» r11,{r8,r9,r10,r11}» @ load Htbl[nhi]
199 add r14,r14,r14 204 add r14,r14,r14
200 eor r4,r8,r4,lsr#4 205 eor r4,r8,r4,lsr#4
201 ldrh r8,[r2,r14] @ rem_4bit[rem] 206 ldrh r8,[r2,r14] @ rem_4bit[rem]
202 eor r4,r4,r5,lsl#28 207 eor r4,r4,r5,lsl#28
203 eor r5,r9,r5,lsr#4 208 eor r5,r9,r5,lsr#4
204 eor r5,r5,r6,lsl#28 209 eor r5,r5,r6,lsl#28
205 eor r6,r10,r6,lsr#4 210 eor r6,r10,r6,lsr#4
206 eor r6,r6,r7,lsl#28 211 eor r6,r6,r7,lsl#28
207 eor r7,r11,r7,lsr#4 212 eor r7,r11,r7,lsr#4
208 and r14,r12,#0xf0 213 and r14,r12,#0xf0
209 eor r7,r7,r8,lsl#16 214 eor r7,r7,r8,lsl#16
210 and r12,r12,#0x0f 215 and r12,r12,#0x0f
211 216
212 .Loop: 217 .Loop:
213 add r11,r1,r12,lsl#4 218 add r11,r1,r12,lsl#4
214 and r12,r4,#0xf @ rem 219 and r12,r4,#0xf @ rem
215 subs r3,r3,#1 220 subs r3,r3,#1
216 add r12,r12,r12 221 add r12,r12,r12
217 » ldmia» r11,{r8-r11}» @ load Htbl[nlo] 222 » ldmia» r11,{r8,r9,r10,r11}» @ load Htbl[nlo]
218 eor r4,r8,r4,lsr#4 223 eor r4,r8,r4,lsr#4
219 eor r4,r4,r5,lsl#28 224 eor r4,r4,r5,lsl#28
220 eor r5,r9,r5,lsr#4 225 eor r5,r9,r5,lsr#4
221 eor r5,r5,r6,lsl#28 226 eor r5,r5,r6,lsl#28
222 ldrh r8,[r2,r12] @ rem_4bit[rem] 227 ldrh r8,[r2,r12] @ rem_4bit[rem]
223 eor r6,r10,r6,lsr#4 228 eor r6,r10,r6,lsr#4
224 ldrbpl r12,[r0,r3] 229 ldrbpl r12,[r0,r3]
225 eor r6,r6,r7,lsl#28 230 eor r6,r6,r7,lsl#28
226 eor r7,r11,r7,lsr#4 231 eor r7,r11,r7,lsr#4
227 232
228 add r11,r1,r14 233 add r11,r1,r14
229 and r14,r4,#0xf @ rem 234 and r14,r4,#0xf @ rem
230 eor r7,r7,r8,lsl#16 @ ^= rem_4bit[rem] 235 eor r7,r7,r8,lsl#16 @ ^= rem_4bit[rem]
231 add r14,r14,r14 236 add r14,r14,r14
232 » ldmia» r11,{r8-r11}» @ load Htbl[nhi] 237 » ldmia» r11,{r8,r9,r10,r11}» @ load Htbl[nhi]
233 eor r4,r8,r4,lsr#4 238 eor r4,r8,r4,lsr#4
234 eor r4,r4,r5,lsl#28 239 eor r4,r4,r5,lsl#28
235 eor r5,r9,r5,lsr#4 240 eor r5,r9,r5,lsr#4
236 ldrh r8,[r2,r14] @ rem_4bit[rem] 241 ldrh r8,[r2,r14] @ rem_4bit[rem]
237 eor r5,r5,r6,lsl#28 242 eor r5,r5,r6,lsl#28
238 eor r6,r10,r6,lsr#4 243 eor r6,r10,r6,lsr#4
239 eor r6,r6,r7,lsl#28 244 eor r6,r6,r7,lsl#28
240 eor r7,r11,r7,lsr#4 245 eor r7,r11,r7,lsr#4
241 andpl r14,r12,#0xf0 246 andpl r14,r12,#0xf0
242 andpl r12,r12,#0x0f 247 andpl r12,r12,#0x0f
243 eor r7,r7,r8,lsl#16 @ ^= rem_4bit[rem] 248 eor r7,r7,r8,lsl#16 @ ^= rem_4bit[rem]
244 bpl .Loop 249 bpl .Loop
245 #if __ARM_ARCH__>=7 && defined(__ARMEL__) 250 #if __ARM_ARCH__>=7 && defined(__ARMEL__)
246 rev r4,r4 251 rev r4,r4
247 str r4,[r0,#12] 252 str r4,[r0,#12]
248 #elif defined(__ARMEB__) 253 #elif defined(__ARMEB__)
249 str r4,[r0,#12] 254 str r4,[r0,#12]
250 #else 255 #else
251 mov r9,r4,lsr#8 256 mov r9,r4,lsr#8
252 strb r4,[r0,#12+3] 257 strb r4,[r0,#12+3]
253 mov r10,r4,lsr#16 258 mov r10,r4,lsr#16
254 strb r9,[r0,#12+2] 259 strb r9,[r0,#12+2]
255 mov r11,r4,lsr#24 260 mov r11,r4,lsr#24
256 strb r10,[r0,#12+1] 261 strb r10,[r0,#12+1]
257 strb r11,[r0,#12] 262 strb r11,[r0,#12]
258 #endif 263 #endif
259 » 264
260 #if __ARM_ARCH__>=7 && defined(__ARMEL__) 265 #if __ARM_ARCH__>=7 && defined(__ARMEL__)
261 rev r5,r5 266 rev r5,r5
262 str r5,[r0,#8] 267 str r5,[r0,#8]
263 #elif defined(__ARMEB__) 268 #elif defined(__ARMEB__)
264 str r5,[r0,#8] 269 str r5,[r0,#8]
265 #else 270 #else
266 mov r9,r5,lsr#8 271 mov r9,r5,lsr#8
267 strb r5,[r0,#8+3] 272 strb r5,[r0,#8+3]
268 mov r10,r5,lsr#16 273 mov r10,r5,lsr#16
269 strb r9,[r0,#8+2] 274 strb r9,[r0,#8+2]
270 mov r11,r5,lsr#24 275 mov r11,r5,lsr#24
271 strb r10,[r0,#8+1] 276 strb r10,[r0,#8+1]
272 strb r11,[r0,#8] 277 strb r11,[r0,#8]
273 #endif 278 #endif
274 » 279
275 #if __ARM_ARCH__>=7 && defined(__ARMEL__) 280 #if __ARM_ARCH__>=7 && defined(__ARMEL__)
276 rev r6,r6 281 rev r6,r6
277 str r6,[r0,#4] 282 str r6,[r0,#4]
278 #elif defined(__ARMEB__) 283 #elif defined(__ARMEB__)
279 str r6,[r0,#4] 284 str r6,[r0,#4]
280 #else 285 #else
281 mov r9,r6,lsr#8 286 mov r9,r6,lsr#8
282 strb r6,[r0,#4+3] 287 strb r6,[r0,#4+3]
283 mov r10,r6,lsr#16 288 mov r10,r6,lsr#16
284 strb r9,[r0,#4+2] 289 strb r9,[r0,#4+2]
285 mov r11,r6,lsr#24 290 mov r11,r6,lsr#24
286 strb r10,[r0,#4+1] 291 strb r10,[r0,#4+1]
287 strb r11,[r0,#4] 292 strb r11,[r0,#4]
288 #endif 293 #endif
289 » 294
290 #if __ARM_ARCH__>=7 && defined(__ARMEL__) 295 #if __ARM_ARCH__>=7 && defined(__ARMEL__)
291 rev r7,r7 296 rev r7,r7
292 str r7,[r0,#0] 297 str r7,[r0,#0]
293 #elif defined(__ARMEB__) 298 #elif defined(__ARMEB__)
294 str r7,[r0,#0] 299 str r7,[r0,#0]
295 #else 300 #else
296 mov r9,r7,lsr#8 301 mov r9,r7,lsr#8
297 strb r7,[r0,#0+3] 302 strb r7,[r0,#0+3]
298 mov r10,r7,lsr#16 303 mov r10,r7,lsr#16
299 strb r9,[r0,#0+2] 304 strb r9,[r0,#0+2]
300 mov r11,r7,lsr#24 305 mov r11,r7,lsr#24
301 strb r10,[r0,#0+1] 306 strb r10,[r0,#0+1]
302 strb r11,[r0,#0] 307 strb r11,[r0,#0]
303 #endif 308 #endif
304 » 309
305 #if __ARM_ARCH__>=5 310 #if __ARM_ARCH__>=5
306 » ldmia» sp!,{r4-r11,pc} 311 » ldmia» sp!,{r4,r5,r6,r7,r8,r9,r10,r11,pc}
307 #else 312 #else
308 » ldmia» sp!,{r4-r11,lr} 313 » ldmia» sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr}
309 tst lr,#1 314 tst lr,#1
310 moveq pc,lr @ be binary compatible with V4, yet 315 moveq pc,lr @ be binary compatible with V4, yet
311 » .word» 0xe12fff1e» » » @ interoperable with Thumb ISA:- ) 316 .word» 0xe12fff1e» » » @ interoperable with Thumb ISA:-)
312 #endif 317 #endif
313 .size gcm_gmult_4bit,.-gcm_gmult_4bit 318 .size gcm_gmult_4bit,.-gcm_gmult_4bit
314 #if __ARM_ARCH__>=7 319 #if __ARM_MAX_ARCH__>=7
320 .arch» armv7-a
315 .fpu neon 321 .fpu neon
316 322
317 .global»gcm_init_neon 323 .globl» gcm_init_neon
318 .hidden gcm_init_neon 324 .hidden gcm_init_neon
319 .type gcm_init_neon,%function 325 .type gcm_init_neon,%function
320 .align 4 326 .align 4
321 gcm_init_neon: 327 gcm_init_neon:
322 » vld1.64»» d7,[r1,:64]!» @ load H 328 » vld1.64»d7,[r1]!» » @ load H
323 » vmov.i8»» q8,#0xe1 329 » vmov.i8»q8,#0xe1
324 » vld1.64»» d6,[r1,:64] 330 » vld1.64»d6,[r1]
325 vshl.i64 d17,#57 331 vshl.i64 d17,#57
326 vshr.u64 d16,#63 @ t0=0xc2....01 332 vshr.u64 d16,#63 @ t0=0xc2....01
327 » vdup.8» » q9,d7[7] 333 » vdup.8» q9,d7[7]
328 vshr.u64 d26,d6,#63 334 vshr.u64 d26,d6,#63
329 » vshr.s8»» q9,#7» » » @ broadcast carry bit 335 » vshr.s8»q9,#7» » » @ broadcast carry bit
330 vshl.i64 q3,q3,#1 336 vshl.i64 q3,q3,#1
331 » vand» » q8,q8,q9 337 » vand» q8,q8,q9
332 » vorr» » d7,d26» » @ H<<<=1 338 » vorr» d7,d26» » @ H<<<=1
333 » veor» » q3,q3,q8» » @ twisted H 339 » veor» q3,q3,q8» » @ twisted H
334 » vstmia» » r0,{q3} 340 » vstmia» r0,{q3}
335 341
336 » .word» 0xe12fff1e 342 » bx» lr» » » » » @ bx lr
337 .size gcm_init_neon,.-gcm_init_neon 343 .size gcm_init_neon,.-gcm_init_neon
338 344
339 .global»gcm_gmult_neon 345 .globl» gcm_gmult_neon
340 .hidden gcm_gmult_neon 346 .hidden gcm_gmult_neon
341 .type gcm_gmult_neon,%function 347 .type gcm_gmult_neon,%function
342 .align 4 348 .align 4
343 gcm_gmult_neon: 349 gcm_gmult_neon:
344 » vld1.64»» d7,[r0,:64]!» @ load Xi 350 » vld1.64»d7,[r0]!» » @ load Xi
345 » vld1.64»» d6,[r0,:64]! 351 » vld1.64»d6,[r0]!
346 vmov.i64 d29,#0x0000ffffffffffff 352 vmov.i64 d29,#0x0000ffffffffffff
347 » vldmia» » r1,{d26-d27}» @ load twisted H 353 » vldmia» r1,{d26,d27}» @ load twisted H
348 vmov.i64 d30,#0x00000000ffffffff 354 vmov.i64 d30,#0x00000000ffffffff
349 #ifdef __ARMEL__ 355 #ifdef __ARMEL__
350 vrev64.8 q3,q3 356 vrev64.8 q3,q3
351 #endif 357 #endif
352 vmov.i64 d31,#0x000000000000ffff 358 vmov.i64 d31,#0x000000000000ffff
353 » veor» » d28,d26,d27» » @ Karatsuba pre-processing 359 » veor» d28,d26,d27» » @ Karatsuba pre-processing
354 » mov» » r3,#16 360 » mov» r3,#16
355 » b» » .Lgmult_neon 361 » b» .Lgmult_neon
356 .size gcm_gmult_neon,.-gcm_gmult_neon 362 .size gcm_gmult_neon,.-gcm_gmult_neon
357 363
358 .global»gcm_ghash_neon 364 .globl» gcm_ghash_neon
359 .hidden gcm_ghash_neon 365 .hidden gcm_ghash_neon
360 .type gcm_ghash_neon,%function 366 .type gcm_ghash_neon,%function
361 .align 4 367 .align 4
362 gcm_ghash_neon: 368 gcm_ghash_neon:
363 » vld1.64»» d1,[r0,:64]!» @ load Xi 369 » vld1.64»d1,[r0]!» » @ load Xi
364 » vld1.64»» d0,[r0,:64]! 370 » vld1.64»d0,[r0]!
365 vmov.i64 d29,#0x0000ffffffffffff 371 vmov.i64 d29,#0x0000ffffffffffff
366 » vldmia» » r1,{d26-d27}» @ load twisted H 372 » vldmia» r1,{d26,d27}» @ load twisted H
367 vmov.i64 d30,#0x00000000ffffffff 373 vmov.i64 d30,#0x00000000ffffffff
368 #ifdef __ARMEL__ 374 #ifdef __ARMEL__
369 vrev64.8 q0,q0 375 vrev64.8 q0,q0
370 #endif 376 #endif
371 vmov.i64 d31,#0x000000000000ffff 377 vmov.i64 d31,#0x000000000000ffff
372 » veor» » d28,d26,d27» » @ Karatsuba pre-processing 378 » veor» d28,d26,d27» » @ Karatsuba pre-processing
373 379
374 .Loop_neon: 380 .Loop_neon:
375 » vld1.64»» d7,[r2]!» » @ load inp 381 » vld1.64»d7,[r2]!» » @ load inp
376 » vld1.64»» d6,[r2]! 382 » vld1.64»d6,[r2]!
377 #ifdef __ARMEL__ 383 #ifdef __ARMEL__
378 vrev64.8 q3,q3 384 vrev64.8 q3,q3
379 #endif 385 #endif
380 » veor» » q3,q0» » » @ inp^=Xi 386 » veor» q3,q0» » » @ inp^=Xi
381 .Lgmult_neon: 387 .Lgmult_neon:
382 » vext.8» » d16, d26, d26, #1» @ A1 388 » vext.8» d16, d26, d26, #1» @ A1
383 vmull.p8 q8, d16, d6 @ F = A1*B 389 vmull.p8 q8, d16, d6 @ F = A1*B
384 » vext.8» » d0, d6, d6, #1» @ B1 390 » vext.8» d0, d6, d6, #1» @ B1
385 vmull.p8 q0, d26, d0 @ E = A*B1 391 vmull.p8 q0, d26, d0 @ E = A*B1
386 » vext.8» » d18, d26, d26, #2» @ A2 392 » vext.8» d18, d26, d26, #2» @ A2
387 vmull.p8 q9, d18, d6 @ H = A2*B 393 vmull.p8 q9, d18, d6 @ H = A2*B
388 » vext.8» » d22, d6, d6, #2»@ B2 394 » vext.8» d22, d6, d6, #2»@ B2
389 vmull.p8 q11, d26, d22 @ G = A*B2 395 vmull.p8 q11, d26, d22 @ G = A*B2
390 » vext.8» » d20, d26, d26, #3» @ A3 396 » vext.8» d20, d26, d26, #3» @ A3
391 » veor» » q8, q8, q0» » @ L = E + F 397 » veor» q8, q8, q0» » @ L = E + F
392 vmull.p8 q10, d20, d6 @ J = A3*B 398 vmull.p8 q10, d20, d6 @ J = A3*B
393 » vext.8» » d0, d6, d6, #3» @ B3 399 » vext.8» d0, d6, d6, #3» @ B3
394 » veor» » q9, q9, q11» » @ M = G + H 400 » veor» q9, q9, q11» » @ M = G + H
395 vmull.p8 q0, d26, d0 @ I = A*B3 401 vmull.p8 q0, d26, d0 @ I = A*B3
396 » veor» » d16, d16, d17» @ t0 = (L) (P0 + P1) << 8 402 » veor» d16, d16, d17» @ t0 = (L) (P0 + P1) << 8
397 » vand» » d17, d17, d29 403 » vand» d17, d17, d29
398 » vext.8» » d22, d6, d6, #4»@ B4 404 » vext.8» d22, d6, d6, #4»@ B4
399 » veor» » d18, d18, d19» @ t1 = (M) (P2 + P3) << 16 405 » veor» d18, d18, d19» @ t1 = (M) (P2 + P3) << 16
400 » vand» » d19, d19, d30 406 » vand» d19, d19, d30
401 vmull.p8 q11, d26, d22 @ K = A*B4 407 vmull.p8 q11, d26, d22 @ K = A*B4
402 » veor» » q10, q10, q0» » @ N = I + J 408 » veor» q10, q10, q0» » @ N = I + J
403 » veor» » d16, d16, d17 409 » veor» d16, d16, d17
404 » veor» » d18, d18, d19 410 » veor» d18, d18, d19
405 » veor» » d20, d20, d21» @ t2 = (N) (P4 + P5) << 24 411 » veor» d20, d20, d21» @ t2 = (N) (P4 + P5) << 24
406 » vand» » d21, d21, d31 412 » vand» d21, d21, d31
407 » vext.8» » q8, q8, q8, #15 413 » vext.8» q8, q8, q8, #15
408 » veor» » d22, d22, d23» @ t3 = (K) (P6 + P7) << 32 414 » veor» d22, d22, d23» @ t3 = (K) (P6 + P7) << 32
409 vmov.i64 d23, #0 415 vmov.i64 d23, #0
410 » vext.8» » q9, q9, q9, #14 416 » vext.8» q9, q9, q9, #14
411 » veor» » d20, d20, d21 417 » veor» d20, d20, d21
412 vmull.p8 q0, d26, d6 @ D = A*B 418 vmull.p8 q0, d26, d6 @ D = A*B
413 » vext.8» » q11, q11, q11, #12 419 » vext.8» q11, q11, q11, #12
414 » vext.8» » q10, q10, q10, #13 420 » vext.8» q10, q10, q10, #13
415 » veor» » q8, q8, q9 421 » veor» q8, q8, q9
416 » veor» » q10, q10, q11 422 » veor» q10, q10, q11
417 » veor» » q0, q0, q8 423 » veor» q0, q0, q8
418 » veor» » q0, q0, q10 424 » veor» q0, q0, q10
419 » veor» » d6,d6,d7» @ Karatsuba pre-processing 425 » veor» d6,d6,d7» @ Karatsuba pre-processing
420 » vext.8» » d16, d28, d28, #1» @ A1 426 » vext.8» d16, d28, d28, #1» @ A1
421 vmull.p8 q8, d16, d6 @ F = A1*B 427 vmull.p8 q8, d16, d6 @ F = A1*B
422 » vext.8» » d2, d6, d6, #1» @ B1 428 » vext.8» d2, d6, d6, #1» @ B1
423 vmull.p8 q1, d28, d2 @ E = A*B1 429 vmull.p8 q1, d28, d2 @ E = A*B1
424 » vext.8» » d18, d28, d28, #2» @ A2 430 » vext.8» d18, d28, d28, #2» @ A2
425 vmull.p8 q9, d18, d6 @ H = A2*B 431 vmull.p8 q9, d18, d6 @ H = A2*B
426 » vext.8» » d22, d6, d6, #2»@ B2 432 » vext.8» d22, d6, d6, #2»@ B2
427 vmull.p8 q11, d28, d22 @ G = A*B2 433 vmull.p8 q11, d28, d22 @ G = A*B2
428 » vext.8» » d20, d28, d28, #3» @ A3 434 » vext.8» d20, d28, d28, #3» @ A3
429 » veor» » q8, q8, q1» » @ L = E + F 435 » veor» q8, q8, q1» » @ L = E + F
430 vmull.p8 q10, d20, d6 @ J = A3*B 436 vmull.p8 q10, d20, d6 @ J = A3*B
431 » vext.8» » d2, d6, d6, #3» @ B3 437 » vext.8» d2, d6, d6, #3» @ B3
432 » veor» » q9, q9, q11» » @ M = G + H 438 » veor» q9, q9, q11» » @ M = G + H
433 vmull.p8 q1, d28, d2 @ I = A*B3 439 vmull.p8 q1, d28, d2 @ I = A*B3
434 » veor» » d16, d16, d17» @ t0 = (L) (P0 + P1) << 8 440 » veor» d16, d16, d17» @ t0 = (L) (P0 + P1) << 8
435 » vand» » d17, d17, d29 441 » vand» d17, d17, d29
436 » vext.8» » d22, d6, d6, #4»@ B4 442 » vext.8» d22, d6, d6, #4»@ B4
437 » veor» » d18, d18, d19» @ t1 = (M) (P2 + P3) << 16 443 » veor» d18, d18, d19» @ t1 = (M) (P2 + P3) << 16
438 » vand» » d19, d19, d30 444 » vand» d19, d19, d30
439 vmull.p8 q11, d28, d22 @ K = A*B4 445 vmull.p8 q11, d28, d22 @ K = A*B4
440 » veor» » q10, q10, q1» » @ N = I + J 446 » veor» q10, q10, q1» » @ N = I + J
441 » veor» » d16, d16, d17 447 » veor» d16, d16, d17
442 » veor» » d18, d18, d19 448 » veor» d18, d18, d19
443 » veor» » d20, d20, d21» @ t2 = (N) (P4 + P5) << 24 449 » veor» d20, d20, d21» @ t2 = (N) (P4 + P5) << 24
444 » vand» » d21, d21, d31 450 » vand» d21, d21, d31
445 » vext.8» » q8, q8, q8, #15 451 » vext.8» q8, q8, q8, #15
446 » veor» » d22, d22, d23» @ t3 = (K) (P6 + P7) << 32 452 » veor» d22, d22, d23» @ t3 = (K) (P6 + P7) << 32
447 vmov.i64 d23, #0 453 vmov.i64 d23, #0
448 » vext.8» » q9, q9, q9, #14 454 » vext.8» q9, q9, q9, #14
449 » veor» » d20, d20, d21 455 » veor» d20, d20, d21
450 vmull.p8 q1, d28, d6 @ D = A*B 456 vmull.p8 q1, d28, d6 @ D = A*B
451 » vext.8» » q11, q11, q11, #12 457 » vext.8» q11, q11, q11, #12
452 » vext.8» » q10, q10, q10, #13 458 » vext.8» q10, q10, q10, #13
453 » veor» » q8, q8, q9 459 » veor» q8, q8, q9
454 » veor» » q10, q10, q11 460 » veor» q10, q10, q11
455 » veor» » q1, q1, q8 461 » veor» q1, q1, q8
456 » veor» » q1, q1, q10 462 » veor» q1, q1, q10
457 » vext.8» » d16, d27, d27, #1» @ A1 463 » vext.8» d16, d27, d27, #1» @ A1
458 vmull.p8 q8, d16, d7 @ F = A1*B 464 vmull.p8 q8, d16, d7 @ F = A1*B
459 » vext.8» » d4, d7, d7, #1» @ B1 465 » vext.8» d4, d7, d7, #1» @ B1
460 vmull.p8 q2, d27, d4 @ E = A*B1 466 vmull.p8 q2, d27, d4 @ E = A*B1
461 » vext.8» » d18, d27, d27, #2» @ A2 467 » vext.8» d18, d27, d27, #2» @ A2
462 vmull.p8 q9, d18, d7 @ H = A2*B 468 vmull.p8 q9, d18, d7 @ H = A2*B
463 » vext.8» » d22, d7, d7, #2»@ B2 469 » vext.8» d22, d7, d7, #2»@ B2
464 vmull.p8 q11, d27, d22 @ G = A*B2 470 vmull.p8 q11, d27, d22 @ G = A*B2
465 » vext.8» » d20, d27, d27, #3» @ A3 471 » vext.8» d20, d27, d27, #3» @ A3
466 » veor» » q8, q8, q2» » @ L = E + F 472 » veor» q8, q8, q2» » @ L = E + F
467 vmull.p8 q10, d20, d7 @ J = A3*B 473 vmull.p8 q10, d20, d7 @ J = A3*B
468 » vext.8» » d4, d7, d7, #3» @ B3 474 » vext.8» d4, d7, d7, #3» @ B3
469 » veor» » q9, q9, q11» » @ M = G + H 475 » veor» q9, q9, q11» » @ M = G + H
470 vmull.p8 q2, d27, d4 @ I = A*B3 476 vmull.p8 q2, d27, d4 @ I = A*B3
471 » veor» » d16, d16, d17» @ t0 = (L) (P0 + P1) << 8 477 » veor» d16, d16, d17» @ t0 = (L) (P0 + P1) << 8
472 » vand» » d17, d17, d29 478 » vand» d17, d17, d29
473 » vext.8» » d22, d7, d7, #4»@ B4 479 » vext.8» d22, d7, d7, #4»@ B4
474 » veor» » d18, d18, d19» @ t1 = (M) (P2 + P3) << 16 480 » veor» d18, d18, d19» @ t1 = (M) (P2 + P3) << 16
475 » vand» » d19, d19, d30 481 » vand» d19, d19, d30
476 vmull.p8 q11, d27, d22 @ K = A*B4 482 vmull.p8 q11, d27, d22 @ K = A*B4
477 » veor» » q10, q10, q2» » @ N = I + J 483 » veor» q10, q10, q2» » @ N = I + J
478 » veor» » d16, d16, d17 484 » veor» d16, d16, d17
479 » veor» » d18, d18, d19 485 » veor» d18, d18, d19
480 » veor» » d20, d20, d21» @ t2 = (N) (P4 + P5) << 24 486 » veor» d20, d20, d21» @ t2 = (N) (P4 + P5) << 24
481 » vand» » d21, d21, d31 487 » vand» d21, d21, d31
482 » vext.8» » q8, q8, q8, #15 488 » vext.8» q8, q8, q8, #15
483 » veor» » d22, d22, d23» @ t3 = (K) (P6 + P7) << 32 489 » veor» d22, d22, d23» @ t3 = (K) (P6 + P7) << 32
484 vmov.i64 d23, #0 490 vmov.i64 d23, #0
485 » vext.8» » q9, q9, q9, #14 491 » vext.8» q9, q9, q9, #14
486 » veor» » d20, d20, d21 492 » veor» d20, d20, d21
487 vmull.p8 q2, d27, d7 @ D = A*B 493 vmull.p8 q2, d27, d7 @ D = A*B
488 » vext.8» » q11, q11, q11, #12 494 » vext.8» q11, q11, q11, #12
489 » vext.8» » q10, q10, q10, #13 495 » vext.8» q10, q10, q10, #13
490 » veor» » q8, q8, q9 496 » veor» q8, q8, q9
491 » veor» » q10, q10, q11 497 » veor» q10, q10, q11
492 » veor» » q2, q2, q8 498 » veor» q2, q2, q8
493 » veor» » q2, q2, q10 499 » veor» q2, q2, q10
494 » veor» » q1,q1,q0» » @ Karatsuba post-processing 500 » veor» q1,q1,q0» » @ Karatsuba post-processing
495 » veor» » q1,q1,q2 501 » veor» q1,q1,q2
496 » veor» » d1,d1,d2 502 » veor» d1,d1,d2
497 » veor» » d4,d4,d3» @ Xh|Xl - 256-bit result 503 » veor» d4,d4,d3» @ Xh|Xl - 256-bit result
498 504
499 @ equivalent of reduction_avx from ghash-x86_64.pl 505 @ equivalent of reduction_avx from ghash-x86_64.pl
500 vshl.i64 q9,q0,#57 @ 1st phase 506 vshl.i64 q9,q0,#57 @ 1st phase
501 vshl.i64 q10,q0,#62 507 vshl.i64 q10,q0,#62
502 » veor» » q10,q10,q9» » @ 508 » veor» q10,q10,q9» » @
503 vshl.i64 q9,q0,#63 509 vshl.i64 q9,q0,#63
504 » veor» » q10, q10, q9» » @ 510 » veor» q10, q10, q9» » @
505 » veor» » d1,d1,d20» @ 511 » veor» d1,d1,d20» @
506 » veor» » d4,d4,d21 512 » veor» d4,d4,d21
507 513
508 vshr.u64 q10,q0,#1 @ 2nd phase 514 vshr.u64 q10,q0,#1 @ 2nd phase
509 » veor» » q2,q2,q0 515 » veor» q2,q2,q0
510 » veor» » q0,q0,q10» » @ 516 » veor» q0,q0,q10» » @
511 vshr.u64 q10,q10,#6 517 vshr.u64 q10,q10,#6
512 vshr.u64 q0,q0,#1 @ 518 vshr.u64 q0,q0,#1 @
513 » veor» » q0,q0,q2» » @ 519 » veor» q0,q0,q2» » @
514 » veor» » q0,q0,q10» » @ 520 » veor» q0,q0,q10» » @
515 521
516 » subs» » r3,#16 522 » subs» r3,#16
517 » bne» » .Loop_neon 523 » bne» .Loop_neon
518 524
519 #ifdef __ARMEL__ 525 #ifdef __ARMEL__
520 vrev64.8 q0,q0 526 vrev64.8 q0,q0
521 #endif 527 #endif
522 » sub» » r0,#16» 528 » sub» r0,#16
523 » vst1.64»» d1,[r0,:64]!» @ write out Xi 529 » vst1.64»d1,[r0]!» » @ write out Xi
524 » vst1.64»» d0,[r0,:64] 530 » vst1.64»d0,[r0]
525 531
526 » .word» 0xe12fff1e 532 » bx» lr» » » » » @ bx lr
527 .size gcm_ghash_neon,.-gcm_ghash_neon 533 .size gcm_ghash_neon,.-gcm_ghash_neon
528 #endif 534 #endif
529 .asciz "GHASH for ARMv4/NEON, CRYPTOGAMS by <appro@openssl.org>" 535 .byte» 71,72,65,83,72,32,102,111,114,32,65,82,77,118,52,47,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,11 0,115,115,108,46,111,114,103,62,0
530 .align 2 536 .align» 2
531 537 .align» 2
532 #endif 538
539 #endif
OLDNEW
« no previous file with comments | « third_party/boringssl/linux-arm/crypto/bn/armv4-mont.S ('k') | third_party/boringssl/linux-arm/crypto/sha/sha1-armv4-large.S » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698