1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #include <linux/linkage.h> |
3 | #include <asm/visasm.h> |
4 | |
5 | #include "opcodes.h" |
6 | |
7 | ENTRY(sha512_sparc64_transform) |
8 | /* %o0 = digest, %o1 = data, %o2 = rounds */ |
9 | VISEntry |
10 | ldd [%o0 + 0x00], %f0 |
11 | ldd [%o0 + 0x08], %f2 |
12 | ldd [%o0 + 0x10], %f4 |
13 | ldd [%o0 + 0x18], %f6 |
14 | ldd [%o0 + 0x20], %f8 |
15 | ldd [%o0 + 0x28], %f10 |
16 | andcc %o1, 0x7, %g0 |
17 | ldd [%o0 + 0x30], %f12 |
18 | bne,pn %xcc, 10f |
19 | ldd [%o0 + 0x38], %f14 |
20 | |
21 | 1: |
22 | ldd [%o1 + 0x00], %f16 |
23 | ldd [%o1 + 0x08], %f18 |
24 | ldd [%o1 + 0x10], %f20 |
25 | ldd [%o1 + 0x18], %f22 |
26 | ldd [%o1 + 0x20], %f24 |
27 | ldd [%o1 + 0x28], %f26 |
28 | ldd [%o1 + 0x30], %f28 |
29 | ldd [%o1 + 0x38], %f30 |
30 | ldd [%o1 + 0x40], %f32 |
31 | ldd [%o1 + 0x48], %f34 |
32 | ldd [%o1 + 0x50], %f36 |
33 | ldd [%o1 + 0x58], %f38 |
34 | ldd [%o1 + 0x60], %f40 |
35 | ldd [%o1 + 0x68], %f42 |
36 | ldd [%o1 + 0x70], %f44 |
37 | ldd [%o1 + 0x78], %f46 |
38 | |
39 | SHA512 |
40 | |
41 | subcc %o2, 1, %o2 |
42 | bne,pt %xcc, 1b |
43 | add %o1, 0x80, %o1 |
44 | |
45 | 5: |
46 | std %f0, [%o0 + 0x00] |
47 | std %f2, [%o0 + 0x08] |
48 | std %f4, [%o0 + 0x10] |
49 | std %f6, [%o0 + 0x18] |
50 | std %f8, [%o0 + 0x20] |
51 | std %f10, [%o0 + 0x28] |
52 | std %f12, [%o0 + 0x30] |
53 | std %f14, [%o0 + 0x38] |
54 | retl |
55 | VISExit |
56 | 10: |
57 | alignaddr %o1, %g0, %o1 |
58 | |
59 | ldd [%o1 + 0x00], %f18 |
60 | 1: |
61 | ldd [%o1 + 0x08], %f20 |
62 | ldd [%o1 + 0x10], %f22 |
63 | ldd [%o1 + 0x18], %f24 |
64 | ldd [%o1 + 0x20], %f26 |
65 | ldd [%o1 + 0x28], %f28 |
66 | ldd [%o1 + 0x30], %f30 |
67 | ldd [%o1 + 0x38], %f32 |
68 | ldd [%o1 + 0x40], %f34 |
69 | ldd [%o1 + 0x48], %f36 |
70 | ldd [%o1 + 0x50], %f38 |
71 | ldd [%o1 + 0x58], %f40 |
72 | ldd [%o1 + 0x60], %f42 |
73 | ldd [%o1 + 0x68], %f44 |
74 | ldd [%o1 + 0x70], %f46 |
75 | ldd [%o1 + 0x78], %f48 |
76 | ldd [%o1 + 0x80], %f50 |
77 | |
78 | faligndata %f18, %f20, %f16 |
79 | faligndata %f20, %f22, %f18 |
80 | faligndata %f22, %f24, %f20 |
81 | faligndata %f24, %f26, %f22 |
82 | faligndata %f26, %f28, %f24 |
83 | faligndata %f28, %f30, %f26 |
84 | faligndata %f30, %f32, %f28 |
85 | faligndata %f32, %f34, %f30 |
86 | faligndata %f34, %f36, %f32 |
87 | faligndata %f36, %f38, %f34 |
88 | faligndata %f38, %f40, %f36 |
89 | faligndata %f40, %f42, %f38 |
90 | faligndata %f42, %f44, %f40 |
91 | faligndata %f44, %f46, %f42 |
92 | faligndata %f46, %f48, %f44 |
93 | faligndata %f48, %f50, %f46 |
94 | |
95 | SHA512 |
96 | |
97 | subcc %o2, 1, %o2 |
98 | fsrc2 %f50, %f18 |
99 | bne,pt %xcc, 1b |
100 | add %o1, 0x80, %o1 |
101 | |
102 | ba,a,pt %xcc, 5b |
103 | ENDPROC(sha512_sparc64_transform) |
104 | |