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