1/* aes_asm.S 2 * 3 * Copyright (C) 2006-2021 wolfSSL Inc. 4 * 5 * This file is part of wolfSSL. 6 * 7 * wolfSSL is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * wolfSSL is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA 20 */ 21 22 23 24/* This file is in at&t asm syntax, see .asm for intel syntax */ 25 26/* See Intel Advanced Encryption Standard (AES) Instructions Set White Paper 27 * by Intel Mobility Group, Israel Development Center, Israel Shay Gueron 28 */ 29 30 31/* 32AES_CBC_encrypt (const unsigned char *in, 33 unsigned char *out, 34 unsigned char ivec[16], 35 unsigned long length, 36 const unsigned char *KS, 37 int nr) 38*/ 39#ifndef __APPLE__ 40.globl AES_CBC_encrypt 41AES_CBC_encrypt: 42#else 43.globl _AES_CBC_encrypt 44_AES_CBC_encrypt: 45#endif 46# parameter 1: %rdi 47# parameter 2: %rsi 48# parameter 3: %rdx 49# parameter 4: %rcx 50# parameter 5: %r8 51# parameter 6: %r9d 52movq %rcx, %r10 53shrq $4, %rcx 54shlq $60, %r10 55je NO_PARTS 56addq $1, %rcx 57NO_PARTS: 58subq $16, %rsi 59movdqa (%rdx), %xmm1 60LOOP: 61pxor (%rdi), %xmm1 62pxor (%r8), %xmm1 63addq $16,%rsi 64addq $16,%rdi 65cmpl $12, %r9d 66aesenc 16(%r8),%xmm1 67aesenc 32(%r8),%xmm1 68aesenc 48(%r8),%xmm1 69aesenc 64(%r8),%xmm1 70aesenc 80(%r8),%xmm1 71aesenc 96(%r8),%xmm1 72aesenc 112(%r8),%xmm1 73aesenc 128(%r8),%xmm1 74aesenc 144(%r8),%xmm1 75movdqa 160(%r8),%xmm2 76jb LAST 77cmpl $14, %r9d 78 79aesenc 160(%r8),%xmm1 80aesenc 176(%r8),%xmm1 81movdqa 192(%r8),%xmm2 82jb LAST 83aesenc 192(%r8),%xmm1 84aesenc 208(%r8),%xmm1 85movdqa 224(%r8),%xmm2 86LAST: 87decq %rcx 88aesenclast %xmm2,%xmm1 89movdqu %xmm1,(%rsi) 90jne LOOP 91ret 92 93 94#if defined(WOLFSSL_AESNI_BY4) 95 96/* 97AES_CBC_decrypt_by4 (const unsigned char *in, 98 unsigned char *out, 99 unsigned char ivec[16], 100 unsigned long length, 101 const unsigned char *KS, 102 int nr) 103*/ 104#ifndef __APPLE__ 105.globl AES_CBC_decrypt_by4 106AES_CBC_decrypt_by4: 107#else 108.globl _AES_CBC_decrypt_by4 109_AES_CBC_decrypt_by4: 110#endif 111# parameter 1: %rdi 112# parameter 2: %rsi 113# parameter 3: %rdx 114# parameter 4: %rcx 115# parameter 5: %r8 116# parameter 6: %r9d 117 118 movq %rcx, %r10 119 shrq $4, %rcx 120 shlq $60, %r10 121 je DNO_PARTS_4 122 addq $1, %rcx 123DNO_PARTS_4: 124 movq %rcx, %r10 125 shlq $62, %r10 126 shrq $62, %r10 127 shrq $2, %rcx 128 movdqu (%rdx),%xmm5 129 je DREMAINDER_4 130 subq $64, %rsi 131DLOOP_4: 132 movdqu (%rdi), %xmm1 133 movdqu 16(%rdi), %xmm2 134 movdqu 32(%rdi), %xmm3 135 movdqu 48(%rdi), %xmm4 136 movdqa %xmm1, %xmm6 137 movdqa %xmm2, %xmm7 138 movdqa %xmm3, %xmm8 139 movdqa %xmm4, %xmm15 140 movdqa (%r8), %xmm9 141 movdqa 16(%r8), %xmm10 142 movdqa 32(%r8), %xmm11 143 movdqa 48(%r8), %xmm12 144 pxor %xmm9, %xmm1 145 pxor %xmm9, %xmm2 146 pxor %xmm9, %xmm3 147 pxor %xmm9, %xmm4 148 aesdec %xmm10, %xmm1 149 aesdec %xmm10, %xmm2 150 aesdec %xmm10, %xmm3 151 aesdec %xmm10, %xmm4 152 aesdec %xmm11, %xmm1 153 aesdec %xmm11, %xmm2 154 aesdec %xmm11, %xmm3 155 aesdec %xmm11, %xmm4 156 aesdec %xmm12, %xmm1 157 aesdec %xmm12, %xmm2 158 aesdec %xmm12, %xmm3 159 aesdec %xmm12, %xmm4 160 movdqa 64(%r8), %xmm9 161 movdqa 80(%r8), %xmm10 162 movdqa 96(%r8), %xmm11 163 movdqa 112(%r8), %xmm12 164 aesdec %xmm9, %xmm1 165 aesdec %xmm9, %xmm2 166 aesdec %xmm9, %xmm3 167 aesdec %xmm9, %xmm4 168 aesdec %xmm10, %xmm1 169 aesdec %xmm10, %xmm2 170 aesdec %xmm10, %xmm3 171 aesdec %xmm10, %xmm4 172 aesdec %xmm11, %xmm1 173 aesdec %xmm11, %xmm2 174 aesdec %xmm11, %xmm3 175 aesdec %xmm11, %xmm4 176 aesdec %xmm12, %xmm1 177 aesdec %xmm12, %xmm2 178 aesdec %xmm12, %xmm3 179 aesdec %xmm12, %xmm4 180 movdqa 128(%r8), %xmm9 181 movdqa 144(%r8), %xmm10 182 movdqa 160(%r8), %xmm11 183 cmpl $12, %r9d 184 aesdec %xmm9, %xmm1 185 aesdec %xmm9, %xmm2 186 aesdec %xmm9, %xmm3 187 aesdec %xmm9, %xmm4 188 aesdec %xmm10, %xmm1 189 aesdec %xmm10, %xmm2 190 aesdec %xmm10, %xmm3 191 aesdec %xmm10, %xmm4 192 jb DLAST_4 193 movdqa 160(%r8), %xmm9 194 movdqa 176(%r8), %xmm10 195 movdqa 192(%r8), %xmm11 196 cmpl $14, %r9d 197 aesdec %xmm9, %xmm1 198 aesdec %xmm9, %xmm2 199 aesdec %xmm9, %xmm3 200 aesdec %xmm9, %xmm4 201 aesdec %xmm10, %xmm1 202 aesdec %xmm10, %xmm2 203 aesdec %xmm10, %xmm3 204 aesdec %xmm10, %xmm4 205 jb DLAST_4 206 movdqa 192(%r8), %xmm9 207 movdqa 208(%r8), %xmm10 208 movdqa 224(%r8), %xmm11 209 aesdec %xmm9, %xmm1 210 aesdec %xmm9, %xmm2 211 aesdec %xmm9, %xmm3 212 aesdec %xmm9, %xmm4 213 aesdec %xmm10, %xmm1 214 aesdec %xmm10, %xmm2 215 aesdec %xmm10, %xmm3 216 aesdec %xmm10, %xmm4 217DLAST_4: 218 addq $64, %rdi 219 addq $64, %rsi 220 decq %rcx 221 aesdeclast %xmm11, %xmm1 222 aesdeclast %xmm11, %xmm2 223 aesdeclast %xmm11, %xmm3 224 aesdeclast %xmm11, %xmm4 225 pxor %xmm5, %xmm1 226 pxor %xmm6, %xmm2 227 pxor %xmm7, %xmm3 228 pxor %xmm8, %xmm4 229 movdqu %xmm1, (%rsi) 230 movdqu %xmm2, 16(%rsi) 231 movdqu %xmm3, 32(%rsi) 232 movdqu %xmm4, 48(%rsi) 233 movdqa %xmm15,%xmm5 234 jne DLOOP_4 235 addq $64, %rsi 236DREMAINDER_4: 237 cmpq $0, %r10 238 je DEND_4 239DLOOP_4_2: 240 movdqu (%rdi), %xmm1 241 movdqa %xmm1, %xmm15 242 addq $16, %rdi 243 pxor (%r8), %xmm1 244 movdqu 160(%r8), %xmm2 245 cmpl $12, %r9d 246 aesdec 16(%r8), %xmm1 247 aesdec 32(%r8), %xmm1 248 aesdec 48(%r8), %xmm1 249 aesdec 64(%r8), %xmm1 250 aesdec 80(%r8), %xmm1 251 aesdec 96(%r8), %xmm1 252 aesdec 112(%r8), %xmm1 253 aesdec 128(%r8), %xmm1 254 aesdec 144(%r8), %xmm1 255 jb DLAST_4_2 256 movdqu 192(%r8), %xmm2 257 cmpl $14, %r9d 258 aesdec 160(%r8), %xmm1 259 aesdec 176(%r8), %xmm1 260 jb DLAST_4_2 261 movdqu 224(%r8), %xmm2 262 aesdec 192(%r8), %xmm1 263 aesdec 208(%r8), %xmm1 264DLAST_4_2: 265 aesdeclast %xmm2, %xmm1 266 pxor %xmm5, %xmm1 267 movdqa %xmm15, %xmm5 268 movdqu %xmm1, (%rsi) 269 addq $16, %rsi 270 decq %r10 271 jne DLOOP_4_2 272DEND_4: 273 ret 274 275#elif defined(WOLFSSL_AESNI_BY6) 276 277/* 278AES_CBC_decrypt_by6 (const unsigned char *in, 279 unsigned char *out, 280 unsigned char ivec[16], 281 unsigned long length, 282 const unsigned char *KS, 283 int nr) 284*/ 285#ifndef __APPLE__ 286.globl AES_CBC_decrypt_by6 287AES_CBC_decrypt_by6: 288#else 289.globl _AES_CBC_decrypt_by6 290_AES_CBC_decrypt_by6: 291#endif 292# parameter 1: %rdi - in 293# parameter 2: %rsi - out 294# parameter 3: %rdx - ivec 295# parameter 4: %rcx - length 296# parameter 5: %r8 - KS 297# parameter 6: %r9d - nr 298 299 movq %rcx, %r10 300 shrq $4, %rcx 301 shlq $60, %r10 302 je DNO_PARTS_6 303 addq $1, %rcx 304DNO_PARTS_6: 305 movq %rax, %r12 306 movq %rdx, %r13 307 movq %rbx, %r14 308 movq $0, %rdx 309 movq %rcx, %rax 310 movq $6, %rbx 311 div %rbx 312 movq %rax, %rcx 313 movq %rdx, %r10 314 movq %r12, %rax 315 movq %r13, %rdx 316 movq %r14, %rbx 317 cmpq $0, %rcx 318 movdqu (%rdx), %xmm7 319 je DREMAINDER_6 320 subq $96, %rsi 321DLOOP_6: 322 movdqu (%rdi), %xmm1 323 movdqu 16(%rdi), %xmm2 324 movdqu 32(%rdi), %xmm3 325 movdqu 48(%rdi), %xmm4 326 movdqu 64(%rdi), %xmm5 327 movdqu 80(%rdi), %xmm6 328 movdqa (%r8), %xmm8 329 movdqa 16(%r8), %xmm9 330 movdqa 32(%r8), %xmm10 331 movdqa 48(%r8), %xmm11 332 pxor %xmm8, %xmm1 333 pxor %xmm8, %xmm2 334 pxor %xmm8, %xmm3 335 pxor %xmm8, %xmm4 336 pxor %xmm8, %xmm5 337 pxor %xmm8, %xmm6 338 aesdec %xmm9, %xmm1 339 aesdec %xmm9, %xmm2 340 aesdec %xmm9, %xmm3 341 aesdec %xmm9, %xmm4 342 aesdec %xmm9, %xmm5 343 aesdec %xmm9, %xmm6 344 aesdec %xmm10, %xmm1 345 aesdec %xmm10, %xmm2 346 aesdec %xmm10, %xmm3 347 aesdec %xmm10, %xmm4 348 aesdec %xmm10, %xmm5 349 aesdec %xmm10, %xmm6 350 aesdec %xmm11, %xmm1 351 aesdec %xmm11, %xmm2 352 aesdec %xmm11, %xmm3 353 aesdec %xmm11, %xmm4 354 aesdec %xmm11, %xmm5 355 aesdec %xmm11, %xmm6 356 movdqa 64(%r8), %xmm8 357 movdqa 80(%r8), %xmm9 358 movdqa 96(%r8), %xmm10 359 movdqa 112(%r8), %xmm11 360 aesdec %xmm8, %xmm1 361 aesdec %xmm8, %xmm2 362 aesdec %xmm8, %xmm3 363 aesdec %xmm8, %xmm4 364 aesdec %xmm8, %xmm5 365 aesdec %xmm8, %xmm6 366 aesdec %xmm9, %xmm1 367 aesdec %xmm9, %xmm2 368 aesdec %xmm9, %xmm3 369 aesdec %xmm9, %xmm4 370 aesdec %xmm9, %xmm5 371 aesdec %xmm9, %xmm6 372 aesdec %xmm10, %xmm1 373 aesdec %xmm10, %xmm2 374 aesdec %xmm10, %xmm3 375 aesdec %xmm10, %xmm4 376 aesdec %xmm10, %xmm5 377 aesdec %xmm10, %xmm6 378 aesdec %xmm11, %xmm1 379 aesdec %xmm11, %xmm2 380 aesdec %xmm11, %xmm3 381 aesdec %xmm11, %xmm4 382 aesdec %xmm11, %xmm5 383 aesdec %xmm11, %xmm6 384 movdqa 128(%r8), %xmm8 385 movdqa 144(%r8), %xmm9 386 movdqa 160(%r8), %xmm10 387 cmpl $12, %r9d 388 aesdec %xmm8, %xmm1 389 aesdec %xmm8, %xmm2 390 aesdec %xmm8, %xmm3 391 aesdec %xmm8, %xmm4 392 aesdec %xmm8, %xmm5 393 aesdec %xmm8, %xmm6 394 aesdec %xmm9, %xmm1 395 aesdec %xmm9, %xmm2 396 aesdec %xmm9, %xmm3 397 aesdec %xmm9, %xmm4 398 aesdec %xmm9, %xmm5 399 aesdec %xmm9, %xmm6 400 jb DLAST_6 401 movdqa 160(%r8), %xmm8 402 movdqa 176(%r8), %xmm9 403 movdqa 192(%r8), %xmm10 404 cmpl $14, %r9d 405 aesdec %xmm8, %xmm1 406 aesdec %xmm8, %xmm2 407 aesdec %xmm8, %xmm3 408 aesdec %xmm8, %xmm4 409 aesdec %xmm8, %xmm5 410 aesdec %xmm8, %xmm6 411 aesdec %xmm9, %xmm1 412 aesdec %xmm9, %xmm2 413 aesdec %xmm9, %xmm3 414 aesdec %xmm9, %xmm4 415 aesdec %xmm9, %xmm5 416 aesdec %xmm9, %xmm6 417 jb DLAST_6 418 movdqa 192(%r8), %xmm8 419 movdqa 208(%r8), %xmm9 420 movdqa 224(%r8), %xmm10 421 aesdec %xmm8, %xmm1 422 aesdec %xmm8, %xmm2 423 aesdec %xmm8, %xmm3 424 aesdec %xmm8, %xmm4 425 aesdec %xmm8, %xmm5 426 aesdec %xmm8, %xmm6 427 aesdec %xmm9, %xmm1 428 aesdec %xmm9, %xmm2 429 aesdec %xmm9, %xmm3 430 aesdec %xmm9, %xmm4 431 aesdec %xmm9, %xmm5 432 aesdec %xmm9, %xmm6 433DLAST_6: 434 addq $96, %rsi 435 aesdeclast %xmm10, %xmm1 436 aesdeclast %xmm10, %xmm2 437 aesdeclast %xmm10, %xmm3 438 aesdeclast %xmm10, %xmm4 439 aesdeclast %xmm10, %xmm5 440 aesdeclast %xmm10, %xmm6 441 movdqu (%rdi), %xmm8 442 movdqu 16(%rdi), %xmm9 443 movdqu 32(%rdi), %xmm10 444 movdqu 48(%rdi), %xmm11 445 movdqu 64(%rdi), %xmm12 446 movdqu 80(%rdi), %xmm13 447 pxor %xmm7, %xmm1 448 pxor %xmm8, %xmm2 449 pxor %xmm9, %xmm3 450 pxor %xmm10, %xmm4 451 pxor %xmm11, %xmm5 452 pxor %xmm12, %xmm6 453 movdqu %xmm13, %xmm7 454 movdqu %xmm1, (%rsi) 455 movdqu %xmm2, 16(%rsi) 456 movdqu %xmm3, 32(%rsi) 457 movdqu %xmm4, 48(%rsi) 458 movdqu %xmm5, 64(%rsi) 459 movdqu %xmm6, 80(%rsi) 460 addq $96, %rdi 461 decq %rcx 462 jne DLOOP_6 463 addq $96, %rsi 464DREMAINDER_6: 465 cmpq $0, %r10 466 je DEND_6 467DLOOP_6_2: 468 movdqu (%rdi), %xmm1 469 movdqa %xmm1, %xmm10 470 addq $16, %rdi 471 pxor (%r8), %xmm1 472 movdqu 160(%r8), %xmm2 473 cmpl $12, %r9d 474 aesdec 16(%r8), %xmm1 475 aesdec 32(%r8), %xmm1 476 aesdec 48(%r8), %xmm1 477 aesdec 64(%r8), %xmm1 478 aesdec 80(%r8), %xmm1 479 aesdec 96(%r8), %xmm1 480 aesdec 112(%r8), %xmm1 481 aesdec 128(%r8), %xmm1 482 aesdec 144(%r8), %xmm1 483 jb DLAST_6_2 484 movdqu 192(%r8), %xmm2 485 cmpl $14, %r9d 486 aesdec 160(%r8), %xmm1 487 aesdec 176(%r8), %xmm1 488 jb DLAST_6_2 489 movdqu 224(%r8), %xmm2 490 aesdec 192(%r8), %xmm1 491 aesdec 208(%r8), %xmm1 492DLAST_6_2: 493 aesdeclast %xmm2, %xmm1 494 pxor %xmm7, %xmm1 495 movdqa %xmm10, %xmm7 496 movdqu %xmm1, (%rsi) 497 addq $16, %rsi 498 decq %r10 499 jne DLOOP_6_2 500DEND_6: 501 ret 502 503#else /* WOLFSSL_AESNI_BYx */ 504 505/* 506AES_CBC_decrypt_by8 (const unsigned char *in, 507 unsigned char *out, 508 unsigned char ivec[16], 509 unsigned long length, 510 const unsigned char *KS, 511 int nr) 512*/ 513#ifndef __APPLE__ 514.globl AES_CBC_decrypt_by8 515AES_CBC_decrypt_by8: 516#else 517.globl _AES_CBC_decrypt_by8 518_AES_CBC_decrypt_by8: 519#endif 520# parameter 1: %rdi - in 521# parameter 2: %rsi - out 522# parameter 3: %rdx - ivec 523# parameter 4: %rcx - length 524# parameter 5: %r8 - KS 525# parameter 6: %r9d - nr 526 527 movq %rcx, %r10 528 shrq $4, %rcx 529 shlq $60, %r10 530 je DNO_PARTS_8 531 addq $1, %rcx 532DNO_PARTS_8: 533 movq %rcx, %r10 534 shlq $61, %r10 535 shrq $61, %r10 536 shrq $3, %rcx 537 movdqu (%rdx), %xmm9 538 je DREMAINDER_8 539 subq $128, %rsi 540DLOOP_8: 541 movdqu (%rdi), %xmm1 542 movdqu 16(%rdi), %xmm2 543 movdqu 32(%rdi), %xmm3 544 movdqu 48(%rdi), %xmm4 545 movdqu 64(%rdi), %xmm5 546 movdqu 80(%rdi), %xmm6 547 movdqu 96(%rdi), %xmm7 548 movdqu 112(%rdi), %xmm8 549 movdqa (%r8), %xmm10 550 movdqa 16(%r8), %xmm11 551 movdqa 32(%r8), %xmm12 552 movdqa 48(%r8), %xmm13 553 pxor %xmm10, %xmm1 554 pxor %xmm10, %xmm2 555 pxor %xmm10, %xmm3 556 pxor %xmm10, %xmm4 557 pxor %xmm10, %xmm5 558 pxor %xmm10, %xmm6 559 pxor %xmm10, %xmm7 560 pxor %xmm10, %xmm8 561 aesdec %xmm11, %xmm1 562 aesdec %xmm11, %xmm2 563 aesdec %xmm11, %xmm3 564 aesdec %xmm11, %xmm4 565 aesdec %xmm11, %xmm5 566 aesdec %xmm11, %xmm6 567 aesdec %xmm11, %xmm7 568 aesdec %xmm11, %xmm8 569 aesdec %xmm12, %xmm1 570 aesdec %xmm12, %xmm2 571 aesdec %xmm12, %xmm3 572 aesdec %xmm12, %xmm4 573 aesdec %xmm12, %xmm5 574 aesdec %xmm12, %xmm6 575 aesdec %xmm12, %xmm7 576 aesdec %xmm12, %xmm8 577 aesdec %xmm13, %xmm1 578 aesdec %xmm13, %xmm2 579 aesdec %xmm13, %xmm3 580 aesdec %xmm13, %xmm4 581 aesdec %xmm13, %xmm5 582 aesdec %xmm13, %xmm6 583 aesdec %xmm13, %xmm7 584 aesdec %xmm13, %xmm8 585 movdqa 64(%r8), %xmm10 586 movdqa 80(%r8), %xmm11 587 movdqa 96(%r8), %xmm12 588 movdqa 112(%r8), %xmm13 589 aesdec %xmm10, %xmm1 590 aesdec %xmm10, %xmm2 591 aesdec %xmm10, %xmm3 592 aesdec %xmm10, %xmm4 593 aesdec %xmm10, %xmm5 594 aesdec %xmm10, %xmm6 595 aesdec %xmm10, %xmm7 596 aesdec %xmm10, %xmm8 597 aesdec %xmm11, %xmm1 598 aesdec %xmm11, %xmm2 599 aesdec %xmm11, %xmm3 600 aesdec %xmm11, %xmm4 601 aesdec %xmm11, %xmm5 602 aesdec %xmm11, %xmm6 603 aesdec %xmm11, %xmm7 604 aesdec %xmm11, %xmm8 605 aesdec %xmm12, %xmm1 606 aesdec %xmm12, %xmm2 607 aesdec %xmm12, %xmm3 608 aesdec %xmm12, %xmm4 609 aesdec %xmm12, %xmm5 610 aesdec %xmm12, %xmm6 611 aesdec %xmm12, %xmm7 612 aesdec %xmm12, %xmm8 613 aesdec %xmm13, %xmm1 614 aesdec %xmm13, %xmm2 615 aesdec %xmm13, %xmm3 616 aesdec %xmm13, %xmm4 617 aesdec %xmm13, %xmm5 618 aesdec %xmm13, %xmm6 619 aesdec %xmm13, %xmm7 620 aesdec %xmm13, %xmm8 621 movdqa 128(%r8), %xmm10 622 movdqa 144(%r8), %xmm11 623 movdqa 160(%r8), %xmm12 624 cmpl $12, %r9d 625 aesdec %xmm10, %xmm1 626 aesdec %xmm10, %xmm2 627 aesdec %xmm10, %xmm3 628 aesdec %xmm10, %xmm4 629 aesdec %xmm10, %xmm5 630 aesdec %xmm10, %xmm6 631 aesdec %xmm10, %xmm7 632 aesdec %xmm10, %xmm8 633 aesdec %xmm11, %xmm1 634 aesdec %xmm11, %xmm2 635 aesdec %xmm11, %xmm3 636 aesdec %xmm11, %xmm4 637 aesdec %xmm11, %xmm5 638 aesdec %xmm11, %xmm6 639 aesdec %xmm11, %xmm7 640 aesdec %xmm11, %xmm8 641 jb DLAST_8 642 movdqa 160(%r8), %xmm10 643 movdqa 176(%r8), %xmm11 644 movdqa 192(%r8), %xmm12 645 cmpl $14, %r9d 646 aesdec %xmm10, %xmm1 647 aesdec %xmm10, %xmm2 648 aesdec %xmm10, %xmm3 649 aesdec %xmm10, %xmm4 650 aesdec %xmm10, %xmm5 651 aesdec %xmm10, %xmm6 652 aesdec %xmm10, %xmm7 653 aesdec %xmm10, %xmm8 654 aesdec %xmm11, %xmm1 655 aesdec %xmm11, %xmm2 656 aesdec %xmm11, %xmm3 657 aesdec %xmm11, %xmm4 658 aesdec %xmm11, %xmm5 659 aesdec %xmm11, %xmm6 660 aesdec %xmm11, %xmm7 661 aesdec %xmm11, %xmm8 662 jb DLAST_8 663 movdqa 192(%r8), %xmm10 664 movdqa 208(%r8), %xmm11 665 movdqa 224(%r8), %xmm12 666 aesdec %xmm10, %xmm1 667 aesdec %xmm10, %xmm2 668 aesdec %xmm10, %xmm3 669 aesdec %xmm10, %xmm4 670 aesdec %xmm10, %xmm5 671 aesdec %xmm10, %xmm6 672 aesdec %xmm10, %xmm7 673 aesdec %xmm10, %xmm8 674 aesdec %xmm11, %xmm1 675 aesdec %xmm11, %xmm2 676 aesdec %xmm11, %xmm3 677 aesdec %xmm11, %xmm4 678 aesdec %xmm11, %xmm5 679 aesdec %xmm11, %xmm6 680 aesdec %xmm11, %xmm7 681 aesdec %xmm11, %xmm8 682DLAST_8: 683 addq $128, %rsi 684 aesdeclast %xmm12, %xmm1 685 aesdeclast %xmm12, %xmm2 686 aesdeclast %xmm12, %xmm3 687 aesdeclast %xmm12, %xmm4 688 aesdeclast %xmm12, %xmm5 689 aesdeclast %xmm12, %xmm6 690 aesdeclast %xmm12, %xmm7 691 aesdeclast %xmm12, %xmm8 692 movdqu (%rdi), %xmm10 693 movdqu 16(%rdi), %xmm11 694 movdqu 32(%rdi), %xmm12 695 movdqu 48(%rdi), %xmm13 696 pxor %xmm9, %xmm1 697 pxor %xmm10, %xmm2 698 pxor %xmm11, %xmm3 699 pxor %xmm12, %xmm4 700 pxor %xmm13, %xmm5 701 movdqu 64(%rdi), %xmm10 702 movdqu 80(%rdi), %xmm11 703 movdqu 96(%rdi), %xmm12 704 movdqu 112(%rdi), %xmm9 705 pxor %xmm10, %xmm6 706 pxor %xmm11, %xmm7 707 pxor %xmm12, %xmm8 708 movdqu %xmm1, (%rsi) 709 movdqu %xmm2, 16(%rsi) 710 movdqu %xmm3, 32(%rsi) 711 movdqu %xmm4, 48(%rsi) 712 movdqu %xmm5, 64(%rsi) 713 movdqu %xmm6, 80(%rsi) 714 movdqu %xmm7, 96(%rsi) 715 movdqu %xmm8, 112(%rsi) 716 addq $128, %rdi 717 decq %rcx 718 jne DLOOP_8 719 addq $128, %rsi 720DREMAINDER_8: 721 cmpq $0, %r10 722 je DEND_8 723DLOOP_8_2: 724 movdqu (%rdi), %xmm1 725 movdqa %xmm1, %xmm10 726 addq $16, %rdi 727 pxor (%r8), %xmm1 728 movdqu 160(%r8), %xmm2 729 cmpl $12, %r9d 730 aesdec 16(%r8), %xmm1 731 aesdec 32(%r8), %xmm1 732 aesdec 48(%r8), %xmm1 733 aesdec 64(%r8), %xmm1 734 aesdec 80(%r8), %xmm1 735 aesdec 96(%r8), %xmm1 736 aesdec 112(%r8), %xmm1 737 aesdec 128(%r8), %xmm1 738 aesdec 144(%r8), %xmm1 739 jb DLAST_8_2 740 movdqu 192(%r8), %xmm2 741 cmpl $14, %r9d 742 aesdec 160(%r8), %xmm1 743 aesdec 176(%r8), %xmm1 744 jb DLAST_8_2 745 movdqu 224(%r8), %xmm2 746 aesdec 192(%r8), %xmm1 747 aesdec 208(%r8), %xmm1 748DLAST_8_2: 749 aesdeclast %xmm2, %xmm1 750 pxor %xmm9, %xmm1 751 movdqa %xmm10, %xmm9 752 movdqu %xmm1, (%rsi) 753 addq $16, %rsi 754 decq %r10 755 jne DLOOP_8_2 756DEND_8: 757 ret 758 759#endif /* WOLFSSL_AESNI_BYx */ 760 761 762/* 763AES_ECB_encrypt (const unsigned char *in, 764 unsigned char *out, 765 unsigned long length, 766 const unsigned char *KS, 767 int nr) 768*/ 769#ifndef __APPLE__ 770.globl AES_ECB_encrypt 771AES_ECB_encrypt: 772#else 773.globl _AES_ECB_encrypt 774_AES_ECB_encrypt: 775#endif 776# parameter 1: %rdi 777# parameter 2: %rsi 778# parameter 3: %rdx 779# parameter 4: %rcx 780# parameter 5: %r8d 781 movq %rdx, %r10 782 shrq $4, %rdx 783 shlq $60, %r10 784 je EECB_NO_PARTS_4 785 addq $1, %rdx 786EECB_NO_PARTS_4: 787 movq %rdx, %r10 788 shlq $62, %r10 789 shrq $62, %r10 790 shrq $2, %rdx 791 je EECB_REMAINDER_4 792 subq $64, %rsi 793EECB_LOOP_4: 794 movdqu (%rdi), %xmm1 795 movdqu 16(%rdi), %xmm2 796 movdqu 32(%rdi), %xmm3 797 movdqu 48(%rdi), %xmm4 798 movdqa (%rcx), %xmm9 799 movdqa 16(%rcx), %xmm10 800 movdqa 32(%rcx), %xmm11 801 movdqa 48(%rcx), %xmm12 802 pxor %xmm9, %xmm1 803 pxor %xmm9, %xmm2 804 pxor %xmm9, %xmm3 805 pxor %xmm9, %xmm4 806 aesenc %xmm10, %xmm1 807 aesenc %xmm10, %xmm2 808 aesenc %xmm10, %xmm3 809 aesenc %xmm10, %xmm4 810 aesenc %xmm11, %xmm1 811 aesenc %xmm11, %xmm2 812 aesenc %xmm11, %xmm3 813 aesenc %xmm11, %xmm4 814 aesenc %xmm12, %xmm1 815 aesenc %xmm12, %xmm2 816 aesenc %xmm12, %xmm3 817 aesenc %xmm12, %xmm4 818 movdqa 64(%rcx), %xmm9 819 movdqa 80(%rcx), %xmm10 820 movdqa 96(%rcx), %xmm11 821 movdqa 112(%rcx), %xmm12 822 aesenc %xmm9, %xmm1 823 aesenc %xmm9, %xmm2 824 aesenc %xmm9, %xmm3 825 aesenc %xmm9, %xmm4 826 aesenc %xmm10, %xmm1 827 aesenc %xmm10, %xmm2 828 aesenc %xmm10, %xmm3 829 aesenc %xmm10, %xmm4 830 aesenc %xmm11, %xmm1 831 aesenc %xmm11, %xmm2 832 aesenc %xmm11, %xmm3 833 aesenc %xmm11, %xmm4 834 aesenc %xmm12, %xmm1 835 aesenc %xmm12, %xmm2 836 aesenc %xmm12, %xmm3 837 aesenc %xmm12, %xmm4 838 movdqa 128(%rcx), %xmm9 839 movdqa 144(%rcx), %xmm10 840 movdqa 160(%rcx), %xmm11 841 cmpl $12, %r8d 842 aesenc %xmm9, %xmm1 843 aesenc %xmm9, %xmm2 844 aesenc %xmm9, %xmm3 845 aesenc %xmm9, %xmm4 846 aesenc %xmm10, %xmm1 847 aesenc %xmm10, %xmm2 848 aesenc %xmm10, %xmm3 849 aesenc %xmm10, %xmm4 850 jb EECB_LAST_4 851 movdqa 160(%rcx), %xmm9 852 movdqa 176(%rcx), %xmm10 853 movdqa 192(%rcx), %xmm11 854 cmpl $14, %r8d 855 aesenc %xmm9, %xmm1 856 aesenc %xmm9, %xmm2 857 aesenc %xmm9, %xmm3 858 aesenc %xmm9, %xmm4 859 aesenc %xmm10, %xmm1 860 aesenc %xmm10, %xmm2 861 aesenc %xmm10, %xmm3 862 aesenc %xmm10, %xmm4 863 jb EECB_LAST_4 864 movdqa 192(%rcx), %xmm9 865 movdqa 208(%rcx), %xmm10 866 movdqa 224(%rcx), %xmm11 867 aesenc %xmm9, %xmm1 868 aesenc %xmm9, %xmm2 869 aesenc %xmm9, %xmm3 870 aesenc %xmm9, %xmm4 871 aesenc %xmm10, %xmm1 872 aesenc %xmm10, %xmm2 873 aesenc %xmm10, %xmm3 874 aesenc %xmm10, %xmm4 875EECB_LAST_4: 876 addq $64, %rdi 877 addq $64, %rsi 878 decq %rdx 879 aesenclast %xmm11, %xmm1 880 aesenclast %xmm11, %xmm2 881 aesenclast %xmm11, %xmm3 882 aesenclast %xmm11, %xmm4 883 movdqu %xmm1, (%rsi) 884 movdqu %xmm2, 16(%rsi) 885 movdqu %xmm3, 32(%rsi) 886 movdqu %xmm4, 48(%rsi) 887 jne EECB_LOOP_4 888 addq $64, %rsi 889EECB_REMAINDER_4: 890 cmpq $0, %r10 891 je EECB_END_4 892EECB_LOOP_4_2: 893 movdqu (%rdi), %xmm1 894 addq $16, %rdi 895 pxor (%rcx), %xmm1 896 movdqu 160(%rcx), %xmm2 897 aesenc 16(%rcx), %xmm1 898 aesenc 32(%rcx), %xmm1 899 aesenc 48(%rcx), %xmm1 900 aesenc 64(%rcx), %xmm1 901 aesenc 80(%rcx), %xmm1 902 aesenc 96(%rcx), %xmm1 903 aesenc 112(%rcx), %xmm1 904 aesenc 128(%rcx), %xmm1 905 aesenc 144(%rcx), %xmm1 906 cmpl $12, %r8d 907 jb EECB_LAST_4_2 908 movdqu 192(%rcx), %xmm2 909 aesenc 160(%rcx), %xmm1 910 aesenc 176(%rcx), %xmm1 911 cmpl $14, %r8d 912 jb EECB_LAST_4_2 913 movdqu 224(%rcx), %xmm2 914 aesenc 192(%rcx), %xmm1 915 aesenc 208(%rcx), %xmm1 916EECB_LAST_4_2: 917 aesenclast %xmm2, %xmm1 918 movdqu %xmm1, (%rsi) 919 addq $16, %rsi 920 decq %r10 921 jne EECB_LOOP_4_2 922EECB_END_4: 923 ret 924 925 926/* 927AES_ECB_decrypt (const unsigned char *in, 928 unsigned char *out, 929 unsigned long length, 930 const unsigned char *KS, 931 int nr) 932*/ 933#ifndef __APPLE__ 934.globl AES_ECB_decrypt 935AES_ECB_decrypt: 936#else 937.globl _AES_ECB_decrypt 938_AES_ECB_decrypt: 939#endif 940# parameter 1: %rdi 941# parameter 2: %rsi 942# parameter 3: %rdx 943# parameter 4: %rcx 944# parameter 5: %r8d 945 946 movq %rdx, %r10 947 shrq $4, %rdx 948 shlq $60, %r10 949 je DECB_NO_PARTS_4 950 addq $1, %rdx 951DECB_NO_PARTS_4: 952 movq %rdx, %r10 953 shlq $62, %r10 954 shrq $62, %r10 955 shrq $2, %rdx 956 je DECB_REMAINDER_4 957 subq $64, %rsi 958DECB_LOOP_4: 959 movdqu (%rdi), %xmm1 960 movdqu 16(%rdi), %xmm2 961 movdqu 32(%rdi), %xmm3 962 movdqu 48(%rdi), %xmm4 963 movdqa (%rcx), %xmm9 964 movdqa 16(%rcx), %xmm10 965 movdqa 32(%rcx), %xmm11 966 movdqa 48(%rcx), %xmm12 967 pxor %xmm9, %xmm1 968 pxor %xmm9, %xmm2 969 pxor %xmm9, %xmm3 970 pxor %xmm9, %xmm4 971 aesdec %xmm10, %xmm1 972 aesdec %xmm10, %xmm2 973 aesdec %xmm10, %xmm3 974 aesdec %xmm10, %xmm4 975 aesdec %xmm11, %xmm1 976 aesdec %xmm11, %xmm2 977 aesdec %xmm11, %xmm3 978 aesdec %xmm11, %xmm4 979 aesdec %xmm12, %xmm1 980 aesdec %xmm12, %xmm2 981 aesdec %xmm12, %xmm3 982 aesdec %xmm12, %xmm4 983 movdqa 64(%rcx), %xmm9 984 movdqa 80(%rcx), %xmm10 985 movdqa 96(%rcx), %xmm11 986 movdqa 112(%rcx), %xmm12 987 aesdec %xmm9, %xmm1 988 aesdec %xmm9, %xmm2 989 aesdec %xmm9, %xmm3 990 aesdec %xmm9, %xmm4 991 aesdec %xmm10, %xmm1 992 aesdec %xmm10, %xmm2 993 aesdec %xmm10, %xmm3 994 aesdec %xmm10, %xmm4 995 aesdec %xmm11, %xmm1 996 aesdec %xmm11, %xmm2 997 aesdec %xmm11, %xmm3 998 aesdec %xmm11, %xmm4 999 aesdec %xmm12, %xmm1 1000 aesdec %xmm12, %xmm2 1001 aesdec %xmm12, %xmm3 1002 aesdec %xmm12, %xmm4 1003 movdqa 128(%rcx), %xmm9 1004 movdqa 144(%rcx), %xmm10 1005 movdqa 160(%rcx), %xmm11 1006 cmpl $12, %r8d 1007 aesdec %xmm9, %xmm1 1008 aesdec %xmm9, %xmm2 1009 aesdec %xmm9, %xmm3 1010 aesdec %xmm9, %xmm4 1011 aesdec %xmm10, %xmm1 1012 aesdec %xmm10, %xmm2 1013 aesdec %xmm10, %xmm3 1014 aesdec %xmm10, %xmm4 1015 jb DECB_LAST_4 1016 movdqa 160(%rcx), %xmm9 1017 movdqa 176(%rcx), %xmm10 1018 movdqa 192(%rcx), %xmm11 1019 cmpl $14, %r8d 1020 aesdec %xmm9, %xmm1 1021 aesdec %xmm9, %xmm2 1022 aesdec %xmm9, %xmm3 1023 aesdec %xmm9, %xmm4 1024 aesdec %xmm10, %xmm1 1025 aesdec %xmm10, %xmm2 1026 aesdec %xmm10, %xmm3 1027 aesdec %xmm10, %xmm4 1028 jb DECB_LAST_4 1029 movdqa 192(%rcx), %xmm9 1030 movdqa 208(%rcx), %xmm10 1031 movdqa 224(%rcx), %xmm11 1032 aesdec %xmm9, %xmm1 1033 aesdec %xmm9, %xmm2 1034 aesdec %xmm9, %xmm3 1035 aesdec %xmm9, %xmm4 1036 aesdec %xmm10, %xmm1 1037 aesdec %xmm10, %xmm2 1038 aesdec %xmm10, %xmm3 1039 aesdec %xmm10, %xmm4 1040DECB_LAST_4: 1041 addq $64, %rdi 1042 addq $64, %rsi 1043 decq %rdx 1044 aesdeclast %xmm11, %xmm1 1045 aesdeclast %xmm11, %xmm2 1046 aesdeclast %xmm11, %xmm3 1047 aesdeclast %xmm11, %xmm4 1048 movdqu %xmm1, (%rsi) 1049 movdqu %xmm2, 16(%rsi) 1050 movdqu %xmm3, 32(%rsi) 1051 movdqu %xmm4, 48(%rsi) 1052 jne DECB_LOOP_4 1053 addq $64, %rsi 1054DECB_REMAINDER_4: 1055 cmpq $0, %r10 1056 je DECB_END_4 1057DECB_LOOP_4_2: 1058 movdqu (%rdi), %xmm1 1059 addq $16, %rdi 1060 pxor (%rcx), %xmm1 1061 movdqu 160(%rcx), %xmm2 1062 cmpl $12, %r8d 1063 aesdec 16(%rcx), %xmm1 1064 aesdec 32(%rcx), %xmm1 1065 aesdec 48(%rcx), %xmm1 1066 aesdec 64(%rcx), %xmm1 1067 aesdec 80(%rcx), %xmm1 1068 aesdec 96(%rcx), %xmm1 1069 aesdec 112(%rcx), %xmm1 1070 aesdec 128(%rcx), %xmm1 1071 aesdec 144(%rcx), %xmm1 1072 jb DECB_LAST_4_2 1073 cmpl $14, %r8d 1074 movdqu 192(%rcx), %xmm2 1075 aesdec 160(%rcx), %xmm1 1076 aesdec 176(%rcx), %xmm1 1077 jb DECB_LAST_4_2 1078 movdqu 224(%rcx), %xmm2 1079 aesdec 192(%rcx), %xmm1 1080 aesdec 208(%rcx), %xmm1 1081DECB_LAST_4_2: 1082 aesdeclast %xmm2, %xmm1 1083 movdqu %xmm1, (%rsi) 1084 addq $16, %rsi 1085 decq %r10 1086 jne DECB_LOOP_4_2 1087DECB_END_4: 1088 ret 1089 1090 1091 1092 1093/* 1094void AES_128_Key_Expansion(const unsigned char* userkey, 1095 unsigned char* key_schedule); 1096*/ 1097.align 16,0x90 1098#ifndef __APPLE__ 1099.globl AES_128_Key_Expansion 1100AES_128_Key_Expansion: 1101#else 1102.globl _AES_128_Key_Expansion 1103_AES_128_Key_Expansion: 1104#endif 1105# parameter 1: %rdi 1106# parameter 2: %rsi 1107movl $10, 240(%rsi) 1108 1109movdqu (%rdi), %xmm1 1110movdqa %xmm1, (%rsi) 1111 1112 1113ASSISTS: 1114aeskeygenassist $1, %xmm1, %xmm2 1115call PREPARE_ROUNDKEY_128 1116movdqa %xmm1, 16(%rsi) 1117aeskeygenassist $2, %xmm1, %xmm2 1118call PREPARE_ROUNDKEY_128 1119movdqa %xmm1, 32(%rsi) 1120aeskeygenassist $4, %xmm1, %xmm2 1121call PREPARE_ROUNDKEY_128 1122movdqa %xmm1, 48(%rsi) 1123aeskeygenassist $8, %xmm1, %xmm2 1124call PREPARE_ROUNDKEY_128 1125movdqa %xmm1, 64(%rsi) 1126aeskeygenassist $16, %xmm1, %xmm2 1127call PREPARE_ROUNDKEY_128 1128movdqa %xmm1, 80(%rsi) 1129aeskeygenassist $32, %xmm1, %xmm2 1130call PREPARE_ROUNDKEY_128 1131movdqa %xmm1, 96(%rsi) 1132aeskeygenassist $64, %xmm1, %xmm2 1133call PREPARE_ROUNDKEY_128 1134movdqa %xmm1, 112(%rsi) 1135aeskeygenassist $0x80, %xmm1, %xmm2 1136call PREPARE_ROUNDKEY_128 1137movdqa %xmm1, 128(%rsi) 1138aeskeygenassist $0x1b, %xmm1, %xmm2 1139call PREPARE_ROUNDKEY_128 1140movdqa %xmm1, 144(%rsi) 1141aeskeygenassist $0x36, %xmm1, %xmm2 1142call PREPARE_ROUNDKEY_128 1143movdqa %xmm1, 160(%rsi) 1144ret 1145 1146PREPARE_ROUNDKEY_128: 1147pshufd $255, %xmm2, %xmm2 1148movdqa %xmm1, %xmm3 1149pslldq $4, %xmm3 1150pxor %xmm3, %xmm1 1151pslldq $4, %xmm3 1152pxor %xmm3, %xmm1 1153pslldq $4, %xmm3 1154pxor %xmm3, %xmm1 1155pxor %xmm2, %xmm1 1156ret 1157 1158 1159/* 1160void AES_192_Key_Expansion (const unsigned char *userkey, 1161 unsigned char *key) 1162*/ 1163#ifndef __APPLE__ 1164.globl AES_192_Key_Expansion 1165AES_192_Key_Expansion: 1166#else 1167.globl _AES_192_Key_Expansion 1168_AES_192_Key_Expansion: 1169#endif 1170# parameter 1: %rdi 1171# parameter 2: %rsi 1172 1173movdqu (%rdi), %xmm1 1174movq 16(%rdi), %xmm3 1175movdqa %xmm1, (%rsi) 1176movdqa %xmm3, %xmm5 1177 1178aeskeygenassist $0x1, %xmm3, %xmm2 1179call PREPARE_ROUNDKEY_192 1180shufpd $0, %xmm1, %xmm5 1181movdqa %xmm5, 16(%rsi) 1182movdqa %xmm1, %xmm6 1183shufpd $1, %xmm3, %xmm6 1184movdqa %xmm6, 32(%rsi) 1185 1186aeskeygenassist $0x2, %xmm3, %xmm2 1187call PREPARE_ROUNDKEY_192 1188movdqa %xmm1, 48(%rsi) 1189movdqa %xmm3, %xmm5 1190 1191aeskeygenassist $0x4, %xmm3, %xmm2 1192call PREPARE_ROUNDKEY_192 1193shufpd $0, %xmm1, %xmm5 1194movdqa %xmm5, 64(%rsi) 1195movdqa %xmm1, %xmm6 1196shufpd $1, %xmm3, %xmm6 1197movdqa %xmm6, 80(%rsi) 1198 1199aeskeygenassist $0x8, %xmm3, %xmm2 1200call PREPARE_ROUNDKEY_192 1201movdqa %xmm1, 96(%rsi) 1202movdqa %xmm3, %xmm5 1203 1204aeskeygenassist $0x10, %xmm3, %xmm2 1205call PREPARE_ROUNDKEY_192 1206shufpd $0, %xmm1, %xmm5 1207movdqa %xmm5, 112(%rsi) 1208movdqa %xmm1, %xmm6 1209shufpd $1, %xmm3, %xmm6 1210movdqa %xmm6, 128(%rsi) 1211 1212aeskeygenassist $0x20, %xmm3, %xmm2 1213call PREPARE_ROUNDKEY_192 1214movdqa %xmm1, 144(%rsi) 1215movdqa %xmm3, %xmm5 1216 1217aeskeygenassist $0x40, %xmm3, %xmm2 1218call PREPARE_ROUNDKEY_192 1219shufpd $0, %xmm1, %xmm5 1220movdqa %xmm5, 160(%rsi) 1221movdqa %xmm1, %xmm6 1222shufpd $1, %xmm3, %xmm6 1223movdqa %xmm6, 176(%rsi) 1224 1225aeskeygenassist $0x80, %xmm3, %xmm2 1226call PREPARE_ROUNDKEY_192 1227movdqa %xmm1, 192(%rsi) 1228movdqa %xmm3, 208(%rsi) 1229ret 1230 1231PREPARE_ROUNDKEY_192: 1232pshufd $0x55, %xmm2, %xmm2 1233movdqu %xmm1, %xmm4 1234pslldq $4, %xmm4 1235pxor %xmm4, %xmm1 1236 1237pslldq $4, %xmm4 1238pxor %xmm4, %xmm1 1239pslldq $4, %xmm4 1240pxor %xmm4, %xmm1 1241pxor %xmm2, %xmm1 1242pshufd $0xff, %xmm1, %xmm2 1243movdqu %xmm3, %xmm4 1244pslldq $4, %xmm4 1245pxor %xmm4, %xmm3 1246pxor %xmm2, %xmm3 1247ret 1248 1249 1250/* 1251void AES_256_Key_Expansion (const unsigned char *userkey, 1252 unsigned char *key) 1253*/ 1254#ifndef __APPLE__ 1255.globl AES_256_Key_Expansion 1256AES_256_Key_Expansion: 1257#else 1258.globl _AES_256_Key_Expansion 1259_AES_256_Key_Expansion: 1260#endif 1261# parameter 1: %rdi 1262# parameter 2: %rsi 1263 1264movdqu (%rdi), %xmm1 1265movdqu 16(%rdi), %xmm3 1266movdqa %xmm1, (%rsi) 1267movdqa %xmm3, 16(%rsi) 1268 1269aeskeygenassist $0x1, %xmm3, %xmm2 1270call MAKE_RK256_a 1271movdqa %xmm1, 32(%rsi) 1272aeskeygenassist $0x0, %xmm1, %xmm2 1273call MAKE_RK256_b 1274movdqa %xmm3, 48(%rsi) 1275aeskeygenassist $0x2, %xmm3, %xmm2 1276call MAKE_RK256_a 1277movdqa %xmm1, 64(%rsi) 1278aeskeygenassist $0x0, %xmm1, %xmm2 1279call MAKE_RK256_b 1280movdqa %xmm3, 80(%rsi) 1281aeskeygenassist $0x4, %xmm3, %xmm2 1282call MAKE_RK256_a 1283movdqa %xmm1, 96(%rsi) 1284aeskeygenassist $0x0, %xmm1, %xmm2 1285call MAKE_RK256_b 1286movdqa %xmm3, 112(%rsi) 1287aeskeygenassist $0x8, %xmm3, %xmm2 1288call MAKE_RK256_a 1289movdqa %xmm1, 128(%rsi) 1290aeskeygenassist $0x0, %xmm1, %xmm2 1291call MAKE_RK256_b 1292movdqa %xmm3, 144(%rsi) 1293aeskeygenassist $0x10, %xmm3, %xmm2 1294call MAKE_RK256_a 1295movdqa %xmm1, 160(%rsi) 1296aeskeygenassist $0x0, %xmm1, %xmm2 1297call MAKE_RK256_b 1298movdqa %xmm3, 176(%rsi) 1299aeskeygenassist $0x20, %xmm3, %xmm2 1300call MAKE_RK256_a 1301movdqa %xmm1, 192(%rsi) 1302 1303aeskeygenassist $0x0, %xmm1, %xmm2 1304call MAKE_RK256_b 1305movdqa %xmm3, 208(%rsi) 1306aeskeygenassist $0x40, %xmm3, %xmm2 1307call MAKE_RK256_a 1308movdqa %xmm1, 224(%rsi) 1309 1310ret 1311 1312MAKE_RK256_a: 1313pshufd $0xff, %xmm2, %xmm2 1314movdqa %xmm1, %xmm4 1315pslldq $4, %xmm4 1316pxor %xmm4, %xmm1 1317pslldq $4, %xmm4 1318pxor %xmm4, %xmm1 1319pslldq $4, %xmm4 1320pxor %xmm4, %xmm1 1321pxor %xmm2, %xmm1 1322ret 1323 1324MAKE_RK256_b: 1325pshufd $0xaa, %xmm2, %xmm2 1326movdqa %xmm3, %xmm4 1327pslldq $4, %xmm4 1328pxor %xmm4, %xmm3 1329pslldq $4, %xmm4 1330pxor %xmm4, %xmm3 1331pslldq $4, %xmm4 1332pxor %xmm4, %xmm3 1333pxor %xmm2, %xmm3 1334ret 1335 1336#if defined(__linux__) && defined(__ELF__) 1337 .section .note.GNU-stack,"",%progbits 1338#endif 1339