^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) #define CAMELLIA_6ROUNDS(KEY_BASE, I0, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) CAMELLIA_F(KEY_BASE + 0, I1, I0, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) CAMELLIA_F(KEY_BASE + 2, I0, I1, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) CAMELLIA_F(KEY_BASE + 4, I1, I0, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) CAMELLIA_F(KEY_BASE + 6, I0, I1, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) CAMELLIA_F(KEY_BASE + 8, I1, I0, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) CAMELLIA_F(KEY_BASE + 10, I0, I1, I0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define CAMELLIA_6ROUNDS_FL_FLI(KEY_BASE, I0, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) CAMELLIA_6ROUNDS(KEY_BASE, I0, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) CAMELLIA_FL(KEY_BASE + 12, I0, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) CAMELLIA_FLI(KEY_BASE + 14, I1, I1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) .data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) .align 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) SIGMA: .xword 0xA09E667F3BCC908B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) .xword 0xB67AE8584CAA73B2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) .xword 0xC6EF372FE94F82BE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) .xword 0x54FF53A5F1D36F1C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) .xword 0x10E527FADE682D1D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) .xword 0xB05688C2B3E6C1FD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) .text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) ENTRY(camellia_sparc64_key_expand)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) /* %o0=in_key, %o1=encrypt_key, %o2=key_len, %o3=decrypt_key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) ld [%o0 + 0x00], %f0 ! i0, k[0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) ld [%o0 + 0x04], %f1 ! i1, k[1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) ld [%o0 + 0x08], %f2 ! i2, k[2]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) ld [%o0 + 0x0c], %f3 ! i3, k[3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) std %f0, [%o1 + 0x00] ! k[0, 1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) fsrc2 %f0, %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) std %f2, [%o1 + 0x08] ! k[2, 3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) cmp %o2, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) be 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) fsrc2 %f2, %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) ld [%o0 + 0x10], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) ld [%o0 + 0x14], %f1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) std %f0, [%o1 + 0x20] ! k[8, 9]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) cmp %o2, 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) fone %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) be,a 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) fxor %f10, %f0, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) ld [%o0 + 0x18], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) ld [%o0 + 0x1c], %f3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) std %f2, [%o1 + 0x28] ! k[10, 11]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) fxor %f28, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) fxor %f30, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 10:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) sethi %hi(SIGMA), %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) or %g3, %lo(SIGMA), %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) ldd [%g3 + 0x00], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) ldd [%g3 + 0x08], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) ldd [%g3 + 0x10], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) ldd [%g3 + 0x18], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) ldd [%g3 + 0x20], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) ldd [%g3 + 0x28], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) CAMELLIA_F(16, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) CAMELLIA_F(18, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) fxor %f28, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) fxor %f30, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) CAMELLIA_F(20, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) CAMELLIA_F(22, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define ROTL128(S01, S23, TMP1, TMP2, N) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) srlx S01, (64 - N), TMP1; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) sllx S01, N, S01; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) srlx S23, (64 - N), TMP2; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) sllx S23, N, S23; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) or S01, TMP2, S01; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) or S23, TMP1, S23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) cmp %o2, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) bne 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) /* 128-bit key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) std %f0, [%o1 + 0x10] ! k[ 4, 5]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) std %f2, [%o1 + 0x18] ! k[ 6, 7]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) MOVDTOX_F0_O4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) MOVDTOX_F2_O5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) stx %o4, [%o1 + 0x30] ! k[12, 13]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) stx %o5, [%o1 + 0x38] ! k[14, 15]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) stx %o4, [%o1 + 0x40] ! k[16, 17]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) stx %o5, [%o1 + 0x48] ! k[18, 19]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) stx %o4, [%o1 + 0x60] ! k[24, 25]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) stx %o4, [%o1 + 0x70] ! k[28, 29]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) stx %o5, [%o1 + 0x78] ! k[30, 31]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) ROTL128(%o4, %o5, %g2, %g3, 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) stx %o4, [%o1 + 0xa0] ! k[40, 41]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) stx %o5, [%o1 + 0xa8] ! k[42, 43]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) ROTL128(%o4, %o5, %g2, %g3, 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) stx %o4, [%o1 + 0xc0] ! k[48, 49]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) stx %o5, [%o1 + 0xc8] ! k[50, 51]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) ldx [%o1 + 0x00], %o4 ! k[ 0, 1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) ldx [%o1 + 0x08], %o5 ! k[ 2, 3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) stx %o4, [%o1 + 0x20] ! k[ 8, 9]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) stx %o5, [%o1 + 0x28] ! k[10, 11]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) ROTL128(%o4, %o5, %g2, %g3, 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) stx %o4, [%o1 + 0x50] ! k[20, 21]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) stx %o5, [%o1 + 0x58] ! k[22, 23]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) stx %o5, [%o1 + 0x68] ! k[26, 27]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) ROTL128(%o4, %o5, %g2, %g3, 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) stx %o4, [%o1 + 0x80] ! k[32, 33]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) stx %o5, [%o1 + 0x88] ! k[34, 35]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) ROTL128(%o4, %o5, %g2, %g3, 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) stx %o4, [%o1 + 0x90] ! k[36, 37]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) stx %o5, [%o1 + 0x98] ! k[38, 39]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) ROTL128(%o4, %o5, %g2, %g3, 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) stx %o4, [%o1 + 0xb0] ! k[44, 45]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) stx %o5, [%o1 + 0xb8] ! k[46, 47]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) ba,pt %xcc, 2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) mov (3 * 16 * 4), %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) /* 192-bit or 256-bit key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) std %f0, [%o1 + 0x30] ! k[12, 13]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) std %f2, [%o1 + 0x38] ! k[14, 15]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) ldd [%o1 + 0x20], %f4 ! k[ 8, 9]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) ldd [%o1 + 0x28], %f6 ! k[10, 11]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) fxor %f0, %f4, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) fxor %f2, %f6, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) CAMELLIA_F(24, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) CAMELLIA_F(26, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) std %f0, [%o1 + 0x10] ! k[ 4, 5]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) std %f2, [%o1 + 0x18] ! k[ 6, 7]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) MOVDTOX_F0_O4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) MOVDTOX_F2_O5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) ROTL128(%o4, %o5, %g2, %g3, 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) stx %o4, [%o1 + 0x50] ! k[20, 21]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) stx %o5, [%o1 + 0x58] ! k[22, 23]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) ROTL128(%o4, %o5, %g2, %g3, 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) stx %o4, [%o1 + 0xa0] ! k[40, 41]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) stx %o5, [%o1 + 0xa8] ! k[42, 43]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) ROTL128(%o4, %o5, %g2, %g3, 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) stx %o4, [%o1 + 0x100] ! k[64, 65]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) stx %o5, [%o1 + 0x108] ! k[66, 67]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) ldx [%o1 + 0x20], %o4 ! k[ 8, 9]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) ldx [%o1 + 0x28], %o5 ! k[10, 11]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) stx %o4, [%o1 + 0x20] ! k[ 8, 9]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) stx %o5, [%o1 + 0x28] ! k[10, 11]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) stx %o4, [%o1 + 0x40] ! k[16, 17]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) stx %o5, [%o1 + 0x48] ! k[18, 19]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) ROTL128(%o4, %o5, %g2, %g3, 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) stx %o4, [%o1 + 0x90] ! k[36, 37]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) stx %o5, [%o1 + 0x98] ! k[38, 39]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) ROTL128(%o4, %o5, %g2, %g3, 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) stx %o4, [%o1 + 0xd0] ! k[52, 53]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) stx %o5, [%o1 + 0xd8] ! k[54, 55]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) ldx [%o1 + 0x30], %o4 ! k[12, 13]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) ldx [%o1 + 0x38], %o5 ! k[14, 15]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) stx %o4, [%o1 + 0x30] ! k[12, 13]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) stx %o5, [%o1 + 0x38] ! k[14, 15]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) ROTL128(%o4, %o5, %g2, %g3, 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) stx %o4, [%o1 + 0x70] ! k[28, 29]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) stx %o5, [%o1 + 0x78] ! k[30, 31]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) srlx %o4, 32, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) srlx %o5, 32, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) stw %o4, [%o1 + 0xc0] ! k[48]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) stw %g3, [%o1 + 0xc4] ! k[49]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) stw %o5, [%o1 + 0xc8] ! k[50]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) stw %g2, [%o1 + 0xcc] ! k[51]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) ROTL128(%o4, %o5, %g2, %g3, 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) stx %o4, [%o1 + 0xe0] ! k[56, 57]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) stx %o5, [%o1 + 0xe8] ! k[58, 59]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) ldx [%o1 + 0x00], %o4 ! k[ 0, 1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) ldx [%o1 + 0x08], %o5 ! k[ 2, 3]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) ROTL128(%o4, %o5, %g2, %g3, 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) stx %o4, [%o1 + 0x60] ! k[24, 25]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) stx %o5, [%o1 + 0x68] ! k[26, 27]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) ROTL128(%o4, %o5, %g2, %g3, 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) stx %o4, [%o1 + 0x80] ! k[32, 33]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) stx %o5, [%o1 + 0x88] ! k[34, 35]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) ROTL128(%o4, %o5, %g2, %g3, 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) stx %o4, [%o1 + 0xb0] ! k[44, 45]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) stx %o5, [%o1 + 0xb8] ! k[46, 47]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) ROTL128(%o4, %o5, %g2, %g3, 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) stx %o4, [%o1 + 0xf0] ! k[60, 61]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) stx %o5, [%o1 + 0xf8] ! k[62, 63]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) mov (4 * 16 * 4), %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) add %o1, %o0, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) ldd [%o1 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) ldd [%o1 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) std %f0, [%o3 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) std %f2, [%o3 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) add %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) sub %o1, (16 * 4), %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) ldd [%o1 + 0x38], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) ldd [%o1 + 0x30], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) ldd [%o1 + 0x28], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) ldd [%o1 + 0x20], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) ldd [%o1 + 0x18], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) ldd [%o1 + 0x10], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) std %f0, [%o3 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) std %f2, [%o3 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) std %f4, [%o3 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) std %f6, [%o3 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) std %f8, [%o3 + 0x20]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) std %f10, [%o3 + 0x28]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) ldd [%o1 + 0x08], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) ldd [%o1 + 0x00], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) std %f0, [%o3 + 0x30]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) std %f2, [%o3 + 0x38]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) subcc %o0, (16 * 4), %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) bne,pt %icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) add %o3, (16 * 4), %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) std %f2, [%o3 - 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) std %f0, [%o3 - 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) VISExit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) ENDPROC(camellia_sparc64_key_expand)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) ENTRY(camellia_sparc64_crypt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) /* %o0=key, %o1=input, %o2=output, %o3=key_len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) ld [%o1 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) ld [%o1 + 0x04], %f1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) ld [%o1 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) ld [%o1 + 0x0c], %f3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) ldd [%o0 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) ldd [%o0 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) cmp %o3, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) fxor %f4, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) be 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) fxor %f6, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) ldd [%o0 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) ldd [%o0 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) ldd [%o0 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) ldd [%o0 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) ldd [%o0 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) ldd [%o0 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) ldd [%o0 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) ldd [%o0 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) add %o0, 0x40, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) ldd [%o0 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) ldd [%o0 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) ldd [%o0 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) ldd [%o0 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) ldd [%o0 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) ldd [%o0 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) ldd [%o0 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) ldd [%o0 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) ldd [%o0 + 0x50], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) ldd [%o0 + 0x58], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) ldd [%o0 + 0x60], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) ldd [%o0 + 0x68], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) ldd [%o0 + 0x70], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) ldd [%o0 + 0x78], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) ldd [%o0 + 0x80], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) ldd [%o0 + 0x88], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) ldd [%o0 + 0x90], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) ldd [%o0 + 0x98], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) ldd [%o0 + 0xa0], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) ldd [%o0 + 0xa8], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) ldd [%o0 + 0xb0], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) ldd [%o0 + 0xb8], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) ldd [%o0 + 0xc0], %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) ldd [%o0 + 0xc8], %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) CAMELLIA_6ROUNDS(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) fxor %f52, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) fxor %f54, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) st %f2, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) st %f3, [%o2 + 0x04]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) st %f0, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) st %f1, [%o2 + 0x0c]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) VISExit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) ENDPROC(camellia_sparc64_crypt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) ENTRY(camellia_sparc64_load_keys)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) /* %o0=key, %o1=key_len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) ldd [%o0 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) ldd [%o0 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) ldd [%o0 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) ldd [%o0 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) ldd [%o0 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) ldd [%o0 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) ldd [%o0 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) ldd [%o0 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) ldd [%o0 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) ldd [%o0 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) ldd [%o0 + 0x50], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) ldd [%o0 + 0x58], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) ldd [%o0 + 0x60], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) ldd [%o0 + 0x68], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) ldd [%o0 + 0x70], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) ldd [%o0 + 0x78], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) ldd [%o0 + 0x80], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) ldd [%o0 + 0x88], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) ldd [%o0 + 0x90], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) ldd [%o0 + 0x98], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) ldd [%o0 + 0xa0], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) ldd [%o0 + 0xa8], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) ldd [%o0 + 0xb0], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) ldd [%o0 + 0xb8], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) ldd [%o0 + 0xc0], %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) ldd [%o0 + 0xc8], %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) ENDPROC(camellia_sparc64_load_keys)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) ENTRY(camellia_sparc64_ecb_crypt_3_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) /* %o0=input, %o1=output, %o2=len, %o3=key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 1: ldd [%o0 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) ldd [%o0 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) add %o0, 0x10, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) fxor %f4, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) fxor %f6, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) CAMELLIA_6ROUNDS(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) fxor %f52, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) fxor %f54, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) std %f2, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) std %f0, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) subcc %o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) bne,pt %icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) ENDPROC(camellia_sparc64_ecb_crypt_3_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) ENTRY(camellia_sparc64_ecb_crypt_4_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) /* %o0=input, %o1=output, %o2=len, %o3=key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 1: ldd [%o0 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) ldd [%o0 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) add %o0, 0x10, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) fxor %f4, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) fxor %f6, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) ldd [%o3 + 0xd0], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) ldd [%o3 + 0xd8], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) ldd [%o3 + 0xe0], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) ldd [%o3 + 0xe8], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) ldd [%o3 + 0xf0], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) ldd [%o3 + 0xf8], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) ldd [%o3 + 0x100], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) ldd [%o3 + 0x108], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) CAMELLIA_6ROUNDS_FL_FLI(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) CAMELLIA_F(8, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) CAMELLIA_F(10, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) ldd [%o3 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) ldd [%o3 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) CAMELLIA_F(12, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) CAMELLIA_F(14, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) ldd [%o3 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) ldd [%o3 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) CAMELLIA_F(16, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) CAMELLIA_F(18, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) ldd [%o3 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) ldd [%o3 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) fxor %f20, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) fxor %f22, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) ldd [%o3 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) ldd [%o3 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) std %f2, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) std %f0, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) subcc %o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) bne,pt %icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) ENDPROC(camellia_sparc64_ecb_crypt_4_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) ENTRY(camellia_sparc64_cbc_encrypt_3_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) /* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) ldd [%o4 + 0x00], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) ldd [%o4 + 0x08], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) 1: ldd [%o0 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) ldd [%o0 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) add %o0, 0x10, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) fxor %f60, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) fxor %f62, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) fxor %f4, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) fxor %f6, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) CAMELLIA_6ROUNDS(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) fxor %f52, %f2, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) fxor %f54, %f0, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) std %f60, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) std %f62, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) subcc %o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) bne,pt %icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) std %f60, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) std %f62, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) ENDPROC(camellia_sparc64_cbc_encrypt_3_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) ENTRY(camellia_sparc64_cbc_encrypt_4_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) /* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) ldd [%o4 + 0x00], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) ldd [%o4 + 0x08], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) 1: ldd [%o0 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) ldd [%o0 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) add %o0, 0x10, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) fxor %f60, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) fxor %f62, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) fxor %f4, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) fxor %f6, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) ldd [%o3 + 0xd0], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) ldd [%o3 + 0xd8], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) ldd [%o3 + 0xe0], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) ldd [%o3 + 0xe8], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) ldd [%o3 + 0xf0], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) ldd [%o3 + 0xf8], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) ldd [%o3 + 0x100], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) ldd [%o3 + 0x108], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) CAMELLIA_6ROUNDS_FL_FLI(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) CAMELLIA_F(8, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) CAMELLIA_F(10, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) ldd [%o3 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) ldd [%o3 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) CAMELLIA_F(12, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) CAMELLIA_F(14, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) ldd [%o3 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) ldd [%o3 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) CAMELLIA_F(16, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) CAMELLIA_F(18, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) ldd [%o3 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) ldd [%o3 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) fxor %f20, %f2, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) fxor %f22, %f0, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) ldd [%o3 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) ldd [%o3 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) std %f60, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) std %f62, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) subcc %o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) bne,pt %icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) std %f60, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) std %f62, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) ENDPROC(camellia_sparc64_cbc_encrypt_4_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) ENTRY(camellia_sparc64_cbc_decrypt_3_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) /* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) ldd [%o4 + 0x00], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) ldd [%o4 + 0x08], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) 1: ldd [%o0 + 0x00], %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) ldd [%o0 + 0x08], %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) add %o0, 0x10, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) fxor %f4, %f56, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) fxor %f6, %f58, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) CAMELLIA_6ROUNDS(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) fxor %f52, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) fxor %f54, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) fxor %f60, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) fxor %f62, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) fsrc2 %f56, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) fsrc2 %f58, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) std %f2, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) std %f0, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) subcc %o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) bne,pt %icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) std %f60, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) std %f62, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) ENDPROC(camellia_sparc64_cbc_decrypt_3_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) ENTRY(camellia_sparc64_cbc_decrypt_4_grand_rounds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) /* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) ldd [%o4 + 0x00], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) ldd [%o4 + 0x08], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) 1: ldd [%o0 + 0x00], %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) ldd [%o0 + 0x08], %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) add %o0, 0x10, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) fxor %f4, %f56, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) fxor %f6, %f58, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) CAMELLIA_6ROUNDS_FL_FLI( 8, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) ldd [%o3 + 0xd0], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) ldd [%o3 + 0xd8], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) ldd [%o3 + 0xe0], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) ldd [%o3 + 0xe8], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) ldd [%o3 + 0xf0], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) ldd [%o3 + 0xf8], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) ldd [%o3 + 0x100], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) ldd [%o3 + 0x108], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) CAMELLIA_6ROUNDS_FL_FLI(24, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) CAMELLIA_6ROUNDS_FL_FLI(40, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) CAMELLIA_F(8, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) CAMELLIA_F(10, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) ldd [%o3 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) ldd [%o3 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) CAMELLIA_F(12, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) CAMELLIA_F(14, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) ldd [%o3 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) ldd [%o3 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) CAMELLIA_F(16, 2, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) CAMELLIA_F(18, 0, 2, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) ldd [%o3 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) ldd [%o3 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) fxor %f20, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) fxor %f22, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) ldd [%o3 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) ldd [%o3 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) fxor %f60, %f2, %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) fxor %f62, %f0, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) fsrc2 %f56, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) fsrc2 %f58, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) std %f2, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) std %f0, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) subcc %o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) bne,pt %icc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) std %f60, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) std %f62, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) ENDPROC(camellia_sparc64_cbc_decrypt_4_grand_rounds)