blob: b030c16c7c8c1013b4cc5d17c6120a66b40cadc0 [file] [log] [blame]
Alexandre Savard1b09e312012-08-07 20:33:29 -04001.text
2.code 32
3.type K512,%object
4.align 5
5K512:
Alexandre Savard75410672012-08-08 09:50:01 -04006.word 0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd
7.word 0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc
8.word 0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019
9.word 0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118
10.word 0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe
11.word 0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2
12.word 0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1
13.word 0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694
14.word 0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3
15.word 0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65
16.word 0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483
17.word 0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5
18.word 0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210
19.word 0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4
20.word 0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725
21.word 0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70
22.word 0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926
23.word 0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df
24.word 0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8
25.word 0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b
26.word 0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001
27.word 0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30
28.word 0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910
29.word 0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8
30.word 0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53
31.word 0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8
32.word 0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb
33.word 0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3
34.word 0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60
35.word 0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec
36.word 0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9
37.word 0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b
38.word 0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207
39.word 0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178
40.word 0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6
41.word 0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b
42.word 0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493
43.word 0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c
44.word 0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a
45.word 0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817
Alexandre Savard1b09e312012-08-07 20:33:29 -040046.size K512,.-K512
Alexandre Savard1b09e312012-08-07 20:33:29 -040047
48.global sha512_block_data_order
49.type sha512_block_data_order,%function
50sha512_block_data_order:
51 sub r3,pc,#8 @ sha512_block_data_order
52 add r2,r1,r2,lsl#7 @ len to point at the end of inp
Alexandre Savard1b09e312012-08-07 20:33:29 -040053 stmdb sp!,{r4-r12,lr}
Alexandre Savard75410672012-08-08 09:50:01 -040054 sub r14,r3,#640 @ K512
Alexandre Savard1b09e312012-08-07 20:33:29 -040055 sub sp,sp,#9*8
56
Alexandre Savard75410672012-08-08 09:50:01 -040057 ldr r7,[r0,#32+4]
58 ldr r8,[r0,#32+0]
59 ldr r9, [r0,#48+4]
60 ldr r10, [r0,#48+0]
61 ldr r11, [r0,#56+4]
62 ldr r12, [r0,#56+0]
Alexandre Savard1b09e312012-08-07 20:33:29 -040063.Loop:
64 str r9, [sp,#48+0]
65 str r10, [sp,#48+4]
66 str r11, [sp,#56+0]
67 str r12, [sp,#56+4]
Alexandre Savard75410672012-08-08 09:50:01 -040068 ldr r5,[r0,#0+4]
69 ldr r6,[r0,#0+0]
70 ldr r3,[r0,#8+4]
71 ldr r4,[r0,#8+0]
72 ldr r9, [r0,#16+4]
73 ldr r10, [r0,#16+0]
74 ldr r11, [r0,#24+4]
75 ldr r12, [r0,#24+0]
Alexandre Savard1b09e312012-08-07 20:33:29 -040076 str r3,[sp,#8+0]
77 str r4,[sp,#8+4]
78 str r9, [sp,#16+0]
79 str r10, [sp,#16+4]
80 str r11, [sp,#24+0]
81 str r12, [sp,#24+4]
Alexandre Savard75410672012-08-08 09:50:01 -040082 ldr r3,[r0,#40+4]
83 ldr r4,[r0,#40+0]
Alexandre Savard1b09e312012-08-07 20:33:29 -040084 str r3,[sp,#40+0]
85 str r4,[sp,#40+4]
86
87.L00_15:
Alexandre Savard1b09e312012-08-07 20:33:29 -040088 ldrb r3,[r1,#7]
89 ldrb r9, [r1,#6]
90 ldrb r10, [r1,#5]
91 ldrb r11, [r1,#4]
92 ldrb r4,[r1,#3]
93 ldrb r12, [r1,#2]
94 orr r3,r3,r9,lsl#8
95 ldrb r9, [r1,#1]
96 orr r3,r3,r10,lsl#16
97 ldrb r10, [r1],#8
98 orr r3,r3,r11,lsl#24
99 orr r4,r4,r12,lsl#8
100 orr r4,r4,r9,lsl#16
101 orr r4,r4,r10,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400102 str r3,[sp,#64+0]
103 str r4,[sp,#64+4]
104 ldr r11,[sp,#56+0] @ h.lo
105 ldr r12,[sp,#56+4] @ h.hi
Alexandre Savard1b09e312012-08-07 20:33:29 -0400106 @ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
107 @ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23
108 @ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23
109 mov r9,r7,lsr#14
Alexandre Savard1b09e312012-08-07 20:33:29 -0400110 mov r10,r8,lsr#14
Alexandre Savard1b09e312012-08-07 20:33:29 -0400111 eor r9,r9,r8,lsl#18
Alexandre Savard1b09e312012-08-07 20:33:29 -0400112 eor r10,r10,r7,lsl#18
Alexandre Savard1b09e312012-08-07 20:33:29 -0400113 eor r9,r9,r7,lsr#18
114 eor r10,r10,r8,lsr#18
115 eor r9,r9,r8,lsl#14
116 eor r10,r10,r7,lsl#14
117 eor r9,r9,r8,lsr#9
118 eor r10,r10,r7,lsr#9
119 eor r9,r9,r7,lsl#23
120 eor r10,r10,r8,lsl#23 @ Sigma1(e)
121 adds r3,r3,r9
122 ldr r9,[sp,#40+0] @ f.lo
123 adc r4,r4,r10 @ T += Sigma1(e)
124 ldr r10,[sp,#40+4] @ f.hi
125 adds r3,r3,r11
126 ldr r11,[sp,#48+0] @ g.lo
127 adc r4,r4,r12 @ T += h
128 ldr r12,[sp,#48+4] @ g.hi
129
130 eor r9,r9,r11
131 str r7,[sp,#32+0]
132 eor r10,r10,r12
133 str r8,[sp,#32+4]
134 and r9,r9,r7
135 str r5,[sp,#0+0]
136 and r10,r10,r8
137 str r6,[sp,#0+4]
138 eor r9,r9,r11
Alexandre Savard75410672012-08-08 09:50:01 -0400139 ldr r11,[r14,#4] @ K[i].lo
Alexandre Savard1b09e312012-08-07 20:33:29 -0400140 eor r10,r10,r12 @ Ch(e,f,g)
Alexandre Savard75410672012-08-08 09:50:01 -0400141 ldr r12,[r14,#0] @ K[i].hi
Alexandre Savard1b09e312012-08-07 20:33:29 -0400142
143 adds r3,r3,r9
144 ldr r7,[sp,#24+0] @ d.lo
145 adc r4,r4,r10 @ T += Ch(e,f,g)
146 ldr r8,[sp,#24+4] @ d.hi
147 adds r3,r3,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400148 adc r4,r4,r12 @ T += K[i]
149 adds r7,r7,r3
Alexandre Savard1b09e312012-08-07 20:33:29 -0400150 adc r8,r8,r4 @ d += T
Alexandre Savard1b09e312012-08-07 20:33:29 -0400151
Alexandre Savard75410672012-08-08 09:50:01 -0400152 and r9,r11,#0xff
153 teq r9,#148
Alexandre Savard1b09e312012-08-07 20:33:29 -0400154 orreq r14,r14,#1
Alexandre Savard75410672012-08-08 09:50:01 -0400155
156 ldr r11,[sp,#8+0] @ b.lo
157 ldr r12,[sp,#16+0] @ c.lo
Alexandre Savard1b09e312012-08-07 20:33:29 -0400158 @ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
159 @ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25
160 @ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25
161 mov r9,r5,lsr#28
162 mov r10,r6,lsr#28
163 eor r9,r9,r6,lsl#4
164 eor r10,r10,r5,lsl#4
165 eor r9,r9,r6,lsr#2
166 eor r10,r10,r5,lsr#2
167 eor r9,r9,r5,lsl#30
168 eor r10,r10,r6,lsl#30
169 eor r9,r9,r6,lsr#7
170 eor r10,r10,r5,lsr#7
171 eor r9,r9,r5,lsl#25
172 eor r10,r10,r6,lsl#25 @ Sigma0(a)
173 adds r3,r3,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -0400174 adc r4,r4,r10 @ T += Sigma0(a)
175
Alexandre Savard75410672012-08-08 09:50:01 -0400176 and r9,r5,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400177 orr r5,r5,r11
Alexandre Savard75410672012-08-08 09:50:01 -0400178 ldr r10,[sp,#8+4] @ b.hi
Alexandre Savard1b09e312012-08-07 20:33:29 -0400179 ldr r11,[sp,#16+4] @ c.hi
180 and r5,r5,r12
Alexandre Savard75410672012-08-08 09:50:01 -0400181 orr r5,r5,r9 @ Maj(a,b,c).lo
Alexandre Savard1b09e312012-08-07 20:33:29 -0400182 and r12,r6,r10
183 orr r6,r6,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -0400184 and r6,r6,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400185 orr r6,r6,r12 @ Maj(a,b,c).hi
Alexandre Savard75410672012-08-08 09:50:01 -0400186 adds r5,r5,r3
Alexandre Savard1b09e312012-08-07 20:33:29 -0400187 adc r6,r6,r4 @ h += T
Alexandre Savard75410672012-08-08 09:50:01 -0400188
189 sub sp,sp,#8
Alexandre Savard1b09e312012-08-07 20:33:29 -0400190 add r14,r14,#8
191 tst r14,#1
192 beq .L00_15
Alexandre Savard75410672012-08-08 09:50:01 -0400193 bic r14,r14,#1
194
195.L16_79:
Alexandre Savard1b09e312012-08-07 20:33:29 -0400196 ldr r9,[sp,#184+0]
197 ldr r10,[sp,#184+4]
Alexandre Savard75410672012-08-08 09:50:01 -0400198 ldr r11,[sp,#80+0]
199 ldr r12,[sp,#80+4]
200
Alexandre Savard1b09e312012-08-07 20:33:29 -0400201 @ sigma0(x) (ROTR((x),1) ^ ROTR((x),8) ^ ((x)>>7))
202 @ LO lo>>1^hi<<31 ^ lo>>8^hi<<24 ^ lo>>7^hi<<25
203 @ HI hi>>1^lo<<31 ^ hi>>8^lo<<24 ^ hi>>7
204 mov r3,r9,lsr#1
Alexandre Savard1b09e312012-08-07 20:33:29 -0400205 mov r4,r10,lsr#1
Alexandre Savard1b09e312012-08-07 20:33:29 -0400206 eor r3,r3,r10,lsl#31
207 eor r4,r4,r9,lsl#31
208 eor r3,r3,r9,lsr#8
209 eor r4,r4,r10,lsr#8
210 eor r3,r3,r10,lsl#24
211 eor r4,r4,r9,lsl#24
212 eor r3,r3,r9,lsr#7
213 eor r4,r4,r10,lsr#7
214 eor r3,r3,r10,lsl#25
215
216 @ sigma1(x) (ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6))
217 @ LO lo>>19^hi<<13 ^ hi>>29^lo<<3 ^ lo>>6^hi<<26
218 @ HI hi>>19^lo<<13 ^ lo>>29^hi<<3 ^ hi>>6
219 mov r9,r11,lsr#19
220 mov r10,r12,lsr#19
221 eor r9,r9,r12,lsl#13
222 eor r10,r10,r11,lsl#13
223 eor r9,r9,r12,lsr#29
224 eor r10,r10,r11,lsr#29
225 eor r9,r9,r11,lsl#3
226 eor r10,r10,r12,lsl#3
227 eor r9,r9,r11,lsr#6
228 eor r10,r10,r12,lsr#6
Alexandre Savard1b09e312012-08-07 20:33:29 -0400229 eor r9,r9,r12,lsl#26
230
Alexandre Savard75410672012-08-08 09:50:01 -0400231 ldr r11,[sp,#120+0]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400232 ldr r12,[sp,#120+4]
233 adds r3,r3,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -0400234 adc r4,r4,r10
235
Alexandre Savard75410672012-08-08 09:50:01 -0400236 ldr r9,[sp,#192+0]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400237 ldr r10,[sp,#192+4]
238 adds r3,r3,r11
239 adc r4,r4,r12
240 adds r3,r3,r9
241 adc r4,r4,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400242 str r3,[sp,#64+0]
243 str r4,[sp,#64+4]
244 ldr r11,[sp,#56+0] @ h.lo
245 ldr r12,[sp,#56+4] @ h.hi
Alexandre Savard1b09e312012-08-07 20:33:29 -0400246 @ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
247 @ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23
248 @ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23
249 mov r9,r7,lsr#14
Alexandre Savard1b09e312012-08-07 20:33:29 -0400250 mov r10,r8,lsr#14
Alexandre Savard1b09e312012-08-07 20:33:29 -0400251 eor r9,r9,r8,lsl#18
Alexandre Savard1b09e312012-08-07 20:33:29 -0400252 eor r10,r10,r7,lsl#18
Alexandre Savard1b09e312012-08-07 20:33:29 -0400253 eor r9,r9,r7,lsr#18
254 eor r10,r10,r8,lsr#18
255 eor r9,r9,r8,lsl#14
256 eor r10,r10,r7,lsl#14
257 eor r9,r9,r8,lsr#9
258 eor r10,r10,r7,lsr#9
259 eor r9,r9,r7,lsl#23
260 eor r10,r10,r8,lsl#23 @ Sigma1(e)
261 adds r3,r3,r9
262 ldr r9,[sp,#40+0] @ f.lo
263 adc r4,r4,r10 @ T += Sigma1(e)
264 ldr r10,[sp,#40+4] @ f.hi
265 adds r3,r3,r11
266 ldr r11,[sp,#48+0] @ g.lo
267 adc r4,r4,r12 @ T += h
268 ldr r12,[sp,#48+4] @ g.hi
269
270 eor r9,r9,r11
271 str r7,[sp,#32+0]
272 eor r10,r10,r12
273 str r8,[sp,#32+4]
274 and r9,r9,r7
275 str r5,[sp,#0+0]
276 and r10,r10,r8
277 str r6,[sp,#0+4]
278 eor r9,r9,r11
Alexandre Savard75410672012-08-08 09:50:01 -0400279 ldr r11,[r14,#4] @ K[i].lo
Alexandre Savard1b09e312012-08-07 20:33:29 -0400280 eor r10,r10,r12 @ Ch(e,f,g)
Alexandre Savard75410672012-08-08 09:50:01 -0400281 ldr r12,[r14,#0] @ K[i].hi
Alexandre Savard1b09e312012-08-07 20:33:29 -0400282
283 adds r3,r3,r9
284 ldr r7,[sp,#24+0] @ d.lo
285 adc r4,r4,r10 @ T += Ch(e,f,g)
286 ldr r8,[sp,#24+4] @ d.hi
287 adds r3,r3,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400288 adc r4,r4,r12 @ T += K[i]
289 adds r7,r7,r3
Alexandre Savard1b09e312012-08-07 20:33:29 -0400290 adc r8,r8,r4 @ d += T
Alexandre Savard1b09e312012-08-07 20:33:29 -0400291
Alexandre Savard75410672012-08-08 09:50:01 -0400292 and r9,r11,#0xff
293 teq r9,#23
Alexandre Savard1b09e312012-08-07 20:33:29 -0400294 orreq r14,r14,#1
Alexandre Savard75410672012-08-08 09:50:01 -0400295
296 ldr r11,[sp,#8+0] @ b.lo
297 ldr r12,[sp,#16+0] @ c.lo
Alexandre Savard1b09e312012-08-07 20:33:29 -0400298 @ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
299 @ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25
300 @ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25
301 mov r9,r5,lsr#28
302 mov r10,r6,lsr#28
303 eor r9,r9,r6,lsl#4
304 eor r10,r10,r5,lsl#4
305 eor r9,r9,r6,lsr#2
306 eor r10,r10,r5,lsr#2
307 eor r9,r9,r5,lsl#30
308 eor r10,r10,r6,lsl#30
309 eor r9,r9,r6,lsr#7
310 eor r10,r10,r5,lsr#7
311 eor r9,r9,r5,lsl#25
312 eor r10,r10,r6,lsl#25 @ Sigma0(a)
313 adds r3,r3,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -0400314 adc r4,r4,r10 @ T += Sigma0(a)
315
Alexandre Savard75410672012-08-08 09:50:01 -0400316 and r9,r5,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400317 orr r5,r5,r11
Alexandre Savard75410672012-08-08 09:50:01 -0400318 ldr r10,[sp,#8+4] @ b.hi
Alexandre Savard1b09e312012-08-07 20:33:29 -0400319 ldr r11,[sp,#16+4] @ c.hi
320 and r5,r5,r12
Alexandre Savard75410672012-08-08 09:50:01 -0400321 orr r5,r5,r9 @ Maj(a,b,c).lo
Alexandre Savard1b09e312012-08-07 20:33:29 -0400322 and r12,r6,r10
323 orr r6,r6,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -0400324 and r6,r6,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400325 orr r6,r6,r12 @ Maj(a,b,c).hi
Alexandre Savard75410672012-08-08 09:50:01 -0400326 adds r5,r5,r3
Alexandre Savard1b09e312012-08-07 20:33:29 -0400327 adc r6,r6,r4 @ h += T
Alexandre Savard75410672012-08-08 09:50:01 -0400328
329 sub sp,sp,#8
Alexandre Savard1b09e312012-08-07 20:33:29 -0400330 add r14,r14,#8
Alexandre Savard75410672012-08-08 09:50:01 -0400331 tst r14,#1
Alexandre Savard1b09e312012-08-07 20:33:29 -0400332 beq .L16_79
333 bic r14,r14,#1
334
335 ldr r3,[sp,#8+0]
336 ldr r4,[sp,#8+4]
Alexandre Savard75410672012-08-08 09:50:01 -0400337 ldr r9, [r0,#0+4]
338 ldr r10, [r0,#0+0]
339 ldr r11, [r0,#8+4]
340 ldr r12, [r0,#8+0]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400341 adds r9,r5,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -0400342 adc r10,r6,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -0400343 adds r11,r3,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400344 adc r12,r4,r12
Alexandre Savard75410672012-08-08 09:50:01 -0400345 str r9, [r0,#0+4]
346 str r10, [r0,#0+0]
347 str r11, [r0,#8+4]
348 str r12, [r0,#8+0]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400349
350 ldr r5,[sp,#16+0]
351 ldr r6,[sp,#16+4]
352 ldr r3,[sp,#24+0]
353 ldr r4,[sp,#24+4]
Alexandre Savard75410672012-08-08 09:50:01 -0400354 ldr r9, [r0,#16+4]
355 ldr r10, [r0,#16+0]
356 ldr r11, [r0,#24+4]
357 ldr r12, [r0,#24+0]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400358 adds r9,r5,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -0400359 adc r10,r6,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -0400360 adds r11,r3,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400361 adc r12,r4,r12
Alexandre Savard75410672012-08-08 09:50:01 -0400362 str r9, [r0,#16+4]
363 str r10, [r0,#16+0]
364 str r11, [r0,#24+4]
365 str r12, [r0,#24+0]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400366
367 ldr r3,[sp,#40+0]
368 ldr r4,[sp,#40+4]
Alexandre Savard75410672012-08-08 09:50:01 -0400369 ldr r9, [r0,#32+4]
370 ldr r10, [r0,#32+0]
371 ldr r11, [r0,#40+4]
372 ldr r12, [r0,#40+0]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400373 adds r7,r7,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -0400374 adc r8,r8,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -0400375 adds r11,r3,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400376 adc r12,r4,r12
Alexandre Savard75410672012-08-08 09:50:01 -0400377 str r7,[r0,#32+4]
378 str r8,[r0,#32+0]
379 str r11, [r0,#40+4]
380 str r12, [r0,#40+0]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400381
382 ldr r5,[sp,#48+0]
383 ldr r6,[sp,#48+4]
384 ldr r3,[sp,#56+0]
385 ldr r4,[sp,#56+4]
Alexandre Savard75410672012-08-08 09:50:01 -0400386 ldr r9, [r0,#48+4]
387 ldr r10, [r0,#48+0]
388 ldr r11, [r0,#56+4]
389 ldr r12, [r0,#56+0]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400390 adds r9,r5,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -0400391 adc r10,r6,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -0400392 adds r11,r3,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400393 adc r12,r4,r12
Alexandre Savard75410672012-08-08 09:50:01 -0400394 str r9, [r0,#48+4]
395 str r10, [r0,#48+0]
396 str r11, [r0,#56+4]
397 str r12, [r0,#56+0]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400398
399 add sp,sp,#640
400 sub r14,r14,#640
401
402 teq r1,r2
403 bne .Loop
404
405 add sp,sp,#8*9 @ destroy frame
Alexandre Savard1b09e312012-08-07 20:33:29 -0400406 ldmia sp!,{r4-r12,lr}
407 tst lr,#1
408 moveq pc,lr @ be binary compatible with V4, yet
409 .word 0xe12fff1e @ interoperable with Thumb ISA:-)
Alexandre Savard75410672012-08-08 09:50:01 -0400410.size sha512_block_data_order,.-sha512_block_data_order
411.asciz "SHA512 block transform for ARMv4, CRYPTOGAMS by <appro@openssl.org>"
Alexandre Savard1b09e312012-08-07 20:33:29 -0400412.align 2