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