^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 ENCRYPT_TWO_ROUNDS(KEY_BASE, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) AES_EROUND01(KEY_BASE + 4, T0, T1, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) AES_EROUND23(KEY_BASE + 6, T0, T1, I1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define ENCRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) AES_EROUND01(KEY_BASE + 0, I2, I3, T2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) AES_EROUND23(KEY_BASE + 2, I2, I3, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) AES_EROUND01(KEY_BASE + 4, T0, T1, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) AES_EROUND23(KEY_BASE + 6, T0, T1, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) AES_EROUND01(KEY_BASE + 4, T2, T3, I2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) AES_EROUND23(KEY_BASE + 6, T2, T3, I3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) AES_EROUND01_L(KEY_BASE + 4, T0, T1, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) AES_EROUND23_L(KEY_BASE + 6, T0, T1, I1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) AES_EROUND01(KEY_BASE + 0, I2, I3, T2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) AES_EROUND23(KEY_BASE + 2, I2, I3, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) AES_EROUND01_L(KEY_BASE + 4, T0, T1, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) AES_EROUND23_L(KEY_BASE + 6, T0, T1, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) AES_EROUND01_L(KEY_BASE + 4, T2, T3, I2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) AES_EROUND23_L(KEY_BASE + 6, T2, T3, I3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) /* 10 rounds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define ENCRYPT_128(KEY_BASE, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 32, I0, I1, T0, T1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define ENCRYPT_128_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) /* 12 rounds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define ENCRYPT_192(KEY_BASE, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) ENCRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 40, I0, I1, T0, T1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define ENCRYPT_192_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 40, I0, I1, I2, I3, T0, T1, T2, T3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) /* 14 rounds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define ENCRYPT_256(KEY_BASE, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) ENCRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) ENCRYPT_TWO_ROUNDS(KEY_BASE + 40, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 48, I0, I1, T0, T1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, TMP_BASE) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) ENCRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) TMP_BASE + 0, TMP_BASE + 2, TMP_BASE + 4, TMP_BASE + 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define ENCRYPT_256_2(KEY_BASE, I0, I1, I2, I3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, KEY_BASE + 48) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) ldd [%o0 + 0xd0], %f56; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) ldd [%o0 + 0xd8], %f58; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, KEY_BASE + 0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) ldd [%o0 + 0xe0], %f60; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) ldd [%o0 + 0xe8], %f62; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, KEY_BASE + 0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, KEY_BASE + 0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, KEY_BASE + 0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 40, I0, I1, I2, I3, KEY_BASE + 0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) AES_EROUND01(KEY_BASE + 48, I0, I1, KEY_BASE + 0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) AES_EROUND23(KEY_BASE + 50, I0, I1, KEY_BASE + 2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) AES_EROUND01(KEY_BASE + 48, I2, I3, KEY_BASE + 4) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) AES_EROUND23(KEY_BASE + 50, I2, I3, KEY_BASE + 6) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) AES_EROUND01_L(KEY_BASE + 52, KEY_BASE + 0, KEY_BASE + 2, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) AES_EROUND23_L(KEY_BASE + 54, KEY_BASE + 0, KEY_BASE + 2, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) ldd [%o0 + 0x10], %f8; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) ldd [%o0 + 0x18], %f10; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) AES_EROUND01_L(KEY_BASE + 52, KEY_BASE + 4, KEY_BASE + 6, I2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) AES_EROUND23_L(KEY_BASE + 54, KEY_BASE + 4, KEY_BASE + 6, I3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) ldd [%o0 + 0x20], %f12; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) ldd [%o0 + 0x28], %f14;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define DECRYPT_TWO_ROUNDS(KEY_BASE, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) AES_DROUND23(KEY_BASE + 4, T0, T1, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) AES_DROUND01(KEY_BASE + 6, T0, T1, I0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define DECRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) AES_DROUND23(KEY_BASE + 0, I2, I3, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) AES_DROUND01(KEY_BASE + 2, I2, I3, T2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) AES_DROUND23(KEY_BASE + 4, T0, T1, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) AES_DROUND01(KEY_BASE + 6, T0, T1, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) AES_DROUND23(KEY_BASE + 4, T2, T3, I3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) AES_DROUND01(KEY_BASE + 6, T2, T3, I2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define DECRYPT_TWO_ROUNDS_LAST(KEY_BASE, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) AES_DROUND23_L(KEY_BASE + 4, T0, T1, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) AES_DROUND01_L(KEY_BASE + 6, T0, T1, I0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) AES_DROUND23(KEY_BASE + 0, I2, I3, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) AES_DROUND01(KEY_BASE + 2, I2, I3, T2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) AES_DROUND23_L(KEY_BASE + 4, T0, T1, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) AES_DROUND01_L(KEY_BASE + 6, T0, T1, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) AES_DROUND23_L(KEY_BASE + 4, T2, T3, I3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) AES_DROUND01_L(KEY_BASE + 6, T2, T3, I2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) /* 10 rounds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define DECRYPT_128(KEY_BASE, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 32, I0, I1, T0, T1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define DECRYPT_128_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) DECRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) DECRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) DECRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) DECRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) /* 12 rounds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define DECRYPT_192(KEY_BASE, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) DECRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 40, I0, I1, T0, T1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) #define DECRYPT_192_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) DECRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) DECRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) DECRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) DECRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) DECRYPT_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 40, I0, I1, I2, I3, T0, T1, T2, T3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) /* 14 rounds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) #define DECRYPT_256(KEY_BASE, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) DECRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) DECRYPT_TWO_ROUNDS(KEY_BASE + 40, I0, I1, T0, T1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 48, I0, I1, T0, T1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) #define DECRYPT_256_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, TMP_BASE) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) DECRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) TMP_BASE + 0, TMP_BASE + 2, TMP_BASE + 4, TMP_BASE + 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) #define DECRYPT_256_2(KEY_BASE, I0, I1, I2, I3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, KEY_BASE + 48) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) ldd [%o0 + 0x18], %f56; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) ldd [%o0 + 0x10], %f58; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, KEY_BASE + 0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) ldd [%o0 + 0x08], %f60; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) ldd [%o0 + 0x00], %f62; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, KEY_BASE + 0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, KEY_BASE + 0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, KEY_BASE + 0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 40, I0, I1, I2, I3, KEY_BASE + 0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) AES_DROUND23(KEY_BASE + 48, I0, I1, KEY_BASE + 2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) AES_DROUND01(KEY_BASE + 50, I0, I1, KEY_BASE + 0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) AES_DROUND23(KEY_BASE + 48, I2, I3, KEY_BASE + 6) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) AES_DROUND01(KEY_BASE + 50, I2, I3, KEY_BASE + 4) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) AES_DROUND23_L(KEY_BASE + 52, KEY_BASE + 0, KEY_BASE + 2, I1) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) AES_DROUND01_L(KEY_BASE + 54, KEY_BASE + 0, KEY_BASE + 2, I0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) ldd [%o0 + 0xd8], %f8; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) ldd [%o0 + 0xd0], %f10; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) AES_DROUND23_L(KEY_BASE + 52, KEY_BASE + 4, KEY_BASE + 6, I3) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) AES_DROUND01_L(KEY_BASE + 54, KEY_BASE + 4, KEY_BASE + 6, I2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) ldd [%o0 + 0xc8], %f12; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) ldd [%o0 + 0xc0], %f14;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) ENTRY(aes_sparc64_key_expand)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) /* %o0=input_key, %o1=output_key, %o2=key_len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) ld [%o0 + 0x00], %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) ld [%o0 + 0x04], %f1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) ld [%o0 + 0x08], %f2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) ld [%o0 + 0x0c], %f3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) std %f0, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) std %f2, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) cmp %o2, 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) bl 2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) be 1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) /* 256-bit key expansion */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) ld [%o0 + 0x10], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) ld [%o0 + 0x14], %f5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) ld [%o0 + 0x18], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) ld [%o0 + 0x1c], %f7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) std %f4, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) std %f6, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) AES_KEXPAND1(0, 6, 0x0, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) AES_KEXPAND2(2, 8, 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) AES_KEXPAND0(4, 10, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) AES_KEXPAND2(6, 12, 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) AES_KEXPAND1(8, 14, 0x1, 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) AES_KEXPAND2(10, 16, 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) AES_KEXPAND0(12, 18, 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) AES_KEXPAND2(14, 20, 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) AES_KEXPAND1(16, 22, 0x2, 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) AES_KEXPAND2(18, 24, 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) AES_KEXPAND0(20, 26, 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) AES_KEXPAND2(22, 28, 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) AES_KEXPAND1(24, 30, 0x3, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) AES_KEXPAND2(26, 32, 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) AES_KEXPAND0(28, 34, 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) AES_KEXPAND2(30, 36, 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) AES_KEXPAND1(32, 38, 0x4, 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) AES_KEXPAND2(34, 40, 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) AES_KEXPAND0(36, 42, 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) AES_KEXPAND2(38, 44, 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) AES_KEXPAND1(40, 46, 0x5, 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) AES_KEXPAND2(42, 48, 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) AES_KEXPAND0(44, 50, 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) AES_KEXPAND2(46, 52, 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) AES_KEXPAND1(48, 54, 0x6, 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) AES_KEXPAND2(50, 56, 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) std %f8, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) std %f10, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) std %f12, [%o1 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) std %f14, [%o1 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) std %f16, [%o1 + 0x20]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) std %f18, [%o1 + 0x28]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) std %f20, [%o1 + 0x30]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) std %f22, [%o1 + 0x38]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) std %f24, [%o1 + 0x40]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) std %f26, [%o1 + 0x48]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) std %f28, [%o1 + 0x50]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) std %f30, [%o1 + 0x58]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) std %f32, [%o1 + 0x60]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) std %f34, [%o1 + 0x68]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) std %f36, [%o1 + 0x70]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) std %f38, [%o1 + 0x78]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) std %f40, [%o1 + 0x80]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) std %f42, [%o1 + 0x88]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) std %f44, [%o1 + 0x90]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) std %f46, [%o1 + 0x98]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) std %f48, [%o1 + 0xa0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) std %f50, [%o1 + 0xa8]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) std %f52, [%o1 + 0xb0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) std %f54, [%o1 + 0xb8]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) std %f56, [%o1 + 0xc0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) ba,pt %xcc, 80f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) std %f58, [%o1 + 0xc8]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) /* 192-bit key expansion */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) ld [%o0 + 0x10], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) ld [%o0 + 0x14], %f5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) std %f4, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) add %o1, 0x08, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) AES_KEXPAND1(0, 4, 0x0, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) AES_KEXPAND2(2, 6, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) AES_KEXPAND2(4, 8, 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) AES_KEXPAND1(6, 10, 0x1, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) AES_KEXPAND2(8, 12, 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) AES_KEXPAND2(10, 14, 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) AES_KEXPAND1(12, 16, 0x2, 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) AES_KEXPAND2(14, 18, 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) AES_KEXPAND2(16, 20, 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) AES_KEXPAND1(18, 22, 0x3, 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) AES_KEXPAND2(20, 24, 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) AES_KEXPAND2(22, 26, 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) AES_KEXPAND1(24, 28, 0x4, 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) AES_KEXPAND2(26, 30, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) AES_KEXPAND2(28, 32, 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) AES_KEXPAND1(30, 34, 0x5, 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) AES_KEXPAND2(32, 36, 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) AES_KEXPAND2(34, 38, 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) AES_KEXPAND1(36, 40, 0x6, 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) AES_KEXPAND2(38, 42, 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) AES_KEXPAND2(40, 44, 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) AES_KEXPAND1(42, 46, 0x7, 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) AES_KEXPAND2(44, 48, 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) std %f6, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) std %f8, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) std %f10, [%o1 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) std %f12, [%o1 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) std %f14, [%o1 + 0x20]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) std %f16, [%o1 + 0x28]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) std %f18, [%o1 + 0x30]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) std %f20, [%o1 + 0x38]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) std %f22, [%o1 + 0x40]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) std %f24, [%o1 + 0x48]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) std %f26, [%o1 + 0x50]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) std %f28, [%o1 + 0x58]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) std %f30, [%o1 + 0x60]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) std %f32, [%o1 + 0x68]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) std %f34, [%o1 + 0x70]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) std %f36, [%o1 + 0x78]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) std %f38, [%o1 + 0x80]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) std %f40, [%o1 + 0x88]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) std %f42, [%o1 + 0x90]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) std %f44, [%o1 + 0x98]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) std %f46, [%o1 + 0xa0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) std %f48, [%o1 + 0xa8]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) ba,pt %xcc, 80f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) std %f50, [%o1 + 0xb0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) /* 128-bit key expansion */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) AES_KEXPAND1(0, 2, 0x0, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) AES_KEXPAND2(2, 4, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) AES_KEXPAND1(4, 6, 0x1, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) AES_KEXPAND2(6, 8, 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) AES_KEXPAND1(8, 10, 0x2, 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) AES_KEXPAND2(10, 12, 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) AES_KEXPAND1(12, 14, 0x3, 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) AES_KEXPAND2(14, 16, 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) AES_KEXPAND1(16, 18, 0x4, 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) AES_KEXPAND2(18, 20, 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) AES_KEXPAND1(20, 22, 0x5, 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) AES_KEXPAND2(22, 24, 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) AES_KEXPAND1(24, 26, 0x6, 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) AES_KEXPAND2(26, 28, 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) AES_KEXPAND1(28, 30, 0x7, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) AES_KEXPAND2(30, 32, 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) AES_KEXPAND1(32, 34, 0x8, 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) AES_KEXPAND2(34, 36, 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) AES_KEXPAND1(36, 38, 0x9, 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) AES_KEXPAND2(38, 40, 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) std %f4, [%o1 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) std %f6, [%o1 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) std %f8, [%o1 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) std %f10, [%o1 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) std %f12, [%o1 + 0x20]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) std %f14, [%o1 + 0x28]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) std %f16, [%o1 + 0x30]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) std %f18, [%o1 + 0x38]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) std %f20, [%o1 + 0x40]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) std %f22, [%o1 + 0x48]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) std %f24, [%o1 + 0x50]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) std %f26, [%o1 + 0x58]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) std %f28, [%o1 + 0x60]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) std %f30, [%o1 + 0x68]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) std %f32, [%o1 + 0x70]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) std %f34, [%o1 + 0x78]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) std %f36, [%o1 + 0x80]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) std %f38, [%o1 + 0x88]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) std %f40, [%o1 + 0x90]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) std %f42, [%o1 + 0x98]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 80:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) VISExit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) ENDPROC(aes_sparc64_key_expand)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) ENTRY(aes_sparc64_encrypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) /* %o0=key, %o1=input, %o2=output */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) ld [%o1 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) ld [%o1 + 0x04], %f5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) ld [%o1 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) ld [%o1 + 0x0c], %f7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) ldd [%o0 + 0x00], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) ldd [%o0 + 0x08], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) ldd [%o0 + 0x10], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) ldd [%o0 + 0x18], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) ldd [%o0 + 0x20], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) ldd [%o0 + 0x28], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) ldd [%o0 + 0x30], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) ldd [%o0 + 0x38], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) ldd [%o0 + 0x40], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) ldd [%o0 + 0x48], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) ldd [%o0 + 0x50], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) ldd [%o0 + 0x58], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) ldd [%o0 + 0x60], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) ldd [%o0 + 0x68], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) ldd [%o0 + 0x70], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) ldd [%o0 + 0x78], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) ldd [%o0 + 0x80], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) ldd [%o0 + 0x88], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) ldd [%o0 + 0x90], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) ldd [%o0 + 0x98], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) ldd [%o0 + 0xa0], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) ldd [%o0 + 0xa8], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) fxor %f8, %f4, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) fxor %f10, %f6, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) ENCRYPT_128(12, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) st %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) st %f5, [%o2 + 0x04]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) st %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) st %f7, [%o2 + 0x0c]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) VISExit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) ENDPROC(aes_sparc64_encrypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) ENTRY(aes_sparc64_encrypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) /* %o0=key, %o1=input, %o2=output */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) ld [%o1 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) ld [%o1 + 0x04], %f5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) ld [%o1 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) ld [%o1 + 0x0c], %f7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) ldd [%o0 + 0x00], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) ldd [%o0 + 0x08], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) fxor %f8, %f4, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) fxor %f10, %f6, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) ldd [%o0 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) ldd [%o0 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) ldd [%o0 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) ldd [%o0 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) add %o0, 0x20, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) ldd [%o0 + 0x10], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) ldd [%o0 + 0x18], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) ldd [%o0 + 0x20], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) ldd [%o0 + 0x28], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) ldd [%o0 + 0x30], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) ldd [%o0 + 0x38], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) ldd [%o0 + 0x40], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) ldd [%o0 + 0x48], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) ldd [%o0 + 0x50], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) ldd [%o0 + 0x58], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) ldd [%o0 + 0x60], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) ldd [%o0 + 0x68], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) ldd [%o0 + 0x70], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) ldd [%o0 + 0x78], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) ldd [%o0 + 0x80], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) ldd [%o0 + 0x88], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) ldd [%o0 + 0x90], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) ldd [%o0 + 0x98], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) ldd [%o0 + 0xa0], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) ldd [%o0 + 0xa8], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) ENCRYPT_128(12, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) st %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) st %f5, [%o2 + 0x04]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) st %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) st %f7, [%o2 + 0x0c]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) VISExit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) ENDPROC(aes_sparc64_encrypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) ENTRY(aes_sparc64_encrypt_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) /* %o0=key, %o1=input, %o2=output */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) ld [%o1 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) ld [%o1 + 0x04], %f5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) ld [%o1 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) ld [%o1 + 0x0c], %f7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) ldd [%o0 + 0x00], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) ldd [%o0 + 0x08], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) fxor %f8, %f4, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) fxor %f10, %f6, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) ldd [%o0 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) ldd [%o0 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) ldd [%o0 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) ldd [%o0 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) add %o0, 0x20, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) ldd [%o0 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) ldd [%o0 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) ldd [%o0 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) ldd [%o0 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) add %o0, 0x20, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) ldd [%o0 + 0x10], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) ldd [%o0 + 0x18], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) ldd [%o0 + 0x20], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) ldd [%o0 + 0x28], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) ldd [%o0 + 0x30], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) ldd [%o0 + 0x38], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) ldd [%o0 + 0x40], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) ldd [%o0 + 0x48], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) ldd [%o0 + 0x50], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) ldd [%o0 + 0x58], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) ldd [%o0 + 0x60], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) ldd [%o0 + 0x68], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) ldd [%o0 + 0x70], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) ldd [%o0 + 0x78], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) ldd [%o0 + 0x80], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) ldd [%o0 + 0x88], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) ldd [%o0 + 0x90], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) ldd [%o0 + 0x98], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) ldd [%o0 + 0xa0], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) ldd [%o0 + 0xa8], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) ENCRYPT_128(12, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) st %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) st %f5, [%o2 + 0x04]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) st %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) st %f7, [%o2 + 0x0c]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) VISExit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) ENDPROC(aes_sparc64_encrypt_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) ENTRY(aes_sparc64_decrypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) /* %o0=key, %o1=input, %o2=output */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) ld [%o1 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) ld [%o1 + 0x04], %f5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) ld [%o1 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) ld [%o1 + 0x0c], %f7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) ldd [%o0 + 0xa0], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) ldd [%o0 + 0xa8], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) ldd [%o0 + 0x98], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) ldd [%o0 + 0x90], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) ldd [%o0 + 0x88], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) ldd [%o0 + 0x80], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) ldd [%o0 + 0x78], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) ldd [%o0 + 0x70], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) ldd [%o0 + 0x68], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) ldd [%o0 + 0x60], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) ldd [%o0 + 0x58], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) ldd [%o0 + 0x50], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) ldd [%o0 + 0x48], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) ldd [%o0 + 0x40], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) ldd [%o0 + 0x38], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) ldd [%o0 + 0x30], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) ldd [%o0 + 0x28], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) ldd [%o0 + 0x20], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) ldd [%o0 + 0x18], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) ldd [%o0 + 0x10], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) ldd [%o0 + 0x08], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) ldd [%o0 + 0x00], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) fxor %f8, %f4, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) fxor %f10, %f6, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) DECRYPT_128(12, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) st %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) st %f5, [%o2 + 0x04]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) st %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) st %f7, [%o2 + 0x0c]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) VISExit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) ENDPROC(aes_sparc64_decrypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) ENTRY(aes_sparc64_decrypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) /* %o0=key, %o1=input, %o2=output */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) ld [%o1 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) ld [%o1 + 0x04], %f5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) ld [%o1 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) ld [%o1 + 0x0c], %f7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) ldd [%o0 + 0xc0], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) ldd [%o0 + 0xc8], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) ldd [%o0 + 0xb8], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) ldd [%o0 + 0xb0], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) ldd [%o0 + 0xa8], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) ldd [%o0 + 0xa0], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) fxor %f8, %f4, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) fxor %f10, %f6, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) ldd [%o0 + 0x98], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) ldd [%o0 + 0x90], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) ldd [%o0 + 0x88], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) ldd [%o0 + 0x80], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) DECRYPT_TWO_ROUNDS(12, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) ldd [%o0 + 0x78], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) ldd [%o0 + 0x70], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) ldd [%o0 + 0x68], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) ldd [%o0 + 0x60], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) ldd [%o0 + 0x58], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) ldd [%o0 + 0x50], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) ldd [%o0 + 0x48], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) ldd [%o0 + 0x40], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) ldd [%o0 + 0x38], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) ldd [%o0 + 0x30], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) ldd [%o0 + 0x28], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) ldd [%o0 + 0x20], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) ldd [%o0 + 0x18], %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) ldd [%o0 + 0x10], %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) ldd [%o0 + 0x08], %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) ldd [%o0 + 0x00], %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) DECRYPT_128(20, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) st %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) st %f5, [%o2 + 0x04]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) st %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) st %f7, [%o2 + 0x0c]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) VISExit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) ENDPROC(aes_sparc64_decrypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) ENTRY(aes_sparc64_decrypt_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) /* %o0=key, %o1=input, %o2=output */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) ld [%o1 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) ld [%o1 + 0x04], %f5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) ld [%o1 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) ld [%o1 + 0x0c], %f7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) ldd [%o0 + 0xe0], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) ldd [%o0 + 0xe8], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) ldd [%o0 + 0xd8], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) ldd [%o0 + 0xd0], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) ldd [%o0 + 0xc8], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) fxor %f8, %f4, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) ldd [%o0 + 0xc0], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) fxor %f10, %f6, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) ldd [%o0 + 0xb8], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) AES_DROUND23(12, 4, 6, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) ldd [%o0 + 0xb0], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) AES_DROUND01(14, 4, 6, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) ldd [%o0 + 0xa8], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) AES_DROUND23(16, 0, 2, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) ldd [%o0 + 0xa0], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) AES_DROUND01(18, 0, 2, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) ldd [%o0 + 0x98], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) AES_DROUND23(20, 4, 6, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) ldd [%o0 + 0x90], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) AES_DROUND01(22, 4, 6, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) ldd [%o0 + 0x88], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) AES_DROUND23(24, 0, 2, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) ldd [%o0 + 0x80], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) AES_DROUND01(26, 0, 2, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) ldd [%o0 + 0x78], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) AES_DROUND23(12, 4, 6, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) ldd [%o0 + 0x70], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) AES_DROUND01(14, 4, 6, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) ldd [%o0 + 0x68], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) AES_DROUND23(16, 0, 2, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) ldd [%o0 + 0x60], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) AES_DROUND01(18, 0, 2, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) ldd [%o0 + 0x58], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) AES_DROUND23(20, 4, 6, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) ldd [%o0 + 0x50], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) AES_DROUND01(22, 4, 6, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) ldd [%o0 + 0x48], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) AES_DROUND23(24, 0, 2, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) ldd [%o0 + 0x40], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) AES_DROUND01(26, 0, 2, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) ldd [%o0 + 0x38], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) AES_DROUND23(28, 4, 6, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) ldd [%o0 + 0x30], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) AES_DROUND01(30, 4, 6, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) ldd [%o0 + 0x28], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) AES_DROUND23(32, 0, 2, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) ldd [%o0 + 0x20], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) AES_DROUND01(34, 0, 2, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) ldd [%o0 + 0x18], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) AES_DROUND23(36, 4, 6, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) ldd [%o0 + 0x10], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) AES_DROUND01(38, 4, 6, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) ldd [%o0 + 0x08], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) AES_DROUND23(40, 0, 2, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) ldd [%o0 + 0x00], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) AES_DROUND01(42, 0, 2, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) AES_DROUND23(44, 4, 6, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) AES_DROUND01(46, 4, 6, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) AES_DROUND23_L(48, 0, 2, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) AES_DROUND01_L(50, 0, 2, 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) st %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) st %f5, [%o2 + 0x04]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) st %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) st %f7, [%o2 + 0x0c]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) VISExit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) ENDPROC(aes_sparc64_decrypt_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) ENTRY(aes_sparc64_load_encrypt_keys_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) /* %o0=key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) ldd [%o0 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) ldd [%o0 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) ldd [%o0 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) ldd [%o0 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) ldd [%o0 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) ldd [%o0 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) ldd [%o0 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) ldd [%o0 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) ldd [%o0 + 0x50], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) ldd [%o0 + 0x58], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) ldd [%o0 + 0x60], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) ldd [%o0 + 0x68], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) ldd [%o0 + 0x70], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) ldd [%o0 + 0x78], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) ldd [%o0 + 0x80], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) ldd [%o0 + 0x88], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) ldd [%o0 + 0x90], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) ldd [%o0 + 0x98], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) ldd [%o0 + 0xa0], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) ldd [%o0 + 0xa8], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) ENDPROC(aes_sparc64_load_encrypt_keys_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) ENTRY(aes_sparc64_load_encrypt_keys_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) /* %o0=key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) ldd [%o0 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) ldd [%o0 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) ldd [%o0 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) ldd [%o0 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) ldd [%o0 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) ldd [%o0 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) ldd [%o0 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) ldd [%o0 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) ldd [%o0 + 0x50], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) ldd [%o0 + 0x58], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) ldd [%o0 + 0x60], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) ldd [%o0 + 0x68], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) ldd [%o0 + 0x70], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) ldd [%o0 + 0x78], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) ldd [%o0 + 0x80], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) ldd [%o0 + 0x88], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) ldd [%o0 + 0x90], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) ldd [%o0 + 0x98], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) ldd [%o0 + 0xa0], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) ldd [%o0 + 0xa8], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) ldd [%o0 + 0xb0], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) ldd [%o0 + 0xb8], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) ldd [%o0 + 0xc0], %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) ldd [%o0 + 0xc8], %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) ENDPROC(aes_sparc64_load_encrypt_keys_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) ENTRY(aes_sparc64_load_encrypt_keys_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) /* %o0=key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) ldd [%o0 + 0x10], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) ldd [%o0 + 0x18], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) ldd [%o0 + 0x20], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) ldd [%o0 + 0x28], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) ldd [%o0 + 0x30], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) ldd [%o0 + 0x38], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) ldd [%o0 + 0x40], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) ldd [%o0 + 0x48], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) ldd [%o0 + 0x50], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) ldd [%o0 + 0x58], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) ldd [%o0 + 0x60], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) ldd [%o0 + 0x68], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) ldd [%o0 + 0x70], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) ldd [%o0 + 0x78], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) ldd [%o0 + 0x80], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) ldd [%o0 + 0x88], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) ldd [%o0 + 0x90], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) ldd [%o0 + 0x98], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) ldd [%o0 + 0xa0], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) ldd [%o0 + 0xa8], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) ldd [%o0 + 0xb0], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) ldd [%o0 + 0xb8], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) ldd [%o0 + 0xc0], %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) ldd [%o0 + 0xc8], %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) ldd [%o0 + 0xd0], %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) ldd [%o0 + 0xd8], %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) ldd [%o0 + 0xe0], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) ldd [%o0 + 0xe8], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) ENDPROC(aes_sparc64_load_encrypt_keys_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) ENTRY(aes_sparc64_load_decrypt_keys_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) /* %o0=key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) ldd [%o0 + 0x98], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) ldd [%o0 + 0x90], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) ldd [%o0 + 0x88], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) ldd [%o0 + 0x80], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) ldd [%o0 + 0x78], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) ldd [%o0 + 0x70], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) ldd [%o0 + 0x68], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) ldd [%o0 + 0x60], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) ldd [%o0 + 0x58], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) ldd [%o0 + 0x50], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) ldd [%o0 + 0x48], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) ldd [%o0 + 0x40], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) ldd [%o0 + 0x38], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) ldd [%o0 + 0x30], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) ldd [%o0 + 0x28], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) ldd [%o0 + 0x20], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) ldd [%o0 + 0x18], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) ldd [%o0 + 0x10], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) ldd [%o0 + 0x08], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) ldd [%o0 + 0x00], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) ENDPROC(aes_sparc64_load_decrypt_keys_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) ENTRY(aes_sparc64_load_decrypt_keys_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) /* %o0=key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) ldd [%o0 + 0xb8], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) ldd [%o0 + 0xb0], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) ldd [%o0 + 0xa8], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) ldd [%o0 + 0xa0], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) ldd [%o0 + 0x98], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) ldd [%o0 + 0x90], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) ldd [%o0 + 0x88], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) ldd [%o0 + 0x80], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) ldd [%o0 + 0x78], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) ldd [%o0 + 0x70], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) ldd [%o0 + 0x68], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) ldd [%o0 + 0x60], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) ldd [%o0 + 0x58], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) ldd [%o0 + 0x50], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) ldd [%o0 + 0x48], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) ldd [%o0 + 0x40], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) ldd [%o0 + 0x38], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) ldd [%o0 + 0x30], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) ldd [%o0 + 0x28], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) ldd [%o0 + 0x20], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) ldd [%o0 + 0x18], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) ldd [%o0 + 0x10], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) ldd [%o0 + 0x08], %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) ldd [%o0 + 0x00], %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) ENDPROC(aes_sparc64_load_decrypt_keys_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) ENTRY(aes_sparc64_load_decrypt_keys_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) /* %o0=key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) VISEntry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) ldd [%o0 + 0xd8], %f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) ldd [%o0 + 0xd0], %f10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) ldd [%o0 + 0xc8], %f12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) ldd [%o0 + 0xc0], %f14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) ldd [%o0 + 0xb8], %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) ldd [%o0 + 0xb0], %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) ldd [%o0 + 0xa8], %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) ldd [%o0 + 0xa0], %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) ldd [%o0 + 0x98], %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) ldd [%o0 + 0x90], %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891) ldd [%o0 + 0x88], %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892) ldd [%o0 + 0x80], %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) ldd [%o0 + 0x78], %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) ldd [%o0 + 0x70], %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) ldd [%o0 + 0x68], %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896) ldd [%o0 + 0x60], %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) ldd [%o0 + 0x58], %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) ldd [%o0 + 0x50], %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899) ldd [%o0 + 0x48], %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) ldd [%o0 + 0x40], %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) ldd [%o0 + 0x38], %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) ldd [%o0 + 0x30], %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903) ldd [%o0 + 0x28], %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904) ldd [%o0 + 0x20], %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905) ldd [%o0 + 0x18], %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) ldd [%o0 + 0x10], %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907) ldd [%o0 + 0x08], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909) ldd [%o0 + 0x00], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) ENDPROC(aes_sparc64_load_decrypt_keys_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913) ENTRY(aes_sparc64_ecb_encrypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914) /* %o0=key, %o1=input, %o2=output, %o3=len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915) ldx [%o0 + 0x00], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917) be 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918) ldx [%o0 + 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919) 1: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921) ldx [%o1 + 0x10], %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922) ldx [%o1 + 0x18], %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927) xor %g1, %o4, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928) xor %g2, %o5, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) MOVXTOD_G3_F60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930) MOVXTOD_G7_F62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 931) ENCRYPT_128_2(8, 4, 6, 60, 62, 0, 2, 56, 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 932) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 933) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 934) std %f60, [%o2 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 935) std %f62, [%o2 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 936) sub %o3, 0x20, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 937) add %o1, 0x20, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 938) brgz %o3, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 939) add %o2, 0x20, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 940) brlz,pt %o3, 11f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 941) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 942) 10: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 943) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 944) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 945) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 946) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 947) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 948) ENCRYPT_128(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 949) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 950) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 951) 11: retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 952) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 953) ENDPROC(aes_sparc64_ecb_encrypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 954)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 955) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 956) ENTRY(aes_sparc64_ecb_encrypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 957) /* %o0=key, %o1=input, %o2=output, %o3=len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 958) ldx [%o0 + 0x00], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 959) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 960) be 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 961) ldx [%o0 + 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 962) 1: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 963) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 964) ldx [%o1 + 0x10], %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 965) ldx [%o1 + 0x18], %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 966) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 967) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 968) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 969) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 970) xor %g1, %o4, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 971) xor %g2, %o5, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 972) MOVXTOD_G3_F60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 973) MOVXTOD_G7_F62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 974) ENCRYPT_192_2(8, 4, 6, 60, 62, 0, 2, 56, 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 975) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 976) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 977) std %f60, [%o2 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 978) std %f62, [%o2 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 979) sub %o3, 0x20, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 980) add %o1, 0x20, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 981) brgz %o3, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 982) add %o2, 0x20, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 983) brlz,pt %o3, 11f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 984) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 985) 10: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 986) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 987) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 988) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 989) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 990) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 991) ENCRYPT_192(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 992) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 993) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 994) 11: retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 995) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 996) ENDPROC(aes_sparc64_ecb_encrypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 997)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 998) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 999) ENTRY(aes_sparc64_ecb_encrypt_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) /* %o0=key, %o1=input, %o2=output, %o3=len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) ldx [%o0 + 0x00], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) be 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) ldx [%o0 + 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) 1: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) ldx [%o1 + 0x10], %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) ldx [%o1 + 0x18], %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) xor %g1, %o4, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) xor %g2, %o5, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) MOVXTOD_G3_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) MOVXTOD_G7_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) ENCRYPT_256_2(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) std %f0, [%o2 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) std %f2, [%o2 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) sub %o3, 0x20, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) add %o1, 0x20, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) brgz %o3, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) add %o2, 0x20, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) brlz,pt %o3, 11f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) 10: ldd [%o0 + 0xd0], %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) ldd [%o0 + 0xd8], %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) ldd [%o0 + 0xe0], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) ldd [%o0 + 0xe8], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) ENCRYPT_256(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) 11: retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) ENDPROC(aes_sparc64_ecb_encrypt_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) ENTRY(aes_sparc64_ecb_decrypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) ldx [%o0 - 0x10], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) be 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051) ldx [%o0 - 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) 1: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) ldx [%o1 + 0x10], %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) ldx [%o1 + 0x18], %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) xor %g1, %o4, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) xor %g2, %o5, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) MOVXTOD_G3_F60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) MOVXTOD_G7_F62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) DECRYPT_128_2(8, 4, 6, 60, 62, 0, 2, 56, 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) std %f60, [%o2 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) std %f62, [%o2 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) sub %o3, 0x20, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) add %o1, 0x20, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) brgz,pt %o3, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) add %o2, 0x20, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) brlz,pt %o3, 11f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) 10: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) DECRYPT_128(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) 11: retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) ENDPROC(aes_sparc64_ecb_decrypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) ENTRY(aes_sparc64_ecb_decrypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) ldx [%o0 - 0x10], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) be 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) ldx [%o0 - 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) 1: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) ldx [%o1 + 0x10], %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) ldx [%o1 + 0x18], %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) xor %g1, %o4, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) xor %g2, %o5, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) MOVXTOD_G3_F60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) MOVXTOD_G7_F62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) DECRYPT_192_2(8, 4, 6, 60, 62, 0, 2, 56, 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) std %f60, [%o2 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) std %f62, [%o2 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) sub %o3, 0x20, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) add %o1, 0x20, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) brgz,pt %o3, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) add %o2, 0x20, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) brlz,pt %o3, 11f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) 10: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) DECRYPT_192(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) 11: retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) ENDPROC(aes_sparc64_ecb_decrypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) ENTRY(aes_sparc64_ecb_decrypt_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) ldx [%o0 - 0x10], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) ldx [%o0 - 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) be 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) sub %o0, 0xf0, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) 1: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) ldx [%o1 + 0x10], %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) ldx [%o1 + 0x18], %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) xor %g1, %o4, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) xor %g2, %o5, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) MOVXTOD_G3_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150) MOVXTOD_G7_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) DECRYPT_256_2(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) std %f0, [%o2 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) std %f2, [%o2 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) sub %o3, 0x20, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) add %o1, 0x20, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) brgz,pt %o3, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) add %o2, 0x20, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) brlz,pt %o3, 11f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) 10: ldd [%o0 + 0x18], %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163) ldd [%o0 + 0x10], %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) ldd [%o0 + 0x08], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) ldd [%o0 + 0x00], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172) DECRYPT_256(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) 11: retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177) ENDPROC(aes_sparc64_ecb_decrypt_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) ENTRY(aes_sparc64_cbc_encrypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) ldd [%o4 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) ldd [%o4 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) ldx [%o0 + 0x00], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) ldx [%o0 + 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) 1: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) MOVXTOD_G3_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) MOVXTOD_G7_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193) fxor %f4, %f0, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) fxor %f6, %f2, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195) ENCRYPT_128(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) add %o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201) std %f4, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) std %f6, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) ENDPROC(aes_sparc64_cbc_encrypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208) ENTRY(aes_sparc64_cbc_encrypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209) /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210) ldd [%o4 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211) ldd [%o4 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) ldx [%o0 + 0x00], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) ldx [%o0 + 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214) 1: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219) MOVXTOD_G3_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) MOVXTOD_G7_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221) fxor %f4, %f0, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222) fxor %f6, %f2, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223) ENCRYPT_192(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228) add %o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) std %f4, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230) std %f6, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233) ENDPROC(aes_sparc64_cbc_encrypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236) ENTRY(aes_sparc64_cbc_encrypt_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237) /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238) ldd [%o4 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239) ldd [%o4 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240) ldx [%o0 + 0x00], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241) ldx [%o0 + 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) 1: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247) MOVXTOD_G3_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) MOVXTOD_G7_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249) fxor %f4, %f0, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250) fxor %f6, %f2, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) ENCRYPT_256(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1256) add %o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1257) std %f4, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1258) std %f6, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1259) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1260) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1261) ENDPROC(aes_sparc64_cbc_encrypt_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1262)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1263) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1264) ENTRY(aes_sparc64_cbc_decrypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1265) /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1266) ldx [%o0 - 0x10], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1267) ldx [%o0 - 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1268) ldx [%o4 + 0x00], %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1269) ldx [%o4 + 0x08], %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1270) 1: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1271) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1272) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1273) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1274) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1275) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1276) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1277) DECRYPT_128(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1278) MOVXTOD_O0_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1279) MOVXTOD_O5_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1280) xor %g1, %g3, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1281) xor %g2, %g7, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1282) fxor %f4, %f0, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1283) fxor %f6, %f2, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1284) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1285) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1286) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1287) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1288) add %o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1289) stx %o0, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1290) stx %o5, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1291) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1292) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1293) ENDPROC(aes_sparc64_cbc_decrypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1294)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1295) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1296) ENTRY(aes_sparc64_cbc_decrypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1297) /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1298) ldx [%o0 - 0x10], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1299) ldx [%o0 - 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1300) ldx [%o4 + 0x00], %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1301) ldx [%o4 + 0x08], %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1302) 1: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1303) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1304) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1305) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1306) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1307) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1308) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1309) DECRYPT_192(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1310) MOVXTOD_O0_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1311) MOVXTOD_O5_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1312) xor %g1, %g3, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1313) xor %g2, %g7, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1314) fxor %f4, %f0, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1315) fxor %f6, %f2, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1316) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1317) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1318) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1319) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1320) add %o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1321) stx %o0, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1322) stx %o5, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1323) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1324) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1325) ENDPROC(aes_sparc64_cbc_decrypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1326)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1327) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1328) ENTRY(aes_sparc64_cbc_decrypt_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1329) /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1330) ldx [%o0 - 0x10], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1331) ldx [%o0 - 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1332) ldx [%o4 + 0x00], %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1333) ldx [%o4 + 0x08], %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1334) 1: ldx [%o1 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1335) ldx [%o1 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1336) add %o1, 0x10, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1337) xor %g1, %g3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1338) xor %g2, %g7, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1339) MOVXTOD_G3_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1340) MOVXTOD_G7_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1341) DECRYPT_256(8, 4, 6, 0, 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1342) MOVXTOD_O0_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1343) MOVXTOD_O5_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1344) xor %g1, %g3, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1345) xor %g2, %g7, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1346) fxor %f4, %f0, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1347) fxor %f6, %f2, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1348) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1349) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1350) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1351) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1352) add %o2, 0x10, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1353) stx %o0, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1354) stx %o5, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1355) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1356) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1357) ENDPROC(aes_sparc64_cbc_decrypt_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1358)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1359) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1360) ENTRY(aes_sparc64_ctr_crypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1361) /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1362) ldx [%o4 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1363) ldx [%o4 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1364) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1365) ldx [%o0 + 0x00], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1366) be 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1367) ldx [%o0 + 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1368) 1: xor %g1, %g3, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1369) MOVXTOD_O5_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1370) xor %g2, %g7, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1371) MOVXTOD_O5_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1372) add %g7, 1, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1373) add %g3, 1, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1374) movrz %g7, %o5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1375) xor %g1, %g3, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1376) MOVXTOD_O5_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1377) xor %g2, %g7, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1378) MOVXTOD_O5_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1379) add %g7, 1, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1380) add %g3, 1, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1381) movrz %g7, %o5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1382) ENCRYPT_128_2(8, 0, 2, 4, 6, 56, 58, 60, 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1383) ldd [%o1 + 0x00], %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1384) ldd [%o1 + 0x08], %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1385) ldd [%o1 + 0x10], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1386) ldd [%o1 + 0x18], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1387) fxor %f56, %f0, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1388) fxor %f58, %f2, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1389) fxor %f60, %f4, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1390) fxor %f62, %f6, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1391) std %f56, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1392) std %f58, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1393) std %f60, [%o2 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1394) std %f62, [%o2 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1395) subcc %o3, 0x20, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1396) add %o1, 0x20, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1397) brgz %o3, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1398) add %o2, 0x20, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1399) brlz,pt %o3, 11f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1400) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1401) 10: xor %g1, %g3, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1402) MOVXTOD_O5_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1403) xor %g2, %g7, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1404) MOVXTOD_O5_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1405) add %g7, 1, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1406) add %g3, 1, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1407) movrz %g7, %o5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1408) ENCRYPT_128(8, 0, 2, 4, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1409) ldd [%o1 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1410) ldd [%o1 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1411) fxor %f4, %f0, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1412) fxor %f6, %f2, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1413) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1414) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1415) 11: stx %g3, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1416) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1417) stx %g7, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1418) ENDPROC(aes_sparc64_ctr_crypt_128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1419)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1420) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1421) ENTRY(aes_sparc64_ctr_crypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1422) /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1423) ldx [%o4 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1424) ldx [%o4 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1425) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1426) ldx [%o0 + 0x00], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1427) be 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1428) ldx [%o0 + 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1429) 1: xor %g1, %g3, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1430) MOVXTOD_O5_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1431) xor %g2, %g7, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1432) MOVXTOD_O5_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1433) add %g7, 1, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1434) add %g3, 1, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1435) movrz %g7, %o5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1436) xor %g1, %g3, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1437) MOVXTOD_O5_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1438) xor %g2, %g7, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1439) MOVXTOD_O5_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1440) add %g7, 1, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1441) add %g3, 1, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1442) movrz %g7, %o5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1443) ENCRYPT_192_2(8, 0, 2, 4, 6, 56, 58, 60, 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1444) ldd [%o1 + 0x00], %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1445) ldd [%o1 + 0x08], %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1446) ldd [%o1 + 0x10], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1447) ldd [%o1 + 0x18], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1448) fxor %f56, %f0, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1449) fxor %f58, %f2, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1450) fxor %f60, %f4, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1451) fxor %f62, %f6, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1452) std %f56, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1453) std %f58, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1454) std %f60, [%o2 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1455) std %f62, [%o2 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1456) subcc %o3, 0x20, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1457) add %o1, 0x20, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1458) brgz %o3, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1459) add %o2, 0x20, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1460) brlz,pt %o3, 11f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1461) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1462) 10: xor %g1, %g3, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1463) MOVXTOD_O5_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1464) xor %g2, %g7, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1465) MOVXTOD_O5_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1466) add %g7, 1, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1467) add %g3, 1, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1468) movrz %g7, %o5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1469) ENCRYPT_192(8, 0, 2, 4, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1470) ldd [%o1 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1471) ldd [%o1 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1472) fxor %f4, %f0, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1473) fxor %f6, %f2, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1474) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1475) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1476) 11: stx %g3, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1477) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1478) stx %g7, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1479) ENDPROC(aes_sparc64_ctr_crypt_192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1480)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1481) .align 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1482) ENTRY(aes_sparc64_ctr_crypt_256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1483) /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1484) ldx [%o4 + 0x00], %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1485) ldx [%o4 + 0x08], %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1486) subcc %o3, 0x10, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1487) ldx [%o0 + 0x00], %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1488) be 10f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1489) ldx [%o0 + 0x08], %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1490) 1: xor %g1, %g3, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1491) MOVXTOD_O5_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1492) xor %g2, %g7, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1493) MOVXTOD_O5_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1494) add %g7, 1, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1495) add %g3, 1, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1496) movrz %g7, %o5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1497) xor %g1, %g3, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1498) MOVXTOD_O5_F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1499) xor %g2, %g7, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1500) MOVXTOD_O5_F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1501) add %g7, 1, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1502) add %g3, 1, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1503) movrz %g7, %o5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1504) ENCRYPT_256_2(8, 0, 2, 4, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1505) ldd [%o1 + 0x00], %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1506) ldd [%o1 + 0x08], %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1507) ldd [%o1 + 0x10], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1508) ldd [%o1 + 0x18], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1509) fxor %f56, %f0, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1510) fxor %f58, %f2, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1511) fxor %f60, %f4, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1512) fxor %f62, %f6, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1513) std %f56, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1514) std %f58, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1515) std %f60, [%o2 + 0x10]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1516) std %f62, [%o2 + 0x18]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1517) subcc %o3, 0x20, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1518) add %o1, 0x20, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1519) brgz %o3, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1520) add %o2, 0x20, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1521) brlz,pt %o3, 11f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1522) nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1523) 10: ldd [%o0 + 0xd0], %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1524) ldd [%o0 + 0xd8], %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1525) ldd [%o0 + 0xe0], %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1526) ldd [%o0 + 0xe8], %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1527) xor %g1, %g3, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1528) MOVXTOD_O5_F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1529) xor %g2, %g7, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1530) MOVXTOD_O5_F2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1531) add %g7, 1, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1532) add %g3, 1, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1533) movrz %g7, %o5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1534) ENCRYPT_256(8, 0, 2, 4, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1535) ldd [%o1 + 0x00], %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1536) ldd [%o1 + 0x08], %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1537) fxor %f4, %f0, %f4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1538) fxor %f6, %f2, %f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1539) std %f4, [%o2 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1540) std %f6, [%o2 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1541) 11: stx %g3, [%o4 + 0x00]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1542) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1543) stx %g7, [%o4 + 0x08]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1544) ENDPROC(aes_sparc64_ctr_crypt_256)