0001
0002 #include <linux/linkage.h>
0003 #include <asm/visasm.h>
0004
0005 #include "opcodes.h"
0006
0007 #define ENCRYPT_TWO_ROUNDS(KEY_BASE, I0, I1, T0, T1) \
0008 AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \
0009 AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \
0010 AES_EROUND01(KEY_BASE + 4, T0, T1, I0) \
0011 AES_EROUND23(KEY_BASE + 6, T0, T1, I1)
0012
0013 #define ENCRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
0014 AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \
0015 AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \
0016 AES_EROUND01(KEY_BASE + 0, I2, I3, T2) \
0017 AES_EROUND23(KEY_BASE + 2, I2, I3, T3) \
0018 AES_EROUND01(KEY_BASE + 4, T0, T1, I0) \
0019 AES_EROUND23(KEY_BASE + 6, T0, T1, I1) \
0020 AES_EROUND01(KEY_BASE + 4, T2, T3, I2) \
0021 AES_EROUND23(KEY_BASE + 6, T2, T3, I3)
0022
0023 #define ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE, I0, I1, T0, T1) \
0024 AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \
0025 AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \
0026 AES_EROUND01_L(KEY_BASE + 4, T0, T1, I0) \
0027 AES_EROUND23_L(KEY_BASE + 6, T0, T1, I1)
0028
0029 #define ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
0030 AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \
0031 AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \
0032 AES_EROUND01(KEY_BASE + 0, I2, I3, T2) \
0033 AES_EROUND23(KEY_BASE + 2, I2, I3, T3) \
0034 AES_EROUND01_L(KEY_BASE + 4, T0, T1, I0) \
0035 AES_EROUND23_L(KEY_BASE + 6, T0, T1, I1) \
0036 AES_EROUND01_L(KEY_BASE + 4, T2, T3, I2) \
0037 AES_EROUND23_L(KEY_BASE + 6, T2, T3, I3)
0038
0039
0040 #define ENCRYPT_128(KEY_BASE, I0, I1, T0, T1) \
0041 ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \
0042 ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \
0043 ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \
0044 ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \
0045 ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 32, I0, I1, T0, T1)
0046
0047 #define ENCRYPT_128_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
0048 ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \
0049 ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \
0050 ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \
0051 ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \
0052 ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3)
0053
0054
0055 #define ENCRYPT_192(KEY_BASE, I0, I1, T0, T1) \
0056 ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \
0057 ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \
0058 ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \
0059 ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \
0060 ENCRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \
0061 ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 40, I0, I1, T0, T1)
0062
0063 #define ENCRYPT_192_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
0064 ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \
0065 ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \
0066 ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \
0067 ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \
0068 ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) \
0069 ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 40, I0, I1, I2, I3, T0, T1, T2, T3)
0070
0071
0072 #define ENCRYPT_256(KEY_BASE, I0, I1, T0, T1) \
0073 ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \
0074 ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \
0075 ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \
0076 ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \
0077 ENCRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \
0078 ENCRYPT_TWO_ROUNDS(KEY_BASE + 40, I0, I1, T0, T1) \
0079 ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 48, I0, I1, T0, T1)
0080
0081 #define ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, TMP_BASE) \
0082 ENCRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, \
0083 TMP_BASE + 0, TMP_BASE + 2, TMP_BASE + 4, TMP_BASE + 6)
0084
0085 #define ENCRYPT_256_2(KEY_BASE, I0, I1, I2, I3) \
0086 ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, KEY_BASE + 48) \
0087 ldd [%o0 + 0xd0], %f56; \
0088 ldd [%o0 + 0xd8], %f58; \
0089 ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, KEY_BASE + 0) \
0090 ldd [%o0 + 0xe0], %f60; \
0091 ldd [%o0 + 0xe8], %f62; \
0092 ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, KEY_BASE + 0) \
0093 ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, KEY_BASE + 0) \
0094 ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, KEY_BASE + 0) \
0095 ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 40, I0, I1, I2, I3, KEY_BASE + 0) \
0096 AES_EROUND01(KEY_BASE + 48, I0, I1, KEY_BASE + 0) \
0097 AES_EROUND23(KEY_BASE + 50, I0, I1, KEY_BASE + 2) \
0098 AES_EROUND01(KEY_BASE + 48, I2, I3, KEY_BASE + 4) \
0099 AES_EROUND23(KEY_BASE + 50, I2, I3, KEY_BASE + 6) \
0100 AES_EROUND01_L(KEY_BASE + 52, KEY_BASE + 0, KEY_BASE + 2, I0) \
0101 AES_EROUND23_L(KEY_BASE + 54, KEY_BASE + 0, KEY_BASE + 2, I1) \
0102 ldd [%o0 + 0x10], %f8; \
0103 ldd [%o0 + 0x18], %f10; \
0104 AES_EROUND01_L(KEY_BASE + 52, KEY_BASE + 4, KEY_BASE + 6, I2) \
0105 AES_EROUND23_L(KEY_BASE + 54, KEY_BASE + 4, KEY_BASE + 6, I3) \
0106 ldd [%o0 + 0x20], %f12; \
0107 ldd [%o0 + 0x28], %f14;
0108
0109 #define DECRYPT_TWO_ROUNDS(KEY_BASE, I0, I1, T0, T1) \
0110 AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \
0111 AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \
0112 AES_DROUND23(KEY_BASE + 4, T0, T1, I1) \
0113 AES_DROUND01(KEY_BASE + 6, T0, T1, I0)
0114
0115 #define DECRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
0116 AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \
0117 AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \
0118 AES_DROUND23(KEY_BASE + 0, I2, I3, T3) \
0119 AES_DROUND01(KEY_BASE + 2, I2, I3, T2) \
0120 AES_DROUND23(KEY_BASE + 4, T0, T1, I1) \
0121 AES_DROUND01(KEY_BASE + 6, T0, T1, I0) \
0122 AES_DROUND23(KEY_BASE + 4, T2, T3, I3) \
0123 AES_DROUND01(KEY_BASE + 6, T2, T3, I2)
0124
0125 #define DECRYPT_TWO_ROUNDS_LAST(KEY_BASE, I0, I1, T0, T1) \
0126 AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \
0127 AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \
0128 AES_DROUND23_L(KEY_BASE + 4, T0, T1, I1) \
0129 AES_DROUND01_L(KEY_BASE + 6, T0, T1, I0)
0130
0131 #define DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
0132 AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \
0133 AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \
0134 AES_DROUND23(KEY_BASE + 0, I2, I3, T3) \
0135 AES_DROUND01(KEY_BASE + 2, I2, I3, T2) \
0136 AES_DROUND23_L(KEY_BASE + 4, T0, T1, I1) \
0137 AES_DROUND01_L(KEY_BASE + 6, T0, T1, I0) \
0138 AES_DROUND23_L(KEY_BASE + 4, T2, T3, I3) \
0139 AES_DROUND01_L(KEY_BASE + 6, T2, T3, I2)
0140
0141
0142 #define DECRYPT_128(KEY_BASE, I0, I1, T0, T1) \
0143 DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \
0144 DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \
0145 DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \
0146 DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \
0147 DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 32, I0, I1, T0, T1)
0148
0149 #define DECRYPT_128_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
0150 DECRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \
0151 DECRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \
0152 DECRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \
0153 DECRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \
0154 DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3)
0155
0156
0157 #define DECRYPT_192(KEY_BASE, I0, I1, T0, T1) \
0158 DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \
0159 DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \
0160 DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \
0161 DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \
0162 DECRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \
0163 DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 40, I0, I1, T0, T1)
0164
0165 #define DECRYPT_192_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \
0166 DECRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \
0167 DECRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \
0168 DECRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \
0169 DECRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \
0170 DECRYPT_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) \
0171 DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 40, I0, I1, I2, I3, T0, T1, T2, T3)
0172
0173
0174 #define DECRYPT_256(KEY_BASE, I0, I1, T0, T1) \
0175 DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \
0176 DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \
0177 DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \
0178 DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \
0179 DECRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \
0180 DECRYPT_TWO_ROUNDS(KEY_BASE + 40, I0, I1, T0, T1) \
0181 DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 48, I0, I1, T0, T1)
0182
0183 #define DECRYPT_256_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, TMP_BASE) \
0184 DECRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, \
0185 TMP_BASE + 0, TMP_BASE + 2, TMP_BASE + 4, TMP_BASE + 6)
0186
0187 #define DECRYPT_256_2(KEY_BASE, I0, I1, I2, I3) \
0188 DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, KEY_BASE + 48) \
0189 ldd [%o0 + 0x18], %f56; \
0190 ldd [%o0 + 0x10], %f58; \
0191 DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, KEY_BASE + 0) \
0192 ldd [%o0 + 0x08], %f60; \
0193 ldd [%o0 + 0x00], %f62; \
0194 DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, KEY_BASE + 0) \
0195 DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, KEY_BASE + 0) \
0196 DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, KEY_BASE + 0) \
0197 DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 40, I0, I1, I2, I3, KEY_BASE + 0) \
0198 AES_DROUND23(KEY_BASE + 48, I0, I1, KEY_BASE + 2) \
0199 AES_DROUND01(KEY_BASE + 50, I0, I1, KEY_BASE + 0) \
0200 AES_DROUND23(KEY_BASE + 48, I2, I3, KEY_BASE + 6) \
0201 AES_DROUND01(KEY_BASE + 50, I2, I3, KEY_BASE + 4) \
0202 AES_DROUND23_L(KEY_BASE + 52, KEY_BASE + 0, KEY_BASE + 2, I1) \
0203 AES_DROUND01_L(KEY_BASE + 54, KEY_BASE + 0, KEY_BASE + 2, I0) \
0204 ldd [%o0 + 0xd8], %f8; \
0205 ldd [%o0 + 0xd0], %f10; \
0206 AES_DROUND23_L(KEY_BASE + 52, KEY_BASE + 4, KEY_BASE + 6, I3) \
0207 AES_DROUND01_L(KEY_BASE + 54, KEY_BASE + 4, KEY_BASE + 6, I2) \
0208 ldd [%o0 + 0xc8], %f12; \
0209 ldd [%o0 + 0xc0], %f14;
0210
0211 .align 32
0212 ENTRY(aes_sparc64_key_expand)
0213
0214 VISEntry
0215 ld [%o0 + 0x00], %f0
0216 ld [%o0 + 0x04], %f1
0217 ld [%o0 + 0x08], %f2
0218 ld [%o0 + 0x0c], %f3
0219
0220 std %f0, [%o1 + 0x00]
0221 std %f2, [%o1 + 0x08]
0222 add %o1, 0x10, %o1
0223
0224 cmp %o2, 24
0225 bl 2f
0226 nop
0227
0228 be 1f
0229 nop
0230
0231
0232 ld [%o0 + 0x10], %f4
0233 ld [%o0 + 0x14], %f5
0234 ld [%o0 + 0x18], %f6
0235 ld [%o0 + 0x1c], %f7
0236
0237 std %f4, [%o1 + 0x00]
0238 std %f6, [%o1 + 0x08]
0239 add %o1, 0x10, %o1
0240
0241 AES_KEXPAND1(0, 6, 0x0, 8)
0242 AES_KEXPAND2(2, 8, 10)
0243 AES_KEXPAND0(4, 10, 12)
0244 AES_KEXPAND2(6, 12, 14)
0245 AES_KEXPAND1(8, 14, 0x1, 16)
0246 AES_KEXPAND2(10, 16, 18)
0247 AES_KEXPAND0(12, 18, 20)
0248 AES_KEXPAND2(14, 20, 22)
0249 AES_KEXPAND1(16, 22, 0x2, 24)
0250 AES_KEXPAND2(18, 24, 26)
0251 AES_KEXPAND0(20, 26, 28)
0252 AES_KEXPAND2(22, 28, 30)
0253 AES_KEXPAND1(24, 30, 0x3, 32)
0254 AES_KEXPAND2(26, 32, 34)
0255 AES_KEXPAND0(28, 34, 36)
0256 AES_KEXPAND2(30, 36, 38)
0257 AES_KEXPAND1(32, 38, 0x4, 40)
0258 AES_KEXPAND2(34, 40, 42)
0259 AES_KEXPAND0(36, 42, 44)
0260 AES_KEXPAND2(38, 44, 46)
0261 AES_KEXPAND1(40, 46, 0x5, 48)
0262 AES_KEXPAND2(42, 48, 50)
0263 AES_KEXPAND0(44, 50, 52)
0264 AES_KEXPAND2(46, 52, 54)
0265 AES_KEXPAND1(48, 54, 0x6, 56)
0266 AES_KEXPAND2(50, 56, 58)
0267
0268 std %f8, [%o1 + 0x00]
0269 std %f10, [%o1 + 0x08]
0270 std %f12, [%o1 + 0x10]
0271 std %f14, [%o1 + 0x18]
0272 std %f16, [%o1 + 0x20]
0273 std %f18, [%o1 + 0x28]
0274 std %f20, [%o1 + 0x30]
0275 std %f22, [%o1 + 0x38]
0276 std %f24, [%o1 + 0x40]
0277 std %f26, [%o1 + 0x48]
0278 std %f28, [%o1 + 0x50]
0279 std %f30, [%o1 + 0x58]
0280 std %f32, [%o1 + 0x60]
0281 std %f34, [%o1 + 0x68]
0282 std %f36, [%o1 + 0x70]
0283 std %f38, [%o1 + 0x78]
0284 std %f40, [%o1 + 0x80]
0285 std %f42, [%o1 + 0x88]
0286 std %f44, [%o1 + 0x90]
0287 std %f46, [%o1 + 0x98]
0288 std %f48, [%o1 + 0xa0]
0289 std %f50, [%o1 + 0xa8]
0290 std %f52, [%o1 + 0xb0]
0291 std %f54, [%o1 + 0xb8]
0292 std %f56, [%o1 + 0xc0]
0293 ba,pt %xcc, 80f
0294 std %f58, [%o1 + 0xc8]
0295
0296 1:
0297
0298 ld [%o0 + 0x10], %f4
0299 ld [%o0 + 0x14], %f5
0300
0301 std %f4, [%o1 + 0x00]
0302 add %o1, 0x08, %o1
0303
0304 AES_KEXPAND1(0, 4, 0x0, 6)
0305 AES_KEXPAND2(2, 6, 8)
0306 AES_KEXPAND2(4, 8, 10)
0307 AES_KEXPAND1(6, 10, 0x1, 12)
0308 AES_KEXPAND2(8, 12, 14)
0309 AES_KEXPAND2(10, 14, 16)
0310 AES_KEXPAND1(12, 16, 0x2, 18)
0311 AES_KEXPAND2(14, 18, 20)
0312 AES_KEXPAND2(16, 20, 22)
0313 AES_KEXPAND1(18, 22, 0x3, 24)
0314 AES_KEXPAND2(20, 24, 26)
0315 AES_KEXPAND2(22, 26, 28)
0316 AES_KEXPAND1(24, 28, 0x4, 30)
0317 AES_KEXPAND2(26, 30, 32)
0318 AES_KEXPAND2(28, 32, 34)
0319 AES_KEXPAND1(30, 34, 0x5, 36)
0320 AES_KEXPAND2(32, 36, 38)
0321 AES_KEXPAND2(34, 38, 40)
0322 AES_KEXPAND1(36, 40, 0x6, 42)
0323 AES_KEXPAND2(38, 42, 44)
0324 AES_KEXPAND2(40, 44, 46)
0325 AES_KEXPAND1(42, 46, 0x7, 48)
0326 AES_KEXPAND2(44, 48, 50)
0327
0328 std %f6, [%o1 + 0x00]
0329 std %f8, [%o1 + 0x08]
0330 std %f10, [%o1 + 0x10]
0331 std %f12, [%o1 + 0x18]
0332 std %f14, [%o1 + 0x20]
0333 std %f16, [%o1 + 0x28]
0334 std %f18, [%o1 + 0x30]
0335 std %f20, [%o1 + 0x38]
0336 std %f22, [%o1 + 0x40]
0337 std %f24, [%o1 + 0x48]
0338 std %f26, [%o1 + 0x50]
0339 std %f28, [%o1 + 0x58]
0340 std %f30, [%o1 + 0x60]
0341 std %f32, [%o1 + 0x68]
0342 std %f34, [%o1 + 0x70]
0343 std %f36, [%o1 + 0x78]
0344 std %f38, [%o1 + 0x80]
0345 std %f40, [%o1 + 0x88]
0346 std %f42, [%o1 + 0x90]
0347 std %f44, [%o1 + 0x98]
0348 std %f46, [%o1 + 0xa0]
0349 std %f48, [%o1 + 0xa8]
0350 ba,pt %xcc, 80f
0351 std %f50, [%o1 + 0xb0]
0352
0353 2:
0354
0355 AES_KEXPAND1(0, 2, 0x0, 4)
0356 AES_KEXPAND2(2, 4, 6)
0357 AES_KEXPAND1(4, 6, 0x1, 8)
0358 AES_KEXPAND2(6, 8, 10)
0359 AES_KEXPAND1(8, 10, 0x2, 12)
0360 AES_KEXPAND2(10, 12, 14)
0361 AES_KEXPAND1(12, 14, 0x3, 16)
0362 AES_KEXPAND2(14, 16, 18)
0363 AES_KEXPAND1(16, 18, 0x4, 20)
0364 AES_KEXPAND2(18, 20, 22)
0365 AES_KEXPAND1(20, 22, 0x5, 24)
0366 AES_KEXPAND2(22, 24, 26)
0367 AES_KEXPAND1(24, 26, 0x6, 28)
0368 AES_KEXPAND2(26, 28, 30)
0369 AES_KEXPAND1(28, 30, 0x7, 32)
0370 AES_KEXPAND2(30, 32, 34)
0371 AES_KEXPAND1(32, 34, 0x8, 36)
0372 AES_KEXPAND2(34, 36, 38)
0373 AES_KEXPAND1(36, 38, 0x9, 40)
0374 AES_KEXPAND2(38, 40, 42)
0375
0376 std %f4, [%o1 + 0x00]
0377 std %f6, [%o1 + 0x08]
0378 std %f8, [%o1 + 0x10]
0379 std %f10, [%o1 + 0x18]
0380 std %f12, [%o1 + 0x20]
0381 std %f14, [%o1 + 0x28]
0382 std %f16, [%o1 + 0x30]
0383 std %f18, [%o1 + 0x38]
0384 std %f20, [%o1 + 0x40]
0385 std %f22, [%o1 + 0x48]
0386 std %f24, [%o1 + 0x50]
0387 std %f26, [%o1 + 0x58]
0388 std %f28, [%o1 + 0x60]
0389 std %f30, [%o1 + 0x68]
0390 std %f32, [%o1 + 0x70]
0391 std %f34, [%o1 + 0x78]
0392 std %f36, [%o1 + 0x80]
0393 std %f38, [%o1 + 0x88]
0394 std %f40, [%o1 + 0x90]
0395 std %f42, [%o1 + 0x98]
0396 80:
0397 retl
0398 VISExit
0399 ENDPROC(aes_sparc64_key_expand)
0400
0401 .align 32
0402 ENTRY(aes_sparc64_encrypt_128)
0403
0404 VISEntry
0405 ld [%o1 + 0x00], %f4
0406 ld [%o1 + 0x04], %f5
0407 ld [%o1 + 0x08], %f6
0408 ld [%o1 + 0x0c], %f7
0409 ldd [%o0 + 0x00], %f8
0410 ldd [%o0 + 0x08], %f10
0411 ldd [%o0 + 0x10], %f12
0412 ldd [%o0 + 0x18], %f14
0413 ldd [%o0 + 0x20], %f16
0414 ldd [%o0 + 0x28], %f18
0415 ldd [%o0 + 0x30], %f20
0416 ldd [%o0 + 0x38], %f22
0417 ldd [%o0 + 0x40], %f24
0418 ldd [%o0 + 0x48], %f26
0419 ldd [%o0 + 0x50], %f28
0420 ldd [%o0 + 0x58], %f30
0421 ldd [%o0 + 0x60], %f32
0422 ldd [%o0 + 0x68], %f34
0423 ldd [%o0 + 0x70], %f36
0424 ldd [%o0 + 0x78], %f38
0425 ldd [%o0 + 0x80], %f40
0426 ldd [%o0 + 0x88], %f42
0427 ldd [%o0 + 0x90], %f44
0428 ldd [%o0 + 0x98], %f46
0429 ldd [%o0 + 0xa0], %f48
0430 ldd [%o0 + 0xa8], %f50
0431 fxor %f8, %f4, %f4
0432 fxor %f10, %f6, %f6
0433 ENCRYPT_128(12, 4, 6, 0, 2)
0434 st %f4, [%o2 + 0x00]
0435 st %f5, [%o2 + 0x04]
0436 st %f6, [%o2 + 0x08]
0437 st %f7, [%o2 + 0x0c]
0438 retl
0439 VISExit
0440 ENDPROC(aes_sparc64_encrypt_128)
0441
0442 .align 32
0443 ENTRY(aes_sparc64_encrypt_192)
0444
0445 VISEntry
0446 ld [%o1 + 0x00], %f4
0447 ld [%o1 + 0x04], %f5
0448 ld [%o1 + 0x08], %f6
0449 ld [%o1 + 0x0c], %f7
0450
0451 ldd [%o0 + 0x00], %f8
0452 ldd [%o0 + 0x08], %f10
0453
0454 fxor %f8, %f4, %f4
0455 fxor %f10, %f6, %f6
0456
0457 ldd [%o0 + 0x10], %f8
0458 ldd [%o0 + 0x18], %f10
0459 ldd [%o0 + 0x20], %f12
0460 ldd [%o0 + 0x28], %f14
0461 add %o0, 0x20, %o0
0462
0463 ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2)
0464
0465 ldd [%o0 + 0x10], %f12
0466 ldd [%o0 + 0x18], %f14
0467 ldd [%o0 + 0x20], %f16
0468 ldd [%o0 + 0x28], %f18
0469 ldd [%o0 + 0x30], %f20
0470 ldd [%o0 + 0x38], %f22
0471 ldd [%o0 + 0x40], %f24
0472 ldd [%o0 + 0x48], %f26
0473 ldd [%o0 + 0x50], %f28
0474 ldd [%o0 + 0x58], %f30
0475 ldd [%o0 + 0x60], %f32
0476 ldd [%o0 + 0x68], %f34
0477 ldd [%o0 + 0x70], %f36
0478 ldd [%o0 + 0x78], %f38
0479 ldd [%o0 + 0x80], %f40
0480 ldd [%o0 + 0x88], %f42
0481 ldd [%o0 + 0x90], %f44
0482 ldd [%o0 + 0x98], %f46
0483 ldd [%o0 + 0xa0], %f48
0484 ldd [%o0 + 0xa8], %f50
0485
0486
0487 ENCRYPT_128(12, 4, 6, 0, 2)
0488
0489 st %f4, [%o2 + 0x00]
0490 st %f5, [%o2 + 0x04]
0491 st %f6, [%o2 + 0x08]
0492 st %f7, [%o2 + 0x0c]
0493
0494 retl
0495 VISExit
0496 ENDPROC(aes_sparc64_encrypt_192)
0497
0498 .align 32
0499 ENTRY(aes_sparc64_encrypt_256)
0500
0501 VISEntry
0502 ld [%o1 + 0x00], %f4
0503 ld [%o1 + 0x04], %f5
0504 ld [%o1 + 0x08], %f6
0505 ld [%o1 + 0x0c], %f7
0506
0507 ldd [%o0 + 0x00], %f8
0508 ldd [%o0 + 0x08], %f10
0509
0510 fxor %f8, %f4, %f4
0511 fxor %f10, %f6, %f6
0512
0513 ldd [%o0 + 0x10], %f8
0514
0515 ldd [%o0 + 0x18], %f10
0516 ldd [%o0 + 0x20], %f12
0517 ldd [%o0 + 0x28], %f14
0518 add %o0, 0x20, %o0
0519
0520 ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2)
0521
0522 ldd [%o0 + 0x10], %f8
0523
0524 ldd [%o0 + 0x18], %f10
0525 ldd [%o0 + 0x20], %f12
0526 ldd [%o0 + 0x28], %f14
0527 add %o0, 0x20, %o0
0528
0529 ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2)
0530
0531 ldd [%o0 + 0x10], %f12
0532 ldd [%o0 + 0x18], %f14
0533 ldd [%o0 + 0x20], %f16
0534 ldd [%o0 + 0x28], %f18
0535 ldd [%o0 + 0x30], %f20
0536 ldd [%o0 + 0x38], %f22
0537 ldd [%o0 + 0x40], %f24
0538 ldd [%o0 + 0x48], %f26
0539 ldd [%o0 + 0x50], %f28
0540 ldd [%o0 + 0x58], %f30
0541 ldd [%o0 + 0x60], %f32
0542 ldd [%o0 + 0x68], %f34
0543 ldd [%o0 + 0x70], %f36
0544 ldd [%o0 + 0x78], %f38
0545 ldd [%o0 + 0x80], %f40
0546 ldd [%o0 + 0x88], %f42
0547 ldd [%o0 + 0x90], %f44
0548 ldd [%o0 + 0x98], %f46
0549 ldd [%o0 + 0xa0], %f48
0550 ldd [%o0 + 0xa8], %f50
0551
0552 ENCRYPT_128(12, 4, 6, 0, 2)
0553
0554 st %f4, [%o2 + 0x00]
0555 st %f5, [%o2 + 0x04]
0556 st %f6, [%o2 + 0x08]
0557 st %f7, [%o2 + 0x0c]
0558
0559 retl
0560 VISExit
0561 ENDPROC(aes_sparc64_encrypt_256)
0562
0563 .align 32
0564 ENTRY(aes_sparc64_decrypt_128)
0565
0566 VISEntry
0567 ld [%o1 + 0x00], %f4
0568 ld [%o1 + 0x04], %f5
0569 ld [%o1 + 0x08], %f6
0570 ld [%o1 + 0x0c], %f7
0571 ldd [%o0 + 0xa0], %f8
0572 ldd [%o0 + 0xa8], %f10
0573 ldd [%o0 + 0x98], %f12
0574 ldd [%o0 + 0x90], %f14
0575 ldd [%o0 + 0x88], %f16
0576 ldd [%o0 + 0x80], %f18
0577 ldd [%o0 + 0x78], %f20
0578 ldd [%o0 + 0x70], %f22
0579 ldd [%o0 + 0x68], %f24
0580 ldd [%o0 + 0x60], %f26
0581 ldd [%o0 + 0x58], %f28
0582 ldd [%o0 + 0x50], %f30
0583 ldd [%o0 + 0x48], %f32
0584 ldd [%o0 + 0x40], %f34
0585 ldd [%o0 + 0x38], %f36
0586 ldd [%o0 + 0x30], %f38
0587 ldd [%o0 + 0x28], %f40
0588 ldd [%o0 + 0x20], %f42
0589 ldd [%o0 + 0x18], %f44
0590 ldd [%o0 + 0x10], %f46
0591 ldd [%o0 + 0x08], %f48
0592 ldd [%o0 + 0x00], %f50
0593 fxor %f8, %f4, %f4
0594 fxor %f10, %f6, %f6
0595 DECRYPT_128(12, 4, 6, 0, 2)
0596 st %f4, [%o2 + 0x00]
0597 st %f5, [%o2 + 0x04]
0598 st %f6, [%o2 + 0x08]
0599 st %f7, [%o2 + 0x0c]
0600 retl
0601 VISExit
0602 ENDPROC(aes_sparc64_decrypt_128)
0603
0604 .align 32
0605 ENTRY(aes_sparc64_decrypt_192)
0606
0607 VISEntry
0608 ld [%o1 + 0x00], %f4
0609 ld [%o1 + 0x04], %f5
0610 ld [%o1 + 0x08], %f6
0611 ld [%o1 + 0x0c], %f7
0612 ldd [%o0 + 0xc0], %f8
0613 ldd [%o0 + 0xc8], %f10
0614 ldd [%o0 + 0xb8], %f12
0615 ldd [%o0 + 0xb0], %f14
0616 ldd [%o0 + 0xa8], %f16
0617 ldd [%o0 + 0xa0], %f18
0618 fxor %f8, %f4, %f4
0619 fxor %f10, %f6, %f6
0620 ldd [%o0 + 0x98], %f20
0621 ldd [%o0 + 0x90], %f22
0622 ldd [%o0 + 0x88], %f24
0623 ldd [%o0 + 0x80], %f26
0624 DECRYPT_TWO_ROUNDS(12, 4, 6, 0, 2)
0625 ldd [%o0 + 0x78], %f28
0626 ldd [%o0 + 0x70], %f30
0627 ldd [%o0 + 0x68], %f32
0628 ldd [%o0 + 0x60], %f34
0629 ldd [%o0 + 0x58], %f36
0630 ldd [%o0 + 0x50], %f38
0631 ldd [%o0 + 0x48], %f40
0632 ldd [%o0 + 0x40], %f42
0633 ldd [%o0 + 0x38], %f44
0634 ldd [%o0 + 0x30], %f46
0635 ldd [%o0 + 0x28], %f48
0636 ldd [%o0 + 0x20], %f50
0637 ldd [%o0 + 0x18], %f52
0638 ldd [%o0 + 0x10], %f54
0639 ldd [%o0 + 0x08], %f56
0640 ldd [%o0 + 0x00], %f58
0641 DECRYPT_128(20, 4, 6, 0, 2)
0642 st %f4, [%o2 + 0x00]
0643 st %f5, [%o2 + 0x04]
0644 st %f6, [%o2 + 0x08]
0645 st %f7, [%o2 + 0x0c]
0646 retl
0647 VISExit
0648 ENDPROC(aes_sparc64_decrypt_192)
0649
0650 .align 32
0651 ENTRY(aes_sparc64_decrypt_256)
0652
0653 VISEntry
0654 ld [%o1 + 0x00], %f4
0655 ld [%o1 + 0x04], %f5
0656 ld [%o1 + 0x08], %f6
0657 ld [%o1 + 0x0c], %f7
0658 ldd [%o0 + 0xe0], %f8
0659 ldd [%o0 + 0xe8], %f10
0660 ldd [%o0 + 0xd8], %f12
0661 ldd [%o0 + 0xd0], %f14
0662 ldd [%o0 + 0xc8], %f16
0663 fxor %f8, %f4, %f4
0664 ldd [%o0 + 0xc0], %f18
0665 fxor %f10, %f6, %f6
0666 ldd [%o0 + 0xb8], %f20
0667 AES_DROUND23(12, 4, 6, 2)
0668 ldd [%o0 + 0xb0], %f22
0669 AES_DROUND01(14, 4, 6, 0)
0670 ldd [%o0 + 0xa8], %f24
0671 AES_DROUND23(16, 0, 2, 6)
0672 ldd [%o0 + 0xa0], %f26
0673 AES_DROUND01(18, 0, 2, 4)
0674 ldd [%o0 + 0x98], %f12
0675 AES_DROUND23(20, 4, 6, 2)
0676 ldd [%o0 + 0x90], %f14
0677 AES_DROUND01(22, 4, 6, 0)
0678 ldd [%o0 + 0x88], %f16
0679 AES_DROUND23(24, 0, 2, 6)
0680 ldd [%o0 + 0x80], %f18
0681 AES_DROUND01(26, 0, 2, 4)
0682 ldd [%o0 + 0x78], %f20
0683 AES_DROUND23(12, 4, 6, 2)
0684 ldd [%o0 + 0x70], %f22
0685 AES_DROUND01(14, 4, 6, 0)
0686 ldd [%o0 + 0x68], %f24
0687 AES_DROUND23(16, 0, 2, 6)
0688 ldd [%o0 + 0x60], %f26
0689 AES_DROUND01(18, 0, 2, 4)
0690 ldd [%o0 + 0x58], %f28
0691 AES_DROUND23(20, 4, 6, 2)
0692 ldd [%o0 + 0x50], %f30
0693 AES_DROUND01(22, 4, 6, 0)
0694 ldd [%o0 + 0x48], %f32
0695 AES_DROUND23(24, 0, 2, 6)
0696 ldd [%o0 + 0x40], %f34
0697 AES_DROUND01(26, 0, 2, 4)
0698 ldd [%o0 + 0x38], %f36
0699 AES_DROUND23(28, 4, 6, 2)
0700 ldd [%o0 + 0x30], %f38
0701 AES_DROUND01(30, 4, 6, 0)
0702 ldd [%o0 + 0x28], %f40
0703 AES_DROUND23(32, 0, 2, 6)
0704 ldd [%o0 + 0x20], %f42
0705 AES_DROUND01(34, 0, 2, 4)
0706 ldd [%o0 + 0x18], %f44
0707 AES_DROUND23(36, 4, 6, 2)
0708 ldd [%o0 + 0x10], %f46
0709 AES_DROUND01(38, 4, 6, 0)
0710 ldd [%o0 + 0x08], %f48
0711 AES_DROUND23(40, 0, 2, 6)
0712 ldd [%o0 + 0x00], %f50
0713 AES_DROUND01(42, 0, 2, 4)
0714 AES_DROUND23(44, 4, 6, 2)
0715 AES_DROUND01(46, 4, 6, 0)
0716 AES_DROUND23_L(48, 0, 2, 6)
0717 AES_DROUND01_L(50, 0, 2, 4)
0718 st %f4, [%o2 + 0x00]
0719 st %f5, [%o2 + 0x04]
0720 st %f6, [%o2 + 0x08]
0721 st %f7, [%o2 + 0x0c]
0722 retl
0723 VISExit
0724 ENDPROC(aes_sparc64_decrypt_256)
0725
0726 .align 32
0727 ENTRY(aes_sparc64_load_encrypt_keys_128)
0728
0729 VISEntry
0730 ldd [%o0 + 0x10], %f8
0731 ldd [%o0 + 0x18], %f10
0732 ldd [%o0 + 0x20], %f12
0733 ldd [%o0 + 0x28], %f14
0734 ldd [%o0 + 0x30], %f16
0735 ldd [%o0 + 0x38], %f18
0736 ldd [%o0 + 0x40], %f20
0737 ldd [%o0 + 0x48], %f22
0738 ldd [%o0 + 0x50], %f24
0739 ldd [%o0 + 0x58], %f26
0740 ldd [%o0 + 0x60], %f28
0741 ldd [%o0 + 0x68], %f30
0742 ldd [%o0 + 0x70], %f32
0743 ldd [%o0 + 0x78], %f34
0744 ldd [%o0 + 0x80], %f36
0745 ldd [%o0 + 0x88], %f38
0746 ldd [%o0 + 0x90], %f40
0747 ldd [%o0 + 0x98], %f42
0748 ldd [%o0 + 0xa0], %f44
0749 retl
0750 ldd [%o0 + 0xa8], %f46
0751 ENDPROC(aes_sparc64_load_encrypt_keys_128)
0752
0753 .align 32
0754 ENTRY(aes_sparc64_load_encrypt_keys_192)
0755
0756 VISEntry
0757 ldd [%o0 + 0x10], %f8
0758 ldd [%o0 + 0x18], %f10
0759 ldd [%o0 + 0x20], %f12
0760 ldd [%o0 + 0x28], %f14
0761 ldd [%o0 + 0x30], %f16
0762 ldd [%o0 + 0x38], %f18
0763 ldd [%o0 + 0x40], %f20
0764 ldd [%o0 + 0x48], %f22
0765 ldd [%o0 + 0x50], %f24
0766 ldd [%o0 + 0x58], %f26
0767 ldd [%o0 + 0x60], %f28
0768 ldd [%o0 + 0x68], %f30
0769 ldd [%o0 + 0x70], %f32
0770 ldd [%o0 + 0x78], %f34
0771 ldd [%o0 + 0x80], %f36
0772 ldd [%o0 + 0x88], %f38
0773 ldd [%o0 + 0x90], %f40
0774 ldd [%o0 + 0x98], %f42
0775 ldd [%o0 + 0xa0], %f44
0776 ldd [%o0 + 0xa8], %f46
0777 ldd [%o0 + 0xb0], %f48
0778 ldd [%o0 + 0xb8], %f50
0779 ldd [%o0 + 0xc0], %f52
0780 retl
0781 ldd [%o0 + 0xc8], %f54
0782 ENDPROC(aes_sparc64_load_encrypt_keys_192)
0783
0784 .align 32
0785 ENTRY(aes_sparc64_load_encrypt_keys_256)
0786
0787 VISEntry
0788 ldd [%o0 + 0x10], %f8
0789 ldd [%o0 + 0x18], %f10
0790 ldd [%o0 + 0x20], %f12
0791 ldd [%o0 + 0x28], %f14
0792 ldd [%o0 + 0x30], %f16
0793 ldd [%o0 + 0x38], %f18
0794 ldd [%o0 + 0x40], %f20
0795 ldd [%o0 + 0x48], %f22
0796 ldd [%o0 + 0x50], %f24
0797 ldd [%o0 + 0x58], %f26
0798 ldd [%o0 + 0x60], %f28
0799 ldd [%o0 + 0x68], %f30
0800 ldd [%o0 + 0x70], %f32
0801 ldd [%o0 + 0x78], %f34
0802 ldd [%o0 + 0x80], %f36
0803 ldd [%o0 + 0x88], %f38
0804 ldd [%o0 + 0x90], %f40
0805 ldd [%o0 + 0x98], %f42
0806 ldd [%o0 + 0xa0], %f44
0807 ldd [%o0 + 0xa8], %f46
0808 ldd [%o0 + 0xb0], %f48
0809 ldd [%o0 + 0xb8], %f50
0810 ldd [%o0 + 0xc0], %f52
0811 ldd [%o0 + 0xc8], %f54
0812 ldd [%o0 + 0xd0], %f56
0813 ldd [%o0 + 0xd8], %f58
0814 ldd [%o0 + 0xe0], %f60
0815 retl
0816 ldd [%o0 + 0xe8], %f62
0817 ENDPROC(aes_sparc64_load_encrypt_keys_256)
0818
0819 .align 32
0820 ENTRY(aes_sparc64_load_decrypt_keys_128)
0821
0822 VISEntry
0823 ldd [%o0 + 0x98], %f8
0824 ldd [%o0 + 0x90], %f10
0825 ldd [%o0 + 0x88], %f12
0826 ldd [%o0 + 0x80], %f14
0827 ldd [%o0 + 0x78], %f16
0828 ldd [%o0 + 0x70], %f18
0829 ldd [%o0 + 0x68], %f20
0830 ldd [%o0 + 0x60], %f22
0831 ldd [%o0 + 0x58], %f24
0832 ldd [%o0 + 0x50], %f26
0833 ldd [%o0 + 0x48], %f28
0834 ldd [%o0 + 0x40], %f30
0835 ldd [%o0 + 0x38], %f32
0836 ldd [%o0 + 0x30], %f34
0837 ldd [%o0 + 0x28], %f36
0838 ldd [%o0 + 0x20], %f38
0839 ldd [%o0 + 0x18], %f40
0840 ldd [%o0 + 0x10], %f42
0841 ldd [%o0 + 0x08], %f44
0842 retl
0843 ldd [%o0 + 0x00], %f46
0844 ENDPROC(aes_sparc64_load_decrypt_keys_128)
0845
0846 .align 32
0847 ENTRY(aes_sparc64_load_decrypt_keys_192)
0848
0849 VISEntry
0850 ldd [%o0 + 0xb8], %f8
0851 ldd [%o0 + 0xb0], %f10
0852 ldd [%o0 + 0xa8], %f12
0853 ldd [%o0 + 0xa0], %f14
0854 ldd [%o0 + 0x98], %f16
0855 ldd [%o0 + 0x90], %f18
0856 ldd [%o0 + 0x88], %f20
0857 ldd [%o0 + 0x80], %f22
0858 ldd [%o0 + 0x78], %f24
0859 ldd [%o0 + 0x70], %f26
0860 ldd [%o0 + 0x68], %f28
0861 ldd [%o0 + 0x60], %f30
0862 ldd [%o0 + 0x58], %f32
0863 ldd [%o0 + 0x50], %f34
0864 ldd [%o0 + 0x48], %f36
0865 ldd [%o0 + 0x40], %f38
0866 ldd [%o0 + 0x38], %f40
0867 ldd [%o0 + 0x30], %f42
0868 ldd [%o0 + 0x28], %f44
0869 ldd [%o0 + 0x20], %f46
0870 ldd [%o0 + 0x18], %f48
0871 ldd [%o0 + 0x10], %f50
0872 ldd [%o0 + 0x08], %f52
0873 retl
0874 ldd [%o0 + 0x00], %f54
0875 ENDPROC(aes_sparc64_load_decrypt_keys_192)
0876
0877 .align 32
0878 ENTRY(aes_sparc64_load_decrypt_keys_256)
0879
0880 VISEntry
0881 ldd [%o0 + 0xd8], %f8
0882 ldd [%o0 + 0xd0], %f10
0883 ldd [%o0 + 0xc8], %f12
0884 ldd [%o0 + 0xc0], %f14
0885 ldd [%o0 + 0xb8], %f16
0886 ldd [%o0 + 0xb0], %f18
0887 ldd [%o0 + 0xa8], %f20
0888 ldd [%o0 + 0xa0], %f22
0889 ldd [%o0 + 0x98], %f24
0890 ldd [%o0 + 0x90], %f26
0891 ldd [%o0 + 0x88], %f28
0892 ldd [%o0 + 0x80], %f30
0893 ldd [%o0 + 0x78], %f32
0894 ldd [%o0 + 0x70], %f34
0895 ldd [%o0 + 0x68], %f36
0896 ldd [%o0 + 0x60], %f38
0897 ldd [%o0 + 0x58], %f40
0898 ldd [%o0 + 0x50], %f42
0899 ldd [%o0 + 0x48], %f44
0900 ldd [%o0 + 0x40], %f46
0901 ldd [%o0 + 0x38], %f48
0902 ldd [%o0 + 0x30], %f50
0903 ldd [%o0 + 0x28], %f52
0904 ldd [%o0 + 0x20], %f54
0905 ldd [%o0 + 0x18], %f56
0906 ldd [%o0 + 0x10], %f58
0907 ldd [%o0 + 0x08], %f60
0908 retl
0909 ldd [%o0 + 0x00], %f62
0910 ENDPROC(aes_sparc64_load_decrypt_keys_256)
0911
0912 .align 32
0913 ENTRY(aes_sparc64_ecb_encrypt_128)
0914
0915 ldx [%o0 + 0x00], %g1
0916 subcc %o3, 0x10, %o3
0917 be 10f
0918 ldx [%o0 + 0x08], %g2
0919 1: ldx [%o1 + 0x00], %g3
0920 ldx [%o1 + 0x08], %g7
0921 ldx [%o1 + 0x10], %o4
0922 ldx [%o1 + 0x18], %o5
0923 xor %g1, %g3, %g3
0924 xor %g2, %g7, %g7
0925 MOVXTOD_G3_F4
0926 MOVXTOD_G7_F6
0927 xor %g1, %o4, %g3
0928 xor %g2, %o5, %g7
0929 MOVXTOD_G3_F60
0930 MOVXTOD_G7_F62
0931 ENCRYPT_128_2(8, 4, 6, 60, 62, 0, 2, 56, 58)
0932 std %f4, [%o2 + 0x00]
0933 std %f6, [%o2 + 0x08]
0934 std %f60, [%o2 + 0x10]
0935 std %f62, [%o2 + 0x18]
0936 sub %o3, 0x20, %o3
0937 add %o1, 0x20, %o1
0938 brgz %o3, 1b
0939 add %o2, 0x20, %o2
0940 brlz,pt %o3, 11f
0941 nop
0942 10: ldx [%o1 + 0x00], %g3
0943 ldx [%o1 + 0x08], %g7
0944 xor %g1, %g3, %g3
0945 xor %g2, %g7, %g7
0946 MOVXTOD_G3_F4
0947 MOVXTOD_G7_F6
0948 ENCRYPT_128(8, 4, 6, 0, 2)
0949 std %f4, [%o2 + 0x00]
0950 std %f6, [%o2 + 0x08]
0951 11: retl
0952 nop
0953 ENDPROC(aes_sparc64_ecb_encrypt_128)
0954
0955 .align 32
0956 ENTRY(aes_sparc64_ecb_encrypt_192)
0957
0958 ldx [%o0 + 0x00], %g1
0959 subcc %o3, 0x10, %o3
0960 be 10f
0961 ldx [%o0 + 0x08], %g2
0962 1: ldx [%o1 + 0x00], %g3
0963 ldx [%o1 + 0x08], %g7
0964 ldx [%o1 + 0x10], %o4
0965 ldx [%o1 + 0x18], %o5
0966 xor %g1, %g3, %g3
0967 xor %g2, %g7, %g7
0968 MOVXTOD_G3_F4
0969 MOVXTOD_G7_F6
0970 xor %g1, %o4, %g3
0971 xor %g2, %o5, %g7
0972 MOVXTOD_G3_F60
0973 MOVXTOD_G7_F62
0974 ENCRYPT_192_2(8, 4, 6, 60, 62, 0, 2, 56, 58)
0975 std %f4, [%o2 + 0x00]
0976 std %f6, [%o2 + 0x08]
0977 std %f60, [%o2 + 0x10]
0978 std %f62, [%o2 + 0x18]
0979 sub %o3, 0x20, %o3
0980 add %o1, 0x20, %o1
0981 brgz %o3, 1b
0982 add %o2, 0x20, %o2
0983 brlz,pt %o3, 11f
0984 nop
0985 10: ldx [%o1 + 0x00], %g3
0986 ldx [%o1 + 0x08], %g7
0987 xor %g1, %g3, %g3
0988 xor %g2, %g7, %g7
0989 MOVXTOD_G3_F4
0990 MOVXTOD_G7_F6
0991 ENCRYPT_192(8, 4, 6, 0, 2)
0992 std %f4, [%o2 + 0x00]
0993 std %f6, [%o2 + 0x08]
0994 11: retl
0995 nop
0996 ENDPROC(aes_sparc64_ecb_encrypt_192)
0997
0998 .align 32
0999 ENTRY(aes_sparc64_ecb_encrypt_256)
1000
1001 ldx [%o0 + 0x00], %g1
1002 subcc %o3, 0x10, %o3
1003 be 10f
1004 ldx [%o0 + 0x08], %g2
1005 1: ldx [%o1 + 0x00], %g3
1006 ldx [%o1 + 0x08], %g7
1007 ldx [%o1 + 0x10], %o4
1008 ldx [%o1 + 0x18], %o5
1009 xor %g1, %g3, %g3
1010 xor %g2, %g7, %g7
1011 MOVXTOD_G3_F4
1012 MOVXTOD_G7_F6
1013 xor %g1, %o4, %g3
1014 xor %g2, %o5, %g7
1015 MOVXTOD_G3_F0
1016 MOVXTOD_G7_F2
1017 ENCRYPT_256_2(8, 4, 6, 0, 2)
1018 std %f4, [%o2 + 0x00]
1019 std %f6, [%o2 + 0x08]
1020 std %f0, [%o2 + 0x10]
1021 std %f2, [%o2 + 0x18]
1022 sub %o3, 0x20, %o3
1023 add %o1, 0x20, %o1
1024 brgz %o3, 1b
1025 add %o2, 0x20, %o2
1026 brlz,pt %o3, 11f
1027 nop
1028 10: ldd [%o0 + 0xd0], %f56
1029 ldd [%o0 + 0xd8], %f58
1030 ldd [%o0 + 0xe0], %f60
1031 ldd [%o0 + 0xe8], %f62
1032 ldx [%o1 + 0x00], %g3
1033 ldx [%o1 + 0x08], %g7
1034 xor %g1, %g3, %g3
1035 xor %g2, %g7, %g7
1036 MOVXTOD_G3_F4
1037 MOVXTOD_G7_F6
1038 ENCRYPT_256(8, 4, 6, 0, 2)
1039 std %f4, [%o2 + 0x00]
1040 std %f6, [%o2 + 0x08]
1041 11: retl
1042 nop
1043 ENDPROC(aes_sparc64_ecb_encrypt_256)
1044
1045 .align 32
1046 ENTRY(aes_sparc64_ecb_decrypt_128)
1047
1048 ldx [%o0 - 0x10], %g1
1049 subcc %o3, 0x10, %o3
1050 be 10f
1051 ldx [%o0 - 0x08], %g2
1052 1: ldx [%o1 + 0x00], %g3
1053 ldx [%o1 + 0x08], %g7
1054 ldx [%o1 + 0x10], %o4
1055 ldx [%o1 + 0x18], %o5
1056 xor %g1, %g3, %g3
1057 xor %g2, %g7, %g7
1058 MOVXTOD_G3_F4
1059 MOVXTOD_G7_F6
1060 xor %g1, %o4, %g3
1061 xor %g2, %o5, %g7
1062 MOVXTOD_G3_F60
1063 MOVXTOD_G7_F62
1064 DECRYPT_128_2(8, 4, 6, 60, 62, 0, 2, 56, 58)
1065 std %f4, [%o2 + 0x00]
1066 std %f6, [%o2 + 0x08]
1067 std %f60, [%o2 + 0x10]
1068 std %f62, [%o2 + 0x18]
1069 sub %o3, 0x20, %o3
1070 add %o1, 0x20, %o1
1071 brgz,pt %o3, 1b
1072 add %o2, 0x20, %o2
1073 brlz,pt %o3, 11f
1074 nop
1075 10: ldx [%o1 + 0x00], %g3
1076 ldx [%o1 + 0x08], %g7
1077 xor %g1, %g3, %g3
1078 xor %g2, %g7, %g7
1079 MOVXTOD_G3_F4
1080 MOVXTOD_G7_F6
1081 DECRYPT_128(8, 4, 6, 0, 2)
1082 std %f4, [%o2 + 0x00]
1083 std %f6, [%o2 + 0x08]
1084 11: retl
1085 nop
1086 ENDPROC(aes_sparc64_ecb_decrypt_128)
1087
1088 .align 32
1089 ENTRY(aes_sparc64_ecb_decrypt_192)
1090
1091 ldx [%o0 - 0x10], %g1
1092 subcc %o3, 0x10, %o3
1093 be 10f
1094 ldx [%o0 - 0x08], %g2
1095 1: ldx [%o1 + 0x00], %g3
1096 ldx [%o1 + 0x08], %g7
1097 ldx [%o1 + 0x10], %o4
1098 ldx [%o1 + 0x18], %o5
1099 xor %g1, %g3, %g3
1100 xor %g2, %g7, %g7
1101 MOVXTOD_G3_F4
1102 MOVXTOD_G7_F6
1103 xor %g1, %o4, %g3
1104 xor %g2, %o5, %g7
1105 MOVXTOD_G3_F60
1106 MOVXTOD_G7_F62
1107 DECRYPT_192_2(8, 4, 6, 60, 62, 0, 2, 56, 58)
1108 std %f4, [%o2 + 0x00]
1109 std %f6, [%o2 + 0x08]
1110 std %f60, [%o2 + 0x10]
1111 std %f62, [%o2 + 0x18]
1112 sub %o3, 0x20, %o3
1113 add %o1, 0x20, %o1
1114 brgz,pt %o3, 1b
1115 add %o2, 0x20, %o2
1116 brlz,pt %o3, 11f
1117 nop
1118 10: ldx [%o1 + 0x00], %g3
1119 ldx [%o1 + 0x08], %g7
1120 xor %g1, %g3, %g3
1121 xor %g2, %g7, %g7
1122 MOVXTOD_G3_F4
1123 MOVXTOD_G7_F6
1124 DECRYPT_192(8, 4, 6, 0, 2)
1125 std %f4, [%o2 + 0x00]
1126 std %f6, [%o2 + 0x08]
1127 11: retl
1128 nop
1129 ENDPROC(aes_sparc64_ecb_decrypt_192)
1130
1131 .align 32
1132 ENTRY(aes_sparc64_ecb_decrypt_256)
1133
1134 ldx [%o0 - 0x10], %g1
1135 subcc %o3, 0x10, %o3
1136 ldx [%o0 - 0x08], %g2
1137 be 10f
1138 sub %o0, 0xf0, %o0
1139 1: ldx [%o1 + 0x00], %g3
1140 ldx [%o1 + 0x08], %g7
1141 ldx [%o1 + 0x10], %o4
1142 ldx [%o1 + 0x18], %o5
1143 xor %g1, %g3, %g3
1144 xor %g2, %g7, %g7
1145 MOVXTOD_G3_F4
1146 MOVXTOD_G7_F6
1147 xor %g1, %o4, %g3
1148 xor %g2, %o5, %g7
1149 MOVXTOD_G3_F0
1150 MOVXTOD_G7_F2
1151 DECRYPT_256_2(8, 4, 6, 0, 2)
1152 std %f4, [%o2 + 0x00]
1153 std %f6, [%o2 + 0x08]
1154 std %f0, [%o2 + 0x10]
1155 std %f2, [%o2 + 0x18]
1156 sub %o3, 0x20, %o3
1157 add %o1, 0x20, %o1
1158 brgz,pt %o3, 1b
1159 add %o2, 0x20, %o2
1160 brlz,pt %o3, 11f
1161 nop
1162 10: ldd [%o0 + 0x18], %f56
1163 ldd [%o0 + 0x10], %f58
1164 ldd [%o0 + 0x08], %f60
1165 ldd [%o0 + 0x00], %f62
1166 ldx [%o1 + 0x00], %g3
1167 ldx [%o1 + 0x08], %g7
1168 xor %g1, %g3, %g3
1169 xor %g2, %g7, %g7
1170 MOVXTOD_G3_F4
1171 MOVXTOD_G7_F6
1172 DECRYPT_256(8, 4, 6, 0, 2)
1173 std %f4, [%o2 + 0x00]
1174 std %f6, [%o2 + 0x08]
1175 11: retl
1176 nop
1177 ENDPROC(aes_sparc64_ecb_decrypt_256)
1178
1179 .align 32
1180 ENTRY(aes_sparc64_cbc_encrypt_128)
1181
1182 ldd [%o4 + 0x00], %f4
1183 ldd [%o4 + 0x08], %f6
1184 ldx [%o0 + 0x00], %g1
1185 ldx [%o0 + 0x08], %g2
1186 1: ldx [%o1 + 0x00], %g3
1187 ldx [%o1 + 0x08], %g7
1188 add %o1, 0x10, %o1
1189 xor %g1, %g3, %g3
1190 xor %g2, %g7, %g7
1191 MOVXTOD_G3_F0
1192 MOVXTOD_G7_F2
1193 fxor %f4, %f0, %f4
1194 fxor %f6, %f2, %f6
1195 ENCRYPT_128(8, 4, 6, 0, 2)
1196 std %f4, [%o2 + 0x00]
1197 std %f6, [%o2 + 0x08]
1198 subcc %o3, 0x10, %o3
1199 bne,pt %xcc, 1b
1200 add %o2, 0x10, %o2
1201 std %f4, [%o4 + 0x00]
1202 std %f6, [%o4 + 0x08]
1203 retl
1204 nop
1205 ENDPROC(aes_sparc64_cbc_encrypt_128)
1206
1207 .align 32
1208 ENTRY(aes_sparc64_cbc_encrypt_192)
1209
1210 ldd [%o4 + 0x00], %f4
1211 ldd [%o4 + 0x08], %f6
1212 ldx [%o0 + 0x00], %g1
1213 ldx [%o0 + 0x08], %g2
1214 1: ldx [%o1 + 0x00], %g3
1215 ldx [%o1 + 0x08], %g7
1216 add %o1, 0x10, %o1
1217 xor %g1, %g3, %g3
1218 xor %g2, %g7, %g7
1219 MOVXTOD_G3_F0
1220 MOVXTOD_G7_F2
1221 fxor %f4, %f0, %f4
1222 fxor %f6, %f2, %f6
1223 ENCRYPT_192(8, 4, 6, 0, 2)
1224 std %f4, [%o2 + 0x00]
1225 std %f6, [%o2 + 0x08]
1226 subcc %o3, 0x10, %o3
1227 bne,pt %xcc, 1b
1228 add %o2, 0x10, %o2
1229 std %f4, [%o4 + 0x00]
1230 std %f6, [%o4 + 0x08]
1231 retl
1232 nop
1233 ENDPROC(aes_sparc64_cbc_encrypt_192)
1234
1235 .align 32
1236 ENTRY(aes_sparc64_cbc_encrypt_256)
1237
1238 ldd [%o4 + 0x00], %f4
1239 ldd [%o4 + 0x08], %f6
1240 ldx [%o0 + 0x00], %g1
1241 ldx [%o0 + 0x08], %g2
1242 1: ldx [%o1 + 0x00], %g3
1243 ldx [%o1 + 0x08], %g7
1244 add %o1, 0x10, %o1
1245 xor %g1, %g3, %g3
1246 xor %g2, %g7, %g7
1247 MOVXTOD_G3_F0
1248 MOVXTOD_G7_F2
1249 fxor %f4, %f0, %f4
1250 fxor %f6, %f2, %f6
1251 ENCRYPT_256(8, 4, 6, 0, 2)
1252 std %f4, [%o2 + 0x00]
1253 std %f6, [%o2 + 0x08]
1254 subcc %o3, 0x10, %o3
1255 bne,pt %xcc, 1b
1256 add %o2, 0x10, %o2
1257 std %f4, [%o4 + 0x00]
1258 std %f6, [%o4 + 0x08]
1259 retl
1260 nop
1261 ENDPROC(aes_sparc64_cbc_encrypt_256)
1262
1263 .align 32
1264 ENTRY(aes_sparc64_cbc_decrypt_128)
1265
1266 ldx [%o0 - 0x10], %g1
1267 ldx [%o0 - 0x08], %g2
1268 ldx [%o4 + 0x00], %o0
1269 ldx [%o4 + 0x08], %o5
1270 1: ldx [%o1 + 0x00], %g3
1271 ldx [%o1 + 0x08], %g7
1272 add %o1, 0x10, %o1
1273 xor %g1, %g3, %g3
1274 xor %g2, %g7, %g7
1275 MOVXTOD_G3_F4
1276 MOVXTOD_G7_F6
1277 DECRYPT_128(8, 4, 6, 0, 2)
1278 MOVXTOD_O0_F0
1279 MOVXTOD_O5_F2
1280 xor %g1, %g3, %o0
1281 xor %g2, %g7, %o5
1282 fxor %f4, %f0, %f4
1283 fxor %f6, %f2, %f6
1284 std %f4, [%o2 + 0x00]
1285 std %f6, [%o2 + 0x08]
1286 subcc %o3, 0x10, %o3
1287 bne,pt %xcc, 1b
1288 add %o2, 0x10, %o2
1289 stx %o0, [%o4 + 0x00]
1290 stx %o5, [%o4 + 0x08]
1291 retl
1292 nop
1293 ENDPROC(aes_sparc64_cbc_decrypt_128)
1294
1295 .align 32
1296 ENTRY(aes_sparc64_cbc_decrypt_192)
1297
1298 ldx [%o0 - 0x10], %g1
1299 ldx [%o0 - 0x08], %g2
1300 ldx [%o4 + 0x00], %o0
1301 ldx [%o4 + 0x08], %o5
1302 1: ldx [%o1 + 0x00], %g3
1303 ldx [%o1 + 0x08], %g7
1304 add %o1, 0x10, %o1
1305 xor %g1, %g3, %g3
1306 xor %g2, %g7, %g7
1307 MOVXTOD_G3_F4
1308 MOVXTOD_G7_F6
1309 DECRYPT_192(8, 4, 6, 0, 2)
1310 MOVXTOD_O0_F0
1311 MOVXTOD_O5_F2
1312 xor %g1, %g3, %o0
1313 xor %g2, %g7, %o5
1314 fxor %f4, %f0, %f4
1315 fxor %f6, %f2, %f6
1316 std %f4, [%o2 + 0x00]
1317 std %f6, [%o2 + 0x08]
1318 subcc %o3, 0x10, %o3
1319 bne,pt %xcc, 1b
1320 add %o2, 0x10, %o2
1321 stx %o0, [%o4 + 0x00]
1322 stx %o5, [%o4 + 0x08]
1323 retl
1324 nop
1325 ENDPROC(aes_sparc64_cbc_decrypt_192)
1326
1327 .align 32
1328 ENTRY(aes_sparc64_cbc_decrypt_256)
1329
1330 ldx [%o0 - 0x10], %g1
1331 ldx [%o0 - 0x08], %g2
1332 ldx [%o4 + 0x00], %o0
1333 ldx [%o4 + 0x08], %o5
1334 1: ldx [%o1 + 0x00], %g3
1335 ldx [%o1 + 0x08], %g7
1336 add %o1, 0x10, %o1
1337 xor %g1, %g3, %g3
1338 xor %g2, %g7, %g7
1339 MOVXTOD_G3_F4
1340 MOVXTOD_G7_F6
1341 DECRYPT_256(8, 4, 6, 0, 2)
1342 MOVXTOD_O0_F0
1343 MOVXTOD_O5_F2
1344 xor %g1, %g3, %o0
1345 xor %g2, %g7, %o5
1346 fxor %f4, %f0, %f4
1347 fxor %f6, %f2, %f6
1348 std %f4, [%o2 + 0x00]
1349 std %f6, [%o2 + 0x08]
1350 subcc %o3, 0x10, %o3
1351 bne,pt %xcc, 1b
1352 add %o2, 0x10, %o2
1353 stx %o0, [%o4 + 0x00]
1354 stx %o5, [%o4 + 0x08]
1355 retl
1356 nop
1357 ENDPROC(aes_sparc64_cbc_decrypt_256)
1358
1359 .align 32
1360 ENTRY(aes_sparc64_ctr_crypt_128)
1361
1362 ldx [%o4 + 0x00], %g3
1363 ldx [%o4 + 0x08], %g7
1364 subcc %o3, 0x10, %o3
1365 ldx [%o0 + 0x00], %g1
1366 be 10f
1367 ldx [%o0 + 0x08], %g2
1368 1: xor %g1, %g3, %o5
1369 MOVXTOD_O5_F0
1370 xor %g2, %g7, %o5
1371 MOVXTOD_O5_F2
1372 add %g7, 1, %g7
1373 add %g3, 1, %o5
1374 movrz %g7, %o5, %g3
1375 xor %g1, %g3, %o5
1376 MOVXTOD_O5_F4
1377 xor %g2, %g7, %o5
1378 MOVXTOD_O5_F6
1379 add %g7, 1, %g7
1380 add %g3, 1, %o5
1381 movrz %g7, %o5, %g3
1382 ENCRYPT_128_2(8, 0, 2, 4, 6, 56, 58, 60, 62)
1383 ldd [%o1 + 0x00], %f56
1384 ldd [%o1 + 0x08], %f58
1385 ldd [%o1 + 0x10], %f60
1386 ldd [%o1 + 0x18], %f62
1387 fxor %f56, %f0, %f56
1388 fxor %f58, %f2, %f58
1389 fxor %f60, %f4, %f60
1390 fxor %f62, %f6, %f62
1391 std %f56, [%o2 + 0x00]
1392 std %f58, [%o2 + 0x08]
1393 std %f60, [%o2 + 0x10]
1394 std %f62, [%o2 + 0x18]
1395 subcc %o3, 0x20, %o3
1396 add %o1, 0x20, %o1
1397 brgz %o3, 1b
1398 add %o2, 0x20, %o2
1399 brlz,pt %o3, 11f
1400 nop
1401 10: xor %g1, %g3, %o5
1402 MOVXTOD_O5_F0
1403 xor %g2, %g7, %o5
1404 MOVXTOD_O5_F2
1405 add %g7, 1, %g7
1406 add %g3, 1, %o5
1407 movrz %g7, %o5, %g3
1408 ENCRYPT_128(8, 0, 2, 4, 6)
1409 ldd [%o1 + 0x00], %f4
1410 ldd [%o1 + 0x08], %f6
1411 fxor %f4, %f0, %f4
1412 fxor %f6, %f2, %f6
1413 std %f4, [%o2 + 0x00]
1414 std %f6, [%o2 + 0x08]
1415 11: stx %g3, [%o4 + 0x00]
1416 retl
1417 stx %g7, [%o4 + 0x08]
1418 ENDPROC(aes_sparc64_ctr_crypt_128)
1419
1420 .align 32
1421 ENTRY(aes_sparc64_ctr_crypt_192)
1422
1423 ldx [%o4 + 0x00], %g3
1424 ldx [%o4 + 0x08], %g7
1425 subcc %o3, 0x10, %o3
1426 ldx [%o0 + 0x00], %g1
1427 be 10f
1428 ldx [%o0 + 0x08], %g2
1429 1: xor %g1, %g3, %o5
1430 MOVXTOD_O5_F0
1431 xor %g2, %g7, %o5
1432 MOVXTOD_O5_F2
1433 add %g7, 1, %g7
1434 add %g3, 1, %o5
1435 movrz %g7, %o5, %g3
1436 xor %g1, %g3, %o5
1437 MOVXTOD_O5_F4
1438 xor %g2, %g7, %o5
1439 MOVXTOD_O5_F6
1440 add %g7, 1, %g7
1441 add %g3, 1, %o5
1442 movrz %g7, %o5, %g3
1443 ENCRYPT_192_2(8, 0, 2, 4, 6, 56, 58, 60, 62)
1444 ldd [%o1 + 0x00], %f56
1445 ldd [%o1 + 0x08], %f58
1446 ldd [%o1 + 0x10], %f60
1447 ldd [%o1 + 0x18], %f62
1448 fxor %f56, %f0, %f56
1449 fxor %f58, %f2, %f58
1450 fxor %f60, %f4, %f60
1451 fxor %f62, %f6, %f62
1452 std %f56, [%o2 + 0x00]
1453 std %f58, [%o2 + 0x08]
1454 std %f60, [%o2 + 0x10]
1455 std %f62, [%o2 + 0x18]
1456 subcc %o3, 0x20, %o3
1457 add %o1, 0x20, %o1
1458 brgz %o3, 1b
1459 add %o2, 0x20, %o2
1460 brlz,pt %o3, 11f
1461 nop
1462 10: xor %g1, %g3, %o5
1463 MOVXTOD_O5_F0
1464 xor %g2, %g7, %o5
1465 MOVXTOD_O5_F2
1466 add %g7, 1, %g7
1467 add %g3, 1, %o5
1468 movrz %g7, %o5, %g3
1469 ENCRYPT_192(8, 0, 2, 4, 6)
1470 ldd [%o1 + 0x00], %f4
1471 ldd [%o1 + 0x08], %f6
1472 fxor %f4, %f0, %f4
1473 fxor %f6, %f2, %f6
1474 std %f4, [%o2 + 0x00]
1475 std %f6, [%o2 + 0x08]
1476 11: stx %g3, [%o4 + 0x00]
1477 retl
1478 stx %g7, [%o4 + 0x08]
1479 ENDPROC(aes_sparc64_ctr_crypt_192)
1480
1481 .align 32
1482 ENTRY(aes_sparc64_ctr_crypt_256)
1483
1484 ldx [%o4 + 0x00], %g3
1485 ldx [%o4 + 0x08], %g7
1486 subcc %o3, 0x10, %o3
1487 ldx [%o0 + 0x00], %g1
1488 be 10f
1489 ldx [%o0 + 0x08], %g2
1490 1: xor %g1, %g3, %o5
1491 MOVXTOD_O5_F0
1492 xor %g2, %g7, %o5
1493 MOVXTOD_O5_F2
1494 add %g7, 1, %g7
1495 add %g3, 1, %o5
1496 movrz %g7, %o5, %g3
1497 xor %g1, %g3, %o5
1498 MOVXTOD_O5_F4
1499 xor %g2, %g7, %o5
1500 MOVXTOD_O5_F6
1501 add %g7, 1, %g7
1502 add %g3, 1, %o5
1503 movrz %g7, %o5, %g3
1504 ENCRYPT_256_2(8, 0, 2, 4, 6)
1505 ldd [%o1 + 0x00], %f56
1506 ldd [%o1 + 0x08], %f58
1507 ldd [%o1 + 0x10], %f60
1508 ldd [%o1 + 0x18], %f62
1509 fxor %f56, %f0, %f56
1510 fxor %f58, %f2, %f58
1511 fxor %f60, %f4, %f60
1512 fxor %f62, %f6, %f62
1513 std %f56, [%o2 + 0x00]
1514 std %f58, [%o2 + 0x08]
1515 std %f60, [%o2 + 0x10]
1516 std %f62, [%o2 + 0x18]
1517 subcc %o3, 0x20, %o3
1518 add %o1, 0x20, %o1
1519 brgz %o3, 1b
1520 add %o2, 0x20, %o2
1521 brlz,pt %o3, 11f
1522 nop
1523 10: ldd [%o0 + 0xd0], %f56
1524 ldd [%o0 + 0xd8], %f58
1525 ldd [%o0 + 0xe0], %f60
1526 ldd [%o0 + 0xe8], %f62
1527 xor %g1, %g3, %o5
1528 MOVXTOD_O5_F0
1529 xor %g2, %g7, %o5
1530 MOVXTOD_O5_F2
1531 add %g7, 1, %g7
1532 add %g3, 1, %o5
1533 movrz %g7, %o5, %g3
1534 ENCRYPT_256(8, 0, 2, 4, 6)
1535 ldd [%o1 + 0x00], %f4
1536 ldd [%o1 + 0x08], %f6
1537 fxor %f4, %f0, %f4
1538 fxor %f6, %f2, %f6
1539 std %f4, [%o2 + 0x00]
1540 std %f6, [%o2 + 0x08]
1541 11: stx %g3, [%o4 + 0x00]
1542 retl
1543 stx %g7, [%o4 + 0x08]
1544 ENDPROC(aes_sparc64_ctr_crypt_256)