1#ifndef __ASSEMBLER__ 2# define __ASSEMBLER__ 1 3#endif 4#include "crypto/sparc_arch.h" 5 6#define LOCALS (STACK_BIAS+STACK_FRAME) 7 8.text 9 10.globl aes_fx_encrypt 11.align 32 12aes_fx_encrypt: 13 and %o0, 7, %o4 ! is input aligned? 14 andn %o0, 7, %o0 15 ldd [%o2 + 0], %f6 ! round[0] 16 ldd [%o2 + 8], %f8 17 mov %o7, %g1 18 ld [%o2 + 240], %o3 19 201: call .+8 21 add %o7, .Linp_align-1b, %o7 22 23 sll %o4, 3, %o4 24 ldd [%o0 + 0], %f0 ! load input 25 brz,pt %o4, .Lenc_inp_aligned 26 ldd [%o0 + 8], %f2 27 28 ldd [%o7 + %o4], %f14 ! shift left params 29 ldd [%o0 + 16], %f4 30 .word 0x81b81d62 !fshiftorx %f0,%f2,%f14,%f0 31 .word 0x85b89d64 !fshiftorx %f2,%f4,%f14,%f2 32 33.Lenc_inp_aligned: 34 ldd [%o2 + 16], %f10 ! round[1] 35 ldd [%o2 + 24], %f12 36 37 .word 0x81b00d86 !fxor %f0,%f6,%f0 ! ^=round[0] 38 .word 0x85b08d88 !fxor %f2,%f8,%f2 39 ldd [%o2 + 32], %f6 ! round[2] 40 ldd [%o2 + 40], %f8 41 add %o2, 32, %o2 42 sub %o3, 4, %o3 43 44.Loop_enc: 45 fmovd %f0, %f4 46 .word 0x81b0920a !faesencx %f2,%f10,%f0 47 .word 0x85b1120c !faesencx %f4,%f12,%f2 48 ldd [%o2 + 16], %f10 49 ldd [%o2 + 24], %f12 50 add %o2, 32, %o2 51 52 fmovd %f0, %f4 53 .word 0x81b09206 !faesencx %f2,%f6,%f0 54 .word 0x85b11208 !faesencx %f4,%f8,%f2 55 ldd [%o2 + 0], %f6 56 ldd [%o2 + 8], %f8 57 58 brnz,a %o3, .Loop_enc 59 sub %o3, 2, %o3 60 61 andcc %o1, 7, %o4 ! is output aligned? 62 andn %o1, 7, %o1 63 mov 0xff, %o5 64 srl %o5, %o4, %o5 65 add %o7, 64, %o7 66 sll %o4, 3, %o4 67 68 fmovd %f0, %f4 69 .word 0x81b0920a !faesencx %f2,%f10,%f0 70 .word 0x85b1120c !faesencx %f4,%f12,%f2 71 ldd [%o7 + %o4], %f14 ! shift right params 72 73 fmovd %f0, %f4 74 .word 0x81b09246 !faesenclx %f2,%f6,%f0 75 .word 0x85b11248 !faesenclx %f4,%f8,%f2 76 77 bnz,pn %icc, .Lenc_out_unaligned 78 mov %g1, %o7 79 80 std %f0, [%o1 + 0] 81 retl 82 std %f2, [%o1 + 8] 83 84.align 16 85.Lenc_out_unaligned: 86 add %o1, 16, %o0 87 orn %g0, %o5, %o4 88 .word 0x89b81d60 !fshiftorx %f0,%f0,%f14,%f4 89 .word 0x8db81d62 !fshiftorx %f0,%f2,%f14,%f6 90 .word 0x91b89d62 !fshiftorx %f2,%f2,%f14,%f8 91 92 stda %f4, [%o1 + %o5]0xc0 ! partial store 93 std %f6, [%o1 + 8] 94 stda %f8, [%o0 + %o4]0xc0 ! partial store 95 retl 96 nop 97.type aes_fx_encrypt,#function 98.size aes_fx_encrypt,.-aes_fx_encrypt 99 100.globl aes_fx_decrypt 101.align 32 102aes_fx_decrypt: 103 and %o0, 7, %o4 ! is input aligned? 104 andn %o0, 7, %o0 105 ldd [%o2 + 0], %f6 ! round[0] 106 ldd [%o2 + 8], %f8 107 mov %o7, %g1 108 ld [%o2 + 240], %o3 109 1101: call .+8 111 add %o7, .Linp_align-1b, %o7 112 113 sll %o4, 3, %o4 114 ldd [%o0 + 0], %f0 ! load input 115 brz,pt %o4, .Ldec_inp_aligned 116 ldd [%o0 + 8], %f2 117 118 ldd [%o7 + %o4], %f14 ! shift left params 119 ldd [%o0 + 16], %f4 120 .word 0x81b81d62 !fshiftorx %f0,%f2,%f14,%f0 121 .word 0x85b89d64 !fshiftorx %f2,%f4,%f14,%f2 122 123.Ldec_inp_aligned: 124 ldd [%o2 + 16], %f10 ! round[1] 125 ldd [%o2 + 24], %f12 126 127 .word 0x81b00d86 !fxor %f0,%f6,%f0 ! ^=round[0] 128 .word 0x85b08d88 !fxor %f2,%f8,%f2 129 ldd [%o2 + 32], %f6 ! round[2] 130 ldd [%o2 + 40], %f8 131 add %o2, 32, %o2 132 sub %o3, 4, %o3 133 134.Loop_dec: 135 fmovd %f0, %f4 136 .word 0x81b0922a !faesdecx %f2,%f10,%f0 137 .word 0x85b1122c !faesdecx %f4,%f12,%f2 138 ldd [%o2 + 16], %f10 139 ldd [%o2 + 24], %f12 140 add %o2, 32, %o2 141 142 fmovd %f0, %f4 143 .word 0x81b09226 !faesdecx %f2,%f6,%f0 144 .word 0x85b11228 !faesdecx %f4,%f8,%f2 145 ldd [%o2 + 0], %f6 146 ldd [%o2 + 8], %f8 147 148 brnz,a %o3, .Loop_dec 149 sub %o3, 2, %o3 150 151 andcc %o1, 7, %o4 ! is output aligned? 152 andn %o1, 7, %o1 153 mov 0xff, %o5 154 srl %o5, %o4, %o5 155 add %o7, 64, %o7 156 sll %o4, 3, %o4 157 158 fmovd %f0, %f4 159 .word 0x81b0922a !faesdecx %f2,%f10,%f0 160 .word 0x85b1122c !faesdecx %f4,%f12,%f2 161 ldd [%o7 + %o4], %f14 ! shift right params 162 163 fmovd %f0, %f4 164 .word 0x81b09266 !faesdeclx %f2,%f6,%f0 165 .word 0x85b11268 !faesdeclx %f4,%f8,%f2 166 167 bnz,pn %icc, .Ldec_out_unaligned 168 mov %g1, %o7 169 170 std %f0, [%o1 + 0] 171 retl 172 std %f2, [%o1 + 8] 173 174.align 16 175.Ldec_out_unaligned: 176 add %o1, 16, %o0 177 orn %g0, %o5, %o4 178 .word 0x89b81d60 !fshiftorx %f0,%f0,%f14,%f4 179 .word 0x8db81d62 !fshiftorx %f0,%f2,%f14,%f6 180 .word 0x91b89d62 !fshiftorx %f2,%f2,%f14,%f8 181 182 stda %f4, [%o1 + %o5]0xc0 ! partial store 183 std %f6, [%o1 + 8] 184 stda %f8, [%o0 + %o4]0xc0 ! partial store 185 retl 186 nop 187.type aes_fx_decrypt,#function 188.size aes_fx_decrypt,.-aes_fx_decrypt 189.globl aes_fx_set_decrypt_key 190.align 32 191aes_fx_set_decrypt_key: 192 b .Lset_encrypt_key 193 mov -1, %o4 194 retl 195 nop 196.type aes_fx_set_decrypt_key,#function 197.size aes_fx_set_decrypt_key,.-aes_fx_set_decrypt_key 198 199.globl aes_fx_set_encrypt_key 200.align 32 201aes_fx_set_encrypt_key: 202 mov 1, %o4 203 nop 204.Lset_encrypt_key: 205 and %o0, 7, %o3 206 andn %o0, 7, %o0 207 sll %o3, 3, %o3 208 mov %o7, %g1 209 2101: call .+8 211 add %o7, .Linp_align-1b, %o7 212 213 ldd [%o7 + %o3], %f10 ! shift left params 214 mov %g1, %o7 215 216 cmp %o1, 192 217 ldd [%o0 + 0], %f0 218 bl,pt %icc, .L128 219 ldd [%o0 + 8], %f2 220 221 be,pt %icc, .L192 222 ldd [%o0 + 16], %f4 223 brz,pt %o3, .L256aligned 224 ldd [%o0 + 24], %f6 225 226 ldd [%o0 + 32], %f8 227 .word 0x81b81562 !fshiftorx %f0,%f2,%f10,%f0 228 .word 0x85b89564 !fshiftorx %f2,%f4,%f10,%f2 229 .word 0x89b91566 !fshiftorx %f4,%f6,%f10,%f4 230 .word 0x8db99568 !fshiftorx %f6,%f8,%f10,%f6 231 232.L256aligned: 233 mov 14, %o1 234 and %o4, 224, %o3 235 st %o1, [%o2 + 240] ! store rounds 236 add %o2, %o3, %o2 ! start or end of key schedule 237 sllx %o4, 4, %o4 ! 16 or -16 238 std %f0, [%o2 + 0] 239 .word 0x81b19290 !faeskeyx %f6,16,%f0 240 std %f2, [%o2 + 8] 241 add %o2, %o4, %o2 242 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 243 std %f4, [%o2 + 0] 244 .word 0x89b09281 !faeskeyx %f2,0x01,%f4 245 std %f6, [%o2 + 8] 246 add %o2, %o4, %o2 247 .word 0x8db11280 !faeskeyx %f4,0x00,%f6 248 std %f0, [%o2 + 0] 249 .word 0x81b19291 !faeskeyx %f6,17,%f0 250 std %f2, [%o2 + 8] 251 add %o2, %o4, %o2 252 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 253 std %f4, [%o2 + 0] 254 .word 0x89b09281 !faeskeyx %f2,0x01,%f4 255 std %f6, [%o2 + 8] 256 add %o2, %o4, %o2 257 .word 0x8db11280 !faeskeyx %f4,0x00,%f6 258 std %f0, [%o2 + 0] 259 .word 0x81b19292 !faeskeyx %f6,18,%f0 260 std %f2, [%o2 + 8] 261 add %o2, %o4, %o2 262 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 263 std %f4, [%o2 + 0] 264 .word 0x89b09281 !faeskeyx %f2,0x01,%f4 265 std %f6, [%o2 + 8] 266 add %o2, %o4, %o2 267 .word 0x8db11280 !faeskeyx %f4,0x00,%f6 268 std %f0, [%o2 + 0] 269 .word 0x81b19293 !faeskeyx %f6,19,%f0 270 std %f2, [%o2 + 8] 271 add %o2, %o4, %o2 272 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 273 std %f4, [%o2 + 0] 274 .word 0x89b09281 !faeskeyx %f2,0x01,%f4 275 std %f6, [%o2 + 8] 276 add %o2, %o4, %o2 277 .word 0x8db11280 !faeskeyx %f4,0x00,%f6 278 std %f0, [%o2 + 0] 279 .word 0x81b19294 !faeskeyx %f6,20,%f0 280 std %f2, [%o2 + 8] 281 add %o2, %o4, %o2 282 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 283 std %f4, [%o2 + 0] 284 .word 0x89b09281 !faeskeyx %f2,0x01,%f4 285 std %f6, [%o2 + 8] 286 add %o2, %o4, %o2 287 .word 0x8db11280 !faeskeyx %f4,0x00,%f6 288 std %f0, [%o2 + 0] 289 .word 0x81b19295 !faeskeyx %f6,21,%f0 290 std %f2, [%o2 + 8] 291 add %o2, %o4, %o2 292 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 293 std %f4, [%o2 + 0] 294 .word 0x89b09281 !faeskeyx %f2,0x01,%f4 295 std %f6, [%o2 + 8] 296 add %o2, %o4, %o2 297 .word 0x8db11280 !faeskeyx %f4,0x00,%f6 298 std %f0, [%o2 + 0] 299 .word 0x81b19296 !faeskeyx %f6,22,%f0 300 std %f2, [%o2 + 8] 301 add %o2, %o4, %o2 302 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 303 std %f4,[%o2 + 0] 304 std %f6,[%o2 + 8] 305 add %o2, %o4, %o2 306 std %f0,[%o2 + 0] 307 std %f2,[%o2 + 8] 308 retl 309 xor %o0, %o0, %o0 ! return 0 310 311.align 16 312.L192: 313 brz,pt %o3, .L192aligned 314 nop 315 316 ldd [%o0 + 24], %f6 317 .word 0x81b81562 !fshiftorx %f0,%f2,%f10,%f0 318 .word 0x85b89564 !fshiftorx %f2,%f4,%f10,%f2 319 .word 0x89b91566 !fshiftorx %f4,%f6,%f10,%f4 320 321.L192aligned: 322 mov 12, %o1 323 and %o4, 192, %o3 324 st %o1, [%o2 + 240] ! store rounds 325 add %o2, %o3, %o2 ! start or end of key schedule 326 sllx %o4, 4, %o4 ! 16 or -16 327 std %f0, [%o2 + 0] 328 .word 0x81b11290 !faeskeyx %f4,16,%f0 329 std %f2, [%o2 + 8] 330 add %o2, %o4, %o2 331 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 332 std %f4, [%o2 + 0] 333 .word 0x89b09280 !faeskeyx %f2,0x00,%f4 334 std %f0, [%o2 + 8] 335 add %o2, %o4, %o2 336 .word 0x81b11291 !faeskeyx %f4,17,%f0 337 std %f2, [%o2 + 0] 338 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 339 std %f4, [%o2 + 8] 340 add %o2, %o4, %o2 341 .word 0x89b09280 !faeskeyx %f2,0x00,%f4 342 std %f0, [%o2 + 0] 343 .word 0x81b11292 !faeskeyx %f4,18,%f0 344 std %f2, [%o2 + 8] 345 add %o2, %o4, %o2 346 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 347 std %f4, [%o2 + 0] 348 .word 0x89b09280 !faeskeyx %f2,0x00,%f4 349 std %f0, [%o2 + 8] 350 add %o2, %o4, %o2 351 .word 0x81b11293 !faeskeyx %f4,19,%f0 352 std %f2, [%o2 + 0] 353 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 354 std %f4, [%o2 + 8] 355 add %o2, %o4, %o2 356 .word 0x89b09280 !faeskeyx %f2,0x00,%f4 357 std %f0, [%o2 + 0] 358 .word 0x81b11294 !faeskeyx %f4,20,%f0 359 std %f2, [%o2 + 8] 360 add %o2, %o4, %o2 361 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 362 std %f4, [%o2 + 0] 363 .word 0x89b09280 !faeskeyx %f2,0x00,%f4 364 std %f0, [%o2 + 8] 365 add %o2, %o4, %o2 366 .word 0x81b11295 !faeskeyx %f4,21,%f0 367 std %f2, [%o2 + 0] 368 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 369 std %f4, [%o2 + 8] 370 add %o2, %o4, %o2 371 .word 0x89b09280 !faeskeyx %f2,0x00,%f4 372 std %f0, [%o2 + 0] 373 .word 0x81b11296 !faeskeyx %f4,22,%f0 374 std %f2, [%o2 + 8] 375 add %o2, %o4, %o2 376 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 377 std %f4, [%o2 + 0] 378 .word 0x89b09280 !faeskeyx %f2,0x00,%f4 379 std %f0, [%o2 + 8] 380 add %o2, %o4, %o2 381 .word 0x81b11297 !faeskeyx %f4,23,%f0 382 std %f2, [%o2 + 0] 383 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 384 std %f4, [%o2 + 8] 385 add %o2, %o4, %o2 386 std %f0, [%o2 + 0] 387 std %f2, [%o2 + 8] 388 retl 389 xor %o0, %o0, %o0 ! return 0 390 391.align 16 392.L128: 393 brz,pt %o3, .L128aligned 394 nop 395 396 ldd [%o0 + 16], %f4 397 .word 0x81b81562 !fshiftorx %f0,%f2,%f10,%f0 398 .word 0x85b89564 !fshiftorx %f2,%f4,%f10,%f2 399 400.L128aligned: 401 mov 10, %o1 402 and %o4, 160, %o3 403 st %o1, [%o2 + 240] ! store rounds 404 add %o2, %o3, %o2 ! start or end of key schedule 405 sllx %o4, 4, %o4 ! 16 or -16 406 std %f0, [%o2 + 0] 407 .word 0x81b09290 !faeskeyx %f2,16,%f0 408 std %f2, [%o2 + 8] 409 add %o2, %o4, %o2 410 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 411 std %f0, [%o2 + 0] 412 .word 0x81b09291 !faeskeyx %f2,17,%f0 413 std %f2, [%o2 + 8] 414 add %o2, %o4, %o2 415 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 416 std %f0, [%o2 + 0] 417 .word 0x81b09292 !faeskeyx %f2,18,%f0 418 std %f2, [%o2 + 8] 419 add %o2, %o4, %o2 420 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 421 std %f0, [%o2 + 0] 422 .word 0x81b09293 !faeskeyx %f2,19,%f0 423 std %f2, [%o2 + 8] 424 add %o2, %o4, %o2 425 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 426 std %f0, [%o2 + 0] 427 .word 0x81b09294 !faeskeyx %f2,20,%f0 428 std %f2, [%o2 + 8] 429 add %o2, %o4, %o2 430 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 431 std %f0, [%o2 + 0] 432 .word 0x81b09295 !faeskeyx %f2,21,%f0 433 std %f2, [%o2 + 8] 434 add %o2, %o4, %o2 435 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 436 std %f0, [%o2 + 0] 437 .word 0x81b09296 !faeskeyx %f2,22,%f0 438 std %f2, [%o2 + 8] 439 add %o2, %o4, %o2 440 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 441 std %f0, [%o2 + 0] 442 .word 0x81b09297 !faeskeyx %f2,23,%f0 443 std %f2, [%o2 + 8] 444 add %o2, %o4, %o2 445 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 446 std %f0, [%o2 + 0] 447 .word 0x81b09298 !faeskeyx %f2,24,%f0 448 std %f2, [%o2 + 8] 449 add %o2, %o4, %o2 450 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 451 std %f0, [%o2 + 0] 452 .word 0x81b09299 !faeskeyx %f2,25,%f0 453 std %f2, [%o2 + 8] 454 add %o2, %o4, %o2 455 .word 0x85b01280 !faeskeyx %f0,0x00,%f2 456 std %f0, [%o2 + 0] 457 std %f2, [%o2 + 8] 458 retl 459 xor %o0, %o0, %o0 ! return 0 460.type aes_fx_set_encrypt_key,#function 461.size aes_fx_set_encrypt_key,.-aes_fx_set_encrypt_key 462.globl aes_fx_cbc_encrypt 463.align 32 464aes_fx_cbc_encrypt: 465 save %sp, -STACK_FRAME-16, %sp 466 srln %i2, 4, %i2 467 and %i0, 7, %l4 468 andn %i0, 7, %i0 469 brz,pn %i2, .Lcbc_no_data 470 sll %l4, 3, %l4 471 4721: call .+8 473 add %o7, .Linp_align-1b, %o7 474 475 ld [%i3 + 240], %l0 476 and %i1, 7, %l5 477 ld [%i4 + 0], %f0 ! load ivec 478 andn %i1, 7, %i1 479 ld [%i4 + 4], %f1 480 sll %l5, 3, %l6 481 ld [%i4 + 8], %f2 482 ld [%i4 + 12], %f3 483 484 sll %l0, 4, %l0 485 add %l0, %i3, %l2 486 ldd [%i3 + 0], %f20 ! round[0] 487 ldd [%i3 + 8], %f22 488 489 add %i0, 16, %i0 490 sub %i2, 1, %i2 491 ldd [%l2 + 0], %f24 ! round[last] 492 ldd [%l2 + 8], %f26 493 494 mov 16, %l3 495 movrz %i2, 0, %l3 496 ldd [%i3 + 16], %f10 ! round[1] 497 ldd [%i3 + 24], %f12 498 499 ldd [%o7 + %l4], %f36 ! shift left params 500 add %o7, 64, %o7 501 ldd [%i0 - 16], %f28 ! load input 502 ldd [%i0 - 8], %f30 503 ldda [%i0]0x82, %f32 ! non-faulting load 504 brz %i5, .Lcbc_decrypt 505 add %i0, %l3, %i0 ! inp+=16 506 507 .word 0x81b50d80 !fxor %f20,%f0,%f0 ! ivec^=round[0] 508 .word 0x85b58d82 !fxor %f22,%f2,%f2 509 .word 0xb9bf0b7e !fshiftorx %f28,%f30,%f36,%f28 510 .word 0xbdbf8b61 !fshiftorx %f30,%f32,%f36,%f30 511 nop 512 513.Loop_cbc_enc: 514 .word 0x81b70d80 !fxor %f28,%f0,%f0 ! inp^ivec^round[0] 515 .word 0x85b78d82 !fxor %f30,%f2,%f2 516 ldd [%i3 + 32], %f6 ! round[2] 517 ldd [%i3 + 40], %f8 518 add %i3, 32, %l2 519 sub %l0, 16*6, %l1 520 521.Lcbc_enc: 522 fmovd %f0, %f4 523 .word 0x81b0920a !faesencx %f2,%f10,%f0 524 .word 0x85b1120c !faesencx %f4,%f12,%f2 525 ldd [%l2 + 16], %f10 526 ldd [%l2 + 24], %f12 527 add %l2, 32, %l2 528 529 fmovd %f0, %f4 530 .word 0x81b09206 !faesencx %f2,%f6,%f0 531 .word 0x85b11208 !faesencx %f4,%f8,%f2 532 ldd [%l2 + 0], %f6 533 ldd [%l2 + 8], %f8 534 535 brnz,a %l1, .Lcbc_enc 536 sub %l1, 16*2, %l1 537 538 fmovd %f0, %f4 539 .word 0x81b0920a !faesencx %f2,%f10,%f0 540 .word 0x85b1120c !faesencx %f4,%f12,%f2 541 ldd [%l2 + 16], %f10 ! round[last-1] 542 ldd [%l2 + 24], %f12 543 544 movrz %i2, 0, %l3 545 fmovd %f32, %f28 546 ldd [%i0 - 8], %f30 ! load next input block 547 ldda [%i0]0x82, %f32 ! non-faulting load 548 add %i0, %l3, %i0 ! inp+=16 549 550 fmovd %f0, %f4 551 .word 0x81b09206 !faesencx %f2,%f6,%f0 552 .word 0x85b11208 !faesencx %f4,%f8,%f2 553 554 .word 0xb9bf0b7e !fshiftorx %f28,%f30,%f36,%f28 555 .word 0xbdbf8b61 !fshiftorx %f30,%f32,%f36,%f30 556 557 fmovd %f0, %f4 558 .word 0x81b0920a !faesencx %f2,%f10,%f0 559 .word 0x85b1120c !faesencx %f4,%f12,%f2 560 ldd [%i3 + 16], %f10 ! round[1] 561 ldd [%i3 + 24], %f12 562 563 .word 0xb9b50d9c !fxor %f20,%f28,%f28 ! inp^=round[0] 564 .word 0xbdb58d9e !fxor %f22,%f30,%f30 565 566 fmovd %f0, %f4 567 .word 0x81b09258 !faesenclx %f2,%f24,%f0 568 .word 0x85b1125a !faesenclx %f4,%f26,%f2 569 570 brnz,pn %l5, .Lcbc_enc_unaligned_out 571 nop 572 573 std %f0, [%i1 + 0] 574 std %f2, [%i1 + 8] 575 add %i1, 16, %i1 576 577 brnz,a %i2, .Loop_cbc_enc 578 sub %i2, 1, %i2 579 580 st %f0, [%i4 + 0] ! output ivec 581 st %f1, [%i4 + 4] 582 st %f2, [%i4 + 8] 583 st %f3, [%i4 + 12] 584 585.Lcbc_no_data: 586 ret 587 restore 588 589.align 32 590.Lcbc_enc_unaligned_out: 591 ldd [%o7 + %l6], %f36 ! shift right params 592 mov 0xff, %l6 593 srl %l6, %l5, %l6 594 sub %g0, %l4, %l5 595 596 .word 0x8db80b60 !fshiftorx %f0,%f0,%f36,%f6 597 .word 0x91b80b62 !fshiftorx %f0,%f2,%f36,%f8 598 599 stda %f6, [%i1 + %l6]0xc0 ! partial store 600 orn %g0, %l6, %l6 601 std %f8, [%i1 + 8] 602 add %i1, 16, %i1 603 brz %i2, .Lcbc_enc_unaligned_out_done 604 sub %i2, 1, %i2 605 b .Loop_cbc_enc_unaligned_out 606 nop 607 608.align 32 609.Loop_cbc_enc_unaligned_out: 610 fmovd %f2, %f34 611 .word 0x81b70d80 !fxor %f28,%f0,%f0 ! inp^ivec^round[0] 612 .word 0x85b78d82 !fxor %f30,%f2,%f2 613 ldd [%i3 + 32], %f6 ! round[2] 614 ldd [%i3 + 40], %f8 615 616 fmovd %f0, %f4 617 .word 0x81b0920a !faesencx %f2,%f10,%f0 618 .word 0x85b1120c !faesencx %f4,%f12,%f2 619 ldd [%i3 + 48], %f10 ! round[3] 620 ldd [%i3 + 56], %f12 621 622 ldx [%i0 - 16], %o0 623 ldx [%i0 - 8], %o1 624 brz %l4, .Lcbc_enc_aligned_inp 625 movrz %i2, 0, %l3 626 627 ldx [%i0], %o2 628 sllx %o0, %l4, %o0 629 srlx %o1, %l5, %g1 630 sllx %o1, %l4, %o1 631 or %g1, %o0, %o0 632 srlx %o2, %l5, %o2 633 or %o2, %o1, %o1 634 635.Lcbc_enc_aligned_inp: 636 fmovd %f0, %f4 637 .word 0x81b09206 !faesencx %f2,%f6,%f0 638 .word 0x85b11208 !faesencx %f4,%f8,%f2 639 ldd [%i3 + 64], %f6 ! round[4] 640 ldd [%i3 + 72], %f8 641 add %i3, 64, %l2 642 sub %l0, 16*8, %l1 643 644 stx %o0, [%sp + LOCALS + 0] 645 stx %o1, [%sp + LOCALS + 8] 646 add %i0, %l3, %i0 ! inp+=16 647 nop 648 649.Lcbc_enc_unaligned: 650 fmovd %f0, %f4 651 .word 0x81b0920a !faesencx %f2,%f10,%f0 652 .word 0x85b1120c !faesencx %f4,%f12,%f2 653 ldd [%l2 + 16], %f10 654 ldd [%l2 + 24], %f12 655 add %l2, 32, %l2 656 657 fmovd %f0, %f4 658 .word 0x81b09206 !faesencx %f2,%f6,%f0 659 .word 0x85b11208 !faesencx %f4,%f8,%f2 660 ldd [%l2 + 0], %f6 661 ldd [%l2 + 8], %f8 662 663 brnz,a %l1, .Lcbc_enc_unaligned 664 sub %l1, 16*2, %l1 665 666 fmovd %f0, %f4 667 .word 0x81b0920a !faesencx %f2,%f10,%f0 668 .word 0x85b1120c !faesencx %f4,%f12,%f2 669 ldd [%l2 + 16], %f10 ! round[last-1] 670 ldd [%l2 + 24], %f12 671 672 fmovd %f0, %f4 673 .word 0x81b09206 !faesencx %f2,%f6,%f0 674 .word 0x85b11208 !faesencx %f4,%f8,%f2 675 676 ldd [%sp + LOCALS + 0], %f28 677 ldd [%sp + LOCALS + 8], %f30 678 679 fmovd %f0, %f4 680 .word 0x81b0920a !faesencx %f2,%f10,%f0 681 .word 0x85b1120c !faesencx %f4,%f12,%f2 682 ldd [%i3 + 16], %f10 ! round[1] 683 ldd [%i3 + 24], %f12 684 685 .word 0xb9b50d9c !fxor %f20,%f28,%f28 ! inp^=round[0] 686 .word 0xbdb58d9e !fxor %f22,%f30,%f30 687 688 fmovd %f0, %f4 689 .word 0x81b09258 !faesenclx %f2,%f24,%f0 690 .word 0x85b1125a !faesenclx %f4,%f26,%f2 691 692 .word 0x8db8cb60 !fshiftorx %f34,%f0,%f36,%f6 693 .word 0x91b80b62 !fshiftorx %f0,%f2,%f36,%f8 694 std %f6, [%i1 + 0] 695 std %f8, [%i1 + 8] 696 add %i1, 16, %i1 697 698 brnz,a %i2, .Loop_cbc_enc_unaligned_out 699 sub %i2, 1, %i2 700 701.Lcbc_enc_unaligned_out_done: 702 .word 0x91b88b62 !fshiftorx %f2,%f2,%f36,%f8 703 stda %f8, [%i1 + %l6]0xc0 ! partial store 704 705 st %f0, [%i4 + 0] ! output ivec 706 st %f1, [%i4 + 4] 707 st %f2, [%i4 + 8] 708 st %f3, [%i4 + 12] 709 710 ret 711 restore 712 713.align 32 714.Lcbc_decrypt: 715 .word 0xb9bf0b7e !fshiftorx %f28,%f30,%f36,%f28 716 .word 0xbdbf8b61 !fshiftorx %f30,%f32,%f36,%f30 717 fmovd %f0, %f16 718 fmovd %f2, %f18 719 720.Loop_cbc_dec: 721 .word 0x81b70d94 !fxor %f28,%f20,%f0 ! inp^round[0] 722 .word 0x85b78d96 !fxor %f30,%f22,%f2 723 ldd [%i3 + 32], %f6 ! round[2] 724 ldd [%i3 + 40], %f8 725 add %i3, 32, %l2 726 sub %l0, 16*6, %l1 727 728.Lcbc_dec: 729 fmovd %f0, %f4 730 .word 0x81b0922a !faesdecx %f2,%f10,%f0 731 .word 0x85b1122c !faesdecx %f4,%f12,%f2 732 ldd [%l2 + 16], %f10 733 ldd [%l2 + 24], %f12 734 add %l2, 32, %l2 735 736 fmovd %f0, %f4 737 .word 0x81b09226 !faesdecx %f2,%f6,%f0 738 .word 0x85b11228 !faesdecx %f4,%f8,%f2 739 ldd [%l2 + 0], %f6 740 ldd [%l2 + 8], %f8 741 742 brnz,a %l1, .Lcbc_dec 743 sub %l1, 16*2, %l1 744 745 fmovd %f0, %f4 746 .word 0x81b0922a !faesdecx %f2,%f10,%f0 747 .word 0x85b1122c !faesdecx %f4,%f12,%f2 748 ldd [%l2 + 16], %f10 ! round[last-1] 749 ldd [%l2 + 24], %f12 750 751 fmovd %f0, %f4 752 .word 0x81b09226 !faesdecx %f2,%f6,%f0 753 .word 0x85b11228 !faesdecx %f4,%f8,%f2 754 .word 0x8db40d98 !fxor %f16,%f24,%f6 ! ivec^round[last] 755 .word 0x91b48d9a !fxor %f18,%f26,%f8 756 fmovd %f28, %f16 757 fmovd %f30, %f18 758 759 movrz %i2, 0, %l3 760 fmovd %f32, %f28 761 ldd [%i0 - 8], %f30 ! load next input block 762 ldda [%i0]0x82, %f32 ! non-faulting load 763 add %i0, %l3, %i0 ! inp+=16 764 765 fmovd %f0, %f4 766 .word 0x81b0922a !faesdecx %f2,%f10,%f0 767 .word 0x85b1122c !faesdecx %f4,%f12,%f2 768 ldd [%i3 + 16], %f10 ! round[1] 769 ldd [%i3 + 24], %f12 770 771 .word 0xb9bf0b7e !fshiftorx %f28,%f30,%f36,%f28 772 .word 0xbdbf8b61 !fshiftorx %f30,%f32,%f36,%f30 773 774 fmovd %f0, %f4 775 .word 0x81b09266 !faesdeclx %f2,%f6,%f0 776 .word 0x85b11268 !faesdeclx %f4,%f8,%f2 777 778 brnz,pn %l5, .Lcbc_dec_unaligned_out 779 nop 780 781 std %f0, [%i1 + 0] 782 std %f2, [%i1 + 8] 783 add %i1, 16, %i1 784 785 brnz,a %i2, .Loop_cbc_dec 786 sub %i2, 1, %i2 787 788 st %f16, [%i4 + 0] ! output ivec 789 st %f17, [%i4 + 4] 790 st %f18, [%i4 + 8] 791 st %f19, [%i4 + 12] 792 793 ret 794 restore 795 796.align 32 797.Lcbc_dec_unaligned_out: 798 ldd [%o7 + %l6], %f36 ! shift right params 799 mov 0xff, %l6 800 srl %l6, %l5, %l6 801 sub %g0, %l4, %l5 802 803 .word 0x8db80b60 !fshiftorx %f0,%f0,%f36,%f6 804 .word 0x91b80b62 !fshiftorx %f0,%f2,%f36,%f8 805 806 stda %f6, [%i1 + %l6]0xc0 ! partial store 807 orn %g0, %l6, %l6 808 std %f8, [%i1 + 8] 809 add %i1, 16, %i1 810 brz %i2, .Lcbc_dec_unaligned_out_done 811 sub %i2, 1, %i2 812 b .Loop_cbc_dec_unaligned_out 813 nop 814 815.align 32 816.Loop_cbc_dec_unaligned_out: 817 fmovd %f2, %f34 818 .word 0x81b70d94 !fxor %f28,%f20,%f0 ! inp^round[0] 819 .word 0x85b78d96 !fxor %f30,%f22,%f2 820 ldd [%i3 + 32], %f6 ! round[2] 821 ldd [%i3 + 40], %f8 822 823 fmovd %f0, %f4 824 .word 0x81b0922a !faesdecx %f2,%f10,%f0 825 .word 0x85b1122c !faesdecx %f4,%f12,%f2 826 ldd [%i3 + 48], %f10 ! round[3] 827 ldd [%i3 + 56], %f12 828 829 ldx [%i0 - 16], %o0 830 ldx [%i0 - 8], %o1 831 brz %l4, .Lcbc_dec_aligned_inp 832 movrz %i2, 0, %l3 833 834 ldx [%i0], %o2 835 sllx %o0, %l4, %o0 836 srlx %o1, %l5, %g1 837 sllx %o1, %l4, %o1 838 or %g1, %o0, %o0 839 srlx %o2, %l5, %o2 840 or %o2, %o1, %o1 841 842.Lcbc_dec_aligned_inp: 843 fmovd %f0, %f4 844 .word 0x81b09226 !faesdecx %f2,%f6,%f0 845 .word 0x85b11228 !faesdecx %f4,%f8,%f2 846 ldd [%i3 + 64], %f6 ! round[4] 847 ldd [%i3 + 72], %f8 848 add %i3, 64, %l2 849 sub %l0, 16*8, %l1 850 851 stx %o0, [%sp + LOCALS + 0] 852 stx %o1, [%sp + LOCALS + 8] 853 add %i0, %l3, %i0 ! inp+=16 854 nop 855 856.Lcbc_dec_unaligned: 857 fmovd %f0, %f4 858 .word 0x81b0922a !faesdecx %f2,%f10,%f0 859 .word 0x85b1122c !faesdecx %f4,%f12,%f2 860 ldd [%l2 + 16], %f10 861 ldd [%l2 + 24], %f12 862 add %l2, 32, %l2 863 864 fmovd %f0, %f4 865 .word 0x81b09226 !faesdecx %f2,%f6,%f0 866 .word 0x85b11228 !faesdecx %f4,%f8,%f2 867 ldd [%l2 + 0], %f6 868 ldd [%l2 + 8], %f8 869 870 brnz,a %l1, .Lcbc_dec_unaligned 871 sub %l1, 16*2, %l1 872 873 fmovd %f0, %f4 874 .word 0x81b0922a !faesdecx %f2,%f10,%f0 875 .word 0x85b1122c !faesdecx %f4,%f12,%f2 876 ldd [%l2 + 16], %f10 ! round[last-1] 877 ldd [%l2 + 24], %f12 878 879 fmovd %f0, %f4 880 .word 0x81b09226 !faesdecx %f2,%f6,%f0 881 .word 0x85b11228 !faesdecx %f4,%f8,%f2 882 883 .word 0x8db40d98 !fxor %f16,%f24,%f6 ! ivec^round[last] 884 .word 0x91b48d9a !fxor %f18,%f26,%f8 885 fmovd %f28, %f16 886 fmovd %f30, %f18 887 ldd [%sp + LOCALS + 0], %f28 888 ldd [%sp + LOCALS + 8], %f30 889 890 fmovd %f0, %f4 891 .word 0x81b0922a !faesdecx %f2,%f10,%f0 892 .word 0x85b1122c !faesdecx %f4,%f12,%f2 893 ldd [%i3 + 16], %f10 ! round[1] 894 ldd [%i3 + 24], %f12 895 896 fmovd %f0, %f4 897 .word 0x81b09266 !faesdeclx %f2,%f6,%f0 898 .word 0x85b11268 !faesdeclx %f4,%f8,%f2 899 900 .word 0x8db8cb60 !fshiftorx %f34,%f0,%f36,%f6 901 .word 0x91b80b62 !fshiftorx %f0,%f2,%f36,%f8 902 std %f6, [%i1 + 0] 903 std %f8, [%i1 + 8] 904 add %i1, 16, %i1 905 906 brnz,a %i2, .Loop_cbc_dec_unaligned_out 907 sub %i2, 1, %i2 908 909.Lcbc_dec_unaligned_out_done: 910 .word 0x91b88b62 !fshiftorx %f2,%f2,%f36,%f8 911 stda %f8, [%i1 + %l6]0xc0 ! partial store 912 913 st %f16, [%i4 + 0] ! output ivec 914 st %f17, [%i4 + 4] 915 st %f18, [%i4 + 8] 916 st %f19, [%i4 + 12] 917 918 ret 919 restore 920.type aes_fx_cbc_encrypt,#function 921.size aes_fx_cbc_encrypt,.-aes_fx_cbc_encrypt 922.globl aes_fx_ctr32_encrypt_blocks 923.align 32 924aes_fx_ctr32_encrypt_blocks: 925 save %sp, -STACK_FRAME-16, %sp 926 srln %i2, 0, %i2 927 and %i0, 7, %l4 928 andn %i0, 7, %i0 929 brz,pn %i2, .Lctr32_no_data 930 sll %l4, 3, %l4 931 932.Lpic: call .+8 933 add %o7, .Linp_align - .Lpic, %o7 934 935 ld [%i3 + 240], %l0 936 and %i1, 7, %l5 937 ld [%i4 + 0], %f16 ! load counter 938 andn %i1, 7, %i1 939 ld [%i4 + 4], %f17 940 sll %l5, 3, %l6 941 ld [%i4 + 8], %f18 942 ld [%i4 + 12], %f19 943 ldd [%o7 + 128], %f14 944 945 sll %l0, 4, %l0 946 add %l0, %i3, %l2 947 ldd [%i3 + 0], %f20 ! round[0] 948 ldd [%i3 + 8], %f22 949 950 add %i0, 16, %i0 951 sub %i2, 1, %i2 952 ldd [%i3 + 16], %f10 ! round[1] 953 ldd [%i3 + 24], %f12 954 955 mov 16, %l3 956 movrz %i2, 0, %l3 957 ldd [%l2 + 0], %f24 ! round[last] 958 ldd [%l2 + 8], %f26 959 960 ldd [%o7 + %l4], %f36 ! shiftleft params 961 add %o7, 64, %o7 962 ldd [%i0 - 16], %f28 ! load input 963 ldd [%i0 - 8], %f30 964 ldda [%i0]0x82, %f32 ! non-faulting load 965 add %i0, %l3, %i0 ! inp+=16 966 967 .word 0xb9bf0b7e !fshiftorx %f28,%f30,%f36,%f28 968 .word 0xbdbf8b61 !fshiftorx %f30,%f32,%f36,%f30 969 970.Loop_ctr32: 971 .word 0x81b40d94 !fxor %f16,%f20,%f0 ! counter^round[0] 972 .word 0x85b48d96 !fxor %f18,%f22,%f2 973 ldd [%i3 + 32], %f6 ! round[2] 974 ldd [%i3 + 40], %f8 975 add %i3, 32, %l2 976 sub %l0, 16*6, %l1 977 978.Lctr32_enc: 979 fmovd %f0, %f4 980 .word 0x81b0920a !faesencx %f2,%f10,%f0 981 .word 0x85b1120c !faesencx %f4,%f12,%f2 982 ldd [%l2 + 16], %f10 983 ldd [%l2 + 24], %f12 984 add %l2, 32, %l2 985 986 fmovd %f0, %f4 987 .word 0x81b09206 !faesencx %f2,%f6,%f0 988 .word 0x85b11208 !faesencx %f4,%f8,%f2 989 ldd [%l2 + 0], %f6 990 ldd [%l2 + 8], %f8 991 992 brnz,a %l1, .Lctr32_enc 993 sub %l1, 16*2, %l1 994 995 fmovd %f0, %f4 996 .word 0x81b0920a !faesencx %f2,%f10,%f0 997 .word 0x85b1120c !faesencx %f4,%f12,%f2 998 ldd [%l2 + 16], %f10 ! round[last-1] 999 ldd [%l2 + 24], %f12 1000 1001 fmovd %f0, %f4 1002 .word 0x81b09206 !faesencx %f2,%f6,%f0 1003 .word 0x85b11208 !faesencx %f4,%f8,%f2 1004 .word 0x8db70d98 !fxor %f28,%f24,%f6 ! inp^round[last] 1005 .word 0x91b78d9a !fxor %f30,%f26,%f8 1006 1007 movrz %i2, 0, %l3 1008 fmovd %f32, %f28 1009 ldd [%i0 - 8], %f30 ! load next input block 1010 ldda [%i0]0x82, %f32 ! non-faulting load 1011 add %i0, %l3, %i0 ! inp+=16 1012 1013 fmovd %f0, %f4 1014 .word 0x81b0920a !faesencx %f2,%f10,%f0 1015 .word 0x85b1120c !faesencx %f4,%f12,%f2 1016 ldd [%i3 + 16], %f10 ! round[1] 1017 ldd [%i3 + 24], %f12 1018 1019 .word 0xb9bf0b7e !fshiftorx %f28,%f30,%f36,%f28 1020 .word 0xbdbf8b61 !fshiftorx %f30,%f32,%f36,%f30 1021 .word 0xa5b48a4e !fpadd32 %f18,%f14,%f18 ! increment counter 1022 1023 fmovd %f0, %f4 1024 .word 0x81b09246 !faesenclx %f2,%f6,%f0 1025 .word 0x85b11248 !faesenclx %f4,%f8,%f2 1026 1027 brnz,pn %l5, .Lctr32_unaligned_out 1028 nop 1029 1030 std %f0, [%i1 + 0] 1031 std %f2, [%i1 + 8] 1032 add %i1, 16, %i1 1033 1034 brnz,a %i2, .Loop_ctr32 1035 sub %i2, 1, %i2 1036 1037.Lctr32_no_data: 1038 ret 1039 restore 1040 1041.align 32 1042.Lctr32_unaligned_out: 1043 ldd [%o7 + %l6], %f36 ! shift right params 1044 mov 0xff, %l6 1045 srl %l6, %l5, %l6 1046 sub %g0, %l4, %l5 1047 1048 .word 0x8db80b60 !fshiftorx %f0,%f0,%f36,%f6 1049 .word 0x91b80b62 !fshiftorx %f0,%f2,%f36,%f8 1050 1051 stda %f6, [%i1 + %l6]0xc0 ! partial store 1052 orn %g0, %l6, %l6 1053 std %f8, [%i1 + 8] 1054 add %i1, 16, %i1 1055 brz %i2, .Lctr32_unaligned_out_done 1056 sub %i2, 1, %i2 1057 b .Loop_ctr32_unaligned_out 1058 nop 1059 1060.align 32 1061.Loop_ctr32_unaligned_out: 1062 fmovd %f2, %f34 1063 .word 0x81b40d94 !fxor %f16,%f20,%f0 ! counter^round[0] 1064 .word 0x85b48d96 !fxor %f18,%f22,%f2 1065 ldd [%i3 + 32], %f6 ! round[2] 1066 ldd [%i3 + 40], %f8 1067 1068 fmovd %f0, %f4 1069 .word 0x81b0920a !faesencx %f2,%f10,%f0 1070 .word 0x85b1120c !faesencx %f4,%f12,%f2 1071 ldd [%i3 + 48], %f10 ! round[3] 1072 ldd [%i3 + 56], %f12 1073 1074 ldx [%i0 - 16], %o0 1075 ldx [%i0 - 8], %o1 1076 brz %l4, .Lctr32_aligned_inp 1077 movrz %i2, 0, %l3 1078 1079 ldx [%i0], %o2 1080 sllx %o0, %l4, %o0 1081 srlx %o1, %l5, %g1 1082 sllx %o1, %l4, %o1 1083 or %g1, %o0, %o0 1084 srlx %o2, %l5, %o2 1085 or %o2, %o1, %o1 1086 1087.Lctr32_aligned_inp: 1088 fmovd %f0, %f4 1089 .word 0x81b09206 !faesencx %f2,%f6,%f0 1090 .word 0x85b11208 !faesencx %f4,%f8,%f2 1091 ldd [%i3 + 64], %f6 ! round[4] 1092 ldd [%i3 + 72], %f8 1093 add %i3, 64, %l2 1094 sub %l0, 16*8, %l1 1095 1096 stx %o0, [%sp + LOCALS + 0] 1097 stx %o1, [%sp + LOCALS + 8] 1098 add %i0, %l3, %i0 ! inp+=16 1099 nop 1100 1101.Lctr32_enc_unaligned: 1102 fmovd %f0, %f4 1103 .word 0x81b0920a !faesencx %f2,%f10,%f0 1104 .word 0x85b1120c !faesencx %f4,%f12,%f2 1105 ldd [%l2 + 16], %f10 1106 ldd [%l2 + 24], %f12 1107 add %l2, 32, %l2 1108 1109 fmovd %f0, %f4 1110 .word 0x81b09206 !faesencx %f2,%f6,%f0 1111 .word 0x85b11208 !faesencx %f4,%f8,%f2 1112 ldd [%l2 + 0], %f6 1113 ldd [%l2 + 8], %f8 1114 1115 brnz,a %l1, .Lctr32_enc_unaligned 1116 sub %l1, 16*2, %l1 1117 1118 fmovd %f0, %f4 1119 .word 0x81b0920a !faesencx %f2,%f10,%f0 1120 .word 0x85b1120c !faesencx %f4,%f12,%f2 1121 ldd [%l2 + 16], %f10 ! round[last-1] 1122 ldd [%l2 + 24], %f12 1123 .word 0xa5b48a4e !fpadd32 %f18,%f14,%f18 ! increment counter 1124 1125 fmovd %f0, %f4 1126 .word 0x81b09206 !faesencx %f2,%f6,%f0 1127 .word 0x85b11208 !faesencx %f4,%f8,%f2 1128 .word 0x8db70d98 !fxor %f28,%f24,%f6 ! inp^round[last] 1129 .word 0x91b78d9a !fxor %f30,%f26,%f8 1130 ldd [%sp + LOCALS + 0], %f28 1131 ldd [%sp + LOCALS + 8], %f30 1132 1133 fmovd %f0, %f4 1134 .word 0x81b0920a !faesencx %f2,%f10,%f0 1135 .word 0x85b1120c !faesencx %f4,%f12,%f2 1136 ldd [%i3 + 16], %f10 ! round[1] 1137 ldd [%i3 + 24], %f12 1138 1139 fmovd %f0, %f4 1140 .word 0x81b09246 !faesenclx %f2,%f6,%f0 1141 .word 0x85b11248 !faesenclx %f4,%f8,%f2 1142 1143 .word 0x8db8cb60 !fshiftorx %f34,%f0,%f36,%f6 1144 .word 0x91b80b62 !fshiftorx %f0,%f2,%f36,%f8 1145 std %f6, [%i1 + 0] 1146 std %f8, [%i1 + 8] 1147 add %i1, 16, %i1 1148 1149 brnz,a %i2, .Loop_ctr32_unaligned_out 1150 sub %i2, 1, %i2 1151 1152.Lctr32_unaligned_out_done: 1153 .word 0x91b88b62 !fshiftorx %f2,%f2,%f36,%f8 1154 stda %f8, [%i1 + %l6]0xc0 ! partial store 1155 1156 ret 1157 restore 1158.type aes_fx_ctr32_encrypt_blocks,#function 1159.size aes_fx_ctr32_encrypt_blocks,.-aes_fx_ctr32_encrypt_blocks 1160 1161.align 32 1162.Linp_align: ! fshiftorx parameters for left shift toward %rs1 1163 .byte 0, 0, 64, 0, 0, 64, 0, -64 1164 .byte 0, 0, 56, 8, 0, 56, 8, -56 1165 .byte 0, 0, 48, 16, 0, 48, 16, -48 1166 .byte 0, 0, 40, 24, 0, 40, 24, -40 1167 .byte 0, 0, 32, 32, 0, 32, 32, -32 1168 .byte 0, 0, 24, 40, 0, 24, 40, -24 1169 .byte 0, 0, 16, 48, 0, 16, 48, -16 1170 .byte 0, 0, 8, 56, 0, 8, 56, -8 1171.Lout_align: ! fshiftorx parameters for right shift toward %rs2 1172 .byte 0, 0, 0, 64, 0, 0, 64, 0 1173 .byte 0, 0, 8, 56, 0, 8, 56, -8 1174 .byte 0, 0, 16, 48, 0, 16, 48, -16 1175 .byte 0, 0, 24, 40, 0, 24, 40, -24 1176 .byte 0, 0, 32, 32, 0, 32, 32, -32 1177 .byte 0, 0, 40, 24, 0, 40, 24, -40 1178 .byte 0, 0, 48, 16, 0, 48, 16, -48 1179 .byte 0, 0, 56, 8, 0, 56, 8, -56 1180.Lone: 1181 .word 0, 1 1182.asciz "AES for Fujitsu SPARC64 X, CRYPTOGAMS by <appro@openssl.org>" 1183.align 4 1184