rc4-x86_64.s 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  1. .text
  2. .globl RC4
  3. .type RC4,@function
  4. .align 16
  5. RC4:
  6. .cfi_startproc
  7. orq %rsi,%rsi
  8. jne .Lentry
  9. .byte 0xf3,0xc3
  10. .Lentry:
  11. pushq %rbx
  12. .cfi_adjust_cfa_offset 8
  13. .cfi_offset %rbx,-16
  14. pushq %r12
  15. .cfi_adjust_cfa_offset 8
  16. .cfi_offset %r12,-24
  17. pushq %r13
  18. .cfi_adjust_cfa_offset 8
  19. .cfi_offset %r13,-32
  20. .Lprologue:
  21. movq %rsi,%r11
  22. movq %rdx,%r12
  23. movq %rcx,%r13
  24. xorq %r10,%r10
  25. xorq %rcx,%rcx
  26. leaq 8(%rdi),%rdi
  27. movb -8(%rdi),%r10b
  28. movb -4(%rdi),%cl
  29. cmpl $-1,256(%rdi)
  30. je .LRC4_CHAR
  31. movl OPENSSL_ia32cap_P(%rip),%r8d
  32. xorq %rbx,%rbx
  33. incb %r10b
  34. subq %r10,%rbx
  35. subq %r12,%r13
  36. movl (%rdi,%r10,4),%eax
  37. testq $-16,%r11
  38. jz .Lloop1
  39. btl $30,%r8d
  40. jc .Lintel
  41. andq $7,%rbx
  42. leaq 1(%r10),%rsi
  43. jz .Loop8
  44. subq %rbx,%r11
  45. .Loop8_warmup:
  46. addb %al,%cl
  47. movl (%rdi,%rcx,4),%edx
  48. movl %eax,(%rdi,%rcx,4)
  49. movl %edx,(%rdi,%r10,4)
  50. addb %dl,%al
  51. incb %r10b
  52. movl (%rdi,%rax,4),%edx
  53. movl (%rdi,%r10,4),%eax
  54. xorb (%r12),%dl
  55. movb %dl,(%r12,%r13,1)
  56. leaq 1(%r12),%r12
  57. decq %rbx
  58. jnz .Loop8_warmup
  59. leaq 1(%r10),%rsi
  60. jmp .Loop8
  61. .align 16
  62. .Loop8:
  63. addb %al,%cl
  64. movl (%rdi,%rcx,4),%edx
  65. movl %eax,(%rdi,%rcx,4)
  66. movl 0(%rdi,%rsi,4),%ebx
  67. rorq $8,%r8
  68. movl %edx,0(%rdi,%r10,4)
  69. addb %al,%dl
  70. movb (%rdi,%rdx,4),%r8b
  71. addb %bl,%cl
  72. movl (%rdi,%rcx,4),%edx
  73. movl %ebx,(%rdi,%rcx,4)
  74. movl 4(%rdi,%rsi,4),%eax
  75. rorq $8,%r8
  76. movl %edx,4(%rdi,%r10,4)
  77. addb %bl,%dl
  78. movb (%rdi,%rdx,4),%r8b
  79. addb %al,%cl
  80. movl (%rdi,%rcx,4),%edx
  81. movl %eax,(%rdi,%rcx,4)
  82. movl 8(%rdi,%rsi,4),%ebx
  83. rorq $8,%r8
  84. movl %edx,8(%rdi,%r10,4)
  85. addb %al,%dl
  86. movb (%rdi,%rdx,4),%r8b
  87. addb %bl,%cl
  88. movl (%rdi,%rcx,4),%edx
  89. movl %ebx,(%rdi,%rcx,4)
  90. movl 12(%rdi,%rsi,4),%eax
  91. rorq $8,%r8
  92. movl %edx,12(%rdi,%r10,4)
  93. addb %bl,%dl
  94. movb (%rdi,%rdx,4),%r8b
  95. addb %al,%cl
  96. movl (%rdi,%rcx,4),%edx
  97. movl %eax,(%rdi,%rcx,4)
  98. movl 16(%rdi,%rsi,4),%ebx
  99. rorq $8,%r8
  100. movl %edx,16(%rdi,%r10,4)
  101. addb %al,%dl
  102. movb (%rdi,%rdx,4),%r8b
  103. addb %bl,%cl
  104. movl (%rdi,%rcx,4),%edx
  105. movl %ebx,(%rdi,%rcx,4)
  106. movl 20(%rdi,%rsi,4),%eax
  107. rorq $8,%r8
  108. movl %edx,20(%rdi,%r10,4)
  109. addb %bl,%dl
  110. movb (%rdi,%rdx,4),%r8b
  111. addb %al,%cl
  112. movl (%rdi,%rcx,4),%edx
  113. movl %eax,(%rdi,%rcx,4)
  114. movl 24(%rdi,%rsi,4),%ebx
  115. rorq $8,%r8
  116. movl %edx,24(%rdi,%r10,4)
  117. addb %al,%dl
  118. movb (%rdi,%rdx,4),%r8b
  119. addb $8,%sil
  120. addb %bl,%cl
  121. movl (%rdi,%rcx,4),%edx
  122. movl %ebx,(%rdi,%rcx,4)
  123. movl -4(%rdi,%rsi,4),%eax
  124. rorq $8,%r8
  125. movl %edx,28(%rdi,%r10,4)
  126. addb %bl,%dl
  127. movb (%rdi,%rdx,4),%r8b
  128. addb $8,%r10b
  129. rorq $8,%r8
  130. subq $8,%r11
  131. xorq (%r12),%r8
  132. movq %r8,(%r12,%r13,1)
  133. leaq 8(%r12),%r12
  134. testq $-8,%r11
  135. jnz .Loop8
  136. cmpq $0,%r11
  137. jne .Lloop1
  138. jmp .Lexit
  139. .align 16
  140. .Lintel:
  141. testq $-32,%r11
  142. jz .Lloop1
  143. andq $15,%rbx
  144. jz .Loop16_is_hot
  145. subq %rbx,%r11
  146. .Loop16_warmup:
  147. addb %al,%cl
  148. movl (%rdi,%rcx,4),%edx
  149. movl %eax,(%rdi,%rcx,4)
  150. movl %edx,(%rdi,%r10,4)
  151. addb %dl,%al
  152. incb %r10b
  153. movl (%rdi,%rax,4),%edx
  154. movl (%rdi,%r10,4),%eax
  155. xorb (%r12),%dl
  156. movb %dl,(%r12,%r13,1)
  157. leaq 1(%r12),%r12
  158. decq %rbx
  159. jnz .Loop16_warmup
  160. movq %rcx,%rbx
  161. xorq %rcx,%rcx
  162. movb %bl,%cl
  163. .Loop16_is_hot:
  164. leaq (%rdi,%r10,4),%rsi
  165. addb %al,%cl
  166. movl (%rdi,%rcx,4),%edx
  167. pxor %xmm0,%xmm0
  168. movl %eax,(%rdi,%rcx,4)
  169. addb %dl,%al
  170. movl 4(%rsi),%ebx
  171. movzbl %al,%eax
  172. movl %edx,0(%rsi)
  173. addb %bl,%cl
  174. pinsrw $0,(%rdi,%rax,4),%xmm0
  175. jmp .Loop16_enter
  176. .align 16
  177. .Loop16:
  178. addb %al,%cl
  179. movl (%rdi,%rcx,4),%edx
  180. pxor %xmm0,%xmm2
  181. psllq $8,%xmm1
  182. pxor %xmm0,%xmm0
  183. movl %eax,(%rdi,%rcx,4)
  184. addb %dl,%al
  185. movl 4(%rsi),%ebx
  186. movzbl %al,%eax
  187. movl %edx,0(%rsi)
  188. pxor %xmm1,%xmm2
  189. addb %bl,%cl
  190. pinsrw $0,(%rdi,%rax,4),%xmm0
  191. movdqu %xmm2,(%r12,%r13,1)
  192. leaq 16(%r12),%r12
  193. .Loop16_enter:
  194. movl (%rdi,%rcx,4),%edx
  195. pxor %xmm1,%xmm1
  196. movl %ebx,(%rdi,%rcx,4)
  197. addb %dl,%bl
  198. movl 8(%rsi),%eax
  199. movzbl %bl,%ebx
  200. movl %edx,4(%rsi)
  201. addb %al,%cl
  202. pinsrw $0,(%rdi,%rbx,4),%xmm1
  203. movl (%rdi,%rcx,4),%edx
  204. movl %eax,(%rdi,%rcx,4)
  205. addb %dl,%al
  206. movl 12(%rsi),%ebx
  207. movzbl %al,%eax
  208. movl %edx,8(%rsi)
  209. addb %bl,%cl
  210. pinsrw $1,(%rdi,%rax,4),%xmm0
  211. movl (%rdi,%rcx,4),%edx
  212. movl %ebx,(%rdi,%rcx,4)
  213. addb %dl,%bl
  214. movl 16(%rsi),%eax
  215. movzbl %bl,%ebx
  216. movl %edx,12(%rsi)
  217. addb %al,%cl
  218. pinsrw $1,(%rdi,%rbx,4),%xmm1
  219. movl (%rdi,%rcx,4),%edx
  220. movl %eax,(%rdi,%rcx,4)
  221. addb %dl,%al
  222. movl 20(%rsi),%ebx
  223. movzbl %al,%eax
  224. movl %edx,16(%rsi)
  225. addb %bl,%cl
  226. pinsrw $2,(%rdi,%rax,4),%xmm0
  227. movl (%rdi,%rcx,4),%edx
  228. movl %ebx,(%rdi,%rcx,4)
  229. addb %dl,%bl
  230. movl 24(%rsi),%eax
  231. movzbl %bl,%ebx
  232. movl %edx,20(%rsi)
  233. addb %al,%cl
  234. pinsrw $2,(%rdi,%rbx,4),%xmm1
  235. movl (%rdi,%rcx,4),%edx
  236. movl %eax,(%rdi,%rcx,4)
  237. addb %dl,%al
  238. movl 28(%rsi),%ebx
  239. movzbl %al,%eax
  240. movl %edx,24(%rsi)
  241. addb %bl,%cl
  242. pinsrw $3,(%rdi,%rax,4),%xmm0
  243. movl (%rdi,%rcx,4),%edx
  244. movl %ebx,(%rdi,%rcx,4)
  245. addb %dl,%bl
  246. movl 32(%rsi),%eax
  247. movzbl %bl,%ebx
  248. movl %edx,28(%rsi)
  249. addb %al,%cl
  250. pinsrw $3,(%rdi,%rbx,4),%xmm1
  251. movl (%rdi,%rcx,4),%edx
  252. movl %eax,(%rdi,%rcx,4)
  253. addb %dl,%al
  254. movl 36(%rsi),%ebx
  255. movzbl %al,%eax
  256. movl %edx,32(%rsi)
  257. addb %bl,%cl
  258. pinsrw $4,(%rdi,%rax,4),%xmm0
  259. movl (%rdi,%rcx,4),%edx
  260. movl %ebx,(%rdi,%rcx,4)
  261. addb %dl,%bl
  262. movl 40(%rsi),%eax
  263. movzbl %bl,%ebx
  264. movl %edx,36(%rsi)
  265. addb %al,%cl
  266. pinsrw $4,(%rdi,%rbx,4),%xmm1
  267. movl (%rdi,%rcx,4),%edx
  268. movl %eax,(%rdi,%rcx,4)
  269. addb %dl,%al
  270. movl 44(%rsi),%ebx
  271. movzbl %al,%eax
  272. movl %edx,40(%rsi)
  273. addb %bl,%cl
  274. pinsrw $5,(%rdi,%rax,4),%xmm0
  275. movl (%rdi,%rcx,4),%edx
  276. movl %ebx,(%rdi,%rcx,4)
  277. addb %dl,%bl
  278. movl 48(%rsi),%eax
  279. movzbl %bl,%ebx
  280. movl %edx,44(%rsi)
  281. addb %al,%cl
  282. pinsrw $5,(%rdi,%rbx,4),%xmm1
  283. movl (%rdi,%rcx,4),%edx
  284. movl %eax,(%rdi,%rcx,4)
  285. addb %dl,%al
  286. movl 52(%rsi),%ebx
  287. movzbl %al,%eax
  288. movl %edx,48(%rsi)
  289. addb %bl,%cl
  290. pinsrw $6,(%rdi,%rax,4),%xmm0
  291. movl (%rdi,%rcx,4),%edx
  292. movl %ebx,(%rdi,%rcx,4)
  293. addb %dl,%bl
  294. movl 56(%rsi),%eax
  295. movzbl %bl,%ebx
  296. movl %edx,52(%rsi)
  297. addb %al,%cl
  298. pinsrw $6,(%rdi,%rbx,4),%xmm1
  299. movl (%rdi,%rcx,4),%edx
  300. movl %eax,(%rdi,%rcx,4)
  301. addb %dl,%al
  302. movl 60(%rsi),%ebx
  303. movzbl %al,%eax
  304. movl %edx,56(%rsi)
  305. addb %bl,%cl
  306. pinsrw $7,(%rdi,%rax,4),%xmm0
  307. addb $16,%r10b
  308. movdqu (%r12),%xmm2
  309. movl (%rdi,%rcx,4),%edx
  310. movl %ebx,(%rdi,%rcx,4)
  311. addb %dl,%bl
  312. movzbl %bl,%ebx
  313. movl %edx,60(%rsi)
  314. leaq (%rdi,%r10,4),%rsi
  315. pinsrw $7,(%rdi,%rbx,4),%xmm1
  316. movl (%rsi),%eax
  317. movq %rcx,%rbx
  318. xorq %rcx,%rcx
  319. subq $16,%r11
  320. movb %bl,%cl
  321. testq $-16,%r11
  322. jnz .Loop16
  323. psllq $8,%xmm1
  324. pxor %xmm0,%xmm2
  325. pxor %xmm1,%xmm2
  326. movdqu %xmm2,(%r12,%r13,1)
  327. leaq 16(%r12),%r12
  328. cmpq $0,%r11
  329. jne .Lloop1
  330. jmp .Lexit
  331. .align 16
  332. .Lloop1:
  333. addb %al,%cl
  334. movl (%rdi,%rcx,4),%edx
  335. movl %eax,(%rdi,%rcx,4)
  336. movl %edx,(%rdi,%r10,4)
  337. addb %dl,%al
  338. incb %r10b
  339. movl (%rdi,%rax,4),%edx
  340. movl (%rdi,%r10,4),%eax
  341. xorb (%r12),%dl
  342. movb %dl,(%r12,%r13,1)
  343. leaq 1(%r12),%r12
  344. decq %r11
  345. jnz .Lloop1
  346. jmp .Lexit
  347. .align 16
  348. .LRC4_CHAR:
  349. addb $1,%r10b
  350. movzbl (%rdi,%r10,1),%eax
  351. testq $-8,%r11
  352. jz .Lcloop1
  353. jmp .Lcloop8
  354. .align 16
  355. .Lcloop8:
  356. movl (%r12),%r8d
  357. movl 4(%r12),%r9d
  358. addb %al,%cl
  359. leaq 1(%r10),%rsi
  360. movzbl (%rdi,%rcx,1),%edx
  361. movzbl %sil,%esi
  362. movzbl (%rdi,%rsi,1),%ebx
  363. movb %al,(%rdi,%rcx,1)
  364. cmpq %rsi,%rcx
  365. movb %dl,(%rdi,%r10,1)
  366. jne .Lcmov0
  367. movq %rax,%rbx
  368. .Lcmov0:
  369. addb %al,%dl
  370. xorb (%rdi,%rdx,1),%r8b
  371. rorl $8,%r8d
  372. addb %bl,%cl
  373. leaq 1(%rsi),%r10
  374. movzbl (%rdi,%rcx,1),%edx
  375. movzbl %r10b,%r10d
  376. movzbl (%rdi,%r10,1),%eax
  377. movb %bl,(%rdi,%rcx,1)
  378. cmpq %r10,%rcx
  379. movb %dl,(%rdi,%rsi,1)
  380. jne .Lcmov1
  381. movq %rbx,%rax
  382. .Lcmov1:
  383. addb %bl,%dl
  384. xorb (%rdi,%rdx,1),%r8b
  385. rorl $8,%r8d
  386. addb %al,%cl
  387. leaq 1(%r10),%rsi
  388. movzbl (%rdi,%rcx,1),%edx
  389. movzbl %sil,%esi
  390. movzbl (%rdi,%rsi,1),%ebx
  391. movb %al,(%rdi,%rcx,1)
  392. cmpq %rsi,%rcx
  393. movb %dl,(%rdi,%r10,1)
  394. jne .Lcmov2
  395. movq %rax,%rbx
  396. .Lcmov2:
  397. addb %al,%dl
  398. xorb (%rdi,%rdx,1),%r8b
  399. rorl $8,%r8d
  400. addb %bl,%cl
  401. leaq 1(%rsi),%r10
  402. movzbl (%rdi,%rcx,1),%edx
  403. movzbl %r10b,%r10d
  404. movzbl (%rdi,%r10,1),%eax
  405. movb %bl,(%rdi,%rcx,1)
  406. cmpq %r10,%rcx
  407. movb %dl,(%rdi,%rsi,1)
  408. jne .Lcmov3
  409. movq %rbx,%rax
  410. .Lcmov3:
  411. addb %bl,%dl
  412. xorb (%rdi,%rdx,1),%r8b
  413. rorl $8,%r8d
  414. addb %al,%cl
  415. leaq 1(%r10),%rsi
  416. movzbl (%rdi,%rcx,1),%edx
  417. movzbl %sil,%esi
  418. movzbl (%rdi,%rsi,1),%ebx
  419. movb %al,(%rdi,%rcx,1)
  420. cmpq %rsi,%rcx
  421. movb %dl,(%rdi,%r10,1)
  422. jne .Lcmov4
  423. movq %rax,%rbx
  424. .Lcmov4:
  425. addb %al,%dl
  426. xorb (%rdi,%rdx,1),%r9b
  427. rorl $8,%r9d
  428. addb %bl,%cl
  429. leaq 1(%rsi),%r10
  430. movzbl (%rdi,%rcx,1),%edx
  431. movzbl %r10b,%r10d
  432. movzbl (%rdi,%r10,1),%eax
  433. movb %bl,(%rdi,%rcx,1)
  434. cmpq %r10,%rcx
  435. movb %dl,(%rdi,%rsi,1)
  436. jne .Lcmov5
  437. movq %rbx,%rax
  438. .Lcmov5:
  439. addb %bl,%dl
  440. xorb (%rdi,%rdx,1),%r9b
  441. rorl $8,%r9d
  442. addb %al,%cl
  443. leaq 1(%r10),%rsi
  444. movzbl (%rdi,%rcx,1),%edx
  445. movzbl %sil,%esi
  446. movzbl (%rdi,%rsi,1),%ebx
  447. movb %al,(%rdi,%rcx,1)
  448. cmpq %rsi,%rcx
  449. movb %dl,(%rdi,%r10,1)
  450. jne .Lcmov6
  451. movq %rax,%rbx
  452. .Lcmov6:
  453. addb %al,%dl
  454. xorb (%rdi,%rdx,1),%r9b
  455. rorl $8,%r9d
  456. addb %bl,%cl
  457. leaq 1(%rsi),%r10
  458. movzbl (%rdi,%rcx,1),%edx
  459. movzbl %r10b,%r10d
  460. movzbl (%rdi,%r10,1),%eax
  461. movb %bl,(%rdi,%rcx,1)
  462. cmpq %r10,%rcx
  463. movb %dl,(%rdi,%rsi,1)
  464. jne .Lcmov7
  465. movq %rbx,%rax
  466. .Lcmov7:
  467. addb %bl,%dl
  468. xorb (%rdi,%rdx,1),%r9b
  469. rorl $8,%r9d
  470. leaq -8(%r11),%r11
  471. movl %r8d,(%r13)
  472. leaq 8(%r12),%r12
  473. movl %r9d,4(%r13)
  474. leaq 8(%r13),%r13
  475. testq $-8,%r11
  476. jnz .Lcloop8
  477. cmpq $0,%r11
  478. jne .Lcloop1
  479. jmp .Lexit
  480. .align 16
  481. .Lcloop1:
  482. addb %al,%cl
  483. movzbl %cl,%ecx
  484. movzbl (%rdi,%rcx,1),%edx
  485. movb %al,(%rdi,%rcx,1)
  486. movb %dl,(%rdi,%r10,1)
  487. addb %al,%dl
  488. addb $1,%r10b
  489. movzbl %dl,%edx
  490. movzbl %r10b,%r10d
  491. movzbl (%rdi,%rdx,1),%edx
  492. movzbl (%rdi,%r10,1),%eax
  493. xorb (%r12),%dl
  494. leaq 1(%r12),%r12
  495. movb %dl,(%r13)
  496. leaq 1(%r13),%r13
  497. subq $1,%r11
  498. jnz .Lcloop1
  499. jmp .Lexit
  500. .align 16
  501. .Lexit:
  502. subb $1,%r10b
  503. movl %r10d,-8(%rdi)
  504. movl %ecx,-4(%rdi)
  505. movq (%rsp),%r13
  506. .cfi_restore %r13
  507. movq 8(%rsp),%r12
  508. .cfi_restore %r12
  509. movq 16(%rsp),%rbx
  510. .cfi_restore %rbx
  511. addq $24,%rsp
  512. .cfi_adjust_cfa_offset -24
  513. .Lepilogue:
  514. .byte 0xf3,0xc3
  515. .cfi_endproc
  516. .size RC4,.-RC4
  517. .globl RC4_set_key
  518. .type RC4_set_key,@function
  519. .align 16
  520. RC4_set_key:
  521. .cfi_startproc
  522. leaq 8(%rdi),%rdi
  523. leaq (%rdx,%rsi,1),%rdx
  524. negq %rsi
  525. movq %rsi,%rcx
  526. xorl %eax,%eax
  527. xorq %r9,%r9
  528. xorq %r10,%r10
  529. xorq %r11,%r11
  530. movl OPENSSL_ia32cap_P(%rip),%r8d
  531. btl $20,%r8d
  532. jc .Lc1stloop
  533. jmp .Lw1stloop
  534. .align 16
  535. .Lw1stloop:
  536. movl %eax,(%rdi,%rax,4)
  537. addb $1,%al
  538. jnc .Lw1stloop
  539. xorq %r9,%r9
  540. xorq %r8,%r8
  541. .align 16
  542. .Lw2ndloop:
  543. movl (%rdi,%r9,4),%r10d
  544. addb (%rdx,%rsi,1),%r8b
  545. addb %r10b,%r8b
  546. addq $1,%rsi
  547. movl (%rdi,%r8,4),%r11d
  548. cmovzq %rcx,%rsi
  549. movl %r10d,(%rdi,%r8,4)
  550. movl %r11d,(%rdi,%r9,4)
  551. addb $1,%r9b
  552. jnc .Lw2ndloop
  553. jmp .Lexit_key
  554. .align 16
  555. .Lc1stloop:
  556. movb %al,(%rdi,%rax,1)
  557. addb $1,%al
  558. jnc .Lc1stloop
  559. xorq %r9,%r9
  560. xorq %r8,%r8
  561. .align 16
  562. .Lc2ndloop:
  563. movb (%rdi,%r9,1),%r10b
  564. addb (%rdx,%rsi,1),%r8b
  565. addb %r10b,%r8b
  566. addq $1,%rsi
  567. movb (%rdi,%r8,1),%r11b
  568. jnz .Lcnowrap
  569. movq %rcx,%rsi
  570. .Lcnowrap:
  571. movb %r10b,(%rdi,%r8,1)
  572. movb %r11b,(%rdi,%r9,1)
  573. addb $1,%r9b
  574. jnc .Lc2ndloop
  575. movl $-1,256(%rdi)
  576. .align 16
  577. .Lexit_key:
  578. xorl %eax,%eax
  579. movl %eax,-8(%rdi)
  580. movl %eax,-4(%rdi)
  581. .byte 0xf3,0xc3
  582. .cfi_endproc
  583. .size RC4_set_key,.-RC4_set_key
  584. .globl RC4_options
  585. .type RC4_options,@function
  586. .align 16
  587. RC4_options:
  588. .cfi_startproc
  589. leaq .Lopts(%rip),%rax
  590. movl OPENSSL_ia32cap_P(%rip),%edx
  591. btl $20,%edx
  592. jc .L8xchar
  593. btl $30,%edx
  594. jnc .Ldone
  595. addq $25,%rax
  596. .byte 0xf3,0xc3
  597. .L8xchar:
  598. addq $12,%rax
  599. .Ldone:
  600. .byte 0xf3,0xc3
  601. .cfi_endproc
  602. .align 64
  603. .Lopts:
  604. .byte 114,99,52,40,56,120,44,105,110,116,41,0
  605. .byte 114,99,52,40,56,120,44,99,104,97,114,41,0
  606. .byte 114,99,52,40,49,54,120,44,105,110,116,41,0
  607. .byte 82,67,52,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
  608. .align 64
  609. .size RC4_options,.-RC4_options