Path: blob/master/arch/x86/crypto/salsa20-i586-asm_32.S
10817 views
# salsa20_pm.s version 200512291# D. J. Bernstein2# Public domain.34# enter ECRYPT_encrypt_bytes5.text6.p2align 57.globl ECRYPT_encrypt_bytes8ECRYPT_encrypt_bytes:9mov %esp,%eax10and $31,%eax11add $256,%eax12sub %eax,%esp13# eax_stack = eax14movl %eax,80(%esp)15# ebx_stack = ebx16movl %ebx,84(%esp)17# esi_stack = esi18movl %esi,88(%esp)19# edi_stack = edi20movl %edi,92(%esp)21# ebp_stack = ebp22movl %ebp,96(%esp)23# x = arg124movl 4(%esp,%eax),%edx25# m = arg226movl 8(%esp,%eax),%esi27# out = arg328movl 12(%esp,%eax),%edi29# bytes = arg430movl 16(%esp,%eax),%ebx31# bytes -= 032sub $0,%ebx33# goto done if unsigned<=34jbe ._done35._start:36# in0 = *(uint32 *) (x + 0)37movl 0(%edx),%eax38# in1 = *(uint32 *) (x + 4)39movl 4(%edx),%ecx40# in2 = *(uint32 *) (x + 8)41movl 8(%edx),%ebp42# j0 = in043movl %eax,164(%esp)44# in3 = *(uint32 *) (x + 12)45movl 12(%edx),%eax46# j1 = in147movl %ecx,168(%esp)48# in4 = *(uint32 *) (x + 16)49movl 16(%edx),%ecx50# j2 = in251movl %ebp,172(%esp)52# in5 = *(uint32 *) (x + 20)53movl 20(%edx),%ebp54# j3 = in355movl %eax,176(%esp)56# in6 = *(uint32 *) (x + 24)57movl 24(%edx),%eax58# j4 = in459movl %ecx,180(%esp)60# in7 = *(uint32 *) (x + 28)61movl 28(%edx),%ecx62# j5 = in563movl %ebp,184(%esp)64# in8 = *(uint32 *) (x + 32)65movl 32(%edx),%ebp66# j6 = in667movl %eax,188(%esp)68# in9 = *(uint32 *) (x + 36)69movl 36(%edx),%eax70# j7 = in771movl %ecx,192(%esp)72# in10 = *(uint32 *) (x + 40)73movl 40(%edx),%ecx74# j8 = in875movl %ebp,196(%esp)76# in11 = *(uint32 *) (x + 44)77movl 44(%edx),%ebp78# j9 = in979movl %eax,200(%esp)80# in12 = *(uint32 *) (x + 48)81movl 48(%edx),%eax82# j10 = in1083movl %ecx,204(%esp)84# in13 = *(uint32 *) (x + 52)85movl 52(%edx),%ecx86# j11 = in1187movl %ebp,208(%esp)88# in14 = *(uint32 *) (x + 56)89movl 56(%edx),%ebp90# j12 = in1291movl %eax,212(%esp)92# in15 = *(uint32 *) (x + 60)93movl 60(%edx),%eax94# j13 = in1395movl %ecx,216(%esp)96# j14 = in1497movl %ebp,220(%esp)98# j15 = in1599movl %eax,224(%esp)100# x_backup = x101movl %edx,64(%esp)102._bytesatleast1:103# bytes - 64104cmp $64,%ebx105# goto nocopy if unsigned>=106jae ._nocopy107# ctarget = out108movl %edi,228(%esp)109# out = &tmp110leal 0(%esp),%edi111# i = bytes112mov %ebx,%ecx113# while (i) { *out++ = *m++; --i }114rep movsb115# out = &tmp116leal 0(%esp),%edi117# m = &tmp118leal 0(%esp),%esi119._nocopy:120# out_backup = out121movl %edi,72(%esp)122# m_backup = m123movl %esi,68(%esp)124# bytes_backup = bytes125movl %ebx,76(%esp)126# in0 = j0127movl 164(%esp),%eax128# in1 = j1129movl 168(%esp),%ecx130# in2 = j2131movl 172(%esp),%edx132# in3 = j3133movl 176(%esp),%ebx134# x0 = in0135movl %eax,100(%esp)136# x1 = in1137movl %ecx,104(%esp)138# x2 = in2139movl %edx,108(%esp)140# x3 = in3141movl %ebx,112(%esp)142# in4 = j4143movl 180(%esp),%eax144# in5 = j5145movl 184(%esp),%ecx146# in6 = j6147movl 188(%esp),%edx148# in7 = j7149movl 192(%esp),%ebx150# x4 = in4151movl %eax,116(%esp)152# x5 = in5153movl %ecx,120(%esp)154# x6 = in6155movl %edx,124(%esp)156# x7 = in7157movl %ebx,128(%esp)158# in8 = j8159movl 196(%esp),%eax160# in9 = j9161movl 200(%esp),%ecx162# in10 = j10163movl 204(%esp),%edx164# in11 = j11165movl 208(%esp),%ebx166# x8 = in8167movl %eax,132(%esp)168# x9 = in9169movl %ecx,136(%esp)170# x10 = in10171movl %edx,140(%esp)172# x11 = in11173movl %ebx,144(%esp)174# in12 = j12175movl 212(%esp),%eax176# in13 = j13177movl 216(%esp),%ecx178# in14 = j14179movl 220(%esp),%edx180# in15 = j15181movl 224(%esp),%ebx182# x12 = in12183movl %eax,148(%esp)184# x13 = in13185movl %ecx,152(%esp)186# x14 = in14187movl %edx,156(%esp)188# x15 = in15189movl %ebx,160(%esp)190# i = 20191mov $20,%ebp192# p = x0193movl 100(%esp),%eax194# s = x5195movl 120(%esp),%ecx196# t = x10197movl 140(%esp),%edx198# w = x15199movl 160(%esp),%ebx200._mainloop:201# x0 = p202movl %eax,100(%esp)203# x10 = t204movl %edx,140(%esp)205# p += x12206addl 148(%esp),%eax207# x5 = s208movl %ecx,120(%esp)209# t += x6210addl 124(%esp),%edx211# x15 = w212movl %ebx,160(%esp)213# r = x1214movl 104(%esp),%esi215# r += s216add %ecx,%esi217# v = x11218movl 144(%esp),%edi219# v += w220add %ebx,%edi221# p <<<= 7222rol $7,%eax223# p ^= x4224xorl 116(%esp),%eax225# t <<<= 7226rol $7,%edx227# t ^= x14228xorl 156(%esp),%edx229# r <<<= 7230rol $7,%esi231# r ^= x9232xorl 136(%esp),%esi233# v <<<= 7234rol $7,%edi235# v ^= x3236xorl 112(%esp),%edi237# x4 = p238movl %eax,116(%esp)239# x14 = t240movl %edx,156(%esp)241# p += x0242addl 100(%esp),%eax243# x9 = r244movl %esi,136(%esp)245# t += x10246addl 140(%esp),%edx247# x3 = v248movl %edi,112(%esp)249# p <<<= 9250rol $9,%eax251# p ^= x8252xorl 132(%esp),%eax253# t <<<= 9254rol $9,%edx255# t ^= x2256xorl 108(%esp),%edx257# s += r258add %esi,%ecx259# s <<<= 9260rol $9,%ecx261# s ^= x13262xorl 152(%esp),%ecx263# w += v264add %edi,%ebx265# w <<<= 9266rol $9,%ebx267# w ^= x7268xorl 128(%esp),%ebx269# x8 = p270movl %eax,132(%esp)271# x2 = t272movl %edx,108(%esp)273# p += x4274addl 116(%esp),%eax275# x13 = s276movl %ecx,152(%esp)277# t += x14278addl 156(%esp),%edx279# x7 = w280movl %ebx,128(%esp)281# p <<<= 13282rol $13,%eax283# p ^= x12284xorl 148(%esp),%eax285# t <<<= 13286rol $13,%edx287# t ^= x6288xorl 124(%esp),%edx289# r += s290add %ecx,%esi291# r <<<= 13292rol $13,%esi293# r ^= x1294xorl 104(%esp),%esi295# v += w296add %ebx,%edi297# v <<<= 13298rol $13,%edi299# v ^= x11300xorl 144(%esp),%edi301# x12 = p302movl %eax,148(%esp)303# x6 = t304movl %edx,124(%esp)305# p += x8306addl 132(%esp),%eax307# x1 = r308movl %esi,104(%esp)309# t += x2310addl 108(%esp),%edx311# x11 = v312movl %edi,144(%esp)313# p <<<= 18314rol $18,%eax315# p ^= x0316xorl 100(%esp),%eax317# t <<<= 18318rol $18,%edx319# t ^= x10320xorl 140(%esp),%edx321# s += r322add %esi,%ecx323# s <<<= 18324rol $18,%ecx325# s ^= x5326xorl 120(%esp),%ecx327# w += v328add %edi,%ebx329# w <<<= 18330rol $18,%ebx331# w ^= x15332xorl 160(%esp),%ebx333# x0 = p334movl %eax,100(%esp)335# x10 = t336movl %edx,140(%esp)337# p += x3338addl 112(%esp),%eax339# p <<<= 7340rol $7,%eax341# x5 = s342movl %ecx,120(%esp)343# t += x9344addl 136(%esp),%edx345# x15 = w346movl %ebx,160(%esp)347# r = x4348movl 116(%esp),%esi349# r += s350add %ecx,%esi351# v = x14352movl 156(%esp),%edi353# v += w354add %ebx,%edi355# p ^= x1356xorl 104(%esp),%eax357# t <<<= 7358rol $7,%edx359# t ^= x11360xorl 144(%esp),%edx361# r <<<= 7362rol $7,%esi363# r ^= x6364xorl 124(%esp),%esi365# v <<<= 7366rol $7,%edi367# v ^= x12368xorl 148(%esp),%edi369# x1 = p370movl %eax,104(%esp)371# x11 = t372movl %edx,144(%esp)373# p += x0374addl 100(%esp),%eax375# x6 = r376movl %esi,124(%esp)377# t += x10378addl 140(%esp),%edx379# x12 = v380movl %edi,148(%esp)381# p <<<= 9382rol $9,%eax383# p ^= x2384xorl 108(%esp),%eax385# t <<<= 9386rol $9,%edx387# t ^= x8388xorl 132(%esp),%edx389# s += r390add %esi,%ecx391# s <<<= 9392rol $9,%ecx393# s ^= x7394xorl 128(%esp),%ecx395# w += v396add %edi,%ebx397# w <<<= 9398rol $9,%ebx399# w ^= x13400xorl 152(%esp),%ebx401# x2 = p402movl %eax,108(%esp)403# x8 = t404movl %edx,132(%esp)405# p += x1406addl 104(%esp),%eax407# x7 = s408movl %ecx,128(%esp)409# t += x11410addl 144(%esp),%edx411# x13 = w412movl %ebx,152(%esp)413# p <<<= 13414rol $13,%eax415# p ^= x3416xorl 112(%esp),%eax417# t <<<= 13418rol $13,%edx419# t ^= x9420xorl 136(%esp),%edx421# r += s422add %ecx,%esi423# r <<<= 13424rol $13,%esi425# r ^= x4426xorl 116(%esp),%esi427# v += w428add %ebx,%edi429# v <<<= 13430rol $13,%edi431# v ^= x14432xorl 156(%esp),%edi433# x3 = p434movl %eax,112(%esp)435# x9 = t436movl %edx,136(%esp)437# p += x2438addl 108(%esp),%eax439# x4 = r440movl %esi,116(%esp)441# t += x8442addl 132(%esp),%edx443# x14 = v444movl %edi,156(%esp)445# p <<<= 18446rol $18,%eax447# p ^= x0448xorl 100(%esp),%eax449# t <<<= 18450rol $18,%edx451# t ^= x10452xorl 140(%esp),%edx453# s += r454add %esi,%ecx455# s <<<= 18456rol $18,%ecx457# s ^= x5458xorl 120(%esp),%ecx459# w += v460add %edi,%ebx461# w <<<= 18462rol $18,%ebx463# w ^= x15464xorl 160(%esp),%ebx465# x0 = p466movl %eax,100(%esp)467# x10 = t468movl %edx,140(%esp)469# p += x12470addl 148(%esp),%eax471# x5 = s472movl %ecx,120(%esp)473# t += x6474addl 124(%esp),%edx475# x15 = w476movl %ebx,160(%esp)477# r = x1478movl 104(%esp),%esi479# r += s480add %ecx,%esi481# v = x11482movl 144(%esp),%edi483# v += w484add %ebx,%edi485# p <<<= 7486rol $7,%eax487# p ^= x4488xorl 116(%esp),%eax489# t <<<= 7490rol $7,%edx491# t ^= x14492xorl 156(%esp),%edx493# r <<<= 7494rol $7,%esi495# r ^= x9496xorl 136(%esp),%esi497# v <<<= 7498rol $7,%edi499# v ^= x3500xorl 112(%esp),%edi501# x4 = p502movl %eax,116(%esp)503# x14 = t504movl %edx,156(%esp)505# p += x0506addl 100(%esp),%eax507# x9 = r508movl %esi,136(%esp)509# t += x10510addl 140(%esp),%edx511# x3 = v512movl %edi,112(%esp)513# p <<<= 9514rol $9,%eax515# p ^= x8516xorl 132(%esp),%eax517# t <<<= 9518rol $9,%edx519# t ^= x2520xorl 108(%esp),%edx521# s += r522add %esi,%ecx523# s <<<= 9524rol $9,%ecx525# s ^= x13526xorl 152(%esp),%ecx527# w += v528add %edi,%ebx529# w <<<= 9530rol $9,%ebx531# w ^= x7532xorl 128(%esp),%ebx533# x8 = p534movl %eax,132(%esp)535# x2 = t536movl %edx,108(%esp)537# p += x4538addl 116(%esp),%eax539# x13 = s540movl %ecx,152(%esp)541# t += x14542addl 156(%esp),%edx543# x7 = w544movl %ebx,128(%esp)545# p <<<= 13546rol $13,%eax547# p ^= x12548xorl 148(%esp),%eax549# t <<<= 13550rol $13,%edx551# t ^= x6552xorl 124(%esp),%edx553# r += s554add %ecx,%esi555# r <<<= 13556rol $13,%esi557# r ^= x1558xorl 104(%esp),%esi559# v += w560add %ebx,%edi561# v <<<= 13562rol $13,%edi563# v ^= x11564xorl 144(%esp),%edi565# x12 = p566movl %eax,148(%esp)567# x6 = t568movl %edx,124(%esp)569# p += x8570addl 132(%esp),%eax571# x1 = r572movl %esi,104(%esp)573# t += x2574addl 108(%esp),%edx575# x11 = v576movl %edi,144(%esp)577# p <<<= 18578rol $18,%eax579# p ^= x0580xorl 100(%esp),%eax581# t <<<= 18582rol $18,%edx583# t ^= x10584xorl 140(%esp),%edx585# s += r586add %esi,%ecx587# s <<<= 18588rol $18,%ecx589# s ^= x5590xorl 120(%esp),%ecx591# w += v592add %edi,%ebx593# w <<<= 18594rol $18,%ebx595# w ^= x15596xorl 160(%esp),%ebx597# x0 = p598movl %eax,100(%esp)599# x10 = t600movl %edx,140(%esp)601# p += x3602addl 112(%esp),%eax603# p <<<= 7604rol $7,%eax605# x5 = s606movl %ecx,120(%esp)607# t += x9608addl 136(%esp),%edx609# x15 = w610movl %ebx,160(%esp)611# r = x4612movl 116(%esp),%esi613# r += s614add %ecx,%esi615# v = x14616movl 156(%esp),%edi617# v += w618add %ebx,%edi619# p ^= x1620xorl 104(%esp),%eax621# t <<<= 7622rol $7,%edx623# t ^= x11624xorl 144(%esp),%edx625# r <<<= 7626rol $7,%esi627# r ^= x6628xorl 124(%esp),%esi629# v <<<= 7630rol $7,%edi631# v ^= x12632xorl 148(%esp),%edi633# x1 = p634movl %eax,104(%esp)635# x11 = t636movl %edx,144(%esp)637# p += x0638addl 100(%esp),%eax639# x6 = r640movl %esi,124(%esp)641# t += x10642addl 140(%esp),%edx643# x12 = v644movl %edi,148(%esp)645# p <<<= 9646rol $9,%eax647# p ^= x2648xorl 108(%esp),%eax649# t <<<= 9650rol $9,%edx651# t ^= x8652xorl 132(%esp),%edx653# s += r654add %esi,%ecx655# s <<<= 9656rol $9,%ecx657# s ^= x7658xorl 128(%esp),%ecx659# w += v660add %edi,%ebx661# w <<<= 9662rol $9,%ebx663# w ^= x13664xorl 152(%esp),%ebx665# x2 = p666movl %eax,108(%esp)667# x8 = t668movl %edx,132(%esp)669# p += x1670addl 104(%esp),%eax671# x7 = s672movl %ecx,128(%esp)673# t += x11674addl 144(%esp),%edx675# x13 = w676movl %ebx,152(%esp)677# p <<<= 13678rol $13,%eax679# p ^= x3680xorl 112(%esp),%eax681# t <<<= 13682rol $13,%edx683# t ^= x9684xorl 136(%esp),%edx685# r += s686add %ecx,%esi687# r <<<= 13688rol $13,%esi689# r ^= x4690xorl 116(%esp),%esi691# v += w692add %ebx,%edi693# v <<<= 13694rol $13,%edi695# v ^= x14696xorl 156(%esp),%edi697# x3 = p698movl %eax,112(%esp)699# x9 = t700movl %edx,136(%esp)701# p += x2702addl 108(%esp),%eax703# x4 = r704movl %esi,116(%esp)705# t += x8706addl 132(%esp),%edx707# x14 = v708movl %edi,156(%esp)709# p <<<= 18710rol $18,%eax711# p ^= x0712xorl 100(%esp),%eax713# t <<<= 18714rol $18,%edx715# t ^= x10716xorl 140(%esp),%edx717# s += r718add %esi,%ecx719# s <<<= 18720rol $18,%ecx721# s ^= x5722xorl 120(%esp),%ecx723# w += v724add %edi,%ebx725# w <<<= 18726rol $18,%ebx727# w ^= x15728xorl 160(%esp),%ebx729# i -= 4730sub $4,%ebp731# goto mainloop if unsigned >732ja ._mainloop733# x0 = p734movl %eax,100(%esp)735# x5 = s736movl %ecx,120(%esp)737# x10 = t738movl %edx,140(%esp)739# x15 = w740movl %ebx,160(%esp)741# out = out_backup742movl 72(%esp),%edi743# m = m_backup744movl 68(%esp),%esi745# in0 = x0746movl 100(%esp),%eax747# in1 = x1748movl 104(%esp),%ecx749# in0 += j0750addl 164(%esp),%eax751# in1 += j1752addl 168(%esp),%ecx753# in0 ^= *(uint32 *) (m + 0)754xorl 0(%esi),%eax755# in1 ^= *(uint32 *) (m + 4)756xorl 4(%esi),%ecx757# *(uint32 *) (out + 0) = in0758movl %eax,0(%edi)759# *(uint32 *) (out + 4) = in1760movl %ecx,4(%edi)761# in2 = x2762movl 108(%esp),%eax763# in3 = x3764movl 112(%esp),%ecx765# in2 += j2766addl 172(%esp),%eax767# in3 += j3768addl 176(%esp),%ecx769# in2 ^= *(uint32 *) (m + 8)770xorl 8(%esi),%eax771# in3 ^= *(uint32 *) (m + 12)772xorl 12(%esi),%ecx773# *(uint32 *) (out + 8) = in2774movl %eax,8(%edi)775# *(uint32 *) (out + 12) = in3776movl %ecx,12(%edi)777# in4 = x4778movl 116(%esp),%eax779# in5 = x5780movl 120(%esp),%ecx781# in4 += j4782addl 180(%esp),%eax783# in5 += j5784addl 184(%esp),%ecx785# in4 ^= *(uint32 *) (m + 16)786xorl 16(%esi),%eax787# in5 ^= *(uint32 *) (m + 20)788xorl 20(%esi),%ecx789# *(uint32 *) (out + 16) = in4790movl %eax,16(%edi)791# *(uint32 *) (out + 20) = in5792movl %ecx,20(%edi)793# in6 = x6794movl 124(%esp),%eax795# in7 = x7796movl 128(%esp),%ecx797# in6 += j6798addl 188(%esp),%eax799# in7 += j7800addl 192(%esp),%ecx801# in6 ^= *(uint32 *) (m + 24)802xorl 24(%esi),%eax803# in7 ^= *(uint32 *) (m + 28)804xorl 28(%esi),%ecx805# *(uint32 *) (out + 24) = in6806movl %eax,24(%edi)807# *(uint32 *) (out + 28) = in7808movl %ecx,28(%edi)809# in8 = x8810movl 132(%esp),%eax811# in9 = x9812movl 136(%esp),%ecx813# in8 += j8814addl 196(%esp),%eax815# in9 += j9816addl 200(%esp),%ecx817# in8 ^= *(uint32 *) (m + 32)818xorl 32(%esi),%eax819# in9 ^= *(uint32 *) (m + 36)820xorl 36(%esi),%ecx821# *(uint32 *) (out + 32) = in8822movl %eax,32(%edi)823# *(uint32 *) (out + 36) = in9824movl %ecx,36(%edi)825# in10 = x10826movl 140(%esp),%eax827# in11 = x11828movl 144(%esp),%ecx829# in10 += j10830addl 204(%esp),%eax831# in11 += j11832addl 208(%esp),%ecx833# in10 ^= *(uint32 *) (m + 40)834xorl 40(%esi),%eax835# in11 ^= *(uint32 *) (m + 44)836xorl 44(%esi),%ecx837# *(uint32 *) (out + 40) = in10838movl %eax,40(%edi)839# *(uint32 *) (out + 44) = in11840movl %ecx,44(%edi)841# in12 = x12842movl 148(%esp),%eax843# in13 = x13844movl 152(%esp),%ecx845# in12 += j12846addl 212(%esp),%eax847# in13 += j13848addl 216(%esp),%ecx849# in12 ^= *(uint32 *) (m + 48)850xorl 48(%esi),%eax851# in13 ^= *(uint32 *) (m + 52)852xorl 52(%esi),%ecx853# *(uint32 *) (out + 48) = in12854movl %eax,48(%edi)855# *(uint32 *) (out + 52) = in13856movl %ecx,52(%edi)857# in14 = x14858movl 156(%esp),%eax859# in15 = x15860movl 160(%esp),%ecx861# in14 += j14862addl 220(%esp),%eax863# in15 += j15864addl 224(%esp),%ecx865# in14 ^= *(uint32 *) (m + 56)866xorl 56(%esi),%eax867# in15 ^= *(uint32 *) (m + 60)868xorl 60(%esi),%ecx869# *(uint32 *) (out + 56) = in14870movl %eax,56(%edi)871# *(uint32 *) (out + 60) = in15872movl %ecx,60(%edi)873# bytes = bytes_backup874movl 76(%esp),%ebx875# in8 = j8876movl 196(%esp),%eax877# in9 = j9878movl 200(%esp),%ecx879# in8 += 1880add $1,%eax881# in9 += 0 + carry882adc $0,%ecx883# j8 = in8884movl %eax,196(%esp)885# j9 = in9886movl %ecx,200(%esp)887# bytes - 64888cmp $64,%ebx889# goto bytesatleast65 if unsigned>890ja ._bytesatleast65891# goto bytesatleast64 if unsigned>=892jae ._bytesatleast64893# m = out894mov %edi,%esi895# out = ctarget896movl 228(%esp),%edi897# i = bytes898mov %ebx,%ecx899# while (i) { *out++ = *m++; --i }900rep movsb901._bytesatleast64:902# x = x_backup903movl 64(%esp),%eax904# in8 = j8905movl 196(%esp),%ecx906# in9 = j9907movl 200(%esp),%edx908# *(uint32 *) (x + 32) = in8909movl %ecx,32(%eax)910# *(uint32 *) (x + 36) = in9911movl %edx,36(%eax)912._done:913# eax = eax_stack914movl 80(%esp),%eax915# ebx = ebx_stack916movl 84(%esp),%ebx917# esi = esi_stack918movl 88(%esp),%esi919# edi = edi_stack920movl 92(%esp),%edi921# ebp = ebp_stack922movl 96(%esp),%ebp923# leave924add %eax,%esp925ret926._bytesatleast65:927# bytes -= 64928sub $64,%ebx929# out += 64930add $64,%edi931# m += 64932add $64,%esi933# goto bytesatleast1934jmp ._bytesatleast1935# enter ECRYPT_keysetup936.text937.p2align 5938.globl ECRYPT_keysetup939ECRYPT_keysetup:940mov %esp,%eax941and $31,%eax942add $256,%eax943sub %eax,%esp944# eax_stack = eax945movl %eax,64(%esp)946# ebx_stack = ebx947movl %ebx,68(%esp)948# esi_stack = esi949movl %esi,72(%esp)950# edi_stack = edi951movl %edi,76(%esp)952# ebp_stack = ebp953movl %ebp,80(%esp)954# k = arg2955movl 8(%esp,%eax),%ecx956# kbits = arg3957movl 12(%esp,%eax),%edx958# x = arg1959movl 4(%esp,%eax),%eax960# in1 = *(uint32 *) (k + 0)961movl 0(%ecx),%ebx962# in2 = *(uint32 *) (k + 4)963movl 4(%ecx),%esi964# in3 = *(uint32 *) (k + 8)965movl 8(%ecx),%edi966# in4 = *(uint32 *) (k + 12)967movl 12(%ecx),%ebp968# *(uint32 *) (x + 4) = in1969movl %ebx,4(%eax)970# *(uint32 *) (x + 8) = in2971movl %esi,8(%eax)972# *(uint32 *) (x + 12) = in3973movl %edi,12(%eax)974# *(uint32 *) (x + 16) = in4975movl %ebp,16(%eax)976# kbits - 256977cmp $256,%edx978# goto kbits128 if unsigned<979jb ._kbits128980._kbits256:981# in11 = *(uint32 *) (k + 16)982movl 16(%ecx),%edx983# in12 = *(uint32 *) (k + 20)984movl 20(%ecx),%ebx985# in13 = *(uint32 *) (k + 24)986movl 24(%ecx),%esi987# in14 = *(uint32 *) (k + 28)988movl 28(%ecx),%ecx989# *(uint32 *) (x + 44) = in11990movl %edx,44(%eax)991# *(uint32 *) (x + 48) = in12992movl %ebx,48(%eax)993# *(uint32 *) (x + 52) = in13994movl %esi,52(%eax)995# *(uint32 *) (x + 56) = in14996movl %ecx,56(%eax)997# in0 = 1634760805998mov $1634760805,%ecx999# in5 = 8577608781000mov $857760878,%edx1001# in10 = 20364772341002mov $2036477234,%ebx1003# in15 = 17972852361004mov $1797285236,%esi1005# *(uint32 *) (x + 0) = in01006movl %ecx,0(%eax)1007# *(uint32 *) (x + 20) = in51008movl %edx,20(%eax)1009# *(uint32 *) (x + 40) = in101010movl %ebx,40(%eax)1011# *(uint32 *) (x + 60) = in151012movl %esi,60(%eax)1013# goto keysetupdone1014jmp ._keysetupdone1015._kbits128:1016# in11 = *(uint32 *) (k + 0)1017movl 0(%ecx),%edx1018# in12 = *(uint32 *) (k + 4)1019movl 4(%ecx),%ebx1020# in13 = *(uint32 *) (k + 8)1021movl 8(%ecx),%esi1022# in14 = *(uint32 *) (k + 12)1023movl 12(%ecx),%ecx1024# *(uint32 *) (x + 44) = in111025movl %edx,44(%eax)1026# *(uint32 *) (x + 48) = in121027movl %ebx,48(%eax)1028# *(uint32 *) (x + 52) = in131029movl %esi,52(%eax)1030# *(uint32 *) (x + 56) = in141031movl %ecx,56(%eax)1032# in0 = 16347608051033mov $1634760805,%ecx1034# in5 = 8242064461035mov $824206446,%edx1036# in10 = 20364772381037mov $2036477238,%ebx1038# in15 = 17972852361039mov $1797285236,%esi1040# *(uint32 *) (x + 0) = in01041movl %ecx,0(%eax)1042# *(uint32 *) (x + 20) = in51043movl %edx,20(%eax)1044# *(uint32 *) (x + 40) = in101045movl %ebx,40(%eax)1046# *(uint32 *) (x + 60) = in151047movl %esi,60(%eax)1048._keysetupdone:1049# eax = eax_stack1050movl 64(%esp),%eax1051# ebx = ebx_stack1052movl 68(%esp),%ebx1053# esi = esi_stack1054movl 72(%esp),%esi1055# edi = edi_stack1056movl 76(%esp),%edi1057# ebp = ebp_stack1058movl 80(%esp),%ebp1059# leave1060add %eax,%esp1061ret1062# enter ECRYPT_ivsetup1063.text1064.p2align 51065.globl ECRYPT_ivsetup1066ECRYPT_ivsetup:1067mov %esp,%eax1068and $31,%eax1069add $256,%eax1070sub %eax,%esp1071# eax_stack = eax1072movl %eax,64(%esp)1073# ebx_stack = ebx1074movl %ebx,68(%esp)1075# esi_stack = esi1076movl %esi,72(%esp)1077# edi_stack = edi1078movl %edi,76(%esp)1079# ebp_stack = ebp1080movl %ebp,80(%esp)1081# iv = arg21082movl 8(%esp,%eax),%ecx1083# x = arg11084movl 4(%esp,%eax),%eax1085# in6 = *(uint32 *) (iv + 0)1086movl 0(%ecx),%edx1087# in7 = *(uint32 *) (iv + 4)1088movl 4(%ecx),%ecx1089# in8 = 01090mov $0,%ebx1091# in9 = 01092mov $0,%esi1093# *(uint32 *) (x + 24) = in61094movl %edx,24(%eax)1095# *(uint32 *) (x + 28) = in71096movl %ecx,28(%eax)1097# *(uint32 *) (x + 32) = in81098movl %ebx,32(%eax)1099# *(uint32 *) (x + 36) = in91100movl %esi,36(%eax)1101# eax = eax_stack1102movl 64(%esp),%eax1103# ebx = ebx_stack1104movl 68(%esp),%ebx1105# esi = esi_stack1106movl 72(%esp),%esi1107# edi = edi_stack1108movl 76(%esp),%edi1109# ebp = ebp_stack1110movl 80(%esp),%ebp1111# leave1112add %eax,%esp1113ret111411151116