aesni-x86.S 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513
  1. // This file is generated from a similarly-named Perl script in the BoringSSL
  2. // source tree. Do not edit by hand.
  3. #if defined(__i386__)
  4. #if defined(BORINGSSL_PREFIX)
  5. #include <boringssl_prefix_symbols_asm.h>
  6. #endif
  7. .text
  8. #ifdef BORINGSSL_DISPATCH_TEST
  9. #endif
  10. .globl aes_hw_encrypt
  11. .hidden aes_hw_encrypt
  12. .type aes_hw_encrypt,@function
  13. .align 16
  14. aes_hw_encrypt:
  15. .L_aes_hw_encrypt_begin:
  16. #ifdef BORINGSSL_DISPATCH_TEST
  17. pushl %ebx
  18. pushl %edx
  19. call .L000pic
  20. .L000pic:
  21. popl %ebx
  22. leal BORINGSSL_function_hit+1-.L000pic(%ebx),%ebx
  23. movl $1,%edx
  24. movb %dl,(%ebx)
  25. popl %edx
  26. popl %ebx
  27. #endif
  28. movl 4(%esp),%eax
  29. movl 12(%esp),%edx
  30. movups (%eax),%xmm2
  31. movl 240(%edx),%ecx
  32. movl 8(%esp),%eax
  33. movups (%edx),%xmm0
  34. movups 16(%edx),%xmm1
  35. leal 32(%edx),%edx
  36. xorps %xmm0,%xmm2
  37. .L001enc1_loop_1:
  38. .byte 102,15,56,220,209
  39. decl %ecx
  40. movups (%edx),%xmm1
  41. leal 16(%edx),%edx
  42. jnz .L001enc1_loop_1
  43. .byte 102,15,56,221,209
  44. pxor %xmm0,%xmm0
  45. pxor %xmm1,%xmm1
  46. movups %xmm2,(%eax)
  47. pxor %xmm2,%xmm2
  48. ret
  49. .size aes_hw_encrypt,.-.L_aes_hw_encrypt_begin
  50. .globl aes_hw_decrypt
  51. .hidden aes_hw_decrypt
  52. .type aes_hw_decrypt,@function
  53. .align 16
  54. aes_hw_decrypt:
  55. .L_aes_hw_decrypt_begin:
  56. movl 4(%esp),%eax
  57. movl 12(%esp),%edx
  58. movups (%eax),%xmm2
  59. movl 240(%edx),%ecx
  60. movl 8(%esp),%eax
  61. movups (%edx),%xmm0
  62. movups 16(%edx),%xmm1
  63. leal 32(%edx),%edx
  64. xorps %xmm0,%xmm2
  65. .L002dec1_loop_2:
  66. .byte 102,15,56,222,209
  67. decl %ecx
  68. movups (%edx),%xmm1
  69. leal 16(%edx),%edx
  70. jnz .L002dec1_loop_2
  71. .byte 102,15,56,223,209
  72. pxor %xmm0,%xmm0
  73. pxor %xmm1,%xmm1
  74. movups %xmm2,(%eax)
  75. pxor %xmm2,%xmm2
  76. ret
  77. .size aes_hw_decrypt,.-.L_aes_hw_decrypt_begin
  78. .hidden _aesni_encrypt2
  79. .type _aesni_encrypt2,@function
  80. .align 16
  81. _aesni_encrypt2:
  82. movups (%edx),%xmm0
  83. shll $4,%ecx
  84. movups 16(%edx),%xmm1
  85. xorps %xmm0,%xmm2
  86. pxor %xmm0,%xmm3
  87. movups 32(%edx),%xmm0
  88. leal 32(%edx,%ecx,1),%edx
  89. negl %ecx
  90. addl $16,%ecx
  91. .L003enc2_loop:
  92. .byte 102,15,56,220,209
  93. .byte 102,15,56,220,217
  94. movups (%edx,%ecx,1),%xmm1
  95. addl $32,%ecx
  96. .byte 102,15,56,220,208
  97. .byte 102,15,56,220,216
  98. movups -16(%edx,%ecx,1),%xmm0
  99. jnz .L003enc2_loop
  100. .byte 102,15,56,220,209
  101. .byte 102,15,56,220,217
  102. .byte 102,15,56,221,208
  103. .byte 102,15,56,221,216
  104. ret
  105. .size _aesni_encrypt2,.-_aesni_encrypt2
  106. .hidden _aesni_decrypt2
  107. .type _aesni_decrypt2,@function
  108. .align 16
  109. _aesni_decrypt2:
  110. movups (%edx),%xmm0
  111. shll $4,%ecx
  112. movups 16(%edx),%xmm1
  113. xorps %xmm0,%xmm2
  114. pxor %xmm0,%xmm3
  115. movups 32(%edx),%xmm0
  116. leal 32(%edx,%ecx,1),%edx
  117. negl %ecx
  118. addl $16,%ecx
  119. .L004dec2_loop:
  120. .byte 102,15,56,222,209
  121. .byte 102,15,56,222,217
  122. movups (%edx,%ecx,1),%xmm1
  123. addl $32,%ecx
  124. .byte 102,15,56,222,208
  125. .byte 102,15,56,222,216
  126. movups -16(%edx,%ecx,1),%xmm0
  127. jnz .L004dec2_loop
  128. .byte 102,15,56,222,209
  129. .byte 102,15,56,222,217
  130. .byte 102,15,56,223,208
  131. .byte 102,15,56,223,216
  132. ret
  133. .size _aesni_decrypt2,.-_aesni_decrypt2
  134. .hidden _aesni_encrypt3
  135. .type _aesni_encrypt3,@function
  136. .align 16
  137. _aesni_encrypt3:
  138. movups (%edx),%xmm0
  139. shll $4,%ecx
  140. movups 16(%edx),%xmm1
  141. xorps %xmm0,%xmm2
  142. pxor %xmm0,%xmm3
  143. pxor %xmm0,%xmm4
  144. movups 32(%edx),%xmm0
  145. leal 32(%edx,%ecx,1),%edx
  146. negl %ecx
  147. addl $16,%ecx
  148. .L005enc3_loop:
  149. .byte 102,15,56,220,209
  150. .byte 102,15,56,220,217
  151. .byte 102,15,56,220,225
  152. movups (%edx,%ecx,1),%xmm1
  153. addl $32,%ecx
  154. .byte 102,15,56,220,208
  155. .byte 102,15,56,220,216
  156. .byte 102,15,56,220,224
  157. movups -16(%edx,%ecx,1),%xmm0
  158. jnz .L005enc3_loop
  159. .byte 102,15,56,220,209
  160. .byte 102,15,56,220,217
  161. .byte 102,15,56,220,225
  162. .byte 102,15,56,221,208
  163. .byte 102,15,56,221,216
  164. .byte 102,15,56,221,224
  165. ret
  166. .size _aesni_encrypt3,.-_aesni_encrypt3
  167. .hidden _aesni_decrypt3
  168. .type _aesni_decrypt3,@function
  169. .align 16
  170. _aesni_decrypt3:
  171. movups (%edx),%xmm0
  172. shll $4,%ecx
  173. movups 16(%edx),%xmm1
  174. xorps %xmm0,%xmm2
  175. pxor %xmm0,%xmm3
  176. pxor %xmm0,%xmm4
  177. movups 32(%edx),%xmm0
  178. leal 32(%edx,%ecx,1),%edx
  179. negl %ecx
  180. addl $16,%ecx
  181. .L006dec3_loop:
  182. .byte 102,15,56,222,209
  183. .byte 102,15,56,222,217
  184. .byte 102,15,56,222,225
  185. movups (%edx,%ecx,1),%xmm1
  186. addl $32,%ecx
  187. .byte 102,15,56,222,208
  188. .byte 102,15,56,222,216
  189. .byte 102,15,56,222,224
  190. movups -16(%edx,%ecx,1),%xmm0
  191. jnz .L006dec3_loop
  192. .byte 102,15,56,222,209
  193. .byte 102,15,56,222,217
  194. .byte 102,15,56,222,225
  195. .byte 102,15,56,223,208
  196. .byte 102,15,56,223,216
  197. .byte 102,15,56,223,224
  198. ret
  199. .size _aesni_decrypt3,.-_aesni_decrypt3
  200. .hidden _aesni_encrypt4
  201. .type _aesni_encrypt4,@function
  202. .align 16
  203. _aesni_encrypt4:
  204. movups (%edx),%xmm0
  205. movups 16(%edx),%xmm1
  206. shll $4,%ecx
  207. xorps %xmm0,%xmm2
  208. pxor %xmm0,%xmm3
  209. pxor %xmm0,%xmm4
  210. pxor %xmm0,%xmm5
  211. movups 32(%edx),%xmm0
  212. leal 32(%edx,%ecx,1),%edx
  213. negl %ecx
  214. .byte 15,31,64,0
  215. addl $16,%ecx
  216. .L007enc4_loop:
  217. .byte 102,15,56,220,209
  218. .byte 102,15,56,220,217
  219. .byte 102,15,56,220,225
  220. .byte 102,15,56,220,233
  221. movups (%edx,%ecx,1),%xmm1
  222. addl $32,%ecx
  223. .byte 102,15,56,220,208
  224. .byte 102,15,56,220,216
  225. .byte 102,15,56,220,224
  226. .byte 102,15,56,220,232
  227. movups -16(%edx,%ecx,1),%xmm0
  228. jnz .L007enc4_loop
  229. .byte 102,15,56,220,209
  230. .byte 102,15,56,220,217
  231. .byte 102,15,56,220,225
  232. .byte 102,15,56,220,233
  233. .byte 102,15,56,221,208
  234. .byte 102,15,56,221,216
  235. .byte 102,15,56,221,224
  236. .byte 102,15,56,221,232
  237. ret
  238. .size _aesni_encrypt4,.-_aesni_encrypt4
  239. .hidden _aesni_decrypt4
  240. .type _aesni_decrypt4,@function
  241. .align 16
  242. _aesni_decrypt4:
  243. movups (%edx),%xmm0
  244. movups 16(%edx),%xmm1
  245. shll $4,%ecx
  246. xorps %xmm0,%xmm2
  247. pxor %xmm0,%xmm3
  248. pxor %xmm0,%xmm4
  249. pxor %xmm0,%xmm5
  250. movups 32(%edx),%xmm0
  251. leal 32(%edx,%ecx,1),%edx
  252. negl %ecx
  253. .byte 15,31,64,0
  254. addl $16,%ecx
  255. .L008dec4_loop:
  256. .byte 102,15,56,222,209
  257. .byte 102,15,56,222,217
  258. .byte 102,15,56,222,225
  259. .byte 102,15,56,222,233
  260. movups (%edx,%ecx,1),%xmm1
  261. addl $32,%ecx
  262. .byte 102,15,56,222,208
  263. .byte 102,15,56,222,216
  264. .byte 102,15,56,222,224
  265. .byte 102,15,56,222,232
  266. movups -16(%edx,%ecx,1),%xmm0
  267. jnz .L008dec4_loop
  268. .byte 102,15,56,222,209
  269. .byte 102,15,56,222,217
  270. .byte 102,15,56,222,225
  271. .byte 102,15,56,222,233
  272. .byte 102,15,56,223,208
  273. .byte 102,15,56,223,216
  274. .byte 102,15,56,223,224
  275. .byte 102,15,56,223,232
  276. ret
  277. .size _aesni_decrypt4,.-_aesni_decrypt4
  278. .hidden _aesni_encrypt6
  279. .type _aesni_encrypt6,@function
  280. .align 16
  281. _aesni_encrypt6:
  282. movups (%edx),%xmm0
  283. shll $4,%ecx
  284. movups 16(%edx),%xmm1
  285. xorps %xmm0,%xmm2
  286. pxor %xmm0,%xmm3
  287. pxor %xmm0,%xmm4
  288. .byte 102,15,56,220,209
  289. pxor %xmm0,%xmm5
  290. pxor %xmm0,%xmm6
  291. .byte 102,15,56,220,217
  292. leal 32(%edx,%ecx,1),%edx
  293. negl %ecx
  294. .byte 102,15,56,220,225
  295. pxor %xmm0,%xmm7
  296. movups (%edx,%ecx,1),%xmm0
  297. addl $16,%ecx
  298. jmp .L009_aesni_encrypt6_inner
  299. .align 16
  300. .L010enc6_loop:
  301. .byte 102,15,56,220,209
  302. .byte 102,15,56,220,217
  303. .byte 102,15,56,220,225
  304. .L009_aesni_encrypt6_inner:
  305. .byte 102,15,56,220,233
  306. .byte 102,15,56,220,241
  307. .byte 102,15,56,220,249
  308. .L_aesni_encrypt6_enter:
  309. movups (%edx,%ecx,1),%xmm1
  310. addl $32,%ecx
  311. .byte 102,15,56,220,208
  312. .byte 102,15,56,220,216
  313. .byte 102,15,56,220,224
  314. .byte 102,15,56,220,232
  315. .byte 102,15,56,220,240
  316. .byte 102,15,56,220,248
  317. movups -16(%edx,%ecx,1),%xmm0
  318. jnz .L010enc6_loop
  319. .byte 102,15,56,220,209
  320. .byte 102,15,56,220,217
  321. .byte 102,15,56,220,225
  322. .byte 102,15,56,220,233
  323. .byte 102,15,56,220,241
  324. .byte 102,15,56,220,249
  325. .byte 102,15,56,221,208
  326. .byte 102,15,56,221,216
  327. .byte 102,15,56,221,224
  328. .byte 102,15,56,221,232
  329. .byte 102,15,56,221,240
  330. .byte 102,15,56,221,248
  331. ret
  332. .size _aesni_encrypt6,.-_aesni_encrypt6
  333. .hidden _aesni_decrypt6
  334. .type _aesni_decrypt6,@function
  335. .align 16
  336. _aesni_decrypt6:
  337. movups (%edx),%xmm0
  338. shll $4,%ecx
  339. movups 16(%edx),%xmm1
  340. xorps %xmm0,%xmm2
  341. pxor %xmm0,%xmm3
  342. pxor %xmm0,%xmm4
  343. .byte 102,15,56,222,209
  344. pxor %xmm0,%xmm5
  345. pxor %xmm0,%xmm6
  346. .byte 102,15,56,222,217
  347. leal 32(%edx,%ecx,1),%edx
  348. negl %ecx
  349. .byte 102,15,56,222,225
  350. pxor %xmm0,%xmm7
  351. movups (%edx,%ecx,1),%xmm0
  352. addl $16,%ecx
  353. jmp .L011_aesni_decrypt6_inner
  354. .align 16
  355. .L012dec6_loop:
  356. .byte 102,15,56,222,209
  357. .byte 102,15,56,222,217
  358. .byte 102,15,56,222,225
  359. .L011_aesni_decrypt6_inner:
  360. .byte 102,15,56,222,233
  361. .byte 102,15,56,222,241
  362. .byte 102,15,56,222,249
  363. .L_aesni_decrypt6_enter:
  364. movups (%edx,%ecx,1),%xmm1
  365. addl $32,%ecx
  366. .byte 102,15,56,222,208
  367. .byte 102,15,56,222,216
  368. .byte 102,15,56,222,224
  369. .byte 102,15,56,222,232
  370. .byte 102,15,56,222,240
  371. .byte 102,15,56,222,248
  372. movups -16(%edx,%ecx,1),%xmm0
  373. jnz .L012dec6_loop
  374. .byte 102,15,56,222,209
  375. .byte 102,15,56,222,217
  376. .byte 102,15,56,222,225
  377. .byte 102,15,56,222,233
  378. .byte 102,15,56,222,241
  379. .byte 102,15,56,222,249
  380. .byte 102,15,56,223,208
  381. .byte 102,15,56,223,216
  382. .byte 102,15,56,223,224
  383. .byte 102,15,56,223,232
  384. .byte 102,15,56,223,240
  385. .byte 102,15,56,223,248
  386. ret
  387. .size _aesni_decrypt6,.-_aesni_decrypt6
  388. .globl aes_hw_ecb_encrypt
  389. .hidden aes_hw_ecb_encrypt
  390. .type aes_hw_ecb_encrypt,@function
  391. .align 16
  392. aes_hw_ecb_encrypt:
  393. .L_aes_hw_ecb_encrypt_begin:
  394. pushl %ebp
  395. pushl %ebx
  396. pushl %esi
  397. pushl %edi
  398. movl 20(%esp),%esi
  399. movl 24(%esp),%edi
  400. movl 28(%esp),%eax
  401. movl 32(%esp),%edx
  402. movl 36(%esp),%ebx
  403. andl $-16,%eax
  404. jz .L013ecb_ret
  405. movl 240(%edx),%ecx
  406. testl %ebx,%ebx
  407. jz .L014ecb_decrypt
  408. movl %edx,%ebp
  409. movl %ecx,%ebx
  410. cmpl $96,%eax
  411. jb .L015ecb_enc_tail
  412. movdqu (%esi),%xmm2
  413. movdqu 16(%esi),%xmm3
  414. movdqu 32(%esi),%xmm4
  415. movdqu 48(%esi),%xmm5
  416. movdqu 64(%esi),%xmm6
  417. movdqu 80(%esi),%xmm7
  418. leal 96(%esi),%esi
  419. subl $96,%eax
  420. jmp .L016ecb_enc_loop6_enter
  421. .align 16
  422. .L017ecb_enc_loop6:
  423. movups %xmm2,(%edi)
  424. movdqu (%esi),%xmm2
  425. movups %xmm3,16(%edi)
  426. movdqu 16(%esi),%xmm3
  427. movups %xmm4,32(%edi)
  428. movdqu 32(%esi),%xmm4
  429. movups %xmm5,48(%edi)
  430. movdqu 48(%esi),%xmm5
  431. movups %xmm6,64(%edi)
  432. movdqu 64(%esi),%xmm6
  433. movups %xmm7,80(%edi)
  434. leal 96(%edi),%edi
  435. movdqu 80(%esi),%xmm7
  436. leal 96(%esi),%esi
  437. .L016ecb_enc_loop6_enter:
  438. call _aesni_encrypt6
  439. movl %ebp,%edx
  440. movl %ebx,%ecx
  441. subl $96,%eax
  442. jnc .L017ecb_enc_loop6
  443. movups %xmm2,(%edi)
  444. movups %xmm3,16(%edi)
  445. movups %xmm4,32(%edi)
  446. movups %xmm5,48(%edi)
  447. movups %xmm6,64(%edi)
  448. movups %xmm7,80(%edi)
  449. leal 96(%edi),%edi
  450. addl $96,%eax
  451. jz .L013ecb_ret
  452. .L015ecb_enc_tail:
  453. movups (%esi),%xmm2
  454. cmpl $32,%eax
  455. jb .L018ecb_enc_one
  456. movups 16(%esi),%xmm3
  457. je .L019ecb_enc_two
  458. movups 32(%esi),%xmm4
  459. cmpl $64,%eax
  460. jb .L020ecb_enc_three
  461. movups 48(%esi),%xmm5
  462. je .L021ecb_enc_four
  463. movups 64(%esi),%xmm6
  464. xorps %xmm7,%xmm7
  465. call _aesni_encrypt6
  466. movups %xmm2,(%edi)
  467. movups %xmm3,16(%edi)
  468. movups %xmm4,32(%edi)
  469. movups %xmm5,48(%edi)
  470. movups %xmm6,64(%edi)
  471. jmp .L013ecb_ret
  472. .align 16
  473. .L018ecb_enc_one:
  474. movups (%edx),%xmm0
  475. movups 16(%edx),%xmm1
  476. leal 32(%edx),%edx
  477. xorps %xmm0,%xmm2
  478. .L022enc1_loop_3:
  479. .byte 102,15,56,220,209
  480. decl %ecx
  481. movups (%edx),%xmm1
  482. leal 16(%edx),%edx
  483. jnz .L022enc1_loop_3
  484. .byte 102,15,56,221,209
  485. movups %xmm2,(%edi)
  486. jmp .L013ecb_ret
  487. .align 16
  488. .L019ecb_enc_two:
  489. call _aesni_encrypt2
  490. movups %xmm2,(%edi)
  491. movups %xmm3,16(%edi)
  492. jmp .L013ecb_ret
  493. .align 16
  494. .L020ecb_enc_three:
  495. call _aesni_encrypt3
  496. movups %xmm2,(%edi)
  497. movups %xmm3,16(%edi)
  498. movups %xmm4,32(%edi)
  499. jmp .L013ecb_ret
  500. .align 16
  501. .L021ecb_enc_four:
  502. call _aesni_encrypt4
  503. movups %xmm2,(%edi)
  504. movups %xmm3,16(%edi)
  505. movups %xmm4,32(%edi)
  506. movups %xmm5,48(%edi)
  507. jmp .L013ecb_ret
  508. .align 16
  509. .L014ecb_decrypt:
  510. movl %edx,%ebp
  511. movl %ecx,%ebx
  512. cmpl $96,%eax
  513. jb .L023ecb_dec_tail
  514. movdqu (%esi),%xmm2
  515. movdqu 16(%esi),%xmm3
  516. movdqu 32(%esi),%xmm4
  517. movdqu 48(%esi),%xmm5
  518. movdqu 64(%esi),%xmm6
  519. movdqu 80(%esi),%xmm7
  520. leal 96(%esi),%esi
  521. subl $96,%eax
  522. jmp .L024ecb_dec_loop6_enter
  523. .align 16
  524. .L025ecb_dec_loop6:
  525. movups %xmm2,(%edi)
  526. movdqu (%esi),%xmm2
  527. movups %xmm3,16(%edi)
  528. movdqu 16(%esi),%xmm3
  529. movups %xmm4,32(%edi)
  530. movdqu 32(%esi),%xmm4
  531. movups %xmm5,48(%edi)
  532. movdqu 48(%esi),%xmm5
  533. movups %xmm6,64(%edi)
  534. movdqu 64(%esi),%xmm6
  535. movups %xmm7,80(%edi)
  536. leal 96(%edi),%edi
  537. movdqu 80(%esi),%xmm7
  538. leal 96(%esi),%esi
  539. .L024ecb_dec_loop6_enter:
  540. call _aesni_decrypt6
  541. movl %ebp,%edx
  542. movl %ebx,%ecx
  543. subl $96,%eax
  544. jnc .L025ecb_dec_loop6
  545. movups %xmm2,(%edi)
  546. movups %xmm3,16(%edi)
  547. movups %xmm4,32(%edi)
  548. movups %xmm5,48(%edi)
  549. movups %xmm6,64(%edi)
  550. movups %xmm7,80(%edi)
  551. leal 96(%edi),%edi
  552. addl $96,%eax
  553. jz .L013ecb_ret
  554. .L023ecb_dec_tail:
  555. movups (%esi),%xmm2
  556. cmpl $32,%eax
  557. jb .L026ecb_dec_one
  558. movups 16(%esi),%xmm3
  559. je .L027ecb_dec_two
  560. movups 32(%esi),%xmm4
  561. cmpl $64,%eax
  562. jb .L028ecb_dec_three
  563. movups 48(%esi),%xmm5
  564. je .L029ecb_dec_four
  565. movups 64(%esi),%xmm6
  566. xorps %xmm7,%xmm7
  567. call _aesni_decrypt6
  568. movups %xmm2,(%edi)
  569. movups %xmm3,16(%edi)
  570. movups %xmm4,32(%edi)
  571. movups %xmm5,48(%edi)
  572. movups %xmm6,64(%edi)
  573. jmp .L013ecb_ret
  574. .align 16
  575. .L026ecb_dec_one:
  576. movups (%edx),%xmm0
  577. movups 16(%edx),%xmm1
  578. leal 32(%edx),%edx
  579. xorps %xmm0,%xmm2
  580. .L030dec1_loop_4:
  581. .byte 102,15,56,222,209
  582. decl %ecx
  583. movups (%edx),%xmm1
  584. leal 16(%edx),%edx
  585. jnz .L030dec1_loop_4
  586. .byte 102,15,56,223,209
  587. movups %xmm2,(%edi)
  588. jmp .L013ecb_ret
  589. .align 16
  590. .L027ecb_dec_two:
  591. call _aesni_decrypt2
  592. movups %xmm2,(%edi)
  593. movups %xmm3,16(%edi)
  594. jmp .L013ecb_ret
  595. .align 16
  596. .L028ecb_dec_three:
  597. call _aesni_decrypt3
  598. movups %xmm2,(%edi)
  599. movups %xmm3,16(%edi)
  600. movups %xmm4,32(%edi)
  601. jmp .L013ecb_ret
  602. .align 16
  603. .L029ecb_dec_four:
  604. call _aesni_decrypt4
  605. movups %xmm2,(%edi)
  606. movups %xmm3,16(%edi)
  607. movups %xmm4,32(%edi)
  608. movups %xmm5,48(%edi)
  609. .L013ecb_ret:
  610. pxor %xmm0,%xmm0
  611. pxor %xmm1,%xmm1
  612. pxor %xmm2,%xmm2
  613. pxor %xmm3,%xmm3
  614. pxor %xmm4,%xmm4
  615. pxor %xmm5,%xmm5
  616. pxor %xmm6,%xmm6
  617. pxor %xmm7,%xmm7
  618. popl %edi
  619. popl %esi
  620. popl %ebx
  621. popl %ebp
  622. ret
  623. .size aes_hw_ecb_encrypt,.-.L_aes_hw_ecb_encrypt_begin
  624. .globl aes_hw_ccm64_encrypt_blocks
  625. .hidden aes_hw_ccm64_encrypt_blocks
  626. .type aes_hw_ccm64_encrypt_blocks,@function
  627. .align 16
  628. aes_hw_ccm64_encrypt_blocks:
  629. .L_aes_hw_ccm64_encrypt_blocks_begin:
  630. pushl %ebp
  631. pushl %ebx
  632. pushl %esi
  633. pushl %edi
  634. movl 20(%esp),%esi
  635. movl 24(%esp),%edi
  636. movl 28(%esp),%eax
  637. movl 32(%esp),%edx
  638. movl 36(%esp),%ebx
  639. movl 40(%esp),%ecx
  640. movl %esp,%ebp
  641. subl $60,%esp
  642. andl $-16,%esp
  643. movl %ebp,48(%esp)
  644. movdqu (%ebx),%xmm7
  645. movdqu (%ecx),%xmm3
  646. movl 240(%edx),%ecx
  647. movl $202182159,(%esp)
  648. movl $134810123,4(%esp)
  649. movl $67438087,8(%esp)
  650. movl $66051,12(%esp)
  651. movl $1,%ebx
  652. xorl %ebp,%ebp
  653. movl %ebx,16(%esp)
  654. movl %ebp,20(%esp)
  655. movl %ebp,24(%esp)
  656. movl %ebp,28(%esp)
  657. shll $4,%ecx
  658. movl $16,%ebx
  659. leal (%edx),%ebp
  660. movdqa (%esp),%xmm5
  661. movdqa %xmm7,%xmm2
  662. leal 32(%edx,%ecx,1),%edx
  663. subl %ecx,%ebx
  664. .byte 102,15,56,0,253
  665. .L031ccm64_enc_outer:
  666. movups (%ebp),%xmm0
  667. movl %ebx,%ecx
  668. movups (%esi),%xmm6
  669. xorps %xmm0,%xmm2
  670. movups 16(%ebp),%xmm1
  671. xorps %xmm6,%xmm0
  672. xorps %xmm0,%xmm3
  673. movups 32(%ebp),%xmm0
  674. .L032ccm64_enc2_loop:
  675. .byte 102,15,56,220,209
  676. .byte 102,15,56,220,217
  677. movups (%edx,%ecx,1),%xmm1
  678. addl $32,%ecx
  679. .byte 102,15,56,220,208
  680. .byte 102,15,56,220,216
  681. movups -16(%edx,%ecx,1),%xmm0
  682. jnz .L032ccm64_enc2_loop
  683. .byte 102,15,56,220,209
  684. .byte 102,15,56,220,217
  685. paddq 16(%esp),%xmm7
  686. decl %eax
  687. .byte 102,15,56,221,208
  688. .byte 102,15,56,221,216
  689. leal 16(%esi),%esi
  690. xorps %xmm2,%xmm6
  691. movdqa %xmm7,%xmm2
  692. movups %xmm6,(%edi)
  693. .byte 102,15,56,0,213
  694. leal 16(%edi),%edi
  695. jnz .L031ccm64_enc_outer
  696. movl 48(%esp),%esp
  697. movl 40(%esp),%edi
  698. movups %xmm3,(%edi)
  699. pxor %xmm0,%xmm0
  700. pxor %xmm1,%xmm1
  701. pxor %xmm2,%xmm2
  702. pxor %xmm3,%xmm3
  703. pxor %xmm4,%xmm4
  704. pxor %xmm5,%xmm5
  705. pxor %xmm6,%xmm6
  706. pxor %xmm7,%xmm7
  707. popl %edi
  708. popl %esi
  709. popl %ebx
  710. popl %ebp
  711. ret
  712. .size aes_hw_ccm64_encrypt_blocks,.-.L_aes_hw_ccm64_encrypt_blocks_begin
  713. .globl aes_hw_ccm64_decrypt_blocks
  714. .hidden aes_hw_ccm64_decrypt_blocks
  715. .type aes_hw_ccm64_decrypt_blocks,@function
  716. .align 16
  717. aes_hw_ccm64_decrypt_blocks:
  718. .L_aes_hw_ccm64_decrypt_blocks_begin:
  719. pushl %ebp
  720. pushl %ebx
  721. pushl %esi
  722. pushl %edi
  723. movl 20(%esp),%esi
  724. movl 24(%esp),%edi
  725. movl 28(%esp),%eax
  726. movl 32(%esp),%edx
  727. movl 36(%esp),%ebx
  728. movl 40(%esp),%ecx
  729. movl %esp,%ebp
  730. subl $60,%esp
  731. andl $-16,%esp
  732. movl %ebp,48(%esp)
  733. movdqu (%ebx),%xmm7
  734. movdqu (%ecx),%xmm3
  735. movl 240(%edx),%ecx
  736. movl $202182159,(%esp)
  737. movl $134810123,4(%esp)
  738. movl $67438087,8(%esp)
  739. movl $66051,12(%esp)
  740. movl $1,%ebx
  741. xorl %ebp,%ebp
  742. movl %ebx,16(%esp)
  743. movl %ebp,20(%esp)
  744. movl %ebp,24(%esp)
  745. movl %ebp,28(%esp)
  746. movdqa (%esp),%xmm5
  747. movdqa %xmm7,%xmm2
  748. movl %edx,%ebp
  749. movl %ecx,%ebx
  750. .byte 102,15,56,0,253
  751. movups (%edx),%xmm0
  752. movups 16(%edx),%xmm1
  753. leal 32(%edx),%edx
  754. xorps %xmm0,%xmm2
  755. .L033enc1_loop_5:
  756. .byte 102,15,56,220,209
  757. decl %ecx
  758. movups (%edx),%xmm1
  759. leal 16(%edx),%edx
  760. jnz .L033enc1_loop_5
  761. .byte 102,15,56,221,209
  762. shll $4,%ebx
  763. movl $16,%ecx
  764. movups (%esi),%xmm6
  765. paddq 16(%esp),%xmm7
  766. leal 16(%esi),%esi
  767. subl %ebx,%ecx
  768. leal 32(%ebp,%ebx,1),%edx
  769. movl %ecx,%ebx
  770. jmp .L034ccm64_dec_outer
  771. .align 16
  772. .L034ccm64_dec_outer:
  773. xorps %xmm2,%xmm6
  774. movdqa %xmm7,%xmm2
  775. movups %xmm6,(%edi)
  776. leal 16(%edi),%edi
  777. .byte 102,15,56,0,213
  778. subl $1,%eax
  779. jz .L035ccm64_dec_break
  780. movups (%ebp),%xmm0
  781. movl %ebx,%ecx
  782. movups 16(%ebp),%xmm1
  783. xorps %xmm0,%xmm6
  784. xorps %xmm0,%xmm2
  785. xorps %xmm6,%xmm3
  786. movups 32(%ebp),%xmm0
  787. .L036ccm64_dec2_loop:
  788. .byte 102,15,56,220,209
  789. .byte 102,15,56,220,217
  790. movups (%edx,%ecx,1),%xmm1
  791. addl $32,%ecx
  792. .byte 102,15,56,220,208
  793. .byte 102,15,56,220,216
  794. movups -16(%edx,%ecx,1),%xmm0
  795. jnz .L036ccm64_dec2_loop
  796. movups (%esi),%xmm6
  797. paddq 16(%esp),%xmm7
  798. .byte 102,15,56,220,209
  799. .byte 102,15,56,220,217
  800. .byte 102,15,56,221,208
  801. .byte 102,15,56,221,216
  802. leal 16(%esi),%esi
  803. jmp .L034ccm64_dec_outer
  804. .align 16
  805. .L035ccm64_dec_break:
  806. movl 240(%ebp),%ecx
  807. movl %ebp,%edx
  808. movups (%edx),%xmm0
  809. movups 16(%edx),%xmm1
  810. xorps %xmm0,%xmm6
  811. leal 32(%edx),%edx
  812. xorps %xmm6,%xmm3
  813. .L037enc1_loop_6:
  814. .byte 102,15,56,220,217
  815. decl %ecx
  816. movups (%edx),%xmm1
  817. leal 16(%edx),%edx
  818. jnz .L037enc1_loop_6
  819. .byte 102,15,56,221,217
  820. movl 48(%esp),%esp
  821. movl 40(%esp),%edi
  822. movups %xmm3,(%edi)
  823. pxor %xmm0,%xmm0
  824. pxor %xmm1,%xmm1
  825. pxor %xmm2,%xmm2
  826. pxor %xmm3,%xmm3
  827. pxor %xmm4,%xmm4
  828. pxor %xmm5,%xmm5
  829. pxor %xmm6,%xmm6
  830. pxor %xmm7,%xmm7
  831. popl %edi
  832. popl %esi
  833. popl %ebx
  834. popl %ebp
  835. ret
  836. .size aes_hw_ccm64_decrypt_blocks,.-.L_aes_hw_ccm64_decrypt_blocks_begin
  837. .globl aes_hw_ctr32_encrypt_blocks
  838. .hidden aes_hw_ctr32_encrypt_blocks
  839. .type aes_hw_ctr32_encrypt_blocks,@function
  840. .align 16
  841. aes_hw_ctr32_encrypt_blocks:
  842. .L_aes_hw_ctr32_encrypt_blocks_begin:
  843. pushl %ebp
  844. pushl %ebx
  845. pushl %esi
  846. pushl %edi
  847. #ifdef BORINGSSL_DISPATCH_TEST
  848. pushl %ebx
  849. pushl %edx
  850. call .L038pic
  851. .L038pic:
  852. popl %ebx
  853. leal BORINGSSL_function_hit+0-.L038pic(%ebx),%ebx
  854. movl $1,%edx
  855. movb %dl,(%ebx)
  856. popl %edx
  857. popl %ebx
  858. #endif
  859. movl 20(%esp),%esi
  860. movl 24(%esp),%edi
  861. movl 28(%esp),%eax
  862. movl 32(%esp),%edx
  863. movl 36(%esp),%ebx
  864. movl %esp,%ebp
  865. subl $88,%esp
  866. andl $-16,%esp
  867. movl %ebp,80(%esp)
  868. cmpl $1,%eax
  869. je .L039ctr32_one_shortcut
  870. movdqu (%ebx),%xmm7
  871. movl $202182159,(%esp)
  872. movl $134810123,4(%esp)
  873. movl $67438087,8(%esp)
  874. movl $66051,12(%esp)
  875. movl $6,%ecx
  876. xorl %ebp,%ebp
  877. movl %ecx,16(%esp)
  878. movl %ecx,20(%esp)
  879. movl %ecx,24(%esp)
  880. movl %ebp,28(%esp)
  881. .byte 102,15,58,22,251,3
  882. .byte 102,15,58,34,253,3
  883. movl 240(%edx),%ecx
  884. bswap %ebx
  885. pxor %xmm0,%xmm0
  886. pxor %xmm1,%xmm1
  887. movdqa (%esp),%xmm2
  888. .byte 102,15,58,34,195,0
  889. leal 3(%ebx),%ebp
  890. .byte 102,15,58,34,205,0
  891. incl %ebx
  892. .byte 102,15,58,34,195,1
  893. incl %ebp
  894. .byte 102,15,58,34,205,1
  895. incl %ebx
  896. .byte 102,15,58,34,195,2
  897. incl %ebp
  898. .byte 102,15,58,34,205,2
  899. movdqa %xmm0,48(%esp)
  900. .byte 102,15,56,0,194
  901. movdqu (%edx),%xmm6
  902. movdqa %xmm1,64(%esp)
  903. .byte 102,15,56,0,202
  904. pshufd $192,%xmm0,%xmm2
  905. pshufd $128,%xmm0,%xmm3
  906. cmpl $6,%eax
  907. jb .L040ctr32_tail
  908. pxor %xmm6,%xmm7
  909. shll $4,%ecx
  910. movl $16,%ebx
  911. movdqa %xmm7,32(%esp)
  912. movl %edx,%ebp
  913. subl %ecx,%ebx
  914. leal 32(%edx,%ecx,1),%edx
  915. subl $6,%eax
  916. jmp .L041ctr32_loop6
  917. .align 16
  918. .L041ctr32_loop6:
  919. pshufd $64,%xmm0,%xmm4
  920. movdqa 32(%esp),%xmm0
  921. pshufd $192,%xmm1,%xmm5
  922. pxor %xmm0,%xmm2
  923. pshufd $128,%xmm1,%xmm6
  924. pxor %xmm0,%xmm3
  925. pshufd $64,%xmm1,%xmm7
  926. movups 16(%ebp),%xmm1
  927. pxor %xmm0,%xmm4
  928. pxor %xmm0,%xmm5
  929. .byte 102,15,56,220,209
  930. pxor %xmm0,%xmm6
  931. pxor %xmm0,%xmm7
  932. .byte 102,15,56,220,217
  933. movups 32(%ebp),%xmm0
  934. movl %ebx,%ecx
  935. .byte 102,15,56,220,225
  936. .byte 102,15,56,220,233
  937. .byte 102,15,56,220,241
  938. .byte 102,15,56,220,249
  939. call .L_aesni_encrypt6_enter
  940. movups (%esi),%xmm1
  941. movups 16(%esi),%xmm0
  942. xorps %xmm1,%xmm2
  943. movups 32(%esi),%xmm1
  944. xorps %xmm0,%xmm3
  945. movups %xmm2,(%edi)
  946. movdqa 16(%esp),%xmm0
  947. xorps %xmm1,%xmm4
  948. movdqa 64(%esp),%xmm1
  949. movups %xmm3,16(%edi)
  950. movups %xmm4,32(%edi)
  951. paddd %xmm0,%xmm1
  952. paddd 48(%esp),%xmm0
  953. movdqa (%esp),%xmm2
  954. movups 48(%esi),%xmm3
  955. movups 64(%esi),%xmm4
  956. xorps %xmm3,%xmm5
  957. movups 80(%esi),%xmm3
  958. leal 96(%esi),%esi
  959. movdqa %xmm0,48(%esp)
  960. .byte 102,15,56,0,194
  961. xorps %xmm4,%xmm6
  962. movups %xmm5,48(%edi)
  963. xorps %xmm3,%xmm7
  964. movdqa %xmm1,64(%esp)
  965. .byte 102,15,56,0,202
  966. movups %xmm6,64(%edi)
  967. pshufd $192,%xmm0,%xmm2
  968. movups %xmm7,80(%edi)
  969. leal 96(%edi),%edi
  970. pshufd $128,%xmm0,%xmm3
  971. subl $6,%eax
  972. jnc .L041ctr32_loop6
  973. addl $6,%eax
  974. jz .L042ctr32_ret
  975. movdqu (%ebp),%xmm7
  976. movl %ebp,%edx
  977. pxor 32(%esp),%xmm7
  978. movl 240(%ebp),%ecx
  979. .L040ctr32_tail:
  980. por %xmm7,%xmm2
  981. cmpl $2,%eax
  982. jb .L043ctr32_one
  983. pshufd $64,%xmm0,%xmm4
  984. por %xmm7,%xmm3
  985. je .L044ctr32_two
  986. pshufd $192,%xmm1,%xmm5
  987. por %xmm7,%xmm4
  988. cmpl $4,%eax
  989. jb .L045ctr32_three
  990. pshufd $128,%xmm1,%xmm6
  991. por %xmm7,%xmm5
  992. je .L046ctr32_four
  993. por %xmm7,%xmm6
  994. call _aesni_encrypt6
  995. movups (%esi),%xmm1
  996. movups 16(%esi),%xmm0
  997. xorps %xmm1,%xmm2
  998. movups 32(%esi),%xmm1
  999. xorps %xmm0,%xmm3
  1000. movups 48(%esi),%xmm0
  1001. xorps %xmm1,%xmm4
  1002. movups 64(%esi),%xmm1
  1003. xorps %xmm0,%xmm5
  1004. movups %xmm2,(%edi)
  1005. xorps %xmm1,%xmm6
  1006. movups %xmm3,16(%edi)
  1007. movups %xmm4,32(%edi)
  1008. movups %xmm5,48(%edi)
  1009. movups %xmm6,64(%edi)
  1010. jmp .L042ctr32_ret
  1011. .align 16
  1012. .L039ctr32_one_shortcut:
  1013. movups (%ebx),%xmm2
  1014. movl 240(%edx),%ecx
  1015. .L043ctr32_one:
  1016. movups (%edx),%xmm0
  1017. movups 16(%edx),%xmm1
  1018. leal 32(%edx),%edx
  1019. xorps %xmm0,%xmm2
  1020. .L047enc1_loop_7:
  1021. .byte 102,15,56,220,209
  1022. decl %ecx
  1023. movups (%edx),%xmm1
  1024. leal 16(%edx),%edx
  1025. jnz .L047enc1_loop_7
  1026. .byte 102,15,56,221,209
  1027. movups (%esi),%xmm6
  1028. xorps %xmm2,%xmm6
  1029. movups %xmm6,(%edi)
  1030. jmp .L042ctr32_ret
  1031. .align 16
  1032. .L044ctr32_two:
  1033. call _aesni_encrypt2
  1034. movups (%esi),%xmm5
  1035. movups 16(%esi),%xmm6
  1036. xorps %xmm5,%xmm2
  1037. xorps %xmm6,%xmm3
  1038. movups %xmm2,(%edi)
  1039. movups %xmm3,16(%edi)
  1040. jmp .L042ctr32_ret
  1041. .align 16
  1042. .L045ctr32_three:
  1043. call _aesni_encrypt3
  1044. movups (%esi),%xmm5
  1045. movups 16(%esi),%xmm6
  1046. xorps %xmm5,%xmm2
  1047. movups 32(%esi),%xmm7
  1048. xorps %xmm6,%xmm3
  1049. movups %xmm2,(%edi)
  1050. xorps %xmm7,%xmm4
  1051. movups %xmm3,16(%edi)
  1052. movups %xmm4,32(%edi)
  1053. jmp .L042ctr32_ret
  1054. .align 16
  1055. .L046ctr32_four:
  1056. call _aesni_encrypt4
  1057. movups (%esi),%xmm6
  1058. movups 16(%esi),%xmm7
  1059. movups 32(%esi),%xmm1
  1060. xorps %xmm6,%xmm2
  1061. movups 48(%esi),%xmm0
  1062. xorps %xmm7,%xmm3
  1063. movups %xmm2,(%edi)
  1064. xorps %xmm1,%xmm4
  1065. movups %xmm3,16(%edi)
  1066. xorps %xmm0,%xmm5
  1067. movups %xmm4,32(%edi)
  1068. movups %xmm5,48(%edi)
  1069. .L042ctr32_ret:
  1070. pxor %xmm0,%xmm0
  1071. pxor %xmm1,%xmm1
  1072. pxor %xmm2,%xmm2
  1073. pxor %xmm3,%xmm3
  1074. pxor %xmm4,%xmm4
  1075. movdqa %xmm0,32(%esp)
  1076. pxor %xmm5,%xmm5
  1077. movdqa %xmm0,48(%esp)
  1078. pxor %xmm6,%xmm6
  1079. movdqa %xmm0,64(%esp)
  1080. pxor %xmm7,%xmm7
  1081. movl 80(%esp),%esp
  1082. popl %edi
  1083. popl %esi
  1084. popl %ebx
  1085. popl %ebp
  1086. ret
  1087. .size aes_hw_ctr32_encrypt_blocks,.-.L_aes_hw_ctr32_encrypt_blocks_begin
  1088. .globl aes_hw_xts_encrypt
  1089. .hidden aes_hw_xts_encrypt
  1090. .type aes_hw_xts_encrypt,@function
  1091. .align 16
  1092. aes_hw_xts_encrypt:
  1093. .L_aes_hw_xts_encrypt_begin:
  1094. pushl %ebp
  1095. pushl %ebx
  1096. pushl %esi
  1097. pushl %edi
  1098. movl 36(%esp),%edx
  1099. movl 40(%esp),%esi
  1100. movl 240(%edx),%ecx
  1101. movups (%esi),%xmm2
  1102. movups (%edx),%xmm0
  1103. movups 16(%edx),%xmm1
  1104. leal 32(%edx),%edx
  1105. xorps %xmm0,%xmm2
  1106. .L048enc1_loop_8:
  1107. .byte 102,15,56,220,209
  1108. decl %ecx
  1109. movups (%edx),%xmm1
  1110. leal 16(%edx),%edx
  1111. jnz .L048enc1_loop_8
  1112. .byte 102,15,56,221,209
  1113. movl 20(%esp),%esi
  1114. movl 24(%esp),%edi
  1115. movl 28(%esp),%eax
  1116. movl 32(%esp),%edx
  1117. movl %esp,%ebp
  1118. subl $120,%esp
  1119. movl 240(%edx),%ecx
  1120. andl $-16,%esp
  1121. movl $135,96(%esp)
  1122. movl $0,100(%esp)
  1123. movl $1,104(%esp)
  1124. movl $0,108(%esp)
  1125. movl %eax,112(%esp)
  1126. movl %ebp,116(%esp)
  1127. movdqa %xmm2,%xmm1
  1128. pxor %xmm0,%xmm0
  1129. movdqa 96(%esp),%xmm3
  1130. pcmpgtd %xmm1,%xmm0
  1131. andl $-16,%eax
  1132. movl %edx,%ebp
  1133. movl %ecx,%ebx
  1134. subl $96,%eax
  1135. jc .L049xts_enc_short
  1136. shll $4,%ecx
  1137. movl $16,%ebx
  1138. subl %ecx,%ebx
  1139. leal 32(%edx,%ecx,1),%edx
  1140. jmp .L050xts_enc_loop6
  1141. .align 16
  1142. .L050xts_enc_loop6:
  1143. pshufd $19,%xmm0,%xmm2
  1144. pxor %xmm0,%xmm0
  1145. movdqa %xmm1,(%esp)
  1146. paddq %xmm1,%xmm1
  1147. pand %xmm3,%xmm2
  1148. pcmpgtd %xmm1,%xmm0
  1149. pxor %xmm2,%xmm1
  1150. pshufd $19,%xmm0,%xmm2
  1151. pxor %xmm0,%xmm0
  1152. movdqa %xmm1,16(%esp)
  1153. paddq %xmm1,%xmm1
  1154. pand %xmm3,%xmm2
  1155. pcmpgtd %xmm1,%xmm0
  1156. pxor %xmm2,%xmm1
  1157. pshufd $19,%xmm0,%xmm2
  1158. pxor %xmm0,%xmm0
  1159. movdqa %xmm1,32(%esp)
  1160. paddq %xmm1,%xmm1
  1161. pand %xmm3,%xmm2
  1162. pcmpgtd %xmm1,%xmm0
  1163. pxor %xmm2,%xmm1
  1164. pshufd $19,%xmm0,%xmm2
  1165. pxor %xmm0,%xmm0
  1166. movdqa %xmm1,48(%esp)
  1167. paddq %xmm1,%xmm1
  1168. pand %xmm3,%xmm2
  1169. pcmpgtd %xmm1,%xmm0
  1170. pxor %xmm2,%xmm1
  1171. pshufd $19,%xmm0,%xmm7
  1172. movdqa %xmm1,64(%esp)
  1173. paddq %xmm1,%xmm1
  1174. movups (%ebp),%xmm0
  1175. pand %xmm3,%xmm7
  1176. movups (%esi),%xmm2
  1177. pxor %xmm1,%xmm7
  1178. movl %ebx,%ecx
  1179. movdqu 16(%esi),%xmm3
  1180. xorps %xmm0,%xmm2
  1181. movdqu 32(%esi),%xmm4
  1182. pxor %xmm0,%xmm3
  1183. movdqu 48(%esi),%xmm5
  1184. pxor %xmm0,%xmm4
  1185. movdqu 64(%esi),%xmm6
  1186. pxor %xmm0,%xmm5
  1187. movdqu 80(%esi),%xmm1
  1188. pxor %xmm0,%xmm6
  1189. leal 96(%esi),%esi
  1190. pxor (%esp),%xmm2
  1191. movdqa %xmm7,80(%esp)
  1192. pxor %xmm1,%xmm7
  1193. movups 16(%ebp),%xmm1
  1194. pxor 16(%esp),%xmm3
  1195. pxor 32(%esp),%xmm4
  1196. .byte 102,15,56,220,209
  1197. pxor 48(%esp),%xmm5
  1198. pxor 64(%esp),%xmm6
  1199. .byte 102,15,56,220,217
  1200. pxor %xmm0,%xmm7
  1201. movups 32(%ebp),%xmm0
  1202. .byte 102,15,56,220,225
  1203. .byte 102,15,56,220,233
  1204. .byte 102,15,56,220,241
  1205. .byte 102,15,56,220,249
  1206. call .L_aesni_encrypt6_enter
  1207. movdqa 80(%esp),%xmm1
  1208. pxor %xmm0,%xmm0
  1209. xorps (%esp),%xmm2
  1210. pcmpgtd %xmm1,%xmm0
  1211. xorps 16(%esp),%xmm3
  1212. movups %xmm2,(%edi)
  1213. xorps 32(%esp),%xmm4
  1214. movups %xmm3,16(%edi)
  1215. xorps 48(%esp),%xmm5
  1216. movups %xmm4,32(%edi)
  1217. xorps 64(%esp),%xmm6
  1218. movups %xmm5,48(%edi)
  1219. xorps %xmm1,%xmm7
  1220. movups %xmm6,64(%edi)
  1221. pshufd $19,%xmm0,%xmm2
  1222. movups %xmm7,80(%edi)
  1223. leal 96(%edi),%edi
  1224. movdqa 96(%esp),%xmm3
  1225. pxor %xmm0,%xmm0
  1226. paddq %xmm1,%xmm1
  1227. pand %xmm3,%xmm2
  1228. pcmpgtd %xmm1,%xmm0
  1229. pxor %xmm2,%xmm1
  1230. subl $96,%eax
  1231. jnc .L050xts_enc_loop6
  1232. movl 240(%ebp),%ecx
  1233. movl %ebp,%edx
  1234. movl %ecx,%ebx
  1235. .L049xts_enc_short:
  1236. addl $96,%eax
  1237. jz .L051xts_enc_done6x
  1238. movdqa %xmm1,%xmm5
  1239. cmpl $32,%eax
  1240. jb .L052xts_enc_one
  1241. pshufd $19,%xmm0,%xmm2
  1242. pxor %xmm0,%xmm0
  1243. paddq %xmm1,%xmm1
  1244. pand %xmm3,%xmm2
  1245. pcmpgtd %xmm1,%xmm0
  1246. pxor %xmm2,%xmm1
  1247. je .L053xts_enc_two
  1248. pshufd $19,%xmm0,%xmm2
  1249. pxor %xmm0,%xmm0
  1250. movdqa %xmm1,%xmm6
  1251. paddq %xmm1,%xmm1
  1252. pand %xmm3,%xmm2
  1253. pcmpgtd %xmm1,%xmm0
  1254. pxor %xmm2,%xmm1
  1255. cmpl $64,%eax
  1256. jb .L054xts_enc_three
  1257. pshufd $19,%xmm0,%xmm2
  1258. pxor %xmm0,%xmm0
  1259. movdqa %xmm1,%xmm7
  1260. paddq %xmm1,%xmm1
  1261. pand %xmm3,%xmm2
  1262. pcmpgtd %xmm1,%xmm0
  1263. pxor %xmm2,%xmm1
  1264. movdqa %xmm5,(%esp)
  1265. movdqa %xmm6,16(%esp)
  1266. je .L055xts_enc_four
  1267. movdqa %xmm7,32(%esp)
  1268. pshufd $19,%xmm0,%xmm7
  1269. movdqa %xmm1,48(%esp)
  1270. paddq %xmm1,%xmm1
  1271. pand %xmm3,%xmm7
  1272. pxor %xmm1,%xmm7
  1273. movdqu (%esi),%xmm2
  1274. movdqu 16(%esi),%xmm3
  1275. movdqu 32(%esi),%xmm4
  1276. pxor (%esp),%xmm2
  1277. movdqu 48(%esi),%xmm5
  1278. pxor 16(%esp),%xmm3
  1279. movdqu 64(%esi),%xmm6
  1280. pxor 32(%esp),%xmm4
  1281. leal 80(%esi),%esi
  1282. pxor 48(%esp),%xmm5
  1283. movdqa %xmm7,64(%esp)
  1284. pxor %xmm7,%xmm6
  1285. call _aesni_encrypt6
  1286. movaps 64(%esp),%xmm1
  1287. xorps (%esp),%xmm2
  1288. xorps 16(%esp),%xmm3
  1289. xorps 32(%esp),%xmm4
  1290. movups %xmm2,(%edi)
  1291. xorps 48(%esp),%xmm5
  1292. movups %xmm3,16(%edi)
  1293. xorps %xmm1,%xmm6
  1294. movups %xmm4,32(%edi)
  1295. movups %xmm5,48(%edi)
  1296. movups %xmm6,64(%edi)
  1297. leal 80(%edi),%edi
  1298. jmp .L056xts_enc_done
  1299. .align 16
  1300. .L052xts_enc_one:
  1301. movups (%esi),%xmm2
  1302. leal 16(%esi),%esi
  1303. xorps %xmm5,%xmm2
  1304. movups (%edx),%xmm0
  1305. movups 16(%edx),%xmm1
  1306. leal 32(%edx),%edx
  1307. xorps %xmm0,%xmm2
  1308. .L057enc1_loop_9:
  1309. .byte 102,15,56,220,209
  1310. decl %ecx
  1311. movups (%edx),%xmm1
  1312. leal 16(%edx),%edx
  1313. jnz .L057enc1_loop_9
  1314. .byte 102,15,56,221,209
  1315. xorps %xmm5,%xmm2
  1316. movups %xmm2,(%edi)
  1317. leal 16(%edi),%edi
  1318. movdqa %xmm5,%xmm1
  1319. jmp .L056xts_enc_done
  1320. .align 16
  1321. .L053xts_enc_two:
  1322. movaps %xmm1,%xmm6
  1323. movups (%esi),%xmm2
  1324. movups 16(%esi),%xmm3
  1325. leal 32(%esi),%esi
  1326. xorps %xmm5,%xmm2
  1327. xorps %xmm6,%xmm3
  1328. call _aesni_encrypt2
  1329. xorps %xmm5,%xmm2
  1330. xorps %xmm6,%xmm3
  1331. movups %xmm2,(%edi)
  1332. movups %xmm3,16(%edi)
  1333. leal 32(%edi),%edi
  1334. movdqa %xmm6,%xmm1
  1335. jmp .L056xts_enc_done
  1336. .align 16
  1337. .L054xts_enc_three:
  1338. movaps %xmm1,%xmm7
  1339. movups (%esi),%xmm2
  1340. movups 16(%esi),%xmm3
  1341. movups 32(%esi),%xmm4
  1342. leal 48(%esi),%esi
  1343. xorps %xmm5,%xmm2
  1344. xorps %xmm6,%xmm3
  1345. xorps %xmm7,%xmm4
  1346. call _aesni_encrypt3
  1347. xorps %xmm5,%xmm2
  1348. xorps %xmm6,%xmm3
  1349. xorps %xmm7,%xmm4
  1350. movups %xmm2,(%edi)
  1351. movups %xmm3,16(%edi)
  1352. movups %xmm4,32(%edi)
  1353. leal 48(%edi),%edi
  1354. movdqa %xmm7,%xmm1
  1355. jmp .L056xts_enc_done
  1356. .align 16
  1357. .L055xts_enc_four:
  1358. movaps %xmm1,%xmm6
  1359. movups (%esi),%xmm2
  1360. movups 16(%esi),%xmm3
  1361. movups 32(%esi),%xmm4
  1362. xorps (%esp),%xmm2
  1363. movups 48(%esi),%xmm5
  1364. leal 64(%esi),%esi
  1365. xorps 16(%esp),%xmm3
  1366. xorps %xmm7,%xmm4
  1367. xorps %xmm6,%xmm5
  1368. call _aesni_encrypt4
  1369. xorps (%esp),%xmm2
  1370. xorps 16(%esp),%xmm3
  1371. xorps %xmm7,%xmm4
  1372. movups %xmm2,(%edi)
  1373. xorps %xmm6,%xmm5
  1374. movups %xmm3,16(%edi)
  1375. movups %xmm4,32(%edi)
  1376. movups %xmm5,48(%edi)
  1377. leal 64(%edi),%edi
  1378. movdqa %xmm6,%xmm1
  1379. jmp .L056xts_enc_done
  1380. .align 16
  1381. .L051xts_enc_done6x:
  1382. movl 112(%esp),%eax
  1383. andl $15,%eax
  1384. jz .L058xts_enc_ret
  1385. movdqa %xmm1,%xmm5
  1386. movl %eax,112(%esp)
  1387. jmp .L059xts_enc_steal
  1388. .align 16
  1389. .L056xts_enc_done:
  1390. movl 112(%esp),%eax
  1391. pxor %xmm0,%xmm0
  1392. andl $15,%eax
  1393. jz .L058xts_enc_ret
  1394. pcmpgtd %xmm1,%xmm0
  1395. movl %eax,112(%esp)
  1396. pshufd $19,%xmm0,%xmm5
  1397. paddq %xmm1,%xmm1
  1398. pand 96(%esp),%xmm5
  1399. pxor %xmm1,%xmm5
  1400. .L059xts_enc_steal:
  1401. movzbl (%esi),%ecx
  1402. movzbl -16(%edi),%edx
  1403. leal 1(%esi),%esi
  1404. movb %cl,-16(%edi)
  1405. movb %dl,(%edi)
  1406. leal 1(%edi),%edi
  1407. subl $1,%eax
  1408. jnz .L059xts_enc_steal
  1409. subl 112(%esp),%edi
  1410. movl %ebp,%edx
  1411. movl %ebx,%ecx
  1412. movups -16(%edi),%xmm2
  1413. xorps %xmm5,%xmm2
  1414. movups (%edx),%xmm0
  1415. movups 16(%edx),%xmm1
  1416. leal 32(%edx),%edx
  1417. xorps %xmm0,%xmm2
  1418. .L060enc1_loop_10:
  1419. .byte 102,15,56,220,209
  1420. decl %ecx
  1421. movups (%edx),%xmm1
  1422. leal 16(%edx),%edx
  1423. jnz .L060enc1_loop_10
  1424. .byte 102,15,56,221,209
  1425. xorps %xmm5,%xmm2
  1426. movups %xmm2,-16(%edi)
  1427. .L058xts_enc_ret:
  1428. pxor %xmm0,%xmm0
  1429. pxor %xmm1,%xmm1
  1430. pxor %xmm2,%xmm2
  1431. movdqa %xmm0,(%esp)
  1432. pxor %xmm3,%xmm3
  1433. movdqa %xmm0,16(%esp)
  1434. pxor %xmm4,%xmm4
  1435. movdqa %xmm0,32(%esp)
  1436. pxor %xmm5,%xmm5
  1437. movdqa %xmm0,48(%esp)
  1438. pxor %xmm6,%xmm6
  1439. movdqa %xmm0,64(%esp)
  1440. pxor %xmm7,%xmm7
  1441. movdqa %xmm0,80(%esp)
  1442. movl 116(%esp),%esp
  1443. popl %edi
  1444. popl %esi
  1445. popl %ebx
  1446. popl %ebp
  1447. ret
  1448. .size aes_hw_xts_encrypt,.-.L_aes_hw_xts_encrypt_begin
  1449. .globl aes_hw_xts_decrypt
  1450. .hidden aes_hw_xts_decrypt
  1451. .type aes_hw_xts_decrypt,@function
  1452. .align 16
  1453. aes_hw_xts_decrypt:
  1454. .L_aes_hw_xts_decrypt_begin:
  1455. pushl %ebp
  1456. pushl %ebx
  1457. pushl %esi
  1458. pushl %edi
  1459. movl 36(%esp),%edx
  1460. movl 40(%esp),%esi
  1461. movl 240(%edx),%ecx
  1462. movups (%esi),%xmm2
  1463. movups (%edx),%xmm0
  1464. movups 16(%edx),%xmm1
  1465. leal 32(%edx),%edx
  1466. xorps %xmm0,%xmm2
  1467. .L061enc1_loop_11:
  1468. .byte 102,15,56,220,209
  1469. decl %ecx
  1470. movups (%edx),%xmm1
  1471. leal 16(%edx),%edx
  1472. jnz .L061enc1_loop_11
  1473. .byte 102,15,56,221,209
  1474. movl 20(%esp),%esi
  1475. movl 24(%esp),%edi
  1476. movl 28(%esp),%eax
  1477. movl 32(%esp),%edx
  1478. movl %esp,%ebp
  1479. subl $120,%esp
  1480. andl $-16,%esp
  1481. xorl %ebx,%ebx
  1482. testl $15,%eax
  1483. setnz %bl
  1484. shll $4,%ebx
  1485. subl %ebx,%eax
  1486. movl $135,96(%esp)
  1487. movl $0,100(%esp)
  1488. movl $1,104(%esp)
  1489. movl $0,108(%esp)
  1490. movl %eax,112(%esp)
  1491. movl %ebp,116(%esp)
  1492. movl 240(%edx),%ecx
  1493. movl %edx,%ebp
  1494. movl %ecx,%ebx
  1495. movdqa %xmm2,%xmm1
  1496. pxor %xmm0,%xmm0
  1497. movdqa 96(%esp),%xmm3
  1498. pcmpgtd %xmm1,%xmm0
  1499. andl $-16,%eax
  1500. subl $96,%eax
  1501. jc .L062xts_dec_short
  1502. shll $4,%ecx
  1503. movl $16,%ebx
  1504. subl %ecx,%ebx
  1505. leal 32(%edx,%ecx,1),%edx
  1506. jmp .L063xts_dec_loop6
  1507. .align 16
  1508. .L063xts_dec_loop6:
  1509. pshufd $19,%xmm0,%xmm2
  1510. pxor %xmm0,%xmm0
  1511. movdqa %xmm1,(%esp)
  1512. paddq %xmm1,%xmm1
  1513. pand %xmm3,%xmm2
  1514. pcmpgtd %xmm1,%xmm0
  1515. pxor %xmm2,%xmm1
  1516. pshufd $19,%xmm0,%xmm2
  1517. pxor %xmm0,%xmm0
  1518. movdqa %xmm1,16(%esp)
  1519. paddq %xmm1,%xmm1
  1520. pand %xmm3,%xmm2
  1521. pcmpgtd %xmm1,%xmm0
  1522. pxor %xmm2,%xmm1
  1523. pshufd $19,%xmm0,%xmm2
  1524. pxor %xmm0,%xmm0
  1525. movdqa %xmm1,32(%esp)
  1526. paddq %xmm1,%xmm1
  1527. pand %xmm3,%xmm2
  1528. pcmpgtd %xmm1,%xmm0
  1529. pxor %xmm2,%xmm1
  1530. pshufd $19,%xmm0,%xmm2
  1531. pxor %xmm0,%xmm0
  1532. movdqa %xmm1,48(%esp)
  1533. paddq %xmm1,%xmm1
  1534. pand %xmm3,%xmm2
  1535. pcmpgtd %xmm1,%xmm0
  1536. pxor %xmm2,%xmm1
  1537. pshufd $19,%xmm0,%xmm7
  1538. movdqa %xmm1,64(%esp)
  1539. paddq %xmm1,%xmm1
  1540. movups (%ebp),%xmm0
  1541. pand %xmm3,%xmm7
  1542. movups (%esi),%xmm2
  1543. pxor %xmm1,%xmm7
  1544. movl %ebx,%ecx
  1545. movdqu 16(%esi),%xmm3
  1546. xorps %xmm0,%xmm2
  1547. movdqu 32(%esi),%xmm4
  1548. pxor %xmm0,%xmm3
  1549. movdqu 48(%esi),%xmm5
  1550. pxor %xmm0,%xmm4
  1551. movdqu 64(%esi),%xmm6
  1552. pxor %xmm0,%xmm5
  1553. movdqu 80(%esi),%xmm1
  1554. pxor %xmm0,%xmm6
  1555. leal 96(%esi),%esi
  1556. pxor (%esp),%xmm2
  1557. movdqa %xmm7,80(%esp)
  1558. pxor %xmm1,%xmm7
  1559. movups 16(%ebp),%xmm1
  1560. pxor 16(%esp),%xmm3
  1561. pxor 32(%esp),%xmm4
  1562. .byte 102,15,56,222,209
  1563. pxor 48(%esp),%xmm5
  1564. pxor 64(%esp),%xmm6
  1565. .byte 102,15,56,222,217
  1566. pxor %xmm0,%xmm7
  1567. movups 32(%ebp),%xmm0
  1568. .byte 102,15,56,222,225
  1569. .byte 102,15,56,222,233
  1570. .byte 102,15,56,222,241
  1571. .byte 102,15,56,222,249
  1572. call .L_aesni_decrypt6_enter
  1573. movdqa 80(%esp),%xmm1
  1574. pxor %xmm0,%xmm0
  1575. xorps (%esp),%xmm2
  1576. pcmpgtd %xmm1,%xmm0
  1577. xorps 16(%esp),%xmm3
  1578. movups %xmm2,(%edi)
  1579. xorps 32(%esp),%xmm4
  1580. movups %xmm3,16(%edi)
  1581. xorps 48(%esp),%xmm5
  1582. movups %xmm4,32(%edi)
  1583. xorps 64(%esp),%xmm6
  1584. movups %xmm5,48(%edi)
  1585. xorps %xmm1,%xmm7
  1586. movups %xmm6,64(%edi)
  1587. pshufd $19,%xmm0,%xmm2
  1588. movups %xmm7,80(%edi)
  1589. leal 96(%edi),%edi
  1590. movdqa 96(%esp),%xmm3
  1591. pxor %xmm0,%xmm0
  1592. paddq %xmm1,%xmm1
  1593. pand %xmm3,%xmm2
  1594. pcmpgtd %xmm1,%xmm0
  1595. pxor %xmm2,%xmm1
  1596. subl $96,%eax
  1597. jnc .L063xts_dec_loop6
  1598. movl 240(%ebp),%ecx
  1599. movl %ebp,%edx
  1600. movl %ecx,%ebx
  1601. .L062xts_dec_short:
  1602. addl $96,%eax
  1603. jz .L064xts_dec_done6x
  1604. movdqa %xmm1,%xmm5
  1605. cmpl $32,%eax
  1606. jb .L065xts_dec_one
  1607. pshufd $19,%xmm0,%xmm2
  1608. pxor %xmm0,%xmm0
  1609. paddq %xmm1,%xmm1
  1610. pand %xmm3,%xmm2
  1611. pcmpgtd %xmm1,%xmm0
  1612. pxor %xmm2,%xmm1
  1613. je .L066xts_dec_two
  1614. pshufd $19,%xmm0,%xmm2
  1615. pxor %xmm0,%xmm0
  1616. movdqa %xmm1,%xmm6
  1617. paddq %xmm1,%xmm1
  1618. pand %xmm3,%xmm2
  1619. pcmpgtd %xmm1,%xmm0
  1620. pxor %xmm2,%xmm1
  1621. cmpl $64,%eax
  1622. jb .L067xts_dec_three
  1623. pshufd $19,%xmm0,%xmm2
  1624. pxor %xmm0,%xmm0
  1625. movdqa %xmm1,%xmm7
  1626. paddq %xmm1,%xmm1
  1627. pand %xmm3,%xmm2
  1628. pcmpgtd %xmm1,%xmm0
  1629. pxor %xmm2,%xmm1
  1630. movdqa %xmm5,(%esp)
  1631. movdqa %xmm6,16(%esp)
  1632. je .L068xts_dec_four
  1633. movdqa %xmm7,32(%esp)
  1634. pshufd $19,%xmm0,%xmm7
  1635. movdqa %xmm1,48(%esp)
  1636. paddq %xmm1,%xmm1
  1637. pand %xmm3,%xmm7
  1638. pxor %xmm1,%xmm7
  1639. movdqu (%esi),%xmm2
  1640. movdqu 16(%esi),%xmm3
  1641. movdqu 32(%esi),%xmm4
  1642. pxor (%esp),%xmm2
  1643. movdqu 48(%esi),%xmm5
  1644. pxor 16(%esp),%xmm3
  1645. movdqu 64(%esi),%xmm6
  1646. pxor 32(%esp),%xmm4
  1647. leal 80(%esi),%esi
  1648. pxor 48(%esp),%xmm5
  1649. movdqa %xmm7,64(%esp)
  1650. pxor %xmm7,%xmm6
  1651. call _aesni_decrypt6
  1652. movaps 64(%esp),%xmm1
  1653. xorps (%esp),%xmm2
  1654. xorps 16(%esp),%xmm3
  1655. xorps 32(%esp),%xmm4
  1656. movups %xmm2,(%edi)
  1657. xorps 48(%esp),%xmm5
  1658. movups %xmm3,16(%edi)
  1659. xorps %xmm1,%xmm6
  1660. movups %xmm4,32(%edi)
  1661. movups %xmm5,48(%edi)
  1662. movups %xmm6,64(%edi)
  1663. leal 80(%edi),%edi
  1664. jmp .L069xts_dec_done
  1665. .align 16
  1666. .L065xts_dec_one:
  1667. movups (%esi),%xmm2
  1668. leal 16(%esi),%esi
  1669. xorps %xmm5,%xmm2
  1670. movups (%edx),%xmm0
  1671. movups 16(%edx),%xmm1
  1672. leal 32(%edx),%edx
  1673. xorps %xmm0,%xmm2
  1674. .L070dec1_loop_12:
  1675. .byte 102,15,56,222,209
  1676. decl %ecx
  1677. movups (%edx),%xmm1
  1678. leal 16(%edx),%edx
  1679. jnz .L070dec1_loop_12
  1680. .byte 102,15,56,223,209
  1681. xorps %xmm5,%xmm2
  1682. movups %xmm2,(%edi)
  1683. leal 16(%edi),%edi
  1684. movdqa %xmm5,%xmm1
  1685. jmp .L069xts_dec_done
  1686. .align 16
  1687. .L066xts_dec_two:
  1688. movaps %xmm1,%xmm6
  1689. movups (%esi),%xmm2
  1690. movups 16(%esi),%xmm3
  1691. leal 32(%esi),%esi
  1692. xorps %xmm5,%xmm2
  1693. xorps %xmm6,%xmm3
  1694. call _aesni_decrypt2
  1695. xorps %xmm5,%xmm2
  1696. xorps %xmm6,%xmm3
  1697. movups %xmm2,(%edi)
  1698. movups %xmm3,16(%edi)
  1699. leal 32(%edi),%edi
  1700. movdqa %xmm6,%xmm1
  1701. jmp .L069xts_dec_done
  1702. .align 16
  1703. .L067xts_dec_three:
  1704. movaps %xmm1,%xmm7
  1705. movups (%esi),%xmm2
  1706. movups 16(%esi),%xmm3
  1707. movups 32(%esi),%xmm4
  1708. leal 48(%esi),%esi
  1709. xorps %xmm5,%xmm2
  1710. xorps %xmm6,%xmm3
  1711. xorps %xmm7,%xmm4
  1712. call _aesni_decrypt3
  1713. xorps %xmm5,%xmm2
  1714. xorps %xmm6,%xmm3
  1715. xorps %xmm7,%xmm4
  1716. movups %xmm2,(%edi)
  1717. movups %xmm3,16(%edi)
  1718. movups %xmm4,32(%edi)
  1719. leal 48(%edi),%edi
  1720. movdqa %xmm7,%xmm1
  1721. jmp .L069xts_dec_done
  1722. .align 16
  1723. .L068xts_dec_four:
  1724. movaps %xmm1,%xmm6
  1725. movups (%esi),%xmm2
  1726. movups 16(%esi),%xmm3
  1727. movups 32(%esi),%xmm4
  1728. xorps (%esp),%xmm2
  1729. movups 48(%esi),%xmm5
  1730. leal 64(%esi),%esi
  1731. xorps 16(%esp),%xmm3
  1732. xorps %xmm7,%xmm4
  1733. xorps %xmm6,%xmm5
  1734. call _aesni_decrypt4
  1735. xorps (%esp),%xmm2
  1736. xorps 16(%esp),%xmm3
  1737. xorps %xmm7,%xmm4
  1738. movups %xmm2,(%edi)
  1739. xorps %xmm6,%xmm5
  1740. movups %xmm3,16(%edi)
  1741. movups %xmm4,32(%edi)
  1742. movups %xmm5,48(%edi)
  1743. leal 64(%edi),%edi
  1744. movdqa %xmm6,%xmm1
  1745. jmp .L069xts_dec_done
  1746. .align 16
  1747. .L064xts_dec_done6x:
  1748. movl 112(%esp),%eax
  1749. andl $15,%eax
  1750. jz .L071xts_dec_ret
  1751. movl %eax,112(%esp)
  1752. jmp .L072xts_dec_only_one_more
  1753. .align 16
  1754. .L069xts_dec_done:
  1755. movl 112(%esp),%eax
  1756. pxor %xmm0,%xmm0
  1757. andl $15,%eax
  1758. jz .L071xts_dec_ret
  1759. pcmpgtd %xmm1,%xmm0
  1760. movl %eax,112(%esp)
  1761. pshufd $19,%xmm0,%xmm2
  1762. pxor %xmm0,%xmm0
  1763. movdqa 96(%esp),%xmm3
  1764. paddq %xmm1,%xmm1
  1765. pand %xmm3,%xmm2
  1766. pcmpgtd %xmm1,%xmm0
  1767. pxor %xmm2,%xmm1
  1768. .L072xts_dec_only_one_more:
  1769. pshufd $19,%xmm0,%xmm5
  1770. movdqa %xmm1,%xmm6
  1771. paddq %xmm1,%xmm1
  1772. pand %xmm3,%xmm5
  1773. pxor %xmm1,%xmm5
  1774. movl %ebp,%edx
  1775. movl %ebx,%ecx
  1776. movups (%esi),%xmm2
  1777. xorps %xmm5,%xmm2
  1778. movups (%edx),%xmm0
  1779. movups 16(%edx),%xmm1
  1780. leal 32(%edx),%edx
  1781. xorps %xmm0,%xmm2
  1782. .L073dec1_loop_13:
  1783. .byte 102,15,56,222,209
  1784. decl %ecx
  1785. movups (%edx),%xmm1
  1786. leal 16(%edx),%edx
  1787. jnz .L073dec1_loop_13
  1788. .byte 102,15,56,223,209
  1789. xorps %xmm5,%xmm2
  1790. movups %xmm2,(%edi)
  1791. .L074xts_dec_steal:
  1792. movzbl 16(%esi),%ecx
  1793. movzbl (%edi),%edx
  1794. leal 1(%esi),%esi
  1795. movb %cl,(%edi)
  1796. movb %dl,16(%edi)
  1797. leal 1(%edi),%edi
  1798. subl $1,%eax
  1799. jnz .L074xts_dec_steal
  1800. subl 112(%esp),%edi
  1801. movl %ebp,%edx
  1802. movl %ebx,%ecx
  1803. movups (%edi),%xmm2
  1804. xorps %xmm6,%xmm2
  1805. movups (%edx),%xmm0
  1806. movups 16(%edx),%xmm1
  1807. leal 32(%edx),%edx
  1808. xorps %xmm0,%xmm2
  1809. .L075dec1_loop_14:
  1810. .byte 102,15,56,222,209
  1811. decl %ecx
  1812. movups (%edx),%xmm1
  1813. leal 16(%edx),%edx
  1814. jnz .L075dec1_loop_14
  1815. .byte 102,15,56,223,209
  1816. xorps %xmm6,%xmm2
  1817. movups %xmm2,(%edi)
  1818. .L071xts_dec_ret:
  1819. pxor %xmm0,%xmm0
  1820. pxor %xmm1,%xmm1
  1821. pxor %xmm2,%xmm2
  1822. movdqa %xmm0,(%esp)
  1823. pxor %xmm3,%xmm3
  1824. movdqa %xmm0,16(%esp)
  1825. pxor %xmm4,%xmm4
  1826. movdqa %xmm0,32(%esp)
  1827. pxor %xmm5,%xmm5
  1828. movdqa %xmm0,48(%esp)
  1829. pxor %xmm6,%xmm6
  1830. movdqa %xmm0,64(%esp)
  1831. pxor %xmm7,%xmm7
  1832. movdqa %xmm0,80(%esp)
  1833. movl 116(%esp),%esp
  1834. popl %edi
  1835. popl %esi
  1836. popl %ebx
  1837. popl %ebp
  1838. ret
  1839. .size aes_hw_xts_decrypt,.-.L_aes_hw_xts_decrypt_begin
  1840. .globl aes_hw_cbc_encrypt
  1841. .hidden aes_hw_cbc_encrypt
  1842. .type aes_hw_cbc_encrypt,@function
  1843. .align 16
  1844. aes_hw_cbc_encrypt:
  1845. .L_aes_hw_cbc_encrypt_begin:
  1846. pushl %ebp
  1847. pushl %ebx
  1848. pushl %esi
  1849. pushl %edi
  1850. movl 20(%esp),%esi
  1851. movl %esp,%ebx
  1852. movl 24(%esp),%edi
  1853. subl $24,%ebx
  1854. movl 28(%esp),%eax
  1855. andl $-16,%ebx
  1856. movl 32(%esp),%edx
  1857. movl 36(%esp),%ebp
  1858. testl %eax,%eax
  1859. jz .L076cbc_abort
  1860. cmpl $0,40(%esp)
  1861. xchgl %esp,%ebx
  1862. movups (%ebp),%xmm7
  1863. movl 240(%edx),%ecx
  1864. movl %edx,%ebp
  1865. movl %ebx,16(%esp)
  1866. movl %ecx,%ebx
  1867. je .L077cbc_decrypt
  1868. movaps %xmm7,%xmm2
  1869. cmpl $16,%eax
  1870. jb .L078cbc_enc_tail
  1871. subl $16,%eax
  1872. jmp .L079cbc_enc_loop
  1873. .align 16
  1874. .L079cbc_enc_loop:
  1875. movups (%esi),%xmm7
  1876. leal 16(%esi),%esi
  1877. movups (%edx),%xmm0
  1878. movups 16(%edx),%xmm1
  1879. xorps %xmm0,%xmm7
  1880. leal 32(%edx),%edx
  1881. xorps %xmm7,%xmm2
  1882. .L080enc1_loop_15:
  1883. .byte 102,15,56,220,209
  1884. decl %ecx
  1885. movups (%edx),%xmm1
  1886. leal 16(%edx),%edx
  1887. jnz .L080enc1_loop_15
  1888. .byte 102,15,56,221,209
  1889. movl %ebx,%ecx
  1890. movl %ebp,%edx
  1891. movups %xmm2,(%edi)
  1892. leal 16(%edi),%edi
  1893. subl $16,%eax
  1894. jnc .L079cbc_enc_loop
  1895. addl $16,%eax
  1896. jnz .L078cbc_enc_tail
  1897. movaps %xmm2,%xmm7
  1898. pxor %xmm2,%xmm2
  1899. jmp .L081cbc_ret
  1900. .L078cbc_enc_tail:
  1901. movl %eax,%ecx
  1902. .long 2767451785
  1903. movl $16,%ecx
  1904. subl %eax,%ecx
  1905. xorl %eax,%eax
  1906. .long 2868115081
  1907. leal -16(%edi),%edi
  1908. movl %ebx,%ecx
  1909. movl %edi,%esi
  1910. movl %ebp,%edx
  1911. jmp .L079cbc_enc_loop
  1912. .align 16
  1913. .L077cbc_decrypt:
  1914. cmpl $80,%eax
  1915. jbe .L082cbc_dec_tail
  1916. movaps %xmm7,(%esp)
  1917. subl $80,%eax
  1918. jmp .L083cbc_dec_loop6_enter
  1919. .align 16
  1920. .L084cbc_dec_loop6:
  1921. movaps %xmm0,(%esp)
  1922. movups %xmm7,(%edi)
  1923. leal 16(%edi),%edi
  1924. .L083cbc_dec_loop6_enter:
  1925. movdqu (%esi),%xmm2
  1926. movdqu 16(%esi),%xmm3
  1927. movdqu 32(%esi),%xmm4
  1928. movdqu 48(%esi),%xmm5
  1929. movdqu 64(%esi),%xmm6
  1930. movdqu 80(%esi),%xmm7
  1931. call _aesni_decrypt6
  1932. movups (%esi),%xmm1
  1933. movups 16(%esi),%xmm0
  1934. xorps (%esp),%xmm2
  1935. xorps %xmm1,%xmm3
  1936. movups 32(%esi),%xmm1
  1937. xorps %xmm0,%xmm4
  1938. movups 48(%esi),%xmm0
  1939. xorps %xmm1,%xmm5
  1940. movups 64(%esi),%xmm1
  1941. xorps %xmm0,%xmm6
  1942. movups 80(%esi),%xmm0
  1943. xorps %xmm1,%xmm7
  1944. movups %xmm2,(%edi)
  1945. movups %xmm3,16(%edi)
  1946. leal 96(%esi),%esi
  1947. movups %xmm4,32(%edi)
  1948. movl %ebx,%ecx
  1949. movups %xmm5,48(%edi)
  1950. movl %ebp,%edx
  1951. movups %xmm6,64(%edi)
  1952. leal 80(%edi),%edi
  1953. subl $96,%eax
  1954. ja .L084cbc_dec_loop6
  1955. movaps %xmm7,%xmm2
  1956. movaps %xmm0,%xmm7
  1957. addl $80,%eax
  1958. jle .L085cbc_dec_clear_tail_collected
  1959. movups %xmm2,(%edi)
  1960. leal 16(%edi),%edi
  1961. .L082cbc_dec_tail:
  1962. movups (%esi),%xmm2
  1963. movaps %xmm2,%xmm6
  1964. cmpl $16,%eax
  1965. jbe .L086cbc_dec_one
  1966. movups 16(%esi),%xmm3
  1967. movaps %xmm3,%xmm5
  1968. cmpl $32,%eax
  1969. jbe .L087cbc_dec_two
  1970. movups 32(%esi),%xmm4
  1971. cmpl $48,%eax
  1972. jbe .L088cbc_dec_three
  1973. movups 48(%esi),%xmm5
  1974. cmpl $64,%eax
  1975. jbe .L089cbc_dec_four
  1976. movups 64(%esi),%xmm6
  1977. movaps %xmm7,(%esp)
  1978. movups (%esi),%xmm2
  1979. xorps %xmm7,%xmm7
  1980. call _aesni_decrypt6
  1981. movups (%esi),%xmm1
  1982. movups 16(%esi),%xmm0
  1983. xorps (%esp),%xmm2
  1984. xorps %xmm1,%xmm3
  1985. movups 32(%esi),%xmm1
  1986. xorps %xmm0,%xmm4
  1987. movups 48(%esi),%xmm0
  1988. xorps %xmm1,%xmm5
  1989. movups 64(%esi),%xmm7
  1990. xorps %xmm0,%xmm6
  1991. movups %xmm2,(%edi)
  1992. movups %xmm3,16(%edi)
  1993. pxor %xmm3,%xmm3
  1994. movups %xmm4,32(%edi)
  1995. pxor %xmm4,%xmm4
  1996. movups %xmm5,48(%edi)
  1997. pxor %xmm5,%xmm5
  1998. leal 64(%edi),%edi
  1999. movaps %xmm6,%xmm2
  2000. pxor %xmm6,%xmm6
  2001. subl $80,%eax
  2002. jmp .L090cbc_dec_tail_collected
  2003. .align 16
  2004. .L086cbc_dec_one:
  2005. movups (%edx),%xmm0
  2006. movups 16(%edx),%xmm1
  2007. leal 32(%edx),%edx
  2008. xorps %xmm0,%xmm2
  2009. .L091dec1_loop_16:
  2010. .byte 102,15,56,222,209
  2011. decl %ecx
  2012. movups (%edx),%xmm1
  2013. leal 16(%edx),%edx
  2014. jnz .L091dec1_loop_16
  2015. .byte 102,15,56,223,209
  2016. xorps %xmm7,%xmm2
  2017. movaps %xmm6,%xmm7
  2018. subl $16,%eax
  2019. jmp .L090cbc_dec_tail_collected
  2020. .align 16
  2021. .L087cbc_dec_two:
  2022. call _aesni_decrypt2
  2023. xorps %xmm7,%xmm2
  2024. xorps %xmm6,%xmm3
  2025. movups %xmm2,(%edi)
  2026. movaps %xmm3,%xmm2
  2027. pxor %xmm3,%xmm3
  2028. leal 16(%edi),%edi
  2029. movaps %xmm5,%xmm7
  2030. subl $32,%eax
  2031. jmp .L090cbc_dec_tail_collected
  2032. .align 16
  2033. .L088cbc_dec_three:
  2034. call _aesni_decrypt3
  2035. xorps %xmm7,%xmm2
  2036. xorps %xmm6,%xmm3
  2037. xorps %xmm5,%xmm4
  2038. movups %xmm2,(%edi)
  2039. movaps %xmm4,%xmm2
  2040. pxor %xmm4,%xmm4
  2041. movups %xmm3,16(%edi)
  2042. pxor %xmm3,%xmm3
  2043. leal 32(%edi),%edi
  2044. movups 32(%esi),%xmm7
  2045. subl $48,%eax
  2046. jmp .L090cbc_dec_tail_collected
  2047. .align 16
  2048. .L089cbc_dec_four:
  2049. call _aesni_decrypt4
  2050. movups 16(%esi),%xmm1
  2051. movups 32(%esi),%xmm0
  2052. xorps %xmm7,%xmm2
  2053. movups 48(%esi),%xmm7
  2054. xorps %xmm6,%xmm3
  2055. movups %xmm2,(%edi)
  2056. xorps %xmm1,%xmm4
  2057. movups %xmm3,16(%edi)
  2058. pxor %xmm3,%xmm3
  2059. xorps %xmm0,%xmm5
  2060. movups %xmm4,32(%edi)
  2061. pxor %xmm4,%xmm4
  2062. leal 48(%edi),%edi
  2063. movaps %xmm5,%xmm2
  2064. pxor %xmm5,%xmm5
  2065. subl $64,%eax
  2066. jmp .L090cbc_dec_tail_collected
  2067. .align 16
  2068. .L085cbc_dec_clear_tail_collected:
  2069. pxor %xmm3,%xmm3
  2070. pxor %xmm4,%xmm4
  2071. pxor %xmm5,%xmm5
  2072. pxor %xmm6,%xmm6
  2073. .L090cbc_dec_tail_collected:
  2074. andl $15,%eax
  2075. jnz .L092cbc_dec_tail_partial
  2076. movups %xmm2,(%edi)
  2077. pxor %xmm0,%xmm0
  2078. jmp .L081cbc_ret
  2079. .align 16
  2080. .L092cbc_dec_tail_partial:
  2081. movaps %xmm2,(%esp)
  2082. pxor %xmm0,%xmm0
  2083. movl $16,%ecx
  2084. movl %esp,%esi
  2085. subl %eax,%ecx
  2086. .long 2767451785
  2087. movdqa %xmm2,(%esp)
  2088. .L081cbc_ret:
  2089. movl 16(%esp),%esp
  2090. movl 36(%esp),%ebp
  2091. pxor %xmm2,%xmm2
  2092. pxor %xmm1,%xmm1
  2093. movups %xmm7,(%ebp)
  2094. pxor %xmm7,%xmm7
  2095. .L076cbc_abort:
  2096. popl %edi
  2097. popl %esi
  2098. popl %ebx
  2099. popl %ebp
  2100. ret
  2101. .size aes_hw_cbc_encrypt,.-.L_aes_hw_cbc_encrypt_begin
  2102. .hidden _aesni_set_encrypt_key
  2103. .type _aesni_set_encrypt_key,@function
  2104. .align 16
  2105. _aesni_set_encrypt_key:
  2106. pushl %ebp
  2107. pushl %ebx
  2108. testl %eax,%eax
  2109. jz .L093bad_pointer
  2110. testl %edx,%edx
  2111. jz .L093bad_pointer
  2112. call .L094pic
  2113. .L094pic:
  2114. popl %ebx
  2115. leal .Lkey_const-.L094pic(%ebx),%ebx
  2116. leal OPENSSL_ia32cap_P-.Lkey_const(%ebx),%ebp
  2117. movups (%eax),%xmm0
  2118. xorps %xmm4,%xmm4
  2119. movl 4(%ebp),%ebp
  2120. leal 16(%edx),%edx
  2121. andl $268437504,%ebp
  2122. cmpl $256,%ecx
  2123. je .L09514rounds
  2124. cmpl $192,%ecx
  2125. je .L09612rounds
  2126. cmpl $128,%ecx
  2127. jne .L097bad_keybits
  2128. .align 16
  2129. .L09810rounds:
  2130. cmpl $268435456,%ebp
  2131. je .L09910rounds_alt
  2132. movl $9,%ecx
  2133. movups %xmm0,-16(%edx)
  2134. .byte 102,15,58,223,200,1
  2135. call .L100key_128_cold
  2136. .byte 102,15,58,223,200,2
  2137. call .L101key_128
  2138. .byte 102,15,58,223,200,4
  2139. call .L101key_128
  2140. .byte 102,15,58,223,200,8
  2141. call .L101key_128
  2142. .byte 102,15,58,223,200,16
  2143. call .L101key_128
  2144. .byte 102,15,58,223,200,32
  2145. call .L101key_128
  2146. .byte 102,15,58,223,200,64
  2147. call .L101key_128
  2148. .byte 102,15,58,223,200,128
  2149. call .L101key_128
  2150. .byte 102,15,58,223,200,27
  2151. call .L101key_128
  2152. .byte 102,15,58,223,200,54
  2153. call .L101key_128
  2154. movups %xmm0,(%edx)
  2155. movl %ecx,80(%edx)
  2156. jmp .L102good_key
  2157. .align 16
  2158. .L101key_128:
  2159. movups %xmm0,(%edx)
  2160. leal 16(%edx),%edx
  2161. .L100key_128_cold:
  2162. shufps $16,%xmm0,%xmm4
  2163. xorps %xmm4,%xmm0
  2164. shufps $140,%xmm0,%xmm4
  2165. xorps %xmm4,%xmm0
  2166. shufps $255,%xmm1,%xmm1
  2167. xorps %xmm1,%xmm0
  2168. ret
  2169. .align 16
  2170. .L09910rounds_alt:
  2171. movdqa (%ebx),%xmm5
  2172. movl $8,%ecx
  2173. movdqa 32(%ebx),%xmm4
  2174. movdqa %xmm0,%xmm2
  2175. movdqu %xmm0,-16(%edx)
  2176. .L103loop_key128:
  2177. .byte 102,15,56,0,197
  2178. .byte 102,15,56,221,196
  2179. pslld $1,%xmm4
  2180. leal 16(%edx),%edx
  2181. movdqa %xmm2,%xmm3
  2182. pslldq $4,%xmm2
  2183. pxor %xmm2,%xmm3
  2184. pslldq $4,%xmm2
  2185. pxor %xmm2,%xmm3
  2186. pslldq $4,%xmm2
  2187. pxor %xmm3,%xmm2
  2188. pxor %xmm2,%xmm0
  2189. movdqu %xmm0,-16(%edx)
  2190. movdqa %xmm0,%xmm2
  2191. decl %ecx
  2192. jnz .L103loop_key128
  2193. movdqa 48(%ebx),%xmm4
  2194. .byte 102,15,56,0,197
  2195. .byte 102,15,56,221,196
  2196. pslld $1,%xmm4
  2197. movdqa %xmm2,%xmm3
  2198. pslldq $4,%xmm2
  2199. pxor %xmm2,%xmm3
  2200. pslldq $4,%xmm2
  2201. pxor %xmm2,%xmm3
  2202. pslldq $4,%xmm2
  2203. pxor %xmm3,%xmm2
  2204. pxor %xmm2,%xmm0
  2205. movdqu %xmm0,(%edx)
  2206. movdqa %xmm0,%xmm2
  2207. .byte 102,15,56,0,197
  2208. .byte 102,15,56,221,196
  2209. movdqa %xmm2,%xmm3
  2210. pslldq $4,%xmm2
  2211. pxor %xmm2,%xmm3
  2212. pslldq $4,%xmm2
  2213. pxor %xmm2,%xmm3
  2214. pslldq $4,%xmm2
  2215. pxor %xmm3,%xmm2
  2216. pxor %xmm2,%xmm0
  2217. movdqu %xmm0,16(%edx)
  2218. movl $9,%ecx
  2219. movl %ecx,96(%edx)
  2220. jmp .L102good_key
  2221. .align 16
  2222. .L09612rounds:
  2223. movq 16(%eax),%xmm2
  2224. cmpl $268435456,%ebp
  2225. je .L10412rounds_alt
  2226. movl $11,%ecx
  2227. movups %xmm0,-16(%edx)
  2228. .byte 102,15,58,223,202,1
  2229. call .L105key_192a_cold
  2230. .byte 102,15,58,223,202,2
  2231. call .L106key_192b
  2232. .byte 102,15,58,223,202,4
  2233. call .L107key_192a
  2234. .byte 102,15,58,223,202,8
  2235. call .L106key_192b
  2236. .byte 102,15,58,223,202,16
  2237. call .L107key_192a
  2238. .byte 102,15,58,223,202,32
  2239. call .L106key_192b
  2240. .byte 102,15,58,223,202,64
  2241. call .L107key_192a
  2242. .byte 102,15,58,223,202,128
  2243. call .L106key_192b
  2244. movups %xmm0,(%edx)
  2245. movl %ecx,48(%edx)
  2246. jmp .L102good_key
  2247. .align 16
  2248. .L107key_192a:
  2249. movups %xmm0,(%edx)
  2250. leal 16(%edx),%edx
  2251. .align 16
  2252. .L105key_192a_cold:
  2253. movaps %xmm2,%xmm5
  2254. .L108key_192b_warm:
  2255. shufps $16,%xmm0,%xmm4
  2256. movdqa %xmm2,%xmm3
  2257. xorps %xmm4,%xmm0
  2258. shufps $140,%xmm0,%xmm4
  2259. pslldq $4,%xmm3
  2260. xorps %xmm4,%xmm0
  2261. pshufd $85,%xmm1,%xmm1
  2262. pxor %xmm3,%xmm2
  2263. pxor %xmm1,%xmm0
  2264. pshufd $255,%xmm0,%xmm3
  2265. pxor %xmm3,%xmm2
  2266. ret
  2267. .align 16
  2268. .L106key_192b:
  2269. movaps %xmm0,%xmm3
  2270. shufps $68,%xmm0,%xmm5
  2271. movups %xmm5,(%edx)
  2272. shufps $78,%xmm2,%xmm3
  2273. movups %xmm3,16(%edx)
  2274. leal 32(%edx),%edx
  2275. jmp .L108key_192b_warm
  2276. .align 16
  2277. .L10412rounds_alt:
  2278. movdqa 16(%ebx),%xmm5
  2279. movdqa 32(%ebx),%xmm4
  2280. movl $8,%ecx
  2281. movdqu %xmm0,-16(%edx)
  2282. .L109loop_key192:
  2283. movq %xmm2,(%edx)
  2284. movdqa %xmm2,%xmm1
  2285. .byte 102,15,56,0,213
  2286. .byte 102,15,56,221,212
  2287. pslld $1,%xmm4
  2288. leal 24(%edx),%edx
  2289. movdqa %xmm0,%xmm3
  2290. pslldq $4,%xmm0
  2291. pxor %xmm0,%xmm3
  2292. pslldq $4,%xmm0
  2293. pxor %xmm0,%xmm3
  2294. pslldq $4,%xmm0
  2295. pxor %xmm3,%xmm0
  2296. pshufd $255,%xmm0,%xmm3
  2297. pxor %xmm1,%xmm3
  2298. pslldq $4,%xmm1
  2299. pxor %xmm1,%xmm3
  2300. pxor %xmm2,%xmm0
  2301. pxor %xmm3,%xmm2
  2302. movdqu %xmm0,-16(%edx)
  2303. decl %ecx
  2304. jnz .L109loop_key192
  2305. movl $11,%ecx
  2306. movl %ecx,32(%edx)
  2307. jmp .L102good_key
  2308. .align 16
  2309. .L09514rounds:
  2310. movups 16(%eax),%xmm2
  2311. leal 16(%edx),%edx
  2312. cmpl $268435456,%ebp
  2313. je .L11014rounds_alt
  2314. movl $13,%ecx
  2315. movups %xmm0,-32(%edx)
  2316. movups %xmm2,-16(%edx)
  2317. .byte 102,15,58,223,202,1
  2318. call .L111key_256a_cold
  2319. .byte 102,15,58,223,200,1
  2320. call .L112key_256b
  2321. .byte 102,15,58,223,202,2
  2322. call .L113key_256a
  2323. .byte 102,15,58,223,200,2
  2324. call .L112key_256b
  2325. .byte 102,15,58,223,202,4
  2326. call .L113key_256a
  2327. .byte 102,15,58,223,200,4
  2328. call .L112key_256b
  2329. .byte 102,15,58,223,202,8
  2330. call .L113key_256a
  2331. .byte 102,15,58,223,200,8
  2332. call .L112key_256b
  2333. .byte 102,15,58,223,202,16
  2334. call .L113key_256a
  2335. .byte 102,15,58,223,200,16
  2336. call .L112key_256b
  2337. .byte 102,15,58,223,202,32
  2338. call .L113key_256a
  2339. .byte 102,15,58,223,200,32
  2340. call .L112key_256b
  2341. .byte 102,15,58,223,202,64
  2342. call .L113key_256a
  2343. movups %xmm0,(%edx)
  2344. movl %ecx,16(%edx)
  2345. xorl %eax,%eax
  2346. jmp .L102good_key
  2347. .align 16
  2348. .L113key_256a:
  2349. movups %xmm2,(%edx)
  2350. leal 16(%edx),%edx
  2351. .L111key_256a_cold:
  2352. shufps $16,%xmm0,%xmm4
  2353. xorps %xmm4,%xmm0
  2354. shufps $140,%xmm0,%xmm4
  2355. xorps %xmm4,%xmm0
  2356. shufps $255,%xmm1,%xmm1
  2357. xorps %xmm1,%xmm0
  2358. ret
  2359. .align 16
  2360. .L112key_256b:
  2361. movups %xmm0,(%edx)
  2362. leal 16(%edx),%edx
  2363. shufps $16,%xmm2,%xmm4
  2364. xorps %xmm4,%xmm2
  2365. shufps $140,%xmm2,%xmm4
  2366. xorps %xmm4,%xmm2
  2367. shufps $170,%xmm1,%xmm1
  2368. xorps %xmm1,%xmm2
  2369. ret
  2370. .align 16
  2371. .L11014rounds_alt:
  2372. movdqa (%ebx),%xmm5
  2373. movdqa 32(%ebx),%xmm4
  2374. movl $7,%ecx
  2375. movdqu %xmm0,-32(%edx)
  2376. movdqa %xmm2,%xmm1
  2377. movdqu %xmm2,-16(%edx)
  2378. .L114loop_key256:
  2379. .byte 102,15,56,0,213
  2380. .byte 102,15,56,221,212
  2381. movdqa %xmm0,%xmm3
  2382. pslldq $4,%xmm0
  2383. pxor %xmm0,%xmm3
  2384. pslldq $4,%xmm0
  2385. pxor %xmm0,%xmm3
  2386. pslldq $4,%xmm0
  2387. pxor %xmm3,%xmm0
  2388. pslld $1,%xmm4
  2389. pxor %xmm2,%xmm0
  2390. movdqu %xmm0,(%edx)
  2391. decl %ecx
  2392. jz .L115done_key256
  2393. pshufd $255,%xmm0,%xmm2
  2394. pxor %xmm3,%xmm3
  2395. .byte 102,15,56,221,211
  2396. movdqa %xmm1,%xmm3
  2397. pslldq $4,%xmm1
  2398. pxor %xmm1,%xmm3
  2399. pslldq $4,%xmm1
  2400. pxor %xmm1,%xmm3
  2401. pslldq $4,%xmm1
  2402. pxor %xmm3,%xmm1
  2403. pxor %xmm1,%xmm2
  2404. movdqu %xmm2,16(%edx)
  2405. leal 32(%edx),%edx
  2406. movdqa %xmm2,%xmm1
  2407. jmp .L114loop_key256
  2408. .L115done_key256:
  2409. movl $13,%ecx
  2410. movl %ecx,16(%edx)
  2411. .L102good_key:
  2412. pxor %xmm0,%xmm0
  2413. pxor %xmm1,%xmm1
  2414. pxor %xmm2,%xmm2
  2415. pxor %xmm3,%xmm3
  2416. pxor %xmm4,%xmm4
  2417. pxor %xmm5,%xmm5
  2418. xorl %eax,%eax
  2419. popl %ebx
  2420. popl %ebp
  2421. ret
  2422. .align 4
  2423. .L093bad_pointer:
  2424. movl $-1,%eax
  2425. popl %ebx
  2426. popl %ebp
  2427. ret
  2428. .align 4
  2429. .L097bad_keybits:
  2430. pxor %xmm0,%xmm0
  2431. movl $-2,%eax
  2432. popl %ebx
  2433. popl %ebp
  2434. ret
  2435. .size _aesni_set_encrypt_key,.-_aesni_set_encrypt_key
  2436. .globl aes_hw_set_encrypt_key
  2437. .hidden aes_hw_set_encrypt_key
  2438. .type aes_hw_set_encrypt_key,@function
  2439. .align 16
  2440. aes_hw_set_encrypt_key:
  2441. .L_aes_hw_set_encrypt_key_begin:
  2442. #ifdef BORINGSSL_DISPATCH_TEST
  2443. pushl %ebx
  2444. pushl %edx
  2445. call .L116pic
  2446. .L116pic:
  2447. popl %ebx
  2448. leal BORINGSSL_function_hit+3-.L116pic(%ebx),%ebx
  2449. movl $1,%edx
  2450. movb %dl,(%ebx)
  2451. popl %edx
  2452. popl %ebx
  2453. #endif
  2454. movl 4(%esp),%eax
  2455. movl 8(%esp),%ecx
  2456. movl 12(%esp),%edx
  2457. call _aesni_set_encrypt_key
  2458. ret
  2459. .size aes_hw_set_encrypt_key,.-.L_aes_hw_set_encrypt_key_begin
  2460. .globl aes_hw_set_decrypt_key
  2461. .hidden aes_hw_set_decrypt_key
  2462. .type aes_hw_set_decrypt_key,@function
  2463. .align 16
  2464. aes_hw_set_decrypt_key:
  2465. .L_aes_hw_set_decrypt_key_begin:
  2466. movl 4(%esp),%eax
  2467. movl 8(%esp),%ecx
  2468. movl 12(%esp),%edx
  2469. call _aesni_set_encrypt_key
  2470. movl 12(%esp),%edx
  2471. shll $4,%ecx
  2472. testl %eax,%eax
  2473. jnz .L117dec_key_ret
  2474. leal 16(%edx,%ecx,1),%eax
  2475. movups (%edx),%xmm0
  2476. movups (%eax),%xmm1
  2477. movups %xmm0,(%eax)
  2478. movups %xmm1,(%edx)
  2479. leal 16(%edx),%edx
  2480. leal -16(%eax),%eax
  2481. .L118dec_key_inverse:
  2482. movups (%edx),%xmm0
  2483. movups (%eax),%xmm1
  2484. .byte 102,15,56,219,192
  2485. .byte 102,15,56,219,201
  2486. leal 16(%edx),%edx
  2487. leal -16(%eax),%eax
  2488. movups %xmm0,16(%eax)
  2489. movups %xmm1,-16(%edx)
  2490. cmpl %edx,%eax
  2491. ja .L118dec_key_inverse
  2492. movups (%edx),%xmm0
  2493. .byte 102,15,56,219,192
  2494. movups %xmm0,(%edx)
  2495. pxor %xmm0,%xmm0
  2496. pxor %xmm1,%xmm1
  2497. xorl %eax,%eax
  2498. .L117dec_key_ret:
  2499. ret
  2500. .size aes_hw_set_decrypt_key,.-.L_aes_hw_set_decrypt_key_begin
  2501. .align 64
  2502. .Lkey_const:
  2503. .long 202313229,202313229,202313229,202313229
  2504. .long 67569157,67569157,67569157,67569157
  2505. .long 1,1,1,1
  2506. .long 27,27,27,27
  2507. .byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
  2508. .byte 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
  2509. .byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
  2510. .byte 115,108,46,111,114,103,62,0
  2511. #endif
  2512. .section .note.GNU-stack,"",@progbits