0001
0002 #include <linux/linkage.h>
0003 #include <asm/visasm.h>
0004
0005 #include "opcodes.h"
0006
0007 ENTRY(sha256_sparc64_transform)
0008
0009 VISEntryHalf
0010 ld [%o0 + 0x00], %f0
0011 ld [%o0 + 0x04], %f1
0012 ld [%o0 + 0x08], %f2
0013 ld [%o0 + 0x0c], %f3
0014 ld [%o0 + 0x10], %f4
0015 ld [%o0 + 0x14], %f5
0016 andcc %o1, 0x7, %g0
0017 ld [%o0 + 0x18], %f6
0018 bne,pn %xcc, 10f
0019 ld [%o0 + 0x1c], %f7
0020
0021 1:
0022 ldd [%o1 + 0x00], %f8
0023 ldd [%o1 + 0x08], %f10
0024 ldd [%o1 + 0x10], %f12
0025 ldd [%o1 + 0x18], %f14
0026 ldd [%o1 + 0x20], %f16
0027 ldd [%o1 + 0x28], %f18
0028 ldd [%o1 + 0x30], %f20
0029 ldd [%o1 + 0x38], %f22
0030
0031 SHA256
0032
0033 subcc %o2, 1, %o2
0034 bne,pt %xcc, 1b
0035 add %o1, 0x40, %o1
0036
0037 5:
0038 st %f0, [%o0 + 0x00]
0039 st %f1, [%o0 + 0x04]
0040 st %f2, [%o0 + 0x08]
0041 st %f3, [%o0 + 0x0c]
0042 st %f4, [%o0 + 0x10]
0043 st %f5, [%o0 + 0x14]
0044 st %f6, [%o0 + 0x18]
0045 st %f7, [%o0 + 0x1c]
0046 retl
0047 VISExitHalf
0048 10:
0049 alignaddr %o1, %g0, %o1
0050
0051 ldd [%o1 + 0x00], %f10
0052 1:
0053 ldd [%o1 + 0x08], %f12
0054 ldd [%o1 + 0x10], %f14
0055 ldd [%o1 + 0x18], %f16
0056 ldd [%o1 + 0x20], %f18
0057 ldd [%o1 + 0x28], %f20
0058 ldd [%o1 + 0x30], %f22
0059 ldd [%o1 + 0x38], %f24
0060 ldd [%o1 + 0x40], %f26
0061
0062 faligndata %f10, %f12, %f8
0063 faligndata %f12, %f14, %f10
0064 faligndata %f14, %f16, %f12
0065 faligndata %f16, %f18, %f14
0066 faligndata %f18, %f20, %f16
0067 faligndata %f20, %f22, %f18
0068 faligndata %f22, %f24, %f20
0069 faligndata %f24, %f26, %f22
0070
0071 SHA256
0072
0073 subcc %o2, 1, %o2
0074 fsrc2 %f26, %f10
0075 bne,pt %xcc, 1b
0076 add %o1, 0x40, %o1
0077
0078 ba,a,pt %xcc, 5b
0079 ENDPROC(sha256_sparc64_transform)