1 # $FreeBSD$ 2.file "rc5-586.s" 3.text 4.globl RC5_32_encrypt 5.type RC5_32_encrypt,@function 6.align 16 7RC5_32_encrypt: 8.L_RC5_32_encrypt_begin: 9 10 pushl %ebp 11 pushl %esi 12 pushl %edi 13 movl 16(%esp),%edx 14 movl 20(%esp),%ebp 15 16 movl (%edx),%edi 17 movl 4(%edx),%esi 18 pushl %ebx 19 movl (%ebp),%ebx 20 addl 4(%ebp),%edi 21 addl 8(%ebp),%esi 22 xorl %esi,%edi 23 movl 12(%ebp),%eax 24 movl %esi,%ecx 25 roll %cl,%edi 26 addl %eax,%edi 27 xorl %edi,%esi 28 movl 16(%ebp),%eax 29 movl %edi,%ecx 30 roll %cl,%esi 31 addl %eax,%esi 32 xorl %esi,%edi 33 movl 20(%ebp),%eax 34 movl %esi,%ecx 35 roll %cl,%edi 36 addl %eax,%edi 37 xorl %edi,%esi 38 movl 24(%ebp),%eax 39 movl %edi,%ecx 40 roll %cl,%esi 41 addl %eax,%esi 42 xorl %esi,%edi 43 movl 28(%ebp),%eax 44 movl %esi,%ecx 45 roll %cl,%edi 46 addl %eax,%edi 47 xorl %edi,%esi 48 movl 32(%ebp),%eax 49 movl %edi,%ecx 50 roll %cl,%esi 51 addl %eax,%esi 52 xorl %esi,%edi 53 movl 36(%ebp),%eax 54 movl %esi,%ecx 55 roll %cl,%edi 56 addl %eax,%edi 57 xorl %edi,%esi 58 movl 40(%ebp),%eax 59 movl %edi,%ecx 60 roll %cl,%esi 61 addl %eax,%esi 62 xorl %esi,%edi 63 movl 44(%ebp),%eax 64 movl %esi,%ecx 65 roll %cl,%edi 66 addl %eax,%edi 67 xorl %edi,%esi 68 movl 48(%ebp),%eax 69 movl %edi,%ecx 70 roll %cl,%esi 71 addl %eax,%esi 72 xorl %esi,%edi 73 movl 52(%ebp),%eax 74 movl %esi,%ecx 75 roll %cl,%edi 76 addl %eax,%edi 77 xorl %edi,%esi 78 movl 56(%ebp),%eax 79 movl %edi,%ecx 80 roll %cl,%esi 81 addl %eax,%esi 82 xorl %esi,%edi 83 movl 60(%ebp),%eax 84 movl %esi,%ecx 85 roll %cl,%edi 86 addl %eax,%edi 87 xorl %edi,%esi 88 movl 64(%ebp),%eax 89 movl %edi,%ecx 90 roll %cl,%esi 91 addl %eax,%esi 92 xorl %esi,%edi 93 movl 68(%ebp),%eax 94 movl %esi,%ecx 95 roll %cl,%edi 96 addl %eax,%edi 97 xorl %edi,%esi 98 movl 72(%ebp),%eax 99 movl %edi,%ecx 100 roll %cl,%esi 101 addl %eax,%esi 102 cmpl $8,%ebx 103 je .L000rc5_exit 104 xorl %esi,%edi 105 movl 76(%ebp),%eax 106 movl %esi,%ecx 107 roll %cl,%edi 108 addl %eax,%edi 109 xorl %edi,%esi 110 movl 80(%ebp),%eax 111 movl %edi,%ecx 112 roll %cl,%esi 113 addl %eax,%esi 114 xorl %esi,%edi 115 movl 84(%ebp),%eax 116 movl %esi,%ecx 117 roll %cl,%edi 118 addl %eax,%edi 119 xorl %edi,%esi 120 movl 88(%ebp),%eax 121 movl %edi,%ecx 122 roll %cl,%esi 123 addl %eax,%esi 124 xorl %esi,%edi 125 movl 92(%ebp),%eax 126 movl %esi,%ecx 127 roll %cl,%edi 128 addl %eax,%edi 129 xorl %edi,%esi 130 movl 96(%ebp),%eax 131 movl %edi,%ecx 132 roll %cl,%esi 133 addl %eax,%esi 134 xorl %esi,%edi 135 movl 100(%ebp),%eax 136 movl %esi,%ecx 137 roll %cl,%edi 138 addl %eax,%edi 139 xorl %edi,%esi 140 movl 104(%ebp),%eax 141 movl %edi,%ecx 142 roll %cl,%esi 143 addl %eax,%esi 144 cmpl $12,%ebx 145 je .L000rc5_exit 146 xorl %esi,%edi 147 movl 108(%ebp),%eax 148 movl %esi,%ecx 149 roll %cl,%edi 150 addl %eax,%edi 151 xorl %edi,%esi 152 movl 112(%ebp),%eax 153 movl %edi,%ecx 154 roll %cl,%esi 155 addl %eax,%esi 156 xorl %esi,%edi 157 movl 116(%ebp),%eax 158 movl %esi,%ecx 159 roll %cl,%edi 160 addl %eax,%edi 161 xorl %edi,%esi 162 movl 120(%ebp),%eax 163 movl %edi,%ecx 164 roll %cl,%esi 165 addl %eax,%esi 166 xorl %esi,%edi 167 movl 124(%ebp),%eax 168 movl %esi,%ecx 169 roll %cl,%edi 170 addl %eax,%edi 171 xorl %edi,%esi 172 movl 128(%ebp),%eax 173 movl %edi,%ecx 174 roll %cl,%esi 175 addl %eax,%esi 176 xorl %esi,%edi 177 movl 132(%ebp),%eax 178 movl %esi,%ecx 179 roll %cl,%edi 180 addl %eax,%edi 181 xorl %edi,%esi 182 movl 136(%ebp),%eax 183 movl %edi,%ecx 184 roll %cl,%esi 185 addl %eax,%esi 186.L000rc5_exit: 187 movl %edi,(%edx) 188 movl %esi,4(%edx) 189 popl %ebx 190 popl %edi 191 popl %esi 192 popl %ebp 193 ret 194.size RC5_32_encrypt,.-.L_RC5_32_encrypt_begin 195.globl RC5_32_decrypt 196.type RC5_32_decrypt,@function 197.align 16 198RC5_32_decrypt: 199.L_RC5_32_decrypt_begin: 200 201 pushl %ebp 202 pushl %esi 203 pushl %edi 204 movl 16(%esp),%edx 205 movl 20(%esp),%ebp 206 207 movl (%edx),%edi 208 movl 4(%edx),%esi 209 pushl %ebx 210 movl (%ebp),%ebx 211 cmpl $12,%ebx 212 je .L001rc5_dec_12 213 cmpl $8,%ebx 214 je .L002rc5_dec_8 215 movl 136(%ebp),%eax 216 subl %eax,%esi 217 movl %edi,%ecx 218 rorl %cl,%esi 219 xorl %edi,%esi 220 movl 132(%ebp),%eax 221 subl %eax,%edi 222 movl %esi,%ecx 223 rorl %cl,%edi 224 xorl %esi,%edi 225 movl 128(%ebp),%eax 226 subl %eax,%esi 227 movl %edi,%ecx 228 rorl %cl,%esi 229 xorl %edi,%esi 230 movl 124(%ebp),%eax 231 subl %eax,%edi 232 movl %esi,%ecx 233 rorl %cl,%edi 234 xorl %esi,%edi 235 movl 120(%ebp),%eax 236 subl %eax,%esi 237 movl %edi,%ecx 238 rorl %cl,%esi 239 xorl %edi,%esi 240 movl 116(%ebp),%eax 241 subl %eax,%edi 242 movl %esi,%ecx 243 rorl %cl,%edi 244 xorl %esi,%edi 245 movl 112(%ebp),%eax 246 subl %eax,%esi 247 movl %edi,%ecx 248 rorl %cl,%esi 249 xorl %edi,%esi 250 movl 108(%ebp),%eax 251 subl %eax,%edi 252 movl %esi,%ecx 253 rorl %cl,%edi 254 xorl %esi,%edi 255.L001rc5_dec_12: 256 movl 104(%ebp),%eax 257 subl %eax,%esi 258 movl %edi,%ecx 259 rorl %cl,%esi 260 xorl %edi,%esi 261 movl 100(%ebp),%eax 262 subl %eax,%edi 263 movl %esi,%ecx 264 rorl %cl,%edi 265 xorl %esi,%edi 266 movl 96(%ebp),%eax 267 subl %eax,%esi 268 movl %edi,%ecx 269 rorl %cl,%esi 270 xorl %edi,%esi 271 movl 92(%ebp),%eax 272 subl %eax,%edi 273 movl %esi,%ecx 274 rorl %cl,%edi 275 xorl %esi,%edi 276 movl 88(%ebp),%eax 277 subl %eax,%esi 278 movl %edi,%ecx 279 rorl %cl,%esi 280 xorl %edi,%esi 281 movl 84(%ebp),%eax 282 subl %eax,%edi 283 movl %esi,%ecx 284 rorl %cl,%edi 285 xorl %esi,%edi 286 movl 80(%ebp),%eax 287 subl %eax,%esi 288 movl %edi,%ecx 289 rorl %cl,%esi 290 xorl %edi,%esi 291 movl 76(%ebp),%eax 292 subl %eax,%edi 293 movl %esi,%ecx 294 rorl %cl,%edi 295 xorl %esi,%edi 296.L002rc5_dec_8: 297 movl 72(%ebp),%eax 298 subl %eax,%esi 299 movl %edi,%ecx 300 rorl %cl,%esi 301 xorl %edi,%esi 302 movl 68(%ebp),%eax 303 subl %eax,%edi 304 movl %esi,%ecx 305 rorl %cl,%edi 306 xorl %esi,%edi 307 movl 64(%ebp),%eax 308 subl %eax,%esi 309 movl %edi,%ecx 310 rorl %cl,%esi 311 xorl %edi,%esi 312 movl 60(%ebp),%eax 313 subl %eax,%edi 314 movl %esi,%ecx 315 rorl %cl,%edi 316 xorl %esi,%edi 317 movl 56(%ebp),%eax 318 subl %eax,%esi 319 movl %edi,%ecx 320 rorl %cl,%esi 321 xorl %edi,%esi 322 movl 52(%ebp),%eax 323 subl %eax,%edi 324 movl %esi,%ecx 325 rorl %cl,%edi 326 xorl %esi,%edi 327 movl 48(%ebp),%eax 328 subl %eax,%esi 329 movl %edi,%ecx 330 rorl %cl,%esi 331 xorl %edi,%esi 332 movl 44(%ebp),%eax 333 subl %eax,%edi 334 movl %esi,%ecx 335 rorl %cl,%edi 336 xorl %esi,%edi 337 movl 40(%ebp),%eax 338 subl %eax,%esi 339 movl %edi,%ecx 340 rorl %cl,%esi 341 xorl %edi,%esi 342 movl 36(%ebp),%eax 343 subl %eax,%edi 344 movl %esi,%ecx 345 rorl %cl,%edi 346 xorl %esi,%edi 347 movl 32(%ebp),%eax 348 subl %eax,%esi 349 movl %edi,%ecx 350 rorl %cl,%esi 351 xorl %edi,%esi 352 movl 28(%ebp),%eax 353 subl %eax,%edi 354 movl %esi,%ecx 355 rorl %cl,%edi 356 xorl %esi,%edi 357 movl 24(%ebp),%eax 358 subl %eax,%esi 359 movl %edi,%ecx 360 rorl %cl,%esi 361 xorl %edi,%esi 362 movl 20(%ebp),%eax 363 subl %eax,%edi 364 movl %esi,%ecx 365 rorl %cl,%edi 366 xorl %esi,%edi 367 movl 16(%ebp),%eax 368 subl %eax,%esi 369 movl %edi,%ecx 370 rorl %cl,%esi 371 xorl %edi,%esi 372 movl 12(%ebp),%eax 373 subl %eax,%edi 374 movl %esi,%ecx 375 rorl %cl,%edi 376 xorl %esi,%edi 377 subl 8(%ebp),%esi 378 subl 4(%ebp),%edi 379.L003rc5_exit: 380 movl %edi,(%edx) 381 movl %esi,4(%edx) 382 popl %ebx 383 popl %edi 384 popl %esi 385 popl %ebp 386 ret 387.size RC5_32_decrypt,.-.L_RC5_32_decrypt_begin 388.globl RC5_32_cbc_encrypt 389.type RC5_32_cbc_encrypt,@function 390.align 16 391RC5_32_cbc_encrypt: 392.L_RC5_32_cbc_encrypt_begin: 393 394 pushl %ebp 395 pushl %ebx 396 pushl %esi 397 pushl %edi 398 movl 28(%esp),%ebp 399 400 movl 36(%esp),%ebx 401 movl (%ebx),%esi 402 movl 4(%ebx),%edi 403 pushl %edi 404 pushl %esi 405 pushl %edi 406 pushl %esi 407 movl %esp,%ebx 408 movl 36(%esp),%esi 409 movl 40(%esp),%edi 410 411 movl 56(%esp),%ecx 412 413 movl 48(%esp),%eax 414 pushl %eax 415 pushl %ebx 416 cmpl $0,%ecx 417 jz .L004decrypt 418 andl $4294967288,%ebp 419 movl 8(%esp),%eax 420 movl 12(%esp),%ebx 421 jz .L005encrypt_finish 422.L006encrypt_loop: 423 movl (%esi),%ecx 424 movl 4(%esi),%edx 425 xorl %ecx,%eax 426 xorl %edx,%ebx 427 movl %eax,8(%esp) 428 movl %ebx,12(%esp) 429 call .L_RC5_32_encrypt_begin 430 movl 8(%esp),%eax 431 movl 12(%esp),%ebx 432 movl %eax,(%edi) 433 movl %ebx,4(%edi) 434 addl $8,%esi 435 addl $8,%edi 436 subl $8,%ebp 437 jnz .L006encrypt_loop 438.L005encrypt_finish: 439 movl 52(%esp),%ebp 440 andl $7,%ebp 441 jz .L007finish 442 call .L008PIC_point 443.L008PIC_point: 444 popl %edx 445 leal .L009cbc_enc_jmp_table-.L008PIC_point(%edx),%ecx 446 movl (%ecx,%ebp,4),%ebp 447 addl %edx,%ebp 448 xorl %ecx,%ecx 449 xorl %edx,%edx 450 jmp *%ebp 451.L010ej7: 452 movb 6(%esi),%dh 453 shll $8,%edx 454.L011ej6: 455 movb 5(%esi),%dh 456.L012ej5: 457 movb 4(%esi),%dl 458.L013ej4: 459 movl (%esi),%ecx 460 jmp .L014ejend 461.L015ej3: 462 movb 2(%esi),%ch 463 shll $8,%ecx 464.L016ej2: 465 movb 1(%esi),%ch 466.L017ej1: 467 movb (%esi),%cl 468.L014ejend: 469 xorl %ecx,%eax 470 xorl %edx,%ebx 471 movl %eax,8(%esp) 472 movl %ebx,12(%esp) 473 call .L_RC5_32_encrypt_begin 474 movl 8(%esp),%eax 475 movl 12(%esp),%ebx 476 movl %eax,(%edi) 477 movl %ebx,4(%edi) 478 jmp .L007finish 479.L004decrypt: 480 andl $4294967288,%ebp 481 movl 16(%esp),%eax 482 movl 20(%esp),%ebx 483 jz .L018decrypt_finish 484.L019decrypt_loop: 485 movl (%esi),%eax 486 movl 4(%esi),%ebx 487 movl %eax,8(%esp) 488 movl %ebx,12(%esp) 489 call .L_RC5_32_decrypt_begin 490 movl 8(%esp),%eax 491 movl 12(%esp),%ebx 492 movl 16(%esp),%ecx 493 movl 20(%esp),%edx 494 xorl %eax,%ecx 495 xorl %ebx,%edx 496 movl (%esi),%eax 497 movl 4(%esi),%ebx 498 movl %ecx,(%edi) 499 movl %edx,4(%edi) 500 movl %eax,16(%esp) 501 movl %ebx,20(%esp) 502 addl $8,%esi 503 addl $8,%edi 504 subl $8,%ebp 505 jnz .L019decrypt_loop 506.L018decrypt_finish: 507 movl 52(%esp),%ebp 508 andl $7,%ebp 509 jz .L007finish 510 movl (%esi),%eax 511 movl 4(%esi),%ebx 512 movl %eax,8(%esp) 513 movl %ebx,12(%esp) 514 call .L_RC5_32_decrypt_begin 515 movl 8(%esp),%eax 516 movl 12(%esp),%ebx 517 movl 16(%esp),%ecx 518 movl 20(%esp),%edx 519 xorl %eax,%ecx 520 xorl %ebx,%edx 521 movl (%esi),%eax 522 movl 4(%esi),%ebx 523.L020dj7: 524 rorl $16,%edx 525 movb %dl,6(%edi) 526 shrl $16,%edx 527.L021dj6: 528 movb %dh,5(%edi) 529.L022dj5: 530 movb %dl,4(%edi) 531.L023dj4: 532 movl %ecx,(%edi) 533 jmp .L024djend 534.L025dj3: 535 rorl $16,%ecx 536 movb %cl,2(%edi) 537 shll $16,%ecx 538.L026dj2: 539 movb %ch,1(%esi) 540.L027dj1: 541 movb %cl,(%esi) 542.L024djend: 543 jmp .L007finish 544.L007finish: 545 movl 60(%esp),%ecx 546 addl $24,%esp 547 movl %eax,(%ecx) 548 movl %ebx,4(%ecx) 549 popl %edi 550 popl %esi 551 popl %ebx 552 popl %ebp 553 ret 554.align 64 555.L009cbc_enc_jmp_table: 556.long 0 557.long .L017ej1-.L008PIC_point 558.long .L016ej2-.L008PIC_point 559.long .L015ej3-.L008PIC_point 560.long .L013ej4-.L008PIC_point 561.long .L012ej5-.L008PIC_point 562.long .L011ej6-.L008PIC_point 563.long .L010ej7-.L008PIC_point 564.align 64 565.size RC5_32_cbc_encrypt,.-.L_RC5_32_cbc_encrypt_begin 566