^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(md5_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) andcc %o1, 0x7, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) ld [%o0 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) bne,pn %xcc, 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) ld [%o0 + 0x0c], %f3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) ldd [%o1 + 0x00], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) ldd [%o1 + 0x08], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) ldd [%o1 + 0x10], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) ldd [%o1 + 0x18], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) ldd [%o1 + 0x20], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) ldd [%o1 + 0x28], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) ldd [%o1 + 0x30], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) ldd [%o1 + 0x38], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) MD5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) subcc %o2, 1, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) add %o1, 0x40, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 5:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) st %f0, [%o0 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) st %f1, [%o0 + 0x04]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) st %f2, [%o0 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) st %f3, [%o0 + 0x0c]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) VISExitHalf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 10:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) alignaddr %o1, %g0, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) ldd [%o1 + 0x00], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) ldd [%o1 + 0x08], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) ldd [%o1 + 0x10], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) ldd [%o1 + 0x18], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) ldd [%o1 + 0x20], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) ldd [%o1 + 0x28], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) ldd [%o1 + 0x30], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) ldd [%o1 + 0x38], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) ldd [%o1 + 0x40], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) faligndata %f10, %f12, %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) faligndata %f12, %f14, %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) faligndata %f14, %f16, %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) faligndata %f16, %f18, %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) faligndata %f18, %f20, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) faligndata %f20, %f22, %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) faligndata %f22, %f24, %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) faligndata %f24, %f26, %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) MD5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) subcc %o2, 1, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) fsrc2 %f26, %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) add %o1, 0x40, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) ba,a,pt %xcc, 5b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) ENDPROC(md5_sparc64_transform)