1*b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */ 281658ad0SDavid S. Miller#include <linux/linkage.h> 381658ad0SDavid S. Miller#include <asm/visasm.h> 481658ad0SDavid S. Miller 57cff82f5SDavid S. Miller#include "opcodes.h" 681658ad0SDavid S. Miller 781658ad0SDavid S. Miller#define CAMELLIA_6ROUNDS(KEY_BASE, I0, I1) \ 881658ad0SDavid S. Miller CAMELLIA_F(KEY_BASE + 0, I1, I0, I1) \ 981658ad0SDavid S. Miller CAMELLIA_F(KEY_BASE + 2, I0, I1, I0) \ 1081658ad0SDavid S. Miller CAMELLIA_F(KEY_BASE + 4, I1, I0, I1) \ 1181658ad0SDavid S. Miller CAMELLIA_F(KEY_BASE + 6, I0, I1, I0) \ 1281658ad0SDavid S. Miller CAMELLIA_F(KEY_BASE + 8, I1, I0, I1) \ 1381658ad0SDavid S. Miller CAMELLIA_F(KEY_BASE + 10, I0, I1, I0) 1481658ad0SDavid S. Miller 1581658ad0SDavid S. Miller#define CAMELLIA_6ROUNDS_FL_FLI(KEY_BASE, I0, I1) \ 1681658ad0SDavid S. Miller CAMELLIA_6ROUNDS(KEY_BASE, I0, I1) \ 1781658ad0SDavid S. Miller CAMELLIA_FL(KEY_BASE + 12, I0, I0) \ 1881658ad0SDavid S. Miller CAMELLIA_FLI(KEY_BASE + 14, I1, I1) 1981658ad0SDavid S. Miller 2081658ad0SDavid S. Miller .data 2181658ad0SDavid S. Miller 2281658ad0SDavid S. Miller .align 8 2381658ad0SDavid S. MillerSIGMA: .xword 0xA09E667F3BCC908B 2481658ad0SDavid S. Miller .xword 0xB67AE8584CAA73B2 2581658ad0SDavid S. Miller .xword 0xC6EF372FE94F82BE 2681658ad0SDavid S. Miller .xword 0x54FF53A5F1D36F1C 2781658ad0SDavid S. Miller .xword 0x10E527FADE682D1D 2881658ad0SDavid S. Miller .xword 0xB05688C2B3E6C1FD 2981658ad0SDavid S. Miller 3081658ad0SDavid S. Miller .text 3181658ad0SDavid S. Miller 3281658ad0SDavid S. Miller .align 32 3381658ad0SDavid S. MillerENTRY(camellia_sparc64_key_expand) 34274504f5SDavid S. Miller /* %o0=in_key, %o1=encrypt_key, %o2=key_len, %o3=decrypt_key */ 3581658ad0SDavid S. Miller VISEntry 3681658ad0SDavid S. Miller ld [%o0 + 0x00], %f0 ! i0, k[0] 3781658ad0SDavid S. Miller ld [%o0 + 0x04], %f1 ! i1, k[1] 3881658ad0SDavid S. Miller ld [%o0 + 0x08], %f2 ! i2, k[2] 3981658ad0SDavid S. Miller ld [%o0 + 0x0c], %f3 ! i3, k[3] 4081658ad0SDavid S. Miller std %f0, [%o1 + 0x00] ! k[0, 1] 4181658ad0SDavid S. Miller fsrc2 %f0, %f28 4281658ad0SDavid S. Miller std %f2, [%o1 + 0x08] ! k[2, 3] 4381658ad0SDavid S. Miller cmp %o2, 16 4481658ad0SDavid S. Miller be 10f 4581658ad0SDavid S. Miller fsrc2 %f2, %f30 4681658ad0SDavid S. Miller 4781658ad0SDavid S. Miller ld [%o0 + 0x10], %f0 4881658ad0SDavid S. Miller ld [%o0 + 0x14], %f1 4981658ad0SDavid S. Miller std %f0, [%o1 + 0x20] ! k[8, 9] 5081658ad0SDavid S. Miller cmp %o2, 24 5181658ad0SDavid S. Miller fone %f10 5281658ad0SDavid S. Miller be,a 1f 5381658ad0SDavid S. Miller fxor %f10, %f0, %f2 5481658ad0SDavid S. Miller ld [%o0 + 0x18], %f2 5581658ad0SDavid S. Miller ld [%o0 + 0x1c], %f3 5681658ad0SDavid S. Miller1: 5781658ad0SDavid S. Miller std %f2, [%o1 + 0x28] ! k[10, 11] 5881658ad0SDavid S. Miller fxor %f28, %f0, %f0 5981658ad0SDavid S. Miller fxor %f30, %f2, %f2 6081658ad0SDavid S. Miller 6181658ad0SDavid S. Miller10: 6281658ad0SDavid S. Miller sethi %hi(SIGMA), %g3 6381658ad0SDavid S. Miller or %g3, %lo(SIGMA), %g3 6481658ad0SDavid S. Miller ldd [%g3 + 0x00], %f16 6581658ad0SDavid S. Miller ldd [%g3 + 0x08], %f18 6681658ad0SDavid S. Miller ldd [%g3 + 0x10], %f20 6781658ad0SDavid S. Miller ldd [%g3 + 0x18], %f22 6881658ad0SDavid S. Miller ldd [%g3 + 0x20], %f24 6981658ad0SDavid S. Miller ldd [%g3 + 0x28], %f26 7081658ad0SDavid S. Miller CAMELLIA_F(16, 2, 0, 2) 7181658ad0SDavid S. Miller CAMELLIA_F(18, 0, 2, 0) 7281658ad0SDavid S. Miller fxor %f28, %f0, %f0 7381658ad0SDavid S. Miller fxor %f30, %f2, %f2 7481658ad0SDavid S. Miller CAMELLIA_F(20, 2, 0, 2) 7581658ad0SDavid S. Miller CAMELLIA_F(22, 0, 2, 0) 7681658ad0SDavid S. Miller 7781658ad0SDavid S. Miller#define ROTL128(S01, S23, TMP1, TMP2, N) \ 7881658ad0SDavid S. Miller srlx S01, (64 - N), TMP1; \ 7981658ad0SDavid S. Miller sllx S01, N, S01; \ 8081658ad0SDavid S. Miller srlx S23, (64 - N), TMP2; \ 8181658ad0SDavid S. Miller sllx S23, N, S23; \ 8281658ad0SDavid S. Miller or S01, TMP2, S01; \ 8381658ad0SDavid S. Miller or S23, TMP1, S23 8481658ad0SDavid S. Miller 8581658ad0SDavid S. Miller cmp %o2, 16 8681658ad0SDavid S. Miller bne 1f 8781658ad0SDavid S. Miller nop 8881658ad0SDavid S. Miller /* 128-bit key */ 8981658ad0SDavid S. Miller std %f0, [%o1 + 0x10] ! k[ 4, 5] 9081658ad0SDavid S. Miller std %f2, [%o1 + 0x18] ! k[ 6, 7] 9181658ad0SDavid S. Miller MOVDTOX_F0_O4 9281658ad0SDavid S. Miller MOVDTOX_F2_O5 9381658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 15) 9481658ad0SDavid S. Miller stx %o4, [%o1 + 0x30] ! k[12, 13] 9581658ad0SDavid S. Miller stx %o5, [%o1 + 0x38] ! k[14, 15] 9681658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 15) 9781658ad0SDavid S. Miller stx %o4, [%o1 + 0x40] ! k[16, 17] 9881658ad0SDavid S. Miller stx %o5, [%o1 + 0x48] ! k[18, 19] 9981658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 15) 10081658ad0SDavid S. Miller stx %o4, [%o1 + 0x60] ! k[24, 25] 10181658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 15) 10281658ad0SDavid S. Miller stx %o4, [%o1 + 0x70] ! k[28, 29] 10381658ad0SDavid S. Miller stx %o5, [%o1 + 0x78] ! k[30, 31] 10481658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 34) 10581658ad0SDavid S. Miller stx %o4, [%o1 + 0xa0] ! k[40, 41] 10681658ad0SDavid S. Miller stx %o5, [%o1 + 0xa8] ! k[42, 43] 10781658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 17) 10881658ad0SDavid S. Miller stx %o4, [%o1 + 0xc0] ! k[48, 49] 10981658ad0SDavid S. Miller stx %o5, [%o1 + 0xc8] ! k[50, 51] 11081658ad0SDavid S. Miller 11181658ad0SDavid S. Miller ldx [%o1 + 0x00], %o4 ! k[ 0, 1] 11281658ad0SDavid S. Miller ldx [%o1 + 0x08], %o5 ! k[ 2, 3] 11381658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 15) 11481658ad0SDavid S. Miller stx %o4, [%o1 + 0x20] ! k[ 8, 9] 11581658ad0SDavid S. Miller stx %o5, [%o1 + 0x28] ! k[10, 11] 11681658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 30) 11781658ad0SDavid S. Miller stx %o4, [%o1 + 0x50] ! k[20, 21] 11881658ad0SDavid S. Miller stx %o5, [%o1 + 0x58] ! k[22, 23] 11981658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 15) 12081658ad0SDavid S. Miller stx %o5, [%o1 + 0x68] ! k[26, 27] 12181658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 17) 12281658ad0SDavid S. Miller stx %o4, [%o1 + 0x80] ! k[32, 33] 12381658ad0SDavid S. Miller stx %o5, [%o1 + 0x88] ! k[34, 35] 12481658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 17) 12581658ad0SDavid S. Miller stx %o4, [%o1 + 0x90] ! k[36, 37] 12681658ad0SDavid S. Miller stx %o5, [%o1 + 0x98] ! k[38, 39] 12781658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 17) 12881658ad0SDavid S. Miller stx %o4, [%o1 + 0xb0] ! k[44, 45] 12981658ad0SDavid S. Miller stx %o5, [%o1 + 0xb8] ! k[46, 47] 13081658ad0SDavid S. Miller 13181658ad0SDavid S. Miller ba,pt %xcc, 2f 13281658ad0SDavid S. Miller mov (3 * 16 * 4), %o0 13381658ad0SDavid S. Miller 13481658ad0SDavid S. Miller1: 13581658ad0SDavid S. Miller /* 192-bit or 256-bit key */ 13681658ad0SDavid S. Miller std %f0, [%o1 + 0x30] ! k[12, 13] 13781658ad0SDavid S. Miller std %f2, [%o1 + 0x38] ! k[14, 15] 13881658ad0SDavid S. Miller ldd [%o1 + 0x20], %f4 ! k[ 8, 9] 13981658ad0SDavid S. Miller ldd [%o1 + 0x28], %f6 ! k[10, 11] 14081658ad0SDavid S. Miller fxor %f0, %f4, %f0 14181658ad0SDavid S. Miller fxor %f2, %f6, %f2 14281658ad0SDavid S. Miller CAMELLIA_F(24, 2, 0, 2) 14381658ad0SDavid S. Miller CAMELLIA_F(26, 0, 2, 0) 14481658ad0SDavid S. Miller std %f0, [%o1 + 0x10] ! k[ 4, 5] 14581658ad0SDavid S. Miller std %f2, [%o1 + 0x18] ! k[ 6, 7] 14681658ad0SDavid S. Miller MOVDTOX_F0_O4 14781658ad0SDavid S. Miller MOVDTOX_F2_O5 14881658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 30) 14981658ad0SDavid S. Miller stx %o4, [%o1 + 0x50] ! k[20, 21] 15081658ad0SDavid S. Miller stx %o5, [%o1 + 0x58] ! k[22, 23] 15181658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 30) 15281658ad0SDavid S. Miller stx %o4, [%o1 + 0xa0] ! k[40, 41] 15381658ad0SDavid S. Miller stx %o5, [%o1 + 0xa8] ! k[42, 43] 15481658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 51) 15581658ad0SDavid S. Miller stx %o4, [%o1 + 0x100] ! k[64, 65] 15681658ad0SDavid S. Miller stx %o5, [%o1 + 0x108] ! k[66, 67] 15781658ad0SDavid S. Miller ldx [%o1 + 0x20], %o4 ! k[ 8, 9] 15881658ad0SDavid S. Miller ldx [%o1 + 0x28], %o5 ! k[10, 11] 15981658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 15) 16081658ad0SDavid S. Miller stx %o4, [%o1 + 0x20] ! k[ 8, 9] 16181658ad0SDavid S. Miller stx %o5, [%o1 + 0x28] ! k[10, 11] 16281658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 15) 16381658ad0SDavid S. Miller stx %o4, [%o1 + 0x40] ! k[16, 17] 16481658ad0SDavid S. Miller stx %o5, [%o1 + 0x48] ! k[18, 19] 16581658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 30) 16681658ad0SDavid S. Miller stx %o4, [%o1 + 0x90] ! k[36, 37] 16781658ad0SDavid S. Miller stx %o5, [%o1 + 0x98] ! k[38, 39] 16881658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 34) 16981658ad0SDavid S. Miller stx %o4, [%o1 + 0xd0] ! k[52, 53] 17081658ad0SDavid S. Miller stx %o5, [%o1 + 0xd8] ! k[54, 55] 17181658ad0SDavid S. Miller ldx [%o1 + 0x30], %o4 ! k[12, 13] 17281658ad0SDavid S. Miller ldx [%o1 + 0x38], %o5 ! k[14, 15] 17381658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 15) 17481658ad0SDavid S. Miller stx %o4, [%o1 + 0x30] ! k[12, 13] 17581658ad0SDavid S. Miller stx %o5, [%o1 + 0x38] ! k[14, 15] 17681658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 30) 17781658ad0SDavid S. Miller stx %o4, [%o1 + 0x70] ! k[28, 29] 17881658ad0SDavid S. Miller stx %o5, [%o1 + 0x78] ! k[30, 31] 17981658ad0SDavid S. Miller srlx %o4, 32, %g2 18081658ad0SDavid S. Miller srlx %o5, 32, %g3 18181658ad0SDavid S. Miller stw %o4, [%o1 + 0xc0] ! k[48] 18281658ad0SDavid S. Miller stw %g3, [%o1 + 0xc4] ! k[49] 18381658ad0SDavid S. Miller stw %o5, [%o1 + 0xc8] ! k[50] 18481658ad0SDavid S. Miller stw %g2, [%o1 + 0xcc] ! k[51] 18581658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 49) 18681658ad0SDavid S. Miller stx %o4, [%o1 + 0xe0] ! k[56, 57] 18781658ad0SDavid S. Miller stx %o5, [%o1 + 0xe8] ! k[58, 59] 18881658ad0SDavid S. Miller ldx [%o1 + 0x00], %o4 ! k[ 0, 1] 18981658ad0SDavid S. Miller ldx [%o1 + 0x08], %o5 ! k[ 2, 3] 19081658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 45) 19181658ad0SDavid S. Miller stx %o4, [%o1 + 0x60] ! k[24, 25] 19281658ad0SDavid S. Miller stx %o5, [%o1 + 0x68] ! k[26, 27] 19381658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 15) 19481658ad0SDavid S. Miller stx %o4, [%o1 + 0x80] ! k[32, 33] 19581658ad0SDavid S. Miller stx %o5, [%o1 + 0x88] ! k[34, 35] 19681658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 17) 19781658ad0SDavid S. Miller stx %o4, [%o1 + 0xb0] ! k[44, 45] 19881658ad0SDavid S. Miller stx %o5, [%o1 + 0xb8] ! k[46, 47] 19981658ad0SDavid S. Miller ROTL128(%o4, %o5, %g2, %g3, 34) 20081658ad0SDavid S. Miller stx %o4, [%o1 + 0xf0] ! k[60, 61] 20181658ad0SDavid S. Miller stx %o5, [%o1 + 0xf8] ! k[62, 63] 20281658ad0SDavid S. Miller mov (4 * 16 * 4), %o0 20381658ad0SDavid S. Miller2: 20481658ad0SDavid S. Miller add %o1, %o0, %o1 20581658ad0SDavid S. Miller ldd [%o1 + 0x00], %f0 20681658ad0SDavid S. Miller ldd [%o1 + 0x08], %f2 20781658ad0SDavid S. Miller std %f0, [%o3 + 0x00] 20881658ad0SDavid S. Miller std %f2, [%o3 + 0x08] 20981658ad0SDavid S. Miller add %o3, 0x10, %o3 21081658ad0SDavid S. Miller1: 21181658ad0SDavid S. Miller sub %o1, (16 * 4), %o1 21281658ad0SDavid S. Miller ldd [%o1 + 0x38], %f0 21381658ad0SDavid S. Miller ldd [%o1 + 0x30], %f2 21481658ad0SDavid S. Miller ldd [%o1 + 0x28], %f4 21581658ad0SDavid S. Miller ldd [%o1 + 0x20], %f6 21681658ad0SDavid S. Miller ldd [%o1 + 0x18], %f8 21781658ad0SDavid S. Miller ldd [%o1 + 0x10], %f10 21881658ad0SDavid S. Miller std %f0, [%o3 + 0x00] 21981658ad0SDavid S. Miller std %f2, [%o3 + 0x08] 22081658ad0SDavid S. Miller std %f4, [%o3 + 0x10] 22181658ad0SDavid S. Miller std %f6, [%o3 + 0x18] 22281658ad0SDavid S. Miller std %f8, [%o3 + 0x20] 22381658ad0SDavid S. Miller std %f10, [%o3 + 0x28] 22481658ad0SDavid S. Miller 22581658ad0SDavid S. Miller ldd [%o1 + 0x08], %f0 22681658ad0SDavid S. Miller ldd [%o1 + 0x00], %f2 22781658ad0SDavid S. Miller std %f0, [%o3 + 0x30] 22881658ad0SDavid S. Miller std %f2, [%o3 + 0x38] 22981658ad0SDavid S. Miller subcc %o0, (16 * 4), %o0 23081658ad0SDavid S. Miller bne,pt %icc, 1b 23181658ad0SDavid S. Miller add %o3, (16 * 4), %o3 23281658ad0SDavid S. Miller 23381658ad0SDavid S. Miller std %f2, [%o3 - 0x10] 23481658ad0SDavid S. Miller std %f0, [%o3 - 0x08] 23581658ad0SDavid S. Miller 23681658ad0SDavid S. Miller retl 23781658ad0SDavid S. Miller VISExit 23881658ad0SDavid S. MillerENDPROC(camellia_sparc64_key_expand) 23981658ad0SDavid S. Miller 24081658ad0SDavid S. Miller .align 32 24181658ad0SDavid S. MillerENTRY(camellia_sparc64_crypt) 24281658ad0SDavid S. Miller /* %o0=key, %o1=input, %o2=output, %o3=key_len */ 24381658ad0SDavid S. Miller VISEntry 24481658ad0SDavid S. Miller 24581658ad0SDavid S. Miller ld [%o1 + 0x00], %f0 24681658ad0SDavid S. Miller ld [%o1 + 0x04], %f1 24781658ad0SDavid S. Miller ld [%o1 + 0x08], %f2 24881658ad0SDavid S. Miller ld [%o1 + 0x0c], %f3 24981658ad0SDavid S. Miller 25081658ad0SDavid S. Miller ldd [%o0 + 0x00], %f4 25181658ad0SDavid S. Miller ldd [%o0 + 0x08], %f6 25281658ad0SDavid S. Miller 25381658ad0SDavid S. Miller cmp %o3, 16 25481658ad0SDavid S. Miller fxor %f4, %f0, %f0 25581658ad0SDavid S. Miller be 1f 25681658ad0SDavid S. Miller fxor %f6, %f2, %f2 25781658ad0SDavid S. Miller 25881658ad0SDavid S. Miller ldd [%o0 + 0x10], %f8 25981658ad0SDavid S. Miller ldd [%o0 + 0x18], %f10 26081658ad0SDavid S. Miller ldd [%o0 + 0x20], %f12 26181658ad0SDavid S. Miller ldd [%o0 + 0x28], %f14 26281658ad0SDavid S. Miller ldd [%o0 + 0x30], %f16 26381658ad0SDavid S. Miller ldd [%o0 + 0x38], %f18 26481658ad0SDavid S. Miller ldd [%o0 + 0x40], %f20 26581658ad0SDavid S. Miller ldd [%o0 + 0x48], %f22 26681658ad0SDavid S. Miller add %o0, 0x40, %o0 26781658ad0SDavid S. Miller 26881658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2) 26981658ad0SDavid S. Miller 27081658ad0SDavid S. Miller1: 27181658ad0SDavid S. Miller ldd [%o0 + 0x10], %f8 27281658ad0SDavid S. Miller ldd [%o0 + 0x18], %f10 27381658ad0SDavid S. Miller ldd [%o0 + 0x20], %f12 27481658ad0SDavid S. Miller ldd [%o0 + 0x28], %f14 27581658ad0SDavid S. Miller ldd [%o0 + 0x30], %f16 27681658ad0SDavid S. Miller ldd [%o0 + 0x38], %f18 27781658ad0SDavid S. Miller ldd [%o0 + 0x40], %f20 27881658ad0SDavid S. Miller ldd [%o0 + 0x48], %f22 27981658ad0SDavid S. Miller ldd [%o0 + 0x50], %f24 28081658ad0SDavid S. Miller ldd [%o0 + 0x58], %f26 28181658ad0SDavid S. Miller ldd [%o0 + 0x60], %f28 28281658ad0SDavid S. Miller ldd [%o0 + 0x68], %f30 28381658ad0SDavid S. Miller ldd [%o0 + 0x70], %f32 28481658ad0SDavid S. Miller ldd [%o0 + 0x78], %f34 28581658ad0SDavid S. Miller ldd [%o0 + 0x80], %f36 28681658ad0SDavid S. Miller ldd [%o0 + 0x88], %f38 28781658ad0SDavid S. Miller ldd [%o0 + 0x90], %f40 28881658ad0SDavid S. Miller ldd [%o0 + 0x98], %f42 28981658ad0SDavid S. Miller ldd [%o0 + 0xa0], %f44 29081658ad0SDavid S. Miller ldd [%o0 + 0xa8], %f46 29181658ad0SDavid S. Miller ldd [%o0 + 0xb0], %f48 29281658ad0SDavid S. Miller ldd [%o0 + 0xb8], %f50 29381658ad0SDavid S. Miller ldd [%o0 + 0xc0], %f52 29481658ad0SDavid S. Miller ldd [%o0 + 0xc8], %f54 29581658ad0SDavid S. Miller 29681658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2) 29781658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2) 29881658ad0SDavid S. Miller CAMELLIA_6ROUNDS(40, 0, 2) 29981658ad0SDavid S. Miller fxor %f52, %f2, %f2 30081658ad0SDavid S. Miller fxor %f54, %f0, %f0 30181658ad0SDavid S. Miller 30281658ad0SDavid S. Miller st %f2, [%o2 + 0x00] 30381658ad0SDavid S. Miller st %f3, [%o2 + 0x04] 30481658ad0SDavid S. Miller st %f0, [%o2 + 0x08] 30581658ad0SDavid S. Miller st %f1, [%o2 + 0x0c] 30681658ad0SDavid S. Miller 30781658ad0SDavid S. Miller retl 30881658ad0SDavid S. Miller VISExit 30981658ad0SDavid S. MillerENDPROC(camellia_sparc64_crypt) 31081658ad0SDavid S. Miller 31181658ad0SDavid S. Miller .align 32 31281658ad0SDavid S. MillerENTRY(camellia_sparc64_load_keys) 31381658ad0SDavid S. Miller /* %o0=key, %o1=key_len */ 31481658ad0SDavid S. Miller VISEntry 31581658ad0SDavid S. Miller ldd [%o0 + 0x00], %f4 31681658ad0SDavid S. Miller ldd [%o0 + 0x08], %f6 31781658ad0SDavid S. Miller ldd [%o0 + 0x10], %f8 31881658ad0SDavid S. Miller ldd [%o0 + 0x18], %f10 31981658ad0SDavid S. Miller ldd [%o0 + 0x20], %f12 32081658ad0SDavid S. Miller ldd [%o0 + 0x28], %f14 32181658ad0SDavid S. Miller ldd [%o0 + 0x30], %f16 32281658ad0SDavid S. Miller ldd [%o0 + 0x38], %f18 32381658ad0SDavid S. Miller ldd [%o0 + 0x40], %f20 32481658ad0SDavid S. Miller ldd [%o0 + 0x48], %f22 32581658ad0SDavid S. Miller ldd [%o0 + 0x50], %f24 32681658ad0SDavid S. Miller ldd [%o0 + 0x58], %f26 32781658ad0SDavid S. Miller ldd [%o0 + 0x60], %f28 32881658ad0SDavid S. Miller ldd [%o0 + 0x68], %f30 32981658ad0SDavid S. Miller ldd [%o0 + 0x70], %f32 33081658ad0SDavid S. Miller ldd [%o0 + 0x78], %f34 33181658ad0SDavid S. Miller ldd [%o0 + 0x80], %f36 33281658ad0SDavid S. Miller ldd [%o0 + 0x88], %f38 33381658ad0SDavid S. Miller ldd [%o0 + 0x90], %f40 33481658ad0SDavid S. Miller ldd [%o0 + 0x98], %f42 33581658ad0SDavid S. Miller ldd [%o0 + 0xa0], %f44 33681658ad0SDavid S. Miller ldd [%o0 + 0xa8], %f46 33781658ad0SDavid S. Miller ldd [%o0 + 0xb0], %f48 33881658ad0SDavid S. Miller ldd [%o0 + 0xb8], %f50 33981658ad0SDavid S. Miller ldd [%o0 + 0xc0], %f52 34081658ad0SDavid S. Miller retl 34181658ad0SDavid S. Miller ldd [%o0 + 0xc8], %f54 34281658ad0SDavid S. MillerENDPROC(camellia_sparc64_load_keys) 34381658ad0SDavid S. Miller 34481658ad0SDavid S. Miller .align 32 34581658ad0SDavid S. MillerENTRY(camellia_sparc64_ecb_crypt_3_grand_rounds) 34681658ad0SDavid S. Miller /* %o0=input, %o1=output, %o2=len, %o3=key */ 34781658ad0SDavid S. Miller1: ldd [%o0 + 0x00], %f0 34881658ad0SDavid S. Miller ldd [%o0 + 0x08], %f2 34981658ad0SDavid S. Miller add %o0, 0x10, %o0 35081658ad0SDavid S. Miller fxor %f4, %f0, %f0 35181658ad0SDavid S. Miller fxor %f6, %f2, %f2 35281658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2) 35381658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2) 35481658ad0SDavid S. Miller CAMELLIA_6ROUNDS(40, 0, 2) 35581658ad0SDavid S. Miller fxor %f52, %f2, %f2 35681658ad0SDavid S. Miller fxor %f54, %f0, %f0 35781658ad0SDavid S. Miller std %f2, [%o1 + 0x00] 35881658ad0SDavid S. Miller std %f0, [%o1 + 0x08] 35981658ad0SDavid S. Miller subcc %o2, 0x10, %o2 36081658ad0SDavid S. Miller bne,pt %icc, 1b 36181658ad0SDavid S. Miller add %o1, 0x10, %o1 36281658ad0SDavid S. Miller retl 36381658ad0SDavid S. Miller nop 36481658ad0SDavid S. MillerENDPROC(camellia_sparc64_ecb_crypt_3_grand_rounds) 36581658ad0SDavid S. Miller 36681658ad0SDavid S. Miller .align 32 36781658ad0SDavid S. MillerENTRY(camellia_sparc64_ecb_crypt_4_grand_rounds) 36881658ad0SDavid S. Miller /* %o0=input, %o1=output, %o2=len, %o3=key */ 36981658ad0SDavid S. Miller1: ldd [%o0 + 0x00], %f0 37081658ad0SDavid S. Miller ldd [%o0 + 0x08], %f2 37181658ad0SDavid S. Miller add %o0, 0x10, %o0 37281658ad0SDavid S. Miller fxor %f4, %f0, %f0 37381658ad0SDavid S. Miller fxor %f6, %f2, %f2 37481658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2) 37581658ad0SDavid S. Miller ldd [%o3 + 0xd0], %f8 37681658ad0SDavid S. Miller ldd [%o3 + 0xd8], %f10 37781658ad0SDavid S. Miller ldd [%o3 + 0xe0], %f12 37881658ad0SDavid S. Miller ldd [%o3 + 0xe8], %f14 37981658ad0SDavid S. Miller ldd [%o3 + 0xf0], %f16 38081658ad0SDavid S. Miller ldd [%o3 + 0xf8], %f18 38181658ad0SDavid S. Miller ldd [%o3 + 0x100], %f20 38281658ad0SDavid S. Miller ldd [%o3 + 0x108], %f22 38381658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2) 38481658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI(40, 0, 2) 38581658ad0SDavid S. Miller CAMELLIA_F(8, 2, 0, 2) 38681658ad0SDavid S. Miller CAMELLIA_F(10, 0, 2, 0) 38781658ad0SDavid S. Miller ldd [%o3 + 0x10], %f8 38881658ad0SDavid S. Miller ldd [%o3 + 0x18], %f10 38981658ad0SDavid S. Miller CAMELLIA_F(12, 2, 0, 2) 39081658ad0SDavid S. Miller CAMELLIA_F(14, 0, 2, 0) 39181658ad0SDavid S. Miller ldd [%o3 + 0x20], %f12 39281658ad0SDavid S. Miller ldd [%o3 + 0x28], %f14 39381658ad0SDavid S. Miller CAMELLIA_F(16, 2, 0, 2) 39481658ad0SDavid S. Miller CAMELLIA_F(18, 0, 2, 0) 39581658ad0SDavid S. Miller ldd [%o3 + 0x30], %f16 39681658ad0SDavid S. Miller ldd [%o3 + 0x38], %f18 39781658ad0SDavid S. Miller fxor %f20, %f2, %f2 39881658ad0SDavid S. Miller fxor %f22, %f0, %f0 39981658ad0SDavid S. Miller ldd [%o3 + 0x40], %f20 40081658ad0SDavid S. Miller ldd [%o3 + 0x48], %f22 40181658ad0SDavid S. Miller std %f2, [%o1 + 0x00] 40281658ad0SDavid S. Miller std %f0, [%o1 + 0x08] 40381658ad0SDavid S. Miller subcc %o2, 0x10, %o2 40481658ad0SDavid S. Miller bne,pt %icc, 1b 40581658ad0SDavid S. Miller add %o1, 0x10, %o1 40681658ad0SDavid S. Miller retl 40781658ad0SDavid S. Miller nop 40881658ad0SDavid S. MillerENDPROC(camellia_sparc64_ecb_crypt_4_grand_rounds) 40981658ad0SDavid S. Miller 41081658ad0SDavid S. Miller .align 32 41181658ad0SDavid S. MillerENTRY(camellia_sparc64_cbc_encrypt_3_grand_rounds) 41281658ad0SDavid S. Miller /* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */ 41381658ad0SDavid S. Miller ldd [%o4 + 0x00], %f60 41481658ad0SDavid S. Miller ldd [%o4 + 0x08], %f62 41581658ad0SDavid S. Miller1: ldd [%o0 + 0x00], %f0 41681658ad0SDavid S. Miller ldd [%o0 + 0x08], %f2 41781658ad0SDavid S. Miller add %o0, 0x10, %o0 41881658ad0SDavid S. Miller fxor %f60, %f0, %f0 41981658ad0SDavid S. Miller fxor %f62, %f2, %f2 42081658ad0SDavid S. Miller fxor %f4, %f0, %f0 42181658ad0SDavid S. Miller fxor %f6, %f2, %f2 42281658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2) 42381658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2) 42481658ad0SDavid S. Miller CAMELLIA_6ROUNDS(40, 0, 2) 42581658ad0SDavid S. Miller fxor %f52, %f2, %f60 42681658ad0SDavid S. Miller fxor %f54, %f0, %f62 42781658ad0SDavid S. Miller std %f60, [%o1 + 0x00] 42881658ad0SDavid S. Miller std %f62, [%o1 + 0x08] 42981658ad0SDavid S. Miller subcc %o2, 0x10, %o2 43081658ad0SDavid S. Miller bne,pt %icc, 1b 43181658ad0SDavid S. Miller add %o1, 0x10, %o1 43281658ad0SDavid S. Miller std %f60, [%o4 + 0x00] 43381658ad0SDavid S. Miller retl 43481658ad0SDavid S. Miller std %f62, [%o4 + 0x08] 43581658ad0SDavid S. MillerENDPROC(camellia_sparc64_cbc_encrypt_3_grand_rounds) 43681658ad0SDavid S. Miller 43781658ad0SDavid S. Miller .align 32 43881658ad0SDavid S. MillerENTRY(camellia_sparc64_cbc_encrypt_4_grand_rounds) 43981658ad0SDavid S. Miller /* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */ 44081658ad0SDavid S. Miller ldd [%o4 + 0x00], %f60 44181658ad0SDavid S. Miller ldd [%o4 + 0x08], %f62 44281658ad0SDavid S. Miller1: ldd [%o0 + 0x00], %f0 44381658ad0SDavid S. Miller ldd [%o0 + 0x08], %f2 44481658ad0SDavid S. Miller add %o0, 0x10, %o0 44581658ad0SDavid S. Miller fxor %f60, %f0, %f0 44681658ad0SDavid S. Miller fxor %f62, %f2, %f2 44781658ad0SDavid S. Miller fxor %f4, %f0, %f0 44881658ad0SDavid S. Miller fxor %f6, %f2, %f2 44981658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2) 45081658ad0SDavid S. Miller ldd [%o3 + 0xd0], %f8 45181658ad0SDavid S. Miller ldd [%o3 + 0xd8], %f10 45281658ad0SDavid S. Miller ldd [%o3 + 0xe0], %f12 45381658ad0SDavid S. Miller ldd [%o3 + 0xe8], %f14 45481658ad0SDavid S. Miller ldd [%o3 + 0xf0], %f16 45581658ad0SDavid S. Miller ldd [%o3 + 0xf8], %f18 45681658ad0SDavid S. Miller ldd [%o3 + 0x100], %f20 45781658ad0SDavid S. Miller ldd [%o3 + 0x108], %f22 45881658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2) 45981658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI(40, 0, 2) 46081658ad0SDavid S. Miller CAMELLIA_F(8, 2, 0, 2) 46181658ad0SDavid S. Miller CAMELLIA_F(10, 0, 2, 0) 46281658ad0SDavid S. Miller ldd [%o3 + 0x10], %f8 46381658ad0SDavid S. Miller ldd [%o3 + 0x18], %f10 46481658ad0SDavid S. Miller CAMELLIA_F(12, 2, 0, 2) 46581658ad0SDavid S. Miller CAMELLIA_F(14, 0, 2, 0) 46681658ad0SDavid S. Miller ldd [%o3 + 0x20], %f12 46781658ad0SDavid S. Miller ldd [%o3 + 0x28], %f14 46881658ad0SDavid S. Miller CAMELLIA_F(16, 2, 0, 2) 46981658ad0SDavid S. Miller CAMELLIA_F(18, 0, 2, 0) 47081658ad0SDavid S. Miller ldd [%o3 + 0x30], %f16 47181658ad0SDavid S. Miller ldd [%o3 + 0x38], %f18 47281658ad0SDavid S. Miller fxor %f20, %f2, %f60 47381658ad0SDavid S. Miller fxor %f22, %f0, %f62 47481658ad0SDavid S. Miller ldd [%o3 + 0x40], %f20 47581658ad0SDavid S. Miller ldd [%o3 + 0x48], %f22 47681658ad0SDavid S. Miller std %f60, [%o1 + 0x00] 47781658ad0SDavid S. Miller std %f62, [%o1 + 0x08] 47881658ad0SDavid S. Miller subcc %o2, 0x10, %o2 47981658ad0SDavid S. Miller bne,pt %icc, 1b 48081658ad0SDavid S. Miller add %o1, 0x10, %o1 48181658ad0SDavid S. Miller std %f60, [%o4 + 0x00] 48281658ad0SDavid S. Miller retl 48381658ad0SDavid S. Miller std %f62, [%o4 + 0x08] 48481658ad0SDavid S. MillerENDPROC(camellia_sparc64_cbc_encrypt_4_grand_rounds) 48581658ad0SDavid S. Miller 48681658ad0SDavid S. Miller .align 32 48781658ad0SDavid S. MillerENTRY(camellia_sparc64_cbc_decrypt_3_grand_rounds) 48881658ad0SDavid S. Miller /* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */ 48981658ad0SDavid S. Miller ldd [%o4 + 0x00], %f60 49081658ad0SDavid S. Miller ldd [%o4 + 0x08], %f62 49181658ad0SDavid S. Miller1: ldd [%o0 + 0x00], %f56 49281658ad0SDavid S. Miller ldd [%o0 + 0x08], %f58 49381658ad0SDavid S. Miller add %o0, 0x10, %o0 49481658ad0SDavid S. Miller fxor %f4, %f56, %f0 49581658ad0SDavid S. Miller fxor %f6, %f58, %f2 49681658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2) 49781658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2) 49881658ad0SDavid S. Miller CAMELLIA_6ROUNDS(40, 0, 2) 49981658ad0SDavid S. Miller fxor %f52, %f2, %f2 50081658ad0SDavid S. Miller fxor %f54, %f0, %f0 50181658ad0SDavid S. Miller fxor %f60, %f2, %f2 50281658ad0SDavid S. Miller fxor %f62, %f0, %f0 50381658ad0SDavid S. Miller fsrc2 %f56, %f60 50481658ad0SDavid S. Miller fsrc2 %f58, %f62 50581658ad0SDavid S. Miller std %f2, [%o1 + 0x00] 50681658ad0SDavid S. Miller std %f0, [%o1 + 0x08] 50781658ad0SDavid S. Miller subcc %o2, 0x10, %o2 50881658ad0SDavid S. Miller bne,pt %icc, 1b 50981658ad0SDavid S. Miller add %o1, 0x10, %o1 51081658ad0SDavid S. Miller std %f60, [%o4 + 0x00] 51181658ad0SDavid S. Miller retl 51281658ad0SDavid S. Miller std %f62, [%o4 + 0x08] 51381658ad0SDavid S. MillerENDPROC(camellia_sparc64_cbc_decrypt_3_grand_rounds) 51481658ad0SDavid S. Miller 51581658ad0SDavid S. Miller .align 32 51681658ad0SDavid S. MillerENTRY(camellia_sparc64_cbc_decrypt_4_grand_rounds) 51781658ad0SDavid S. Miller /* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */ 51881658ad0SDavid S. Miller ldd [%o4 + 0x00], %f60 51981658ad0SDavid S. Miller ldd [%o4 + 0x08], %f62 52081658ad0SDavid S. Miller1: ldd [%o0 + 0x00], %f56 52181658ad0SDavid S. Miller ldd [%o0 + 0x08], %f58 52281658ad0SDavid S. Miller add %o0, 0x10, %o0 52381658ad0SDavid S. Miller fxor %f4, %f56, %f0 52481658ad0SDavid S. Miller fxor %f6, %f58, %f2 52581658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2) 52681658ad0SDavid S. Miller ldd [%o3 + 0xd0], %f8 52781658ad0SDavid S. Miller ldd [%o3 + 0xd8], %f10 52881658ad0SDavid S. Miller ldd [%o3 + 0xe0], %f12 52981658ad0SDavid S. Miller ldd [%o3 + 0xe8], %f14 53081658ad0SDavid S. Miller ldd [%o3 + 0xf0], %f16 53181658ad0SDavid S. Miller ldd [%o3 + 0xf8], %f18 53281658ad0SDavid S. Miller ldd [%o3 + 0x100], %f20 53381658ad0SDavid S. Miller ldd [%o3 + 0x108], %f22 53481658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2) 53581658ad0SDavid S. Miller CAMELLIA_6ROUNDS_FL_FLI(40, 0, 2) 53681658ad0SDavid S. Miller CAMELLIA_F(8, 2, 0, 2) 53781658ad0SDavid S. Miller CAMELLIA_F(10, 0, 2, 0) 53881658ad0SDavid S. Miller ldd [%o3 + 0x10], %f8 53981658ad0SDavid S. Miller ldd [%o3 + 0x18], %f10 54081658ad0SDavid S. Miller CAMELLIA_F(12, 2, 0, 2) 54181658ad0SDavid S. Miller CAMELLIA_F(14, 0, 2, 0) 54281658ad0SDavid S. Miller ldd [%o3 + 0x20], %f12 54381658ad0SDavid S. Miller ldd [%o3 + 0x28], %f14 54481658ad0SDavid S. Miller CAMELLIA_F(16, 2, 0, 2) 54581658ad0SDavid S. Miller CAMELLIA_F(18, 0, 2, 0) 54681658ad0SDavid S. Miller ldd [%o3 + 0x30], %f16 54781658ad0SDavid S. Miller ldd [%o3 + 0x38], %f18 54881658ad0SDavid S. Miller fxor %f20, %f2, %f2 54981658ad0SDavid S. Miller fxor %f22, %f0, %f0 55081658ad0SDavid S. Miller ldd [%o3 + 0x40], %f20 55181658ad0SDavid S. Miller ldd [%o3 + 0x48], %f22 55281658ad0SDavid S. Miller fxor %f60, %f2, %f2 55381658ad0SDavid S. Miller fxor %f62, %f0, %f0 55481658ad0SDavid S. Miller fsrc2 %f56, %f60 55581658ad0SDavid S. Miller fsrc2 %f58, %f62 55681658ad0SDavid S. Miller std %f2, [%o1 + 0x00] 55781658ad0SDavid S. Miller std %f0, [%o1 + 0x08] 55881658ad0SDavid S. Miller subcc %o2, 0x10, %o2 55981658ad0SDavid S. Miller bne,pt %icc, 1b 56081658ad0SDavid S. Miller add %o1, 0x10, %o1 56181658ad0SDavid S. Miller std %f60, [%o4 + 0x00] 56281658ad0SDavid S. Miller retl 56381658ad0SDavid S. Miller std %f62, [%o4 + 0x08] 56481658ad0SDavid S. MillerENDPROC(camellia_sparc64_cbc_decrypt_4_grand_rounds) 565