blob: 220b73baa551138fb2f3accfb46280373e634ffb [file] [log] [blame]
David S. Millerfa4dfed2012-08-19 21:51:26 -07001#include <linux/linkage.h>
2#include <asm/visasm.h>
3
4ENTRY(md5_sparc64_transform)
5 /* %o0 = digest, %o1 = data, %o2 = rounds */
6 VISEntryHalf
7 ld [%o0 + 0x00], %f0
8 ld [%o0 + 0x04], %f1
9 andcc %o1, 0x7, %g0
10 ld [%o0 + 0x08], %f2
11 bne,pn %xcc, 10f
12 ld [%o0 + 0x0c], %f3
13
141:
15 ldd [%o1 + 0x00], %f8
16 ldd [%o1 + 0x08], %f10
17 ldd [%o1 + 0x10], %f12
18 ldd [%o1 + 0x18], %f14
19 ldd [%o1 + 0x20], %f16
20 ldd [%o1 + 0x28], %f18
21 ldd [%o1 + 0x30], %f20
22 ldd [%o1 + 0x38], %f22
23
24 /* md5 */
25 .word 0x81b02800
26
27 subcc %o2, 1, %o2
28 bne,pt %xcc, 1b
29 add %o1, 0x40, %o1
30
315:
32 st %f0, [%o0 + 0x00]
33 st %f1, [%o0 + 0x04]
34 st %f2, [%o0 + 0x08]
35 st %f3, [%o0 + 0x0c]
36 retl
37 VISExitHalf
3810:
39 alignaddr %o1, %g0, %o1
40
41 ldd [%o1 + 0x00], %f10
421:
43 ldd [%o1 + 0x08], %f12
44 ldd [%o1 + 0x10], %f14
45 ldd [%o1 + 0x18], %f16
46 ldd [%o1 + 0x20], %f18
47 ldd [%o1 + 0x28], %f20
48 ldd [%o1 + 0x30], %f22
49 ldd [%o1 + 0x38], %f24
50 ldd [%o1 + 0x40], %f26
51
52 faligndata %f10, %f12, %f8
53 faligndata %f12, %f14, %f10
54 faligndata %f14, %f16, %f12
55 faligndata %f16, %f18, %f14
56 faligndata %f18, %f20, %f16
57 faligndata %f20, %f22, %f18
58 faligndata %f22, %f24, %f20
59 faligndata %f24, %f26, %f22
60
61 /* md5 */
62 .word 0x81b02800
63
64 subcc %o2, 1, %o2
65 fsrc1 %f26, %f10
66 bne,pt %xcc, 1b
67 add %o1, 0x40, %o1
68
69 ba,a,pt %xcc, 5b
70ENDPROC(md5_sparc64_transform)