1 ; WARNING: do not edit!
2 ; Generated from openssl/crypto/aes/asm/vpaes-x86_64.pl
4 ; Copyright 2011-2020 The OpenSSL Project Authors. All Rights Reserved.
6 ; Licensed under the OpenSSL license (the "License"). You may not use
7 ; this file except in compliance with the License. You can obtain a copy
8 ; in the file LICENSE in the source distribution or at
9 ; https://www.openssl.org/source/license.html
15 section .text code align=64
39 mov eax,DWORD[240+rdx]
41 movdqa xmm2,XMMWORD[$L$k_ipt]
43 movdqu xmm5,XMMWORD[r9]
47 movdqa xmm0,XMMWORD[(($L$k_ipt+16))]
52 lea r10,[$L$k_mc_backward]
65 movdqa xmm1,XMMWORD[((-64))+r10*1+r11]
67 movdqa xmm4,XMMWORD[r10*1+r11]
103 movdqu xmm5,XMMWORD[r9]
108 movdqa xmm4,XMMWORD[((-96))+r10]
109 movdqa xmm0,XMMWORD[((-80))+r10]
113 movdqa xmm1,XMMWORD[64+r10*1+r11]
130 mov eax,DWORD[240+rdx]
132 movdqa xmm2,XMMWORD[$L$k_dipt]
136 movdqu xmm5,XMMWORD[r9]
140 movdqa xmm0,XMMWORD[(($L$k_dipt+16))]
146 movdqa xmm5,XMMWORD[(($L$k_mc_forward+48))]
150 jmp NEAR $L$dec_entry
157 movdqa xmm4,XMMWORD[((-32))+r10]
158 movdqa xmm1,XMMWORD[((-16))+r10]
162 movdqa xmm4,XMMWORD[r10]
164 movdqa xmm1,XMMWORD[16+r10]
170 movdqa xmm4,XMMWORD[32+r10]
172 movdqa xmm1,XMMWORD[48+r10]
178 movdqa xmm4,XMMWORD[64+r10]
180 movdqa xmm1,XMMWORD[80+r10]
187 DB 102,15,58,15,237,12
211 movdqu xmm0,XMMWORD[r9]
216 movdqa xmm4,XMMWORD[96+r10]
219 movdqa xmm0,XMMWORD[112+r10]
220 movdqa xmm2,XMMWORD[((-352))+r11]
235 _vpaes_schedule_core:
243 movdqa xmm8,XMMWORD[$L$k_rcon]
244 movdqu xmm0,XMMWORD[rdi]
249 call _vpaes_schedule_transform
254 jnz NEAR $L$schedule_am_decrypting
257 movdqu XMMWORD[rdx],xmm0
258 jmp NEAR $L$schedule_go
260 $L$schedule_am_decrypting:
262 movdqa xmm1,XMMWORD[r10*1+r8]
264 movdqu XMMWORD[rdx],xmm3
269 ja NEAR $L$schedule_256
270 je NEAR $L$schedule_192
285 call _vpaes_schedule_round
287 jz NEAR $L$schedule_mangle_last
288 call _vpaes_schedule_mangle
289 jmp NEAR $L$oop_schedule_128
308 movdqu xmm0,XMMWORD[8+rdi]
309 call _vpaes_schedule_transform
316 call _vpaes_schedule_round
317 DB 102,15,58,15,198,8
318 call _vpaes_schedule_mangle
319 call _vpaes_schedule_192_smear
320 call _vpaes_schedule_mangle
321 call _vpaes_schedule_round
323 jz NEAR $L$schedule_mangle_last
324 call _vpaes_schedule_mangle
325 call _vpaes_schedule_192_smear
326 jmp NEAR $L$oop_schedule_192
340 movdqu xmm0,XMMWORD[16+rdi]
341 call _vpaes_schedule_transform
345 call _vpaes_schedule_mangle
349 call _vpaes_schedule_round
351 jz NEAR $L$schedule_mangle_last
352 call _vpaes_schedule_mangle
355 pshufd xmm0,xmm0,0xFF
358 call _vpaes_schedule_low_round
361 jmp NEAR $L$oop_schedule_256
375 $L$schedule_mangle_last:
377 lea r11,[$L$k_deskew]
379 jnz NEAR $L$schedule_mangle_last_dec
382 movdqa xmm1,XMMWORD[r10*1+r8]
387 $L$schedule_mangle_last_dec:
389 pxor xmm0,XMMWORD[$L$k_s63]
390 call _vpaes_schedule_transform
391 movdqu XMMWORD[rdx],xmm0
422 _vpaes_schedule_192_smear:
424 pshufd xmm1,xmm6,0x80
425 pshufd xmm0,xmm7,0xFE
455 _vpaes_schedule_round:
459 DB 102,65,15,58,15,200,15
460 DB 102,69,15,58,15,192,15
464 pshufd xmm0,xmm0,0xFF
465 DB 102,15,58,15,192,1
470 _vpaes_schedule_low_round:
478 pxor xmm7,XMMWORD[$L$k_s63]
524 _vpaes_schedule_transform:
530 movdqa xmm2,XMMWORD[r11]
532 movdqa xmm0,XMMWORD[16+r11]
564 _vpaes_schedule_mangle:
567 movdqa xmm5,XMMWORD[$L$k_mc_forward]
569 jnz NEAR $L$schedule_mangle_dec
573 pxor xmm4,XMMWORD[$L$k_s63]
581 jmp NEAR $L$schedule_mangle_both
583 $L$schedule_mangle_dec:
591 movdqa xmm2,XMMWORD[r11]
593 movdqa xmm3,XMMWORD[16+r11]
598 movdqa xmm2,XMMWORD[32+r11]
601 movdqa xmm3,XMMWORD[48+r11]
606 movdqa xmm2,XMMWORD[64+r11]
609 movdqa xmm3,XMMWORD[80+r11]
614 movdqa xmm2,XMMWORD[96+r11]
617 movdqa xmm3,XMMWORD[112+r11]
623 $L$schedule_mangle_both:
624 movdqa xmm1,XMMWORD[r10*1+r8]
628 movdqu XMMWORD[rdx],xmm3
636 global vpaes_set_encrypt_key
639 vpaes_set_encrypt_key:
640 mov QWORD[8+rsp],rdi ;WIN64 prologue
641 mov QWORD[16+rsp],rsi
643 $L$SEH_begin_vpaes_set_encrypt_key:
650 lea rsp,[((-184))+rsp]
651 movaps XMMWORD[16+rsp],xmm6
652 movaps XMMWORD[32+rsp],xmm7
653 movaps XMMWORD[48+rsp],xmm8
654 movaps XMMWORD[64+rsp],xmm9
655 movaps XMMWORD[80+rsp],xmm10
656 movaps XMMWORD[96+rsp],xmm11
657 movaps XMMWORD[112+rsp],xmm12
658 movaps XMMWORD[128+rsp],xmm13
659 movaps XMMWORD[144+rsp],xmm14
660 movaps XMMWORD[160+rsp],xmm15
665 mov DWORD[240+rdx],eax
669 call _vpaes_schedule_core
670 movaps xmm6,XMMWORD[16+rsp]
671 movaps xmm7,XMMWORD[32+rsp]
672 movaps xmm8,XMMWORD[48+rsp]
673 movaps xmm9,XMMWORD[64+rsp]
674 movaps xmm10,XMMWORD[80+rsp]
675 movaps xmm11,XMMWORD[96+rsp]
676 movaps xmm12,XMMWORD[112+rsp]
677 movaps xmm13,XMMWORD[128+rsp]
678 movaps xmm14,XMMWORD[144+rsp]
679 movaps xmm15,XMMWORD[160+rsp]
683 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
684 mov rsi,QWORD[16+rsp]
687 $L$SEH_end_vpaes_set_encrypt_key:
689 global vpaes_set_decrypt_key
692 vpaes_set_decrypt_key:
693 mov QWORD[8+rsp],rdi ;WIN64 prologue
694 mov QWORD[16+rsp],rsi
696 $L$SEH_begin_vpaes_set_decrypt_key:
703 lea rsp,[((-184))+rsp]
704 movaps XMMWORD[16+rsp],xmm6
705 movaps XMMWORD[32+rsp],xmm7
706 movaps XMMWORD[48+rsp],xmm8
707 movaps XMMWORD[64+rsp],xmm9
708 movaps XMMWORD[80+rsp],xmm10
709 movaps XMMWORD[96+rsp],xmm11
710 movaps XMMWORD[112+rsp],xmm12
711 movaps XMMWORD[128+rsp],xmm13
712 movaps XMMWORD[144+rsp],xmm14
713 movaps XMMWORD[160+rsp],xmm15
718 mov DWORD[240+rdx],eax
720 lea rdx,[16+rax*1+rdx]
727 call _vpaes_schedule_core
728 movaps xmm6,XMMWORD[16+rsp]
729 movaps xmm7,XMMWORD[32+rsp]
730 movaps xmm8,XMMWORD[48+rsp]
731 movaps xmm9,XMMWORD[64+rsp]
732 movaps xmm10,XMMWORD[80+rsp]
733 movaps xmm11,XMMWORD[96+rsp]
734 movaps xmm12,XMMWORD[112+rsp]
735 movaps xmm13,XMMWORD[128+rsp]
736 movaps xmm14,XMMWORD[144+rsp]
737 movaps xmm15,XMMWORD[160+rsp]
741 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
742 mov rsi,QWORD[16+rsp]
745 $L$SEH_end_vpaes_set_decrypt_key:
751 mov QWORD[8+rsp],rdi ;WIN64 prologue
752 mov QWORD[16+rsp],rsi
754 $L$SEH_begin_vpaes_encrypt:
761 lea rsp,[((-184))+rsp]
762 movaps XMMWORD[16+rsp],xmm6
763 movaps XMMWORD[32+rsp],xmm7
764 movaps XMMWORD[48+rsp],xmm8
765 movaps XMMWORD[64+rsp],xmm9
766 movaps XMMWORD[80+rsp],xmm10
767 movaps XMMWORD[96+rsp],xmm11
768 movaps XMMWORD[112+rsp],xmm12
769 movaps XMMWORD[128+rsp],xmm13
770 movaps XMMWORD[144+rsp],xmm14
771 movaps XMMWORD[160+rsp],xmm15
773 movdqu xmm0,XMMWORD[rdi]
775 call _vpaes_encrypt_core
776 movdqu XMMWORD[rsi],xmm0
777 movaps xmm6,XMMWORD[16+rsp]
778 movaps xmm7,XMMWORD[32+rsp]
779 movaps xmm8,XMMWORD[48+rsp]
780 movaps xmm9,XMMWORD[64+rsp]
781 movaps xmm10,XMMWORD[80+rsp]
782 movaps xmm11,XMMWORD[96+rsp]
783 movaps xmm12,XMMWORD[112+rsp]
784 movaps xmm13,XMMWORD[128+rsp]
785 movaps xmm14,XMMWORD[144+rsp]
786 movaps xmm15,XMMWORD[160+rsp]
789 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
790 mov rsi,QWORD[16+rsp]
793 $L$SEH_end_vpaes_encrypt:
799 mov QWORD[8+rsp],rdi ;WIN64 prologue
800 mov QWORD[16+rsp],rsi
802 $L$SEH_begin_vpaes_decrypt:
809 lea rsp,[((-184))+rsp]
810 movaps XMMWORD[16+rsp],xmm6
811 movaps XMMWORD[32+rsp],xmm7
812 movaps XMMWORD[48+rsp],xmm8
813 movaps XMMWORD[64+rsp],xmm9
814 movaps XMMWORD[80+rsp],xmm10
815 movaps XMMWORD[96+rsp],xmm11
816 movaps XMMWORD[112+rsp],xmm12
817 movaps XMMWORD[128+rsp],xmm13
818 movaps XMMWORD[144+rsp],xmm14
819 movaps XMMWORD[160+rsp],xmm15
821 movdqu xmm0,XMMWORD[rdi]
823 call _vpaes_decrypt_core
824 movdqu XMMWORD[rsi],xmm0
825 movaps xmm6,XMMWORD[16+rsp]
826 movaps xmm7,XMMWORD[32+rsp]
827 movaps xmm8,XMMWORD[48+rsp]
828 movaps xmm9,XMMWORD[64+rsp]
829 movaps xmm10,XMMWORD[80+rsp]
830 movaps xmm11,XMMWORD[96+rsp]
831 movaps xmm12,XMMWORD[112+rsp]
832 movaps xmm13,XMMWORD[128+rsp]
833 movaps xmm14,XMMWORD[144+rsp]
834 movaps xmm15,XMMWORD[160+rsp]
837 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
838 mov rsi,QWORD[16+rsp]
841 $L$SEH_end_vpaes_decrypt:
842 global vpaes_cbc_encrypt
846 mov QWORD[8+rsp],rdi ;WIN64 prologue
847 mov QWORD[16+rsp],rsi
849 $L$SEH_begin_vpaes_cbc_encrypt:
862 lea rsp,[((-184))+rsp]
863 movaps XMMWORD[16+rsp],xmm6
864 movaps XMMWORD[32+rsp],xmm7
865 movaps XMMWORD[48+rsp],xmm8
866 movaps XMMWORD[64+rsp],xmm9
867 movaps XMMWORD[80+rsp],xmm10
868 movaps XMMWORD[96+rsp],xmm11
869 movaps XMMWORD[112+rsp],xmm12
870 movaps XMMWORD[128+rsp],xmm13
871 movaps XMMWORD[144+rsp],xmm14
872 movaps XMMWORD[160+rsp],xmm15
874 movdqu xmm6,XMMWORD[r8]
878 je NEAR $L$cbc_dec_loop
879 jmp NEAR $L$cbc_enc_loop
882 movdqu xmm0,XMMWORD[rdi]
884 call _vpaes_encrypt_core
886 movdqu XMMWORD[rdi*1+rsi],xmm0
889 jnc NEAR $L$cbc_enc_loop
893 movdqu xmm0,XMMWORD[rdi]
895 call _vpaes_decrypt_core
898 movdqu XMMWORD[rdi*1+rsi],xmm0
901 jnc NEAR $L$cbc_dec_loop
903 movdqu XMMWORD[r8],xmm6
904 movaps xmm6,XMMWORD[16+rsp]
905 movaps xmm7,XMMWORD[32+rsp]
906 movaps xmm8,XMMWORD[48+rsp]
907 movaps xmm9,XMMWORD[64+rsp]
908 movaps xmm10,XMMWORD[80+rsp]
909 movaps xmm11,XMMWORD[96+rsp]
910 movaps xmm12,XMMWORD[112+rsp]
911 movaps xmm13,XMMWORD[128+rsp]
912 movaps xmm14,XMMWORD[144+rsp]
913 movaps xmm15,XMMWORD[160+rsp]
917 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
918 mov rsi,QWORD[16+rsp]
921 $L$SEH_end_vpaes_cbc_encrypt:
933 movdqa xmm10,XMMWORD[((-32))+r10]
934 movdqa xmm11,XMMWORD[((-16))+r10]
935 movdqa xmm9,XMMWORD[r10]
936 movdqa xmm13,XMMWORD[48+r10]
937 movdqa xmm12,XMMWORD[64+r10]
938 movdqa xmm15,XMMWORD[80+r10]
939 movdqa xmm14,XMMWORD[96+r10]
952 DQ 0x0E05060F0D080180,0x040703090A0B0C02
953 DQ 0x01040A060F0B0780,0x030D0E0C02050809
956 DQ 0x0F0F0F0F0F0F0F0F,0x0F0F0F0F0F0F0F0F
959 DQ 0xC2B2E8985A2A7000,0xCABAE09052227808
960 DQ 0x4C01307D317C4D00,0xCD80B1FCB0FDCC81
963 DQ 0xB19BE18FCB503E00,0xA5DF7A6E142AF544
964 DQ 0x3618D415FAE22300,0x3BF7CCC10D2ED9EF
966 DQ 0xE27A93C60B712400,0x5EB7E955BC982FCD
967 DQ 0x69EB88400AE12900,0xC2A163C8AB82234A
969 DQ 0xD0D26D176FBDC700,0x15AABF7AC502A878
970 DQ 0xCFE474A55FBB6A00,0x8E1E90D1412B35FA
973 DQ 0x0407060500030201,0x0C0F0E0D080B0A09
974 DQ 0x080B0A0904070605,0x000302010C0F0E0D
975 DQ 0x0C0F0E0D080B0A09,0x0407060500030201
976 DQ 0x000302010C0F0E0D,0x080B0A0904070605
979 DQ 0x0605040702010003,0x0E0D0C0F0A09080B
980 DQ 0x020100030E0D0C0F,0x0A09080B06050407
981 DQ 0x0E0D0C0F0A09080B,0x0605040702010003
982 DQ 0x0A09080B06050407,0x020100030E0D0C0F
985 DQ 0x0706050403020100,0x0F0E0D0C0B0A0908
986 DQ 0x030E09040F0A0500,0x0B06010C07020D08
987 DQ 0x0F060D040B020900,0x070E050C030A0108
988 DQ 0x0B0E0104070A0D00,0x0306090C0F020508
991 DQ 0x1F8391B9AF9DEEB6,0x702A98084D7C7D81
994 DQ 0x5B5B5B5B5B5B5B5B,0x5B5B5B5B5B5B5B5B
997 DQ 0xFF9F4929D6B66000,0xF7974121DEBE6808
998 DQ 0x01EDBD5150BCEC00,0xE10D5DB1B05C0CE0
1001 DQ 0x07E4A34047A4E300,0x1DFEB95A5DBEF91A
1002 DQ 0x5F36B5DC83EA6900,0x2841C2ABF49D1E77
1009 DQ 0xFEB91A5DA3E44700,0x0740E3A45A1DBEF9
1010 DQ 0x41C277F4B5368300,0x5FDC69EAAB289D1E
1012 DQ 0x9A4FCA1F8550D500,0x03D653861CC94C99
1013 DQ 0x115BEDA7B6FC4A00,0xD993256F7E3482C8
1015 DQ 0xD5031CCA1FC9D600,0x53859A4C994F5086
1016 DQ 0xA23196054FDC7BE8,0xCD5EF96A20B31487
1018 DQ 0xB6116FC87ED9A700,0x4AED933482255BFC
1019 DQ 0x4576516227143300,0x8BB89FACE9DAFDCE
1026 DQ 0x0F505B040B545F00,0x154A411E114E451A
1027 DQ 0x86E383E660056500,0x12771772F491F194
1030 DQ 0x851C03539A86D600,0xCAD51F504F994CC9
1031 DQ 0xC03B1789ECD74900,0x725E2C9EB2FBA565
1033 DQ 0x7D57CCDFE6B1A200,0xF56E9B13882A4439
1034 DQ 0x3CE2FAF724C6CB00,0x2931180D15DEEFD3
1036 DQ 0xD022649296B44200,0x602646F6B0F2D404
1037 DQ 0xC19498A6CD596700,0xF3FF0C3E3255AA6B
1039 DQ 0x46F2929626D4D000,0x2242600464B4F6B0
1040 DQ 0x0C55A6CDFFAAC100,0x9467F36B98593E32
1042 DQ 0x1387EA537EF94000,0xC7AA6DB9D4943E2D
1043 DQ 0x12D7560F93441D00,0xCA4B8159D8C58E9C
1044 DB 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
1045 DB 111,110,32,65,69,83,32,102,111,114,32,120,56,54,95,54
1046 DB 52,47,83,83,83,69,51,44,32,77,105,107,101,32,72,97
1047 DB 109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32
1048 DB 85,110,105,118,101,114,115,105,116,121,41,0
1051 EXTERN __imp_RtlVirtualUnwind
1066 mov rax,QWORD[120+r8]
1067 mov rbx,QWORD[248+r8]
1070 mov r11,QWORD[56+r9]
1075 jb NEAR $L$in_prologue
1077 mov rax,QWORD[152+r8]
1079 mov r10d,DWORD[4+r11]
1082 jae NEAR $L$in_prologue
1091 mov rdi,QWORD[8+rax]
1092 mov rsi,QWORD[16+rax]
1093 mov QWORD[152+r8],rax
1094 mov QWORD[168+r8],rsi
1095 mov QWORD[176+r8],rdi
1097 mov rdi,QWORD[40+r9]
1104 mov rdx,QWORD[8+rsi]
1106 mov r9,QWORD[16+rsi]
1107 mov r10,QWORD[40+rsi]
1110 mov QWORD[32+rsp],r10
1111 mov QWORD[40+rsp],r11
1112 mov QWORD[48+rsp],r12
1113 mov QWORD[56+rsp],rcx
1114 call QWORD[__imp_RtlVirtualUnwind]
1127 DB 0F3h,0C3h ;repret
1130 section .pdata rdata align=4
1132 DD $L$SEH_begin_vpaes_set_encrypt_key wrt ..imagebase
1133 DD $L$SEH_end_vpaes_set_encrypt_key wrt ..imagebase
1134 DD $L$SEH_info_vpaes_set_encrypt_key wrt ..imagebase
1136 DD $L$SEH_begin_vpaes_set_decrypt_key wrt ..imagebase
1137 DD $L$SEH_end_vpaes_set_decrypt_key wrt ..imagebase
1138 DD $L$SEH_info_vpaes_set_decrypt_key wrt ..imagebase
1140 DD $L$SEH_begin_vpaes_encrypt wrt ..imagebase
1141 DD $L$SEH_end_vpaes_encrypt wrt ..imagebase
1142 DD $L$SEH_info_vpaes_encrypt wrt ..imagebase
1144 DD $L$SEH_begin_vpaes_decrypt wrt ..imagebase
1145 DD $L$SEH_end_vpaes_decrypt wrt ..imagebase
1146 DD $L$SEH_info_vpaes_decrypt wrt ..imagebase
1148 DD $L$SEH_begin_vpaes_cbc_encrypt wrt ..imagebase
1149 DD $L$SEH_end_vpaes_cbc_encrypt wrt ..imagebase
1150 DD $L$SEH_info_vpaes_cbc_encrypt wrt ..imagebase
1152 section .xdata rdata align=8
1154 $L$SEH_info_vpaes_set_encrypt_key:
1156 DD se_handler wrt ..imagebase
1157 DD $L$enc_key_body wrt ..imagebase,$L$enc_key_epilogue wrt ..imagebase
1158 $L$SEH_info_vpaes_set_decrypt_key:
1160 DD se_handler wrt ..imagebase
1161 DD $L$dec_key_body wrt ..imagebase,$L$dec_key_epilogue wrt ..imagebase
1162 $L$SEH_info_vpaes_encrypt:
1164 DD se_handler wrt ..imagebase
1165 DD $L$enc_body wrt ..imagebase,$L$enc_epilogue wrt ..imagebase
1166 $L$SEH_info_vpaes_decrypt:
1168 DD se_handler wrt ..imagebase
1169 DD $L$dec_body wrt ..imagebase,$L$dec_epilogue wrt ..imagebase
1170 $L$SEH_info_vpaes_cbc_encrypt:
1172 DD se_handler wrt ..imagebase
1173 DD $L$cbc_body wrt ..imagebase,$L$cbc_epilogue wrt ..imagebase