123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311 |
- ; This file is generated from a similarly-named Perl script in the BoringSSL
- ; source tree. Do not edit by hand.
- default rel
- %define XMMWORD
- %define YMMWORD
- %define ZMMWORD
- section .text code align=64
- EXTERN GFp_ia32cap_P
- global GFp_aes_hw_encrypt
- ALIGN 16
- GFp_aes_hw_encrypt:
- movups xmm2,XMMWORD[rcx]
- mov eax,DWORD[240+r8]
- movups xmm0,XMMWORD[r8]
- movups xmm1,XMMWORD[16+r8]
- lea r8,[32+r8]
- xorps xmm2,xmm0
- $L$oop_enc1_1:
- DB 102,15,56,220,209
- dec eax
- movups xmm1,XMMWORD[r8]
- lea r8,[16+r8]
- jnz NEAR $L$oop_enc1_1
- DB 102,15,56,221,209
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- movups XMMWORD[rdx],xmm2
- pxor xmm2,xmm2
- DB 0F3h,0C3h ;repret
- ALIGN 16
- _aesni_encrypt2:
- movups xmm0,XMMWORD[rcx]
- shl eax,4
- movups xmm1,XMMWORD[16+rcx]
- xorps xmm2,xmm0
- xorps xmm3,xmm0
- movups xmm0,XMMWORD[32+rcx]
- lea rcx,[32+rax*1+rcx]
- neg rax
- add rax,16
- $L$enc_loop2:
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- movups xmm1,XMMWORD[rax*1+rcx]
- add rax,32
- DB 102,15,56,220,208
- DB 102,15,56,220,216
- movups xmm0,XMMWORD[((-16))+rax*1+rcx]
- jnz NEAR $L$enc_loop2
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- DB 102,15,56,221,208
- DB 102,15,56,221,216
- DB 0F3h,0C3h ;repret
- ALIGN 16
- _aesni_encrypt3:
- movups xmm0,XMMWORD[rcx]
- shl eax,4
- movups xmm1,XMMWORD[16+rcx]
- xorps xmm2,xmm0
- xorps xmm3,xmm0
- xorps xmm4,xmm0
- movups xmm0,XMMWORD[32+rcx]
- lea rcx,[32+rax*1+rcx]
- neg rax
- add rax,16
- $L$enc_loop3:
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- DB 102,15,56,220,225
- movups xmm1,XMMWORD[rax*1+rcx]
- add rax,32
- DB 102,15,56,220,208
- DB 102,15,56,220,216
- DB 102,15,56,220,224
- movups xmm0,XMMWORD[((-16))+rax*1+rcx]
- jnz NEAR $L$enc_loop3
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- DB 102,15,56,220,225
- DB 102,15,56,221,208
- DB 102,15,56,221,216
- DB 102,15,56,221,224
- DB 0F3h,0C3h ;repret
- ALIGN 16
- _aesni_encrypt4:
- movups xmm0,XMMWORD[rcx]
- shl eax,4
- movups xmm1,XMMWORD[16+rcx]
- xorps xmm2,xmm0
- xorps xmm3,xmm0
- xorps xmm4,xmm0
- xorps xmm5,xmm0
- movups xmm0,XMMWORD[32+rcx]
- lea rcx,[32+rax*1+rcx]
- neg rax
- DB 0x0f,0x1f,0x00
- add rax,16
- $L$enc_loop4:
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- DB 102,15,56,220,225
- DB 102,15,56,220,233
- movups xmm1,XMMWORD[rax*1+rcx]
- add rax,32
- DB 102,15,56,220,208
- DB 102,15,56,220,216
- DB 102,15,56,220,224
- DB 102,15,56,220,232
- movups xmm0,XMMWORD[((-16))+rax*1+rcx]
- jnz NEAR $L$enc_loop4
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- DB 102,15,56,220,225
- DB 102,15,56,220,233
- DB 102,15,56,221,208
- DB 102,15,56,221,216
- DB 102,15,56,221,224
- DB 102,15,56,221,232
- DB 0F3h,0C3h ;repret
- ALIGN 16
- _aesni_encrypt6:
- movups xmm0,XMMWORD[rcx]
- shl eax,4
- movups xmm1,XMMWORD[16+rcx]
- xorps xmm2,xmm0
- pxor xmm3,xmm0
- pxor xmm4,xmm0
- DB 102,15,56,220,209
- lea rcx,[32+rax*1+rcx]
- neg rax
- DB 102,15,56,220,217
- pxor xmm5,xmm0
- pxor xmm6,xmm0
- DB 102,15,56,220,225
- pxor xmm7,xmm0
- movups xmm0,XMMWORD[rax*1+rcx]
- add rax,16
- jmp NEAR $L$enc_loop6_enter
- ALIGN 16
- $L$enc_loop6:
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- DB 102,15,56,220,225
- $L$enc_loop6_enter:
- DB 102,15,56,220,233
- DB 102,15,56,220,241
- DB 102,15,56,220,249
- movups xmm1,XMMWORD[rax*1+rcx]
- add rax,32
- DB 102,15,56,220,208
- DB 102,15,56,220,216
- DB 102,15,56,220,224
- DB 102,15,56,220,232
- DB 102,15,56,220,240
- DB 102,15,56,220,248
- movups xmm0,XMMWORD[((-16))+rax*1+rcx]
- jnz NEAR $L$enc_loop6
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- DB 102,15,56,220,225
- DB 102,15,56,220,233
- DB 102,15,56,220,241
- DB 102,15,56,220,249
- DB 102,15,56,221,208
- DB 102,15,56,221,216
- DB 102,15,56,221,224
- DB 102,15,56,221,232
- DB 102,15,56,221,240
- DB 102,15,56,221,248
- DB 0F3h,0C3h ;repret
- ALIGN 16
- _aesni_encrypt8:
- movups xmm0,XMMWORD[rcx]
- shl eax,4
- movups xmm1,XMMWORD[16+rcx]
- xorps xmm2,xmm0
- xorps xmm3,xmm0
- pxor xmm4,xmm0
- pxor xmm5,xmm0
- pxor xmm6,xmm0
- lea rcx,[32+rax*1+rcx]
- neg rax
- DB 102,15,56,220,209
- pxor xmm7,xmm0
- pxor xmm8,xmm0
- DB 102,15,56,220,217
- pxor xmm9,xmm0
- movups xmm0,XMMWORD[rax*1+rcx]
- add rax,16
- jmp NEAR $L$enc_loop8_inner
- ALIGN 16
- $L$enc_loop8:
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- $L$enc_loop8_inner:
- DB 102,15,56,220,225
- DB 102,15,56,220,233
- DB 102,15,56,220,241
- DB 102,15,56,220,249
- DB 102,68,15,56,220,193
- DB 102,68,15,56,220,201
- $L$enc_loop8_enter:
- movups xmm1,XMMWORD[rax*1+rcx]
- add rax,32
- DB 102,15,56,220,208
- DB 102,15,56,220,216
- DB 102,15,56,220,224
- DB 102,15,56,220,232
- DB 102,15,56,220,240
- DB 102,15,56,220,248
- DB 102,68,15,56,220,192
- DB 102,68,15,56,220,200
- movups xmm0,XMMWORD[((-16))+rax*1+rcx]
- jnz NEAR $L$enc_loop8
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- DB 102,15,56,220,225
- DB 102,15,56,220,233
- DB 102,15,56,220,241
- DB 102,15,56,220,249
- DB 102,68,15,56,220,193
- DB 102,68,15,56,220,201
- DB 102,15,56,221,208
- DB 102,15,56,221,216
- DB 102,15,56,221,224
- DB 102,15,56,221,232
- DB 102,15,56,221,240
- DB 102,15,56,221,248
- DB 102,68,15,56,221,192
- DB 102,68,15,56,221,200
- DB 0F3h,0C3h ;repret
- global GFp_aes_hw_ctr32_encrypt_blocks
- ALIGN 16
- GFp_aes_hw_ctr32_encrypt_blocks:
- mov QWORD[8+rsp],rdi ;WIN64 prologue
- mov QWORD[16+rsp],rsi
- mov rax,rsp
- $L$SEH_begin_GFp_aes_hw_ctr32_encrypt_blocks:
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD[40+rsp]
- cmp rdx,1
- jne NEAR $L$ctr32_bulk
- movups xmm2,XMMWORD[r8]
- movups xmm3,XMMWORD[rdi]
- mov edx,DWORD[240+rcx]
- movups xmm0,XMMWORD[rcx]
- movups xmm1,XMMWORD[16+rcx]
- lea rcx,[32+rcx]
- xorps xmm2,xmm0
- $L$oop_enc1_2:
- DB 102,15,56,220,209
- dec edx
- movups xmm1,XMMWORD[rcx]
- lea rcx,[16+rcx]
- jnz NEAR $L$oop_enc1_2
- DB 102,15,56,221,209
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- xorps xmm2,xmm3
- pxor xmm3,xmm3
- movups XMMWORD[rsi],xmm2
- xorps xmm2,xmm2
- jmp NEAR $L$ctr32_epilogue
- ALIGN 16
- $L$ctr32_bulk:
- lea r11,[rsp]
- push rbp
- sub rsp,288
- and rsp,-16
- movaps XMMWORD[(-168)+r11],xmm6
- movaps XMMWORD[(-152)+r11],xmm7
- movaps XMMWORD[(-136)+r11],xmm8
- movaps XMMWORD[(-120)+r11],xmm9
- movaps XMMWORD[(-104)+r11],xmm10
- movaps XMMWORD[(-88)+r11],xmm11
- movaps XMMWORD[(-72)+r11],xmm12
- movaps XMMWORD[(-56)+r11],xmm13
- movaps XMMWORD[(-40)+r11],xmm14
- movaps XMMWORD[(-24)+r11],xmm15
- $L$ctr32_body:
- movdqu xmm2,XMMWORD[r8]
- movdqu xmm0,XMMWORD[rcx]
- mov r8d,DWORD[12+r8]
- pxor xmm2,xmm0
- mov ebp,DWORD[12+rcx]
- movdqa XMMWORD[rsp],xmm2
- bswap r8d
- movdqa xmm3,xmm2
- movdqa xmm4,xmm2
- movdqa xmm5,xmm2
- movdqa XMMWORD[64+rsp],xmm2
- movdqa XMMWORD[80+rsp],xmm2
- movdqa XMMWORD[96+rsp],xmm2
- mov r10,rdx
- movdqa XMMWORD[112+rsp],xmm2
- lea rax,[1+r8]
- lea rdx,[2+r8]
- bswap eax
- bswap edx
- xor eax,ebp
- xor edx,ebp
- DB 102,15,58,34,216,3
- lea rax,[3+r8]
- movdqa XMMWORD[16+rsp],xmm3
- DB 102,15,58,34,226,3
- bswap eax
- mov rdx,r10
- lea r10,[4+r8]
- movdqa XMMWORD[32+rsp],xmm4
- xor eax,ebp
- bswap r10d
- DB 102,15,58,34,232,3
- xor r10d,ebp
- movdqa XMMWORD[48+rsp],xmm5
- lea r9,[5+r8]
- mov DWORD[((64+12))+rsp],r10d
- bswap r9d
- lea r10,[6+r8]
- mov eax,DWORD[240+rcx]
- xor r9d,ebp
- bswap r10d
- mov DWORD[((80+12))+rsp],r9d
- xor r10d,ebp
- lea r9,[7+r8]
- mov DWORD[((96+12))+rsp],r10d
- bswap r9d
- lea r10,[GFp_ia32cap_P]
- mov r10d,DWORD[4+r10]
- xor r9d,ebp
- and r10d,71303168
- mov DWORD[((112+12))+rsp],r9d
- movups xmm1,XMMWORD[16+rcx]
- movdqa xmm6,XMMWORD[64+rsp]
- movdqa xmm7,XMMWORD[80+rsp]
- cmp rdx,8
- jb NEAR $L$ctr32_tail
- sub rdx,6
- cmp r10d,4194304
- je NEAR $L$ctr32_6x
- lea rcx,[128+rcx]
- sub rdx,2
- jmp NEAR $L$ctr32_loop8
- ALIGN 16
- $L$ctr32_6x:
- shl eax,4
- mov r10d,48
- bswap ebp
- lea rcx,[32+rax*1+rcx]
- sub r10,rax
- jmp NEAR $L$ctr32_loop6
- ALIGN 16
- $L$ctr32_loop6:
- add r8d,6
- movups xmm0,XMMWORD[((-48))+r10*1+rcx]
- DB 102,15,56,220,209
- mov eax,r8d
- xor eax,ebp
- DB 102,15,56,220,217
- DB 0x0f,0x38,0xf1,0x44,0x24,12
- lea eax,[1+r8]
- DB 102,15,56,220,225
- xor eax,ebp
- DB 0x0f,0x38,0xf1,0x44,0x24,28
- DB 102,15,56,220,233
- lea eax,[2+r8]
- xor eax,ebp
- DB 102,15,56,220,241
- DB 0x0f,0x38,0xf1,0x44,0x24,44
- lea eax,[3+r8]
- DB 102,15,56,220,249
- movups xmm1,XMMWORD[((-32))+r10*1+rcx]
- xor eax,ebp
- DB 102,15,56,220,208
- DB 0x0f,0x38,0xf1,0x44,0x24,60
- lea eax,[4+r8]
- DB 102,15,56,220,216
- xor eax,ebp
- DB 0x0f,0x38,0xf1,0x44,0x24,76
- DB 102,15,56,220,224
- lea eax,[5+r8]
- xor eax,ebp
- DB 102,15,56,220,232
- DB 0x0f,0x38,0xf1,0x44,0x24,92
- mov rax,r10
- DB 102,15,56,220,240
- DB 102,15,56,220,248
- movups xmm0,XMMWORD[((-16))+r10*1+rcx]
- call $L$enc_loop6
- movdqu xmm8,XMMWORD[rdi]
- movdqu xmm9,XMMWORD[16+rdi]
- movdqu xmm10,XMMWORD[32+rdi]
- movdqu xmm11,XMMWORD[48+rdi]
- movdqu xmm12,XMMWORD[64+rdi]
- movdqu xmm13,XMMWORD[80+rdi]
- lea rdi,[96+rdi]
- movups xmm1,XMMWORD[((-64))+r10*1+rcx]
- pxor xmm8,xmm2
- movaps xmm2,XMMWORD[rsp]
- pxor xmm9,xmm3
- movaps xmm3,XMMWORD[16+rsp]
- pxor xmm10,xmm4
- movaps xmm4,XMMWORD[32+rsp]
- pxor xmm11,xmm5
- movaps xmm5,XMMWORD[48+rsp]
- pxor xmm12,xmm6
- movaps xmm6,XMMWORD[64+rsp]
- pxor xmm13,xmm7
- movaps xmm7,XMMWORD[80+rsp]
- movdqu XMMWORD[rsi],xmm8
- movdqu XMMWORD[16+rsi],xmm9
- movdqu XMMWORD[32+rsi],xmm10
- movdqu XMMWORD[48+rsi],xmm11
- movdqu XMMWORD[64+rsi],xmm12
- movdqu XMMWORD[80+rsi],xmm13
- lea rsi,[96+rsi]
- sub rdx,6
- jnc NEAR $L$ctr32_loop6
- add rdx,6
- jz NEAR $L$ctr32_done
- lea eax,[((-48))+r10]
- lea rcx,[((-80))+r10*1+rcx]
- neg eax
- shr eax,4
- jmp NEAR $L$ctr32_tail
- ALIGN 32
- $L$ctr32_loop8:
- add r8d,8
- movdqa xmm8,XMMWORD[96+rsp]
- DB 102,15,56,220,209
- mov r9d,r8d
- movdqa xmm9,XMMWORD[112+rsp]
- DB 102,15,56,220,217
- bswap r9d
- movups xmm0,XMMWORD[((32-128))+rcx]
- DB 102,15,56,220,225
- xor r9d,ebp
- nop
- DB 102,15,56,220,233
- mov DWORD[((0+12))+rsp],r9d
- lea r9,[1+r8]
- DB 102,15,56,220,241
- DB 102,15,56,220,249
- DB 102,68,15,56,220,193
- DB 102,68,15,56,220,201
- movups xmm1,XMMWORD[((48-128))+rcx]
- bswap r9d
- DB 102,15,56,220,208
- DB 102,15,56,220,216
- xor r9d,ebp
- DB 0x66,0x90
- DB 102,15,56,220,224
- DB 102,15,56,220,232
- mov DWORD[((16+12))+rsp],r9d
- lea r9,[2+r8]
- DB 102,15,56,220,240
- DB 102,15,56,220,248
- DB 102,68,15,56,220,192
- DB 102,68,15,56,220,200
- movups xmm0,XMMWORD[((64-128))+rcx]
- bswap r9d
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- xor r9d,ebp
- DB 0x66,0x90
- DB 102,15,56,220,225
- DB 102,15,56,220,233
- mov DWORD[((32+12))+rsp],r9d
- lea r9,[3+r8]
- DB 102,15,56,220,241
- DB 102,15,56,220,249
- DB 102,68,15,56,220,193
- DB 102,68,15,56,220,201
- movups xmm1,XMMWORD[((80-128))+rcx]
- bswap r9d
- DB 102,15,56,220,208
- DB 102,15,56,220,216
- xor r9d,ebp
- DB 0x66,0x90
- DB 102,15,56,220,224
- DB 102,15,56,220,232
- mov DWORD[((48+12))+rsp],r9d
- lea r9,[4+r8]
- DB 102,15,56,220,240
- DB 102,15,56,220,248
- DB 102,68,15,56,220,192
- DB 102,68,15,56,220,200
- movups xmm0,XMMWORD[((96-128))+rcx]
- bswap r9d
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- xor r9d,ebp
- DB 0x66,0x90
- DB 102,15,56,220,225
- DB 102,15,56,220,233
- mov DWORD[((64+12))+rsp],r9d
- lea r9,[5+r8]
- DB 102,15,56,220,241
- DB 102,15,56,220,249
- DB 102,68,15,56,220,193
- DB 102,68,15,56,220,201
- movups xmm1,XMMWORD[((112-128))+rcx]
- bswap r9d
- DB 102,15,56,220,208
- DB 102,15,56,220,216
- xor r9d,ebp
- DB 0x66,0x90
- DB 102,15,56,220,224
- DB 102,15,56,220,232
- mov DWORD[((80+12))+rsp],r9d
- lea r9,[6+r8]
- DB 102,15,56,220,240
- DB 102,15,56,220,248
- DB 102,68,15,56,220,192
- DB 102,68,15,56,220,200
- movups xmm0,XMMWORD[((128-128))+rcx]
- bswap r9d
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- xor r9d,ebp
- DB 0x66,0x90
- DB 102,15,56,220,225
- DB 102,15,56,220,233
- mov DWORD[((96+12))+rsp],r9d
- lea r9,[7+r8]
- DB 102,15,56,220,241
- DB 102,15,56,220,249
- DB 102,68,15,56,220,193
- DB 102,68,15,56,220,201
- movups xmm1,XMMWORD[((144-128))+rcx]
- bswap r9d
- DB 102,15,56,220,208
- DB 102,15,56,220,216
- DB 102,15,56,220,224
- xor r9d,ebp
- movdqu xmm10,XMMWORD[rdi]
- DB 102,15,56,220,232
- mov DWORD[((112+12))+rsp],r9d
- cmp eax,11
- DB 102,15,56,220,240
- DB 102,15,56,220,248
- DB 102,68,15,56,220,192
- DB 102,68,15,56,220,200
- movups xmm0,XMMWORD[((160-128))+rcx]
- jb NEAR $L$ctr32_enc_done
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- DB 102,15,56,220,225
- DB 102,15,56,220,233
- DB 102,15,56,220,241
- DB 102,15,56,220,249
- DB 102,68,15,56,220,193
- DB 102,68,15,56,220,201
- movups xmm1,XMMWORD[((176-128))+rcx]
- DB 102,15,56,220,208
- DB 102,15,56,220,216
- DB 102,15,56,220,224
- DB 102,15,56,220,232
- DB 102,15,56,220,240
- DB 102,15,56,220,248
- DB 102,68,15,56,220,192
- DB 102,68,15,56,220,200
- movups xmm0,XMMWORD[((192-128))+rcx]
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- DB 102,15,56,220,225
- DB 102,15,56,220,233
- DB 102,15,56,220,241
- DB 102,15,56,220,249
- DB 102,68,15,56,220,193
- DB 102,68,15,56,220,201
- movups xmm1,XMMWORD[((208-128))+rcx]
- DB 102,15,56,220,208
- DB 102,15,56,220,216
- DB 102,15,56,220,224
- DB 102,15,56,220,232
- DB 102,15,56,220,240
- DB 102,15,56,220,248
- DB 102,68,15,56,220,192
- DB 102,68,15,56,220,200
- movups xmm0,XMMWORD[((224-128))+rcx]
- jmp NEAR $L$ctr32_enc_done
- ALIGN 16
- $L$ctr32_enc_done:
- movdqu xmm11,XMMWORD[16+rdi]
- pxor xmm10,xmm0
- movdqu xmm12,XMMWORD[32+rdi]
- pxor xmm11,xmm0
- movdqu xmm13,XMMWORD[48+rdi]
- pxor xmm12,xmm0
- movdqu xmm14,XMMWORD[64+rdi]
- pxor xmm13,xmm0
- movdqu xmm15,XMMWORD[80+rdi]
- pxor xmm14,xmm0
- pxor xmm15,xmm0
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- DB 102,15,56,220,225
- DB 102,15,56,220,233
- DB 102,15,56,220,241
- DB 102,15,56,220,249
- DB 102,68,15,56,220,193
- DB 102,68,15,56,220,201
- movdqu xmm1,XMMWORD[96+rdi]
- lea rdi,[128+rdi]
- DB 102,65,15,56,221,210
- pxor xmm1,xmm0
- movdqu xmm10,XMMWORD[((112-128))+rdi]
- DB 102,65,15,56,221,219
- pxor xmm10,xmm0
- movdqa xmm11,XMMWORD[rsp]
- DB 102,65,15,56,221,228
- DB 102,65,15,56,221,237
- movdqa xmm12,XMMWORD[16+rsp]
- movdqa xmm13,XMMWORD[32+rsp]
- DB 102,65,15,56,221,246
- DB 102,65,15,56,221,255
- movdqa xmm14,XMMWORD[48+rsp]
- movdqa xmm15,XMMWORD[64+rsp]
- DB 102,68,15,56,221,193
- movdqa xmm0,XMMWORD[80+rsp]
- movups xmm1,XMMWORD[((16-128))+rcx]
- DB 102,69,15,56,221,202
- movups XMMWORD[rsi],xmm2
- movdqa xmm2,xmm11
- movups XMMWORD[16+rsi],xmm3
- movdqa xmm3,xmm12
- movups XMMWORD[32+rsi],xmm4
- movdqa xmm4,xmm13
- movups XMMWORD[48+rsi],xmm5
- movdqa xmm5,xmm14
- movups XMMWORD[64+rsi],xmm6
- movdqa xmm6,xmm15
- movups XMMWORD[80+rsi],xmm7
- movdqa xmm7,xmm0
- movups XMMWORD[96+rsi],xmm8
- movups XMMWORD[112+rsi],xmm9
- lea rsi,[128+rsi]
- sub rdx,8
- jnc NEAR $L$ctr32_loop8
- add rdx,8
- jz NEAR $L$ctr32_done
- lea rcx,[((-128))+rcx]
- $L$ctr32_tail:
- lea rcx,[16+rcx]
- cmp rdx,4
- jb NEAR $L$ctr32_loop3
- je NEAR $L$ctr32_loop4
- shl eax,4
- movdqa xmm8,XMMWORD[96+rsp]
- pxor xmm9,xmm9
- movups xmm0,XMMWORD[16+rcx]
- DB 102,15,56,220,209
- DB 102,15,56,220,217
- lea rcx,[((32-16))+rax*1+rcx]
- neg rax
- DB 102,15,56,220,225
- add rax,16
- movups xmm10,XMMWORD[rdi]
- DB 102,15,56,220,233
- DB 102,15,56,220,241
- movups xmm11,XMMWORD[16+rdi]
- movups xmm12,XMMWORD[32+rdi]
- DB 102,15,56,220,249
- DB 102,68,15,56,220,193
- call $L$enc_loop8_enter
- movdqu xmm13,XMMWORD[48+rdi]
- pxor xmm2,xmm10
- movdqu xmm10,XMMWORD[64+rdi]
- pxor xmm3,xmm11
- movdqu XMMWORD[rsi],xmm2
- pxor xmm4,xmm12
- movdqu XMMWORD[16+rsi],xmm3
- pxor xmm5,xmm13
- movdqu XMMWORD[32+rsi],xmm4
- pxor xmm6,xmm10
- movdqu XMMWORD[48+rsi],xmm5
- movdqu XMMWORD[64+rsi],xmm6
- cmp rdx,6
- jb NEAR $L$ctr32_done
- movups xmm11,XMMWORD[80+rdi]
- xorps xmm7,xmm11
- movups XMMWORD[80+rsi],xmm7
- je NEAR $L$ctr32_done
- movups xmm12,XMMWORD[96+rdi]
- xorps xmm8,xmm12
- movups XMMWORD[96+rsi],xmm8
- jmp NEAR $L$ctr32_done
- ALIGN 32
- $L$ctr32_loop4:
- DB 102,15,56,220,209
- lea rcx,[16+rcx]
- dec eax
- DB 102,15,56,220,217
- DB 102,15,56,220,225
- DB 102,15,56,220,233
- movups xmm1,XMMWORD[rcx]
- jnz NEAR $L$ctr32_loop4
- DB 102,15,56,221,209
- DB 102,15,56,221,217
- movups xmm10,XMMWORD[rdi]
- movups xmm11,XMMWORD[16+rdi]
- DB 102,15,56,221,225
- DB 102,15,56,221,233
- movups xmm12,XMMWORD[32+rdi]
- movups xmm13,XMMWORD[48+rdi]
- xorps xmm2,xmm10
- movups XMMWORD[rsi],xmm2
- xorps xmm3,xmm11
- movups XMMWORD[16+rsi],xmm3
- pxor xmm4,xmm12
- movdqu XMMWORD[32+rsi],xmm4
- pxor xmm5,xmm13
- movdqu XMMWORD[48+rsi],xmm5
- jmp NEAR $L$ctr32_done
- ALIGN 32
- $L$ctr32_loop3:
- DB 102,15,56,220,209
- lea rcx,[16+rcx]
- dec eax
- DB 102,15,56,220,217
- DB 102,15,56,220,225
- movups xmm1,XMMWORD[rcx]
- jnz NEAR $L$ctr32_loop3
- DB 102,15,56,221,209
- DB 102,15,56,221,217
- DB 102,15,56,221,225
- movups xmm10,XMMWORD[rdi]
- xorps xmm2,xmm10
- movups XMMWORD[rsi],xmm2
- cmp rdx,2
- jb NEAR $L$ctr32_done
- movups xmm11,XMMWORD[16+rdi]
- xorps xmm3,xmm11
- movups XMMWORD[16+rsi],xmm3
- je NEAR $L$ctr32_done
- movups xmm12,XMMWORD[32+rdi]
- xorps xmm4,xmm12
- movups XMMWORD[32+rsi],xmm4
- $L$ctr32_done:
- xorps xmm0,xmm0
- xor ebp,ebp
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- movaps xmm6,XMMWORD[((-168))+r11]
- movaps XMMWORD[(-168)+r11],xmm0
- movaps xmm7,XMMWORD[((-152))+r11]
- movaps XMMWORD[(-152)+r11],xmm0
- movaps xmm8,XMMWORD[((-136))+r11]
- movaps XMMWORD[(-136)+r11],xmm0
- movaps xmm9,XMMWORD[((-120))+r11]
- movaps XMMWORD[(-120)+r11],xmm0
- movaps xmm10,XMMWORD[((-104))+r11]
- movaps XMMWORD[(-104)+r11],xmm0
- movaps xmm11,XMMWORD[((-88))+r11]
- movaps XMMWORD[(-88)+r11],xmm0
- movaps xmm12,XMMWORD[((-72))+r11]
- movaps XMMWORD[(-72)+r11],xmm0
- movaps xmm13,XMMWORD[((-56))+r11]
- movaps XMMWORD[(-56)+r11],xmm0
- movaps xmm14,XMMWORD[((-40))+r11]
- movaps XMMWORD[(-40)+r11],xmm0
- movaps xmm15,XMMWORD[((-24))+r11]
- movaps XMMWORD[(-24)+r11],xmm0
- movaps XMMWORD[rsp],xmm0
- movaps XMMWORD[16+rsp],xmm0
- movaps XMMWORD[32+rsp],xmm0
- movaps XMMWORD[48+rsp],xmm0
- movaps XMMWORD[64+rsp],xmm0
- movaps XMMWORD[80+rsp],xmm0
- movaps XMMWORD[96+rsp],xmm0
- movaps XMMWORD[112+rsp],xmm0
- mov rbp,QWORD[((-8))+r11]
- lea rsp,[r11]
- $L$ctr32_epilogue:
- mov rdi,QWORD[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD[16+rsp]
- DB 0F3h,0C3h ;repret
- $L$SEH_end_GFp_aes_hw_ctr32_encrypt_blocks:
- global GFp_aes_hw_set_encrypt_key
- ALIGN 16
- GFp_aes_hw_set_encrypt_key:
- __aesni_set_encrypt_key:
- DB 0x48,0x83,0xEC,0x08
- mov rax,-1
- test rcx,rcx
- jz NEAR $L$enc_key_ret
- test r8,r8
- jz NEAR $L$enc_key_ret
- movups xmm0,XMMWORD[rcx]
- xorps xmm4,xmm4
- lea r10,[GFp_ia32cap_P]
- mov r10d,DWORD[4+r10]
- and r10d,268437504
- lea rax,[16+r8]
- cmp edx,256
- je NEAR $L$14rounds
- cmp edx,128
- jne NEAR $L$bad_keybits
- $L$10rounds:
- mov edx,9
- cmp r10d,268435456
- je NEAR $L$10rounds_alt
- movups XMMWORD[r8],xmm0
- DB 102,15,58,223,200,1
- call $L$key_expansion_128_cold
- DB 102,15,58,223,200,2
- call $L$key_expansion_128
- DB 102,15,58,223,200,4
- call $L$key_expansion_128
- DB 102,15,58,223,200,8
- call $L$key_expansion_128
- DB 102,15,58,223,200,16
- call $L$key_expansion_128
- DB 102,15,58,223,200,32
- call $L$key_expansion_128
- DB 102,15,58,223,200,64
- call $L$key_expansion_128
- DB 102,15,58,223,200,128
- call $L$key_expansion_128
- DB 102,15,58,223,200,27
- call $L$key_expansion_128
- DB 102,15,58,223,200,54
- call $L$key_expansion_128
- movups XMMWORD[rax],xmm0
- mov DWORD[80+rax],edx
- xor eax,eax
- jmp NEAR $L$enc_key_ret
- ALIGN 16
- $L$10rounds_alt:
- movdqa xmm5,XMMWORD[$L$key_rotate]
- mov r10d,8
- movdqa xmm4,XMMWORD[$L$key_rcon1]
- movdqa xmm2,xmm0
- movdqu XMMWORD[r8],xmm0
- jmp NEAR $L$oop_key128
- ALIGN 16
- $L$oop_key128:
- DB 102,15,56,0,197
- DB 102,15,56,221,196
- pslld xmm4,1
- lea rax,[16+rax]
- movdqa xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm2,xmm3
- pxor xmm0,xmm2
- movdqu XMMWORD[(-16)+rax],xmm0
- movdqa xmm2,xmm0
- dec r10d
- jnz NEAR $L$oop_key128
- movdqa xmm4,XMMWORD[$L$key_rcon1b]
- DB 102,15,56,0,197
- DB 102,15,56,221,196
- pslld xmm4,1
- movdqa xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm2,xmm3
- pxor xmm0,xmm2
- movdqu XMMWORD[rax],xmm0
- movdqa xmm2,xmm0
- DB 102,15,56,0,197
- DB 102,15,56,221,196
- movdqa xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm2,xmm3
- pxor xmm0,xmm2
- movdqu XMMWORD[16+rax],xmm0
- mov DWORD[96+rax],edx
- xor eax,eax
- jmp NEAR $L$enc_key_ret
- ALIGN 16
- $L$14rounds:
- movups xmm2,XMMWORD[16+rcx]
- mov edx,13
- lea rax,[16+rax]
- cmp r10d,268435456
- je NEAR $L$14rounds_alt
- movups XMMWORD[r8],xmm0
- movups XMMWORD[16+r8],xmm2
- DB 102,15,58,223,202,1
- call $L$key_expansion_256a_cold
- DB 102,15,58,223,200,1
- call $L$key_expansion_256b
- DB 102,15,58,223,202,2
- call $L$key_expansion_256a
- DB 102,15,58,223,200,2
- call $L$key_expansion_256b
- DB 102,15,58,223,202,4
- call $L$key_expansion_256a
- DB 102,15,58,223,200,4
- call $L$key_expansion_256b
- DB 102,15,58,223,202,8
- call $L$key_expansion_256a
- DB 102,15,58,223,200,8
- call $L$key_expansion_256b
- DB 102,15,58,223,202,16
- call $L$key_expansion_256a
- DB 102,15,58,223,200,16
- call $L$key_expansion_256b
- DB 102,15,58,223,202,32
- call $L$key_expansion_256a
- DB 102,15,58,223,200,32
- call $L$key_expansion_256b
- DB 102,15,58,223,202,64
- call $L$key_expansion_256a
- movups XMMWORD[rax],xmm0
- mov DWORD[16+rax],edx
- xor rax,rax
- jmp NEAR $L$enc_key_ret
- ALIGN 16
- $L$14rounds_alt:
- movdqa xmm5,XMMWORD[$L$key_rotate]
- movdqa xmm4,XMMWORD[$L$key_rcon1]
- mov r10d,7
- movdqu XMMWORD[r8],xmm0
- movdqa xmm1,xmm2
- movdqu XMMWORD[16+r8],xmm2
- jmp NEAR $L$oop_key256
- ALIGN 16
- $L$oop_key256:
- DB 102,15,56,0,213
- DB 102,15,56,221,212
- movdqa xmm3,xmm0
- pslldq xmm0,4
- pxor xmm3,xmm0
- pslldq xmm0,4
- pxor xmm3,xmm0
- pslldq xmm0,4
- pxor xmm0,xmm3
- pslld xmm4,1
- pxor xmm0,xmm2
- movdqu XMMWORD[rax],xmm0
- dec r10d
- jz NEAR $L$done_key256
- pshufd xmm2,xmm0,0xff
- pxor xmm3,xmm3
- DB 102,15,56,221,211
- movdqa xmm3,xmm1
- pslldq xmm1,4
- pxor xmm3,xmm1
- pslldq xmm1,4
- pxor xmm3,xmm1
- pslldq xmm1,4
- pxor xmm1,xmm3
- pxor xmm2,xmm1
- movdqu XMMWORD[16+rax],xmm2
- lea rax,[32+rax]
- movdqa xmm1,xmm2
- jmp NEAR $L$oop_key256
- $L$done_key256:
- mov DWORD[16+rax],edx
- xor eax,eax
- jmp NEAR $L$enc_key_ret
- ALIGN 16
- $L$bad_keybits:
- mov rax,-2
- $L$enc_key_ret:
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- add rsp,8
- DB 0F3h,0C3h ;repret
- $L$SEH_end_GFp_set_encrypt_key:
- ALIGN 16
- $L$key_expansion_128:
- movups XMMWORD[rax],xmm0
- lea rax,[16+rax]
- $L$key_expansion_128_cold:
- shufps xmm4,xmm0,16
- xorps xmm0,xmm4
- shufps xmm4,xmm0,140
- xorps xmm0,xmm4
- shufps xmm1,xmm1,255
- xorps xmm0,xmm1
- DB 0F3h,0C3h ;repret
- ALIGN 16
- $L$key_expansion_192a:
- movups XMMWORD[rax],xmm0
- lea rax,[16+rax]
- $L$key_expansion_192a_cold:
- movaps xmm5,xmm2
- $L$key_expansion_192b_warm:
- shufps xmm4,xmm0,16
- movdqa xmm3,xmm2
- xorps xmm0,xmm4
- shufps xmm4,xmm0,140
- pslldq xmm3,4
- xorps xmm0,xmm4
- pshufd xmm1,xmm1,85
- pxor xmm2,xmm3
- pxor xmm0,xmm1
- pshufd xmm3,xmm0,255
- pxor xmm2,xmm3
- DB 0F3h,0C3h ;repret
- ALIGN 16
- $L$key_expansion_192b:
- movaps xmm3,xmm0
- shufps xmm5,xmm0,68
- movups XMMWORD[rax],xmm5
- shufps xmm3,xmm2,78
- movups XMMWORD[16+rax],xmm3
- lea rax,[32+rax]
- jmp NEAR $L$key_expansion_192b_warm
- ALIGN 16
- $L$key_expansion_256a:
- movups XMMWORD[rax],xmm2
- lea rax,[16+rax]
- $L$key_expansion_256a_cold:
- shufps xmm4,xmm0,16
- xorps xmm0,xmm4
- shufps xmm4,xmm0,140
- xorps xmm0,xmm4
- shufps xmm1,xmm1,255
- xorps xmm0,xmm1
- DB 0F3h,0C3h ;repret
- ALIGN 16
- $L$key_expansion_256b:
- movups XMMWORD[rax],xmm0
- lea rax,[16+rax]
- shufps xmm4,xmm2,16
- xorps xmm2,xmm4
- shufps xmm4,xmm2,140
- xorps xmm2,xmm4
- shufps xmm1,xmm1,170
- xorps xmm2,xmm1
- DB 0F3h,0C3h ;repret
- ALIGN 64
- $L$bswap_mask:
- DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
- $L$increment32:
- DD 6,6,6,0
- $L$increment64:
- DD 1,0,0,0
- $L$increment1:
- DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
- $L$key_rotate:
- DD 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
- $L$key_rotate192:
- DD 0x04070605,0x04070605,0x04070605,0x04070605
- $L$key_rcon1:
- DD 1,1,1,1
- $L$key_rcon1b:
- DD 0x1b,0x1b,0x1b,0x1b
- DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
- DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
- DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
- DB 115,108,46,111,114,103,62,0
- ALIGN 64
- EXTERN __imp_RtlVirtualUnwind
- ALIGN 16
- ctr_xts_se_handler:
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
- mov rax,QWORD[120+r8]
- mov rbx,QWORD[248+r8]
- mov rsi,QWORD[8+r9]
- mov r11,QWORD[56+r9]
- mov r10d,DWORD[r11]
- lea r10,[r10*1+rsi]
- cmp rbx,r10
- jb NEAR $L$common_seh_tail
- mov rax,QWORD[152+r8]
- mov r10d,DWORD[4+r11]
- lea r10,[r10*1+rsi]
- cmp rbx,r10
- jae NEAR $L$common_seh_tail
- mov rax,QWORD[208+r8]
- lea rsi,[((-168))+rax]
- lea rdi,[512+r8]
- mov ecx,20
- DD 0xa548f3fc
- mov rbp,QWORD[((-8))+rax]
- mov QWORD[160+r8],rbp
- $L$common_seh_tail:
- mov rdi,QWORD[8+rax]
- mov rsi,QWORD[16+rax]
- mov QWORD[152+r8],rax
- mov QWORD[168+r8],rsi
- mov QWORD[176+r8],rdi
- mov rdi,QWORD[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0xa548f3fc
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD[8+rsi]
- mov r8,QWORD[rsi]
- mov r9,QWORD[16+rsi]
- mov r10,QWORD[40+rsi]
- lea r11,[56+rsi]
- lea r12,[24+rsi]
- mov QWORD[32+rsp],r10
- mov QWORD[40+rsp],r11
- mov QWORD[48+rsp],r12
- mov QWORD[56+rsp],rcx
- call QWORD[__imp_RtlVirtualUnwind]
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
- section .pdata rdata align=4
- ALIGN 4
- DD $L$SEH_begin_GFp_aes_hw_ctr32_encrypt_blocks wrt ..imagebase
- DD $L$SEH_end_GFp_aes_hw_ctr32_encrypt_blocks wrt ..imagebase
- DD $L$SEH_info_GFp_ctr32 wrt ..imagebase
- DD GFp_aes_hw_set_encrypt_key wrt ..imagebase
- DD $L$SEH_end_GFp_set_encrypt_key wrt ..imagebase
- DD $L$SEH_info_GFp_key wrt ..imagebase
- section .xdata rdata align=8
- ALIGN 8
- $L$SEH_info_GFp_ctr32:
- DB 9,0,0,0
- DD ctr_xts_se_handler wrt ..imagebase
- DD $L$ctr32_body wrt ..imagebase,$L$ctr32_epilogue wrt ..imagebase
- $L$SEH_info_GFp_key:
- DB 0x01,0x04,0x01,0x00
- DB 0x04,0x02,0x00,0x00
|