162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#include <linux/linkage.h> 362306a36Sopenharmony_ci#include <asm/visasm.h> 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include "opcodes.h" 662306a36Sopenharmony_ci 762306a36Sopenharmony_ciENTRY(sha512_sparc64_transform) 862306a36Sopenharmony_ci /* %o0 = digest, %o1 = data, %o2 = rounds */ 962306a36Sopenharmony_ci VISEntry 1062306a36Sopenharmony_ci ldd [%o0 + 0x00], %f0 1162306a36Sopenharmony_ci ldd [%o0 + 0x08], %f2 1262306a36Sopenharmony_ci ldd [%o0 + 0x10], %f4 1362306a36Sopenharmony_ci ldd [%o0 + 0x18], %f6 1462306a36Sopenharmony_ci ldd [%o0 + 0x20], %f8 1562306a36Sopenharmony_ci ldd [%o0 + 0x28], %f10 1662306a36Sopenharmony_ci andcc %o1, 0x7, %g0 1762306a36Sopenharmony_ci ldd [%o0 + 0x30], %f12 1862306a36Sopenharmony_ci bne,pn %xcc, 10f 1962306a36Sopenharmony_ci ldd [%o0 + 0x38], %f14 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci1: 2262306a36Sopenharmony_ci ldd [%o1 + 0x00], %f16 2362306a36Sopenharmony_ci ldd [%o1 + 0x08], %f18 2462306a36Sopenharmony_ci ldd [%o1 + 0x10], %f20 2562306a36Sopenharmony_ci ldd [%o1 + 0x18], %f22 2662306a36Sopenharmony_ci ldd [%o1 + 0x20], %f24 2762306a36Sopenharmony_ci ldd [%o1 + 0x28], %f26 2862306a36Sopenharmony_ci ldd [%o1 + 0x30], %f28 2962306a36Sopenharmony_ci ldd [%o1 + 0x38], %f30 3062306a36Sopenharmony_ci ldd [%o1 + 0x40], %f32 3162306a36Sopenharmony_ci ldd [%o1 + 0x48], %f34 3262306a36Sopenharmony_ci ldd [%o1 + 0x50], %f36 3362306a36Sopenharmony_ci ldd [%o1 + 0x58], %f38 3462306a36Sopenharmony_ci ldd [%o1 + 0x60], %f40 3562306a36Sopenharmony_ci ldd [%o1 + 0x68], %f42 3662306a36Sopenharmony_ci ldd [%o1 + 0x70], %f44 3762306a36Sopenharmony_ci ldd [%o1 + 0x78], %f46 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci SHA512 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci subcc %o2, 1, %o2 4262306a36Sopenharmony_ci bne,pt %xcc, 1b 4362306a36Sopenharmony_ci add %o1, 0x80, %o1 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci5: 4662306a36Sopenharmony_ci std %f0, [%o0 + 0x00] 4762306a36Sopenharmony_ci std %f2, [%o0 + 0x08] 4862306a36Sopenharmony_ci std %f4, [%o0 + 0x10] 4962306a36Sopenharmony_ci std %f6, [%o0 + 0x18] 5062306a36Sopenharmony_ci std %f8, [%o0 + 0x20] 5162306a36Sopenharmony_ci std %f10, [%o0 + 0x28] 5262306a36Sopenharmony_ci std %f12, [%o0 + 0x30] 5362306a36Sopenharmony_ci std %f14, [%o0 + 0x38] 5462306a36Sopenharmony_ci retl 5562306a36Sopenharmony_ci VISExit 5662306a36Sopenharmony_ci10: 5762306a36Sopenharmony_ci alignaddr %o1, %g0, %o1 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci ldd [%o1 + 0x00], %f18 6062306a36Sopenharmony_ci1: 6162306a36Sopenharmony_ci ldd [%o1 + 0x08], %f20 6262306a36Sopenharmony_ci ldd [%o1 + 0x10], %f22 6362306a36Sopenharmony_ci ldd [%o1 + 0x18], %f24 6462306a36Sopenharmony_ci ldd [%o1 + 0x20], %f26 6562306a36Sopenharmony_ci ldd [%o1 + 0x28], %f28 6662306a36Sopenharmony_ci ldd [%o1 + 0x30], %f30 6762306a36Sopenharmony_ci ldd [%o1 + 0x38], %f32 6862306a36Sopenharmony_ci ldd [%o1 + 0x40], %f34 6962306a36Sopenharmony_ci ldd [%o1 + 0x48], %f36 7062306a36Sopenharmony_ci ldd [%o1 + 0x50], %f38 7162306a36Sopenharmony_ci ldd [%o1 + 0x58], %f40 7262306a36Sopenharmony_ci ldd [%o1 + 0x60], %f42 7362306a36Sopenharmony_ci ldd [%o1 + 0x68], %f44 7462306a36Sopenharmony_ci ldd [%o1 + 0x70], %f46 7562306a36Sopenharmony_ci ldd [%o1 + 0x78], %f48 7662306a36Sopenharmony_ci ldd [%o1 + 0x80], %f50 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci faligndata %f18, %f20, %f16 7962306a36Sopenharmony_ci faligndata %f20, %f22, %f18 8062306a36Sopenharmony_ci faligndata %f22, %f24, %f20 8162306a36Sopenharmony_ci faligndata %f24, %f26, %f22 8262306a36Sopenharmony_ci faligndata %f26, %f28, %f24 8362306a36Sopenharmony_ci faligndata %f28, %f30, %f26 8462306a36Sopenharmony_ci faligndata %f30, %f32, %f28 8562306a36Sopenharmony_ci faligndata %f32, %f34, %f30 8662306a36Sopenharmony_ci faligndata %f34, %f36, %f32 8762306a36Sopenharmony_ci faligndata %f36, %f38, %f34 8862306a36Sopenharmony_ci faligndata %f38, %f40, %f36 8962306a36Sopenharmony_ci faligndata %f40, %f42, %f38 9062306a36Sopenharmony_ci faligndata %f42, %f44, %f40 9162306a36Sopenharmony_ci faligndata %f44, %f46, %f42 9262306a36Sopenharmony_ci faligndata %f46, %f48, %f44 9362306a36Sopenharmony_ci faligndata %f48, %f50, %f46 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci SHA512 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci subcc %o2, 1, %o2 9862306a36Sopenharmony_ci fsrc2 %f50, %f18 9962306a36Sopenharmony_ci bne,pt %xcc, 1b 10062306a36Sopenharmony_ci add %o1, 0x80, %o1 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci ba,a,pt %xcc, 5b 10362306a36Sopenharmony_ciENDPROC(sha512_sparc64_transform) 104