blob: 771ce265f64af05fa09a9f9563bf33404f3579dd [file] [log] [blame]
David S. Miller86c93b22012-08-19 17:11:37 -07001#include <linux/linkage.h>
2#include <asm/visasm.h>
3
4ENTRY(sha256_sparc64_transform)
5 /* %o0 = digest, %o1 = data, %o2 = rounds */
6 VISEntryHalf
7 ld [%o0 + 0x00], %f0
8 ld [%o0 + 0x04], %f1
9 ld [%o0 + 0x08], %f2
10 ld [%o0 + 0x0c], %f3
11 ld [%o0 + 0x10], %f4
12 ld [%o0 + 0x14], %f5
13 andcc %o1, 0x7, %g0
14 ld [%o0 + 0x18], %f6
15 bne,pn %xcc, 10f
16 ld [%o0 + 0x1c], %f7
17
181:
19 ldd [%o1 + 0x00], %f8
20 ldd [%o1 + 0x08], %f10
21 ldd [%o1 + 0x10], %f12
22 ldd [%o1 + 0x18], %f14
23 ldd [%o1 + 0x20], %f16
24 ldd [%o1 + 0x28], %f18
25 ldd [%o1 + 0x30], %f20
26 ldd [%o1 + 0x38], %f22
27
28 /* sha256 */
29 .word 0x81b02840
30
31 subcc %o2, 1, %o2
32 bne,pt %xcc, 1b
33 add %o1, 0x40, %o1
34
355:
36 st %f0, [%o0 + 0x00]
37 st %f1, [%o0 + 0x04]
38 st %f2, [%o0 + 0x08]
39 st %f3, [%o0 + 0x0c]
40 st %f4, [%o0 + 0x10]
41 st %f5, [%o0 + 0x14]
42 st %f6, [%o0 + 0x18]
43 st %f7, [%o0 + 0x1c]
44 retl
45 VISExitHalf
4610:
47 alignaddr %o1, %g0, %o1
48
49 ldd [%o1 + 0x00], %f10
501:
51 ldd [%o1 + 0x08], %f12
52 ldd [%o1 + 0x10], %f14
53 ldd [%o1 + 0x18], %f16
54 ldd [%o1 + 0x20], %f18
55 ldd [%o1 + 0x28], %f20
56 ldd [%o1 + 0x30], %f22
57 ldd [%o1 + 0x38], %f24
58 ldd [%o1 + 0x40], %f26
59
60 faligndata %f10, %f12, %f8
61 faligndata %f12, %f14, %f10
62 faligndata %f14, %f16, %f12
63 faligndata %f16, %f18, %f14
64 faligndata %f18, %f20, %f16
65 faligndata %f20, %f22, %f18
66 faligndata %f22, %f24, %f20
67 faligndata %f24, %f26, %f22
68
69 /* sha256 */
70 .word 0x81b02840
71
72 subcc %o2, 1, %o2
73 fsrc1 %f26, %f10
74 bne,pt %xcc, 1b
75 add %o1, 0x40, %o1
76
77 ba,a,pt %xcc, 5b
78ENDPROC(sha256_sparc64_transform)