summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bn/asm/bn-586.pl
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/bn/asm/bn-586.pl')
-rw-r--r--src/lib/libcrypto/bn/asm/bn-586.pl210
1 files changed, 0 insertions, 210 deletions
diff --git a/src/lib/libcrypto/bn/asm/bn-586.pl b/src/lib/libcrypto/bn/asm/bn-586.pl
index b502fe60ee..71b775af8d 100644
--- a/src/lib/libcrypto/bn/asm/bn-586.pl
+++ b/src/lib/libcrypto/bn/asm/bn-586.pl
@@ -17,7 +17,6 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
17&bn_div_words("bn_div_words"); 17&bn_div_words("bn_div_words");
18&bn_add_words("bn_add_words"); 18&bn_add_words("bn_add_words");
19&bn_sub_words("bn_sub_words"); 19&bn_sub_words("bn_sub_words");
20&bn_sub_part_words("bn_sub_part_words");
21 20
22&asm_finish(); 21&asm_finish();
23 22
@@ -566,212 +565,3 @@ sub bn_sub_words
566 565
567 &function_end($name); 566 &function_end($name);
568 } 567 }
569
570sub bn_sub_part_words
571 {
572 local($name)=@_;
573
574 &function_begin($name,"");
575
576 &comment("");
577 $a="esi";
578 $b="edi";
579 $c="eax";
580 $r="ebx";
581 $tmp1="ecx";
582 $tmp2="edx";
583 $num="ebp";
584
585 &mov($r,&wparam(0)); # get r
586 &mov($a,&wparam(1)); # get a
587 &mov($b,&wparam(2)); # get b
588 &mov($num,&wparam(3)); # get num
589 &xor($c,$c); # clear carry
590 &and($num,0xfffffff8); # num / 8
591
592 &jz(&label("aw_finish"));
593
594 &set_label("aw_loop",0);
595 for ($i=0; $i<8; $i++)
596 {
597 &comment("Round $i");
598
599 &mov($tmp1,&DWP($i*4,$a,"",0)); # *a
600 &mov($tmp2,&DWP($i*4,$b,"",0)); # *b
601 &sub($tmp1,$c);
602 &mov($c,0);
603 &adc($c,$c);
604 &sub($tmp1,$tmp2);
605 &adc($c,0);
606 &mov(&DWP($i*4,$r,"",0),$tmp1); # *r
607 }
608
609 &comment("");
610 &add($a,32);
611 &add($b,32);
612 &add($r,32);
613 &sub($num,8);
614 &jnz(&label("aw_loop"));
615
616 &set_label("aw_finish",0);
617 &mov($num,&wparam(3)); # get num
618 &and($num,7);
619 &jz(&label("aw_end"));
620
621 for ($i=0; $i<7; $i++)
622 {
623 &comment("Tail Round $i");
624 &mov($tmp1,&DWP(0,$a,"",0)); # *a
625 &mov($tmp2,&DWP(0,$b,"",0));# *b
626 &sub($tmp1,$c);
627 &mov($c,0);
628 &adc($c,$c);
629 &sub($tmp1,$tmp2);
630 &adc($c,0);
631 &mov(&DWP(0,$r,"",0),$tmp1); # *r
632 &add($a, 4);
633 &add($b, 4);
634 &add($r, 4);
635 &dec($num) if ($i != 6);
636 &jz(&label("aw_end")) if ($i != 6);
637 }
638 &set_label("aw_end",0);
639
640 &cmp(&wparam(4),0);
641 &je(&label("pw_end"));
642
643 &mov($num,&wparam(4)); # get dl
644 &cmp($num,0);
645 &je(&label("pw_end"));
646 &jge(&label("pw_pos"));
647
648 &comment("pw_neg");
649 &mov($tmp2,0);
650 &sub($tmp2,$num);
651 &mov($num,$tmp2);
652 &and($num,0xfffffff8); # num / 8
653 &jz(&label("pw_neg_finish"));
654
655 &set_label("pw_neg_loop",0);
656 for ($i=0; $i<8; $i++)
657 {
658 &comment("dl<0 Round $i");
659
660 &mov($tmp1,0);
661 &mov($tmp2,&DWP($i*4,$b,"",0)); # *b
662 &sub($tmp1,$c);
663 &mov($c,0);
664 &adc($c,$c);
665 &sub($tmp1,$tmp2);
666 &adc($c,0);
667 &mov(&DWP($i*4,$r,"",0),$tmp1); # *r
668 }
669
670 &comment("");
671 &add($b,32);
672 &add($r,32);
673 &sub($num,8);
674 &jnz(&label("pw_neg_loop"));
675
676 &set_label("pw_neg_finish",0);
677 &mov($tmp2,&wparam(4)); # get dl
678 &mov($num,0);
679 &sub($num,$tmp2);
680 &and($num,7);
681 &jz(&label("pw_end"));
682
683 for ($i=0; $i<7; $i++)
684 {
685 &comment("dl<0 Tail Round $i");
686 &mov($tmp1,0);
687 &mov($tmp2,&DWP($i*4,$b,"",0));# *b
688 &sub($tmp1,$c);
689 &mov($c,0);
690 &adc($c,$c);
691 &sub($tmp1,$tmp2);
692 &adc($c,0);
693 &dec($num) if ($i != 6);
694 &mov(&DWP($i*4,$r,"",0),$tmp1); # *r
695 &jz(&label("pw_end")) if ($i != 6);
696 }
697
698 &jmp(&label("pw_end"));
699
700 &set_label("pw_pos",0);
701
702 &and($num,0xfffffff8); # num / 8
703 &jz(&label("pw_pos_finish"));
704
705 &set_label("pw_pos_loop",0);
706
707 for ($i=0; $i<8; $i++)
708 {
709 &comment("dl>0 Round $i");
710
711 &mov($tmp1,&DWP($i*4,$a,"",0)); # *a
712 &sub($tmp1,$c);
713 &mov(&DWP($i*4,$r,"",0),$tmp1); # *r
714 &jnc(&label("pw_nc".$i));
715 }
716
717 &comment("");
718 &add($a,32);
719 &add($r,32);
720 &sub($num,8);
721 &jnz(&label("pw_pos_loop"));
722
723 &set_label("pw_pos_finish",0);
724 &mov($num,&wparam(4)); # get dl
725 &and($num,7);
726 &jz(&label("pw_end"));
727
728 for ($i=0; $i<7; $i++)
729 {
730 &comment("dl>0 Tail Round $i");
731 &mov($tmp1,&DWP($i*4,$a,"",0)); # *a
732 &sub($tmp1,$c);
733 &mov(&DWP($i*4,$r,"",0),$tmp1); # *r
734 &jnc(&label("pw_tail_nc".$i));
735 &dec($num) if ($i != 6);
736 &jz(&label("pw_end")) if ($i != 6);
737 }
738 &mov($c,1);
739 &jmp(&label("pw_end"));
740
741 &set_label("pw_nc_loop",0);
742 for ($i=0; $i<8; $i++)
743 {
744 &mov($tmp1,&DWP($i*4,$a,"",0)); # *a
745 &mov(&DWP($i*4,$r,"",0),$tmp1); # *r
746 &set_label("pw_nc".$i,0);
747 }
748
749 &comment("");
750 &add($a,32);
751 &add($r,32);
752 &sub($num,8);
753 &jnz(&label("pw_nc_loop"));
754
755 &mov($num,&wparam(4)); # get dl
756 &and($num,7);
757 &jz(&label("pw_nc_end"));
758
759 for ($i=0; $i<7; $i++)
760 {
761 &mov($tmp1,&DWP($i*4,$a,"",0)); # *a
762 &mov(&DWP($i*4,$r,"",0),$tmp1); # *r
763 &set_label("pw_tail_nc".$i,0);
764 &dec($num) if ($i != 6);
765 &jz(&label("pw_nc_end")) if ($i != 6);
766 }
767
768 &set_label("pw_nc_end",0);
769 &mov($c,0);
770
771 &set_label("pw_end",0);
772
773# &mov("eax",$c); # $c is "eax"
774
775 &function_end($name);
776 }
777