| ; This file is generated from a similarly-named Perl script in the BoringSSL |
| ; source tree. Do not edit by hand. |
| |
| %ifidn __OUTPUT_FORMAT__,obj |
| section code use32 class=code align=64 |
| %elifidn __OUTPUT_FORMAT__,win32 |
| %ifdef __YASM_VERSION_ID__ |
| %if __YASM_VERSION_ID__ < 01010000h |
| %error yasm version 1.1.0 or later needed. |
| %endif |
| ; Yasm automatically includes .00 and complains about redefining it. |
| ; https://www.tortall.net/projects/yasm/manual/html/objfmt-win32-safeseh.html |
| %else |
| $@feat.00 equ 1 |
| %endif |
| section .text code align=64 |
| %else |
| section .text code |
| %endif |
| align 64 |
| L$_vpaes_consts: |
| dd 218628480,235210255,168496130,67568393 |
| dd 252381056,17041926,33884169,51187212 |
| dd 252645135,252645135,252645135,252645135 |
| dd 1512730624,3266504856,1377990664,3401244816 |
| dd 830229760,1275146365,2969422977,3447763452 |
| dd 3411033600,2979783055,338359620,2782886510 |
| dd 4209124096,907596821,221174255,1006095553 |
| dd 191964160,3799684038,3164090317,1589111125 |
| dd 182528256,1777043520,2877432650,3265356744 |
| dd 1874708224,3503451415,3305285752,363511674 |
| dd 1606117888,3487855781,1093350906,2384367825 |
| dd 197121,67569157,134941193,202313229 |
| dd 67569157,134941193,202313229,197121 |
| dd 134941193,202313229,197121,67569157 |
| dd 202313229,197121,67569157,134941193 |
| dd 33619971,100992007,168364043,235736079 |
| dd 235736079,33619971,100992007,168364043 |
| dd 168364043,235736079,33619971,100992007 |
| dd 100992007,168364043,235736079,33619971 |
| dd 50462976,117835012,185207048,252579084 |
| dd 252314880,51251460,117574920,184942860 |
| dd 184682752,252054788,50987272,118359308 |
| dd 118099200,185467140,251790600,50727180 |
| dd 2946363062,528716217,1300004225,1881839624 |
| dd 1532713819,1532713819,1532713819,1532713819 |
| dd 3602276352,4288629033,3737020424,4153884961 |
| dd 1354558464,32357713,2958822624,3775749553 |
| dd 1201988352,132424512,1572796698,503232858 |
| dd 2213177600,1597421020,4103937655,675398315 |
| dd 2749646592,4273543773,1511898873,121693092 |
| dd 3040248576,1103263732,2871565598,1608280554 |
| dd 2236667136,2588920351,482954393,64377734 |
| dd 3069987328,291237287,2117370568,3650299247 |
| dd 533321216,3573750986,2572112006,1401264716 |
| dd 1339849704,2721158661,548607111,3445553514 |
| dd 2128193280,3054596040,2183486460,1257083700 |
| dd 655635200,1165381986,3923443150,2344132524 |
| dd 190078720,256924420,290342170,357187870 |
| dd 1610966272,2263057382,4103205268,309794674 |
| dd 2592527872,2233205587,1335446729,3402964816 |
| dd 3973531904,3225098121,3002836325,1918774430 |
| dd 3870401024,2102906079,2284471353,4117666579 |
| dd 617007872,1021508343,366931923,691083277 |
| dd 2528395776,3491914898,2968704004,1613121270 |
| dd 3445188352,3247741094,844474987,4093578302 |
| dd 651481088,1190302358,1689581232,574775300 |
| dd 4289380608,206939853,2555985458,2489840491 |
| dd 2130264064,327674451,3566485037,3349835193 |
| dd 2470714624,316102159,3636825756,3393945945 |
| db 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105 |
| db 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83 |
| db 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117 |
| db 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105 |
| db 118,101,114,115,105,116,121,41,0 |
| align 64 |
| align 16 |
| __vpaes_preheat: |
| add ebp,DWORD [esp] |
| movdqa xmm7,[ebp-48] |
| movdqa xmm6,[ebp-16] |
| ret |
| align 16 |
| __vpaes_encrypt_core: |
| mov ecx,16 |
| mov eax,DWORD [240+edx] |
| movdqa xmm1,xmm6 |
| movdqa xmm2,[ebp] |
| pandn xmm1,xmm0 |
| pand xmm0,xmm6 |
| movdqu xmm5,[edx] |
| db 102,15,56,0,208 |
| movdqa xmm0,[16+ebp] |
| pxor xmm2,xmm5 |
| psrld xmm1,4 |
| add edx,16 |
| db 102,15,56,0,193 |
| lea ebx,[192+ebp] |
| pxor xmm0,xmm2 |
| jmp NEAR L$000enc_entry |
| align 16 |
| L$001enc_loop: |
| movdqa xmm4,[32+ebp] |
| movdqa xmm0,[48+ebp] |
| db 102,15,56,0,226 |
| db 102,15,56,0,195 |
| pxor xmm4,xmm5 |
| movdqa xmm5,[64+ebp] |
| pxor xmm0,xmm4 |
| movdqa xmm1,[ecx*1+ebx-64] |
| db 102,15,56,0,234 |
| movdqa xmm2,[80+ebp] |
| movdqa xmm4,[ecx*1+ebx] |
| db 102,15,56,0,211 |
| movdqa xmm3,xmm0 |
| pxor xmm2,xmm5 |
| db 102,15,56,0,193 |
| add edx,16 |
| pxor xmm0,xmm2 |
| db 102,15,56,0,220 |
| add ecx,16 |
| pxor xmm3,xmm0 |
| db 102,15,56,0,193 |
| and ecx,48 |
| sub eax,1 |
| pxor xmm0,xmm3 |
| L$000enc_entry: |
| movdqa xmm1,xmm6 |
| movdqa xmm5,[ebp-32] |
| pandn xmm1,xmm0 |
| psrld xmm1,4 |
| pand xmm0,xmm6 |
| db 102,15,56,0,232 |
| movdqa xmm3,xmm7 |
| pxor xmm0,xmm1 |
| db 102,15,56,0,217 |
| movdqa xmm4,xmm7 |
| pxor xmm3,xmm5 |
| db 102,15,56,0,224 |
| movdqa xmm2,xmm7 |
| pxor xmm4,xmm5 |
| db 102,15,56,0,211 |
| movdqa xmm3,xmm7 |
| pxor xmm2,xmm0 |
| db 102,15,56,0,220 |
| movdqu xmm5,[edx] |
| pxor xmm3,xmm1 |
| jnz NEAR L$001enc_loop |
| movdqa xmm4,[96+ebp] |
| movdqa xmm0,[112+ebp] |
| db 102,15,56,0,226 |
| pxor xmm4,xmm5 |
| db 102,15,56,0,195 |
| movdqa xmm1,[64+ecx*1+ebx] |
| pxor xmm0,xmm4 |
| db 102,15,56,0,193 |
| ret |
| align 16 |
| __vpaes_decrypt_core: |
| lea ebx,[608+ebp] |
| mov eax,DWORD [240+edx] |
| movdqa xmm1,xmm6 |
| movdqa xmm2,[ebx-64] |
| pandn xmm1,xmm0 |
| mov ecx,eax |
| psrld xmm1,4 |
| movdqu xmm5,[edx] |
| shl ecx,4 |
| pand xmm0,xmm6 |
| db 102,15,56,0,208 |
| movdqa xmm0,[ebx-48] |
| xor ecx,48 |
| db 102,15,56,0,193 |
| and ecx,48 |
| pxor xmm2,xmm5 |
| movdqa xmm5,[176+ebp] |
| pxor xmm0,xmm2 |
| add edx,16 |
| lea ecx,[ecx*1+ebx-352] |
| jmp NEAR L$002dec_entry |
| align 16 |
| L$003dec_loop: |
| movdqa xmm4,[ebx-32] |
| movdqa xmm1,[ebx-16] |
| db 102,15,56,0,226 |
| db 102,15,56,0,203 |
| pxor xmm0,xmm4 |
| movdqa xmm4,[ebx] |
| pxor xmm0,xmm1 |
| movdqa xmm1,[16+ebx] |
| db 102,15,56,0,226 |
| db 102,15,56,0,197 |
| db 102,15,56,0,203 |
| pxor xmm0,xmm4 |
| movdqa xmm4,[32+ebx] |
| pxor xmm0,xmm1 |
| movdqa xmm1,[48+ebx] |
| db 102,15,56,0,226 |
| db 102,15,56,0,197 |
| db 102,15,56,0,203 |
| pxor xmm0,xmm4 |
| movdqa xmm4,[64+ebx] |
| pxor xmm0,xmm1 |
| movdqa xmm1,[80+ebx] |
| db 102,15,56,0,226 |
| db 102,15,56,0,197 |
| db 102,15,56,0,203 |
| pxor xmm0,xmm4 |
| add edx,16 |
| db 102,15,58,15,237,12 |
| pxor xmm0,xmm1 |
| sub eax,1 |
| L$002dec_entry: |
| movdqa xmm1,xmm6 |
| movdqa xmm2,[ebp-32] |
| pandn xmm1,xmm0 |
| pand xmm0,xmm6 |
| psrld xmm1,4 |
| db 102,15,56,0,208 |
| movdqa xmm3,xmm7 |
| pxor xmm0,xmm1 |
| db 102,15,56,0,217 |
| movdqa xmm4,xmm7 |
| pxor xmm3,xmm2 |
| db 102,15,56,0,224 |
| pxor xmm4,xmm2 |
| movdqa xmm2,xmm7 |
| db 102,15,56,0,211 |
| movdqa xmm3,xmm7 |
| pxor xmm2,xmm0 |
| db 102,15,56,0,220 |
| movdqu xmm0,[edx] |
| pxor xmm3,xmm1 |
| jnz NEAR L$003dec_loop |
| movdqa xmm4,[96+ebx] |
| db 102,15,56,0,226 |
| pxor xmm4,xmm0 |
| movdqa xmm0,[112+ebx] |
| movdqa xmm2,[ecx] |
| db 102,15,56,0,195 |
| pxor xmm0,xmm4 |
| db 102,15,56,0,194 |
| ret |
| align 16 |
| __vpaes_schedule_core: |
| add ebp,DWORD [esp] |
| movdqu xmm0,[esi] |
| movdqa xmm2,[320+ebp] |
| movdqa xmm3,xmm0 |
| lea ebx,[ebp] |
| movdqa [4+esp],xmm2 |
| call __vpaes_schedule_transform |
| movdqa xmm7,xmm0 |
| test edi,edi |
| jnz NEAR L$004schedule_am_decrypting |
| movdqu [edx],xmm0 |
| jmp NEAR L$005schedule_go |
| L$004schedule_am_decrypting: |
| movdqa xmm1,[256+ecx*1+ebp] |
| db 102,15,56,0,217 |
| movdqu [edx],xmm3 |
| xor ecx,48 |
| L$005schedule_go: |
| cmp eax,192 |
| ja NEAR L$006schedule_256 |
| je NEAR L$007schedule_192 |
| L$008schedule_128: |
| mov eax,10 |
| L$009loop_schedule_128: |
| call __vpaes_schedule_round |
| dec eax |
| jz NEAR L$010schedule_mangle_last |
| call __vpaes_schedule_mangle |
| jmp NEAR L$009loop_schedule_128 |
| align 16 |
| L$007schedule_192: |
| movdqu xmm0,[8+esi] |
| call __vpaes_schedule_transform |
| movdqa xmm6,xmm0 |
| pxor xmm4,xmm4 |
| movhlps xmm6,xmm4 |
| mov eax,4 |
| L$011loop_schedule_192: |
| call __vpaes_schedule_round |
| db 102,15,58,15,198,8 |
| call __vpaes_schedule_mangle |
| call __vpaes_schedule_192_smear |
| call __vpaes_schedule_mangle |
| call __vpaes_schedule_round |
| dec eax |
| jz NEAR L$010schedule_mangle_last |
| call __vpaes_schedule_mangle |
| call __vpaes_schedule_192_smear |
| jmp NEAR L$011loop_schedule_192 |
| align 16 |
| L$006schedule_256: |
| movdqu xmm0,[16+esi] |
| call __vpaes_schedule_transform |
| mov eax,7 |
| L$012loop_schedule_256: |
| call __vpaes_schedule_mangle |
| movdqa xmm6,xmm0 |
| call __vpaes_schedule_round |
| dec eax |
| jz NEAR L$010schedule_mangle_last |
| call __vpaes_schedule_mangle |
| pshufd xmm0,xmm0,255 |
| movdqa [20+esp],xmm7 |
| movdqa xmm7,xmm6 |
| call L$_vpaes_schedule_low_round |
| movdqa xmm7,[20+esp] |
| jmp NEAR L$012loop_schedule_256 |
| align 16 |
| L$010schedule_mangle_last: |
| lea ebx,[384+ebp] |
| test edi,edi |
| jnz NEAR L$013schedule_mangle_last_dec |
| movdqa xmm1,[256+ecx*1+ebp] |
| db 102,15,56,0,193 |
| lea ebx,[352+ebp] |
| add edx,32 |
| L$013schedule_mangle_last_dec: |
| add edx,-16 |
| pxor xmm0,[336+ebp] |
| call __vpaes_schedule_transform |
| movdqu [edx],xmm0 |
| pxor xmm0,xmm0 |
| pxor xmm1,xmm1 |
| pxor xmm2,xmm2 |
| pxor xmm3,xmm3 |
| pxor xmm4,xmm4 |
| pxor xmm5,xmm5 |
| pxor xmm6,xmm6 |
| pxor xmm7,xmm7 |
| ret |
| align 16 |
| __vpaes_schedule_192_smear: |
| pshufd xmm1,xmm6,128 |
| pshufd xmm0,xmm7,254 |
| pxor xmm6,xmm1 |
| pxor xmm1,xmm1 |
| pxor xmm6,xmm0 |
| movdqa xmm0,xmm6 |
| movhlps xmm6,xmm1 |
| ret |
| align 16 |
| __vpaes_schedule_round: |
| movdqa xmm2,[8+esp] |
| pxor xmm1,xmm1 |
| db 102,15,58,15,202,15 |
| db 102,15,58,15,210,15 |
| pxor xmm7,xmm1 |
| pshufd xmm0,xmm0,255 |
| db 102,15,58,15,192,1 |
| movdqa [8+esp],xmm2 |
| L$_vpaes_schedule_low_round: |
| movdqa xmm1,xmm7 |
| pslldq xmm7,4 |
| pxor xmm7,xmm1 |
| movdqa xmm1,xmm7 |
| pslldq xmm7,8 |
| pxor xmm7,xmm1 |
| pxor xmm7,[336+ebp] |
| movdqa xmm4,[ebp-16] |
| movdqa xmm5,[ebp-48] |
| movdqa xmm1,xmm4 |
| pandn xmm1,xmm0 |
| psrld xmm1,4 |
| pand xmm0,xmm4 |
| movdqa xmm2,[ebp-32] |
| db 102,15,56,0,208 |
| pxor xmm0,xmm1 |
| movdqa xmm3,xmm5 |
| db 102,15,56,0,217 |
| pxor xmm3,xmm2 |
| movdqa xmm4,xmm5 |
| db 102,15,56,0,224 |
| pxor xmm4,xmm2 |
| movdqa xmm2,xmm5 |
| db 102,15,56,0,211 |
| pxor xmm2,xmm0 |
| movdqa xmm3,xmm5 |
| db 102,15,56,0,220 |
| pxor xmm3,xmm1 |
| movdqa xmm4,[32+ebp] |
| db 102,15,56,0,226 |
| movdqa xmm0,[48+ebp] |
| db 102,15,56,0,195 |
| pxor xmm0,xmm4 |
| pxor xmm0,xmm7 |
| movdqa xmm7,xmm0 |
| ret |
| align 16 |
| __vpaes_schedule_transform: |
| movdqa xmm2,[ebp-16] |
| movdqa xmm1,xmm2 |
| pandn xmm1,xmm0 |
| psrld xmm1,4 |
| pand xmm0,xmm2 |
| movdqa xmm2,[ebx] |
| db 102,15,56,0,208 |
| movdqa xmm0,[16+ebx] |
| db 102,15,56,0,193 |
| pxor xmm0,xmm2 |
| ret |
| align 16 |
| __vpaes_schedule_mangle: |
| movdqa xmm4,xmm0 |
| movdqa xmm5,[128+ebp] |
| test edi,edi |
| jnz NEAR L$014schedule_mangle_dec |
| add edx,16 |
| pxor xmm4,[336+ebp] |
| db 102,15,56,0,229 |
| movdqa xmm3,xmm4 |
| db 102,15,56,0,229 |
| pxor xmm3,xmm4 |
| db 102,15,56,0,229 |
| pxor xmm3,xmm4 |
| jmp NEAR L$015schedule_mangle_both |
| align 16 |
| L$014schedule_mangle_dec: |
| movdqa xmm2,[ebp-16] |
| lea esi,[416+ebp] |
| movdqa xmm1,xmm2 |
| pandn xmm1,xmm4 |
| psrld xmm1,4 |
| pand xmm4,xmm2 |
| movdqa xmm2,[esi] |
| db 102,15,56,0,212 |
| movdqa xmm3,[16+esi] |
| db 102,15,56,0,217 |
| pxor xmm3,xmm2 |
| db 102,15,56,0,221 |
| movdqa xmm2,[32+esi] |
| db 102,15,56,0,212 |
| pxor xmm2,xmm3 |
| movdqa xmm3,[48+esi] |
| db 102,15,56,0,217 |
| pxor xmm3,xmm2 |
| db 102,15,56,0,221 |
| movdqa xmm2,[64+esi] |
| db 102,15,56,0,212 |
| pxor xmm2,xmm3 |
| movdqa xmm3,[80+esi] |
| db 102,15,56,0,217 |
| pxor xmm3,xmm2 |
| db 102,15,56,0,221 |
| movdqa xmm2,[96+esi] |
| db 102,15,56,0,212 |
| pxor xmm2,xmm3 |
| movdqa xmm3,[112+esi] |
| db 102,15,56,0,217 |
| pxor xmm3,xmm2 |
| add edx,-16 |
| L$015schedule_mangle_both: |
| movdqa xmm1,[256+ecx*1+ebp] |
| db 102,15,56,0,217 |
| add ecx,-16 |
| and ecx,48 |
| movdqu [edx],xmm3 |
| ret |
| global _vpaes_set_encrypt_key |
| align 16 |
| _vpaes_set_encrypt_key: |
| L$_vpaes_set_encrypt_key_begin: |
| push ebp |
| push ebx |
| push esi |
| push edi |
| mov esi,DWORD [20+esp] |
| lea ebx,[esp-56] |
| mov eax,DWORD [24+esp] |
| and ebx,-16 |
| mov edx,DWORD [28+esp] |
| xchg ebx,esp |
| mov DWORD [48+esp],ebx |
| mov ebx,eax |
| shr ebx,5 |
| add ebx,5 |
| mov DWORD [240+edx],ebx |
| mov ecx,48 |
| mov edi,0 |
| lea ebp,[(L$_vpaes_consts+0x30-L$016pic_point)] |
| call __vpaes_schedule_core |
| L$016pic_point: |
| mov esp,DWORD [48+esp] |
| xor eax,eax |
| pop edi |
| pop esi |
| pop ebx |
| pop ebp |
| ret |
| global _vpaes_set_decrypt_key |
| align 16 |
| _vpaes_set_decrypt_key: |
| L$_vpaes_set_decrypt_key_begin: |
| push ebp |
| push ebx |
| push esi |
| push edi |
| mov esi,DWORD [20+esp] |
| lea ebx,[esp-56] |
| mov eax,DWORD [24+esp] |
| and ebx,-16 |
| mov edx,DWORD [28+esp] |
| xchg ebx,esp |
| mov DWORD [48+esp],ebx |
| mov ebx,eax |
| shr ebx,5 |
| add ebx,5 |
| mov DWORD [240+edx],ebx |
| shl ebx,4 |
| lea edx,[16+ebx*1+edx] |
| mov edi,1 |
| mov ecx,eax |
| shr ecx,1 |
| and ecx,32 |
| xor ecx,32 |
| lea ebp,[(L$_vpaes_consts+0x30-L$017pic_point)] |
| call __vpaes_schedule_core |
| L$017pic_point: |
| mov esp,DWORD [48+esp] |
| xor eax,eax |
| pop edi |
| pop esi |
| pop ebx |
| pop ebp |
| ret |
| global _vpaes_encrypt |
| align 16 |
| _vpaes_encrypt: |
| L$_vpaes_encrypt_begin: |
| push ebp |
| push ebx |
| push esi |
| push edi |
| lea ebp,[(L$_vpaes_consts+0x30-L$018pic_point)] |
| call __vpaes_preheat |
| L$018pic_point: |
| mov esi,DWORD [20+esp] |
| lea ebx,[esp-56] |
| mov edi,DWORD [24+esp] |
| and ebx,-16 |
| mov edx,DWORD [28+esp] |
| xchg ebx,esp |
| mov DWORD [48+esp],ebx |
| movdqu xmm0,[esi] |
| call __vpaes_encrypt_core |
| movdqu [edi],xmm0 |
| mov esp,DWORD [48+esp] |
| pop edi |
| pop esi |
| pop ebx |
| pop ebp |
| ret |
| global _vpaes_decrypt |
| align 16 |
| _vpaes_decrypt: |
| L$_vpaes_decrypt_begin: |
| push ebp |
| push ebx |
| push esi |
| push edi |
| lea ebp,[(L$_vpaes_consts+0x30-L$019pic_point)] |
| call __vpaes_preheat |
| L$019pic_point: |
| mov esi,DWORD [20+esp] |
| lea ebx,[esp-56] |
| mov edi,DWORD [24+esp] |
| and ebx,-16 |
| mov edx,DWORD [28+esp] |
| xchg ebx,esp |
| mov DWORD [48+esp],ebx |
| movdqu xmm0,[esi] |
| call __vpaes_decrypt_core |
| movdqu [edi],xmm0 |
| mov esp,DWORD [48+esp] |
| pop edi |
| pop esi |
| pop ebx |
| pop ebp |
| ret |
| global _vpaes_cbc_encrypt |
| align 16 |
| _vpaes_cbc_encrypt: |
| L$_vpaes_cbc_encrypt_begin: |
| push ebp |
| push ebx |
| push esi |
| push edi |
| mov esi,DWORD [20+esp] |
| mov edi,DWORD [24+esp] |
| mov eax,DWORD [28+esp] |
| mov edx,DWORD [32+esp] |
| sub eax,16 |
| jc NEAR L$020cbc_abort |
| lea ebx,[esp-56] |
| mov ebp,DWORD [36+esp] |
| and ebx,-16 |
| mov ecx,DWORD [40+esp] |
| xchg ebx,esp |
| movdqu xmm1,[ebp] |
| sub edi,esi |
| mov DWORD [48+esp],ebx |
| mov DWORD [esp],edi |
| mov DWORD [4+esp],edx |
| mov DWORD [8+esp],ebp |
| mov edi,eax |
| lea ebp,[(L$_vpaes_consts+0x30-L$021pic_point)] |
| call __vpaes_preheat |
| L$021pic_point: |
| cmp ecx,0 |
| je NEAR L$022cbc_dec_loop |
| jmp NEAR L$023cbc_enc_loop |
| align 16 |
| L$023cbc_enc_loop: |
| movdqu xmm0,[esi] |
| pxor xmm0,xmm1 |
| call __vpaes_encrypt_core |
| mov ebx,DWORD [esp] |
| mov edx,DWORD [4+esp] |
| movdqa xmm1,xmm0 |
| movdqu [esi*1+ebx],xmm0 |
| lea esi,[16+esi] |
| sub edi,16 |
| jnc NEAR L$023cbc_enc_loop |
| jmp NEAR L$024cbc_done |
| align 16 |
| L$022cbc_dec_loop: |
| movdqu xmm0,[esi] |
| movdqa [16+esp],xmm1 |
| movdqa [32+esp],xmm0 |
| call __vpaes_decrypt_core |
| mov ebx,DWORD [esp] |
| mov edx,DWORD [4+esp] |
| pxor xmm0,[16+esp] |
| movdqa xmm1,[32+esp] |
| movdqu [esi*1+ebx],xmm0 |
| lea esi,[16+esi] |
| sub edi,16 |
| jnc NEAR L$022cbc_dec_loop |
| L$024cbc_done: |
| mov ebx,DWORD [8+esp] |
| mov esp,DWORD [48+esp] |
| movdqu [ebx],xmm1 |
| L$020cbc_abort: |
| pop edi |
| pop esi |
| pop ebx |
| pop ebp |
| ret |