^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #include <asm/visasm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #include "opcodes.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) ENTRY(sha256_sparc64_transform)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) /* %o0 = digest, %o1 = data, %o2 = rounds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) VISEntryHalf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) ld [%o0 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) ld [%o0 + 0x04], %f1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) ld [%o0 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) ld [%o0 + 0x0c], %f3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) ld [%o0 + 0x10], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) ld [%o0 + 0x14], %f5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) andcc %o1, 0x7, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) ld [%o0 + 0x18], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) bne,pn %xcc, 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) ld [%o0 + 0x1c], %f7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) ldd [%o1 + 0x00], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) ldd [%o1 + 0x08], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) ldd [%o1 + 0x10], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) ldd [%o1 + 0x18], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) ldd [%o1 + 0x20], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) ldd [%o1 + 0x28], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) ldd [%o1 + 0x30], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) ldd [%o1 + 0x38], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) SHA256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) subcc %o2, 1, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) add %o1, 0x40, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 5:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) st %f0, [%o0 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) st %f1, [%o0 + 0x04]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) st %f2, [%o0 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) st %f3, [%o0 + 0x0c]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) st %f4, [%o0 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) st %f5, [%o0 + 0x14]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) st %f6, [%o0 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) st %f7, [%o0 + 0x1c]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) VISExitHalf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 10:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) alignaddr %o1, %g0, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) ldd [%o1 + 0x00], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) ldd [%o1 + 0x08], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) ldd [%o1 + 0x10], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) ldd [%o1 + 0x18], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) ldd [%o1 + 0x20], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) ldd [%o1 + 0x28], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) ldd [%o1 + 0x30], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) ldd [%o1 + 0x38], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) ldd [%o1 + 0x40], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) faligndata %f10, %f12, %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) faligndata %f12, %f14, %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) faligndata %f14, %f16, %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) faligndata %f16, %f18, %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) faligndata %f18, %f20, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) faligndata %f20, %f22, %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) faligndata %f22, %f24, %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) faligndata %f24, %f26, %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) SHA256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) subcc %o2, 1, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) fsrc2 %f26, %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) add %o1, 0x40, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) ba,a,pt %xcc, 5b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) ENDPROC(sha256_sparc64_transform)