and added files
[bcm963xx.git] / userapps / opensource / openssl / crypto / bn / asm / alpha / sqr_c4.pl
1 #!/usr/local/bin/perl
2 # alpha assember 
3
4 sub sqr_add_c
5         {
6         local($a,$c0,$c1,$c2)=@_;
7         local($l1,$h1,$t1,$t2);
8
9         &mul($a,$a,($l1)=&NR(1));
10         &muh($a,$a,($h1)=&NR(1));
11         &add($c0,$l1,$c0);
12         &add($c1,$h1,$c1);
13         &cmpult($c0,$l1,($t1)=&NR(1));  &FR($l1);
14         &cmpult($c1,$h1,($t2)=&NR(1));  &FR($h1);
15         &add($c1,$t1,$c1);              &FR($t1);
16         &add($c2,$t2,$c2);              &FR($t2);
17         }
18
19 sub sqr_add_c2
20         {
21         local($a,$b,$c0,$c1,$c2)=@_;
22         local($l1,$h1,$t1,$t2);
23
24         &mul($a,$b,($l1)=&NR(1));
25         &muh($a,$b,($h1)=&NR(1));
26         &cmplt($l1,"zero",($lc1)=&NR(1));
27         &cmplt($h1,"zero",($hc1)=&NR(1));
28         &add($l1,$l1,$l1);
29         &add($h1,$h1,$h1);
30         &add($h1,$lc1,$h1);             &FR($lc1);
31         &add($c2,$hc1,$c2);             &FR($hc1);
32
33         &add($c0,$l1,$c0);
34         &add($c1,$h1,$c1);
35         &cmpult($c0,$l1,($lc1)=&NR(1)); &FR($l1);
36         &cmpult($c1,$h1,($hc1)=&NR(1)); &FR($h1);
37
38         &add($c1,$lc1,$c1);             &FR($lc1);
39         &add($c2,$hc1,$c2);             &FR($hc1);
40         }
41
42
43 sub bn_sqr_comba4
44         {
45         local($name)=@_;
46         local(@a,@b,$r,$c0,$c1,$c2);
47
48         $cnt=1;
49         &init_pool(2);
50
51         $rp=&wparam(0);
52         $ap=&wparam(1);
53
54         &function_begin($name,"");
55
56         &comment("");
57
58         &ld(($a[0])=&NR(1),&QWPw(0,$ap));
59         &ld(($a[1])=&NR(1),&QWPw(1,$ap));
60         &ld(($a[2])=&NR(1),&QWPw(2,$ap));
61         &ld(($a[3])=&NR(1),&QWPw(3,$ap)); &FR($ap);
62
63         ($c0,$c1,$c2)=&NR(3);
64
65         &mov("zero",$c2);
66         &mul($a[0],$a[0],$c0);
67         &muh($a[0],$a[0],$c1);
68         &st($c0,&QWPw(0,$rp));
69         ($c0,$c1,$c2)=($c1,$c2,$c0);
70         &mov("zero",$c2);
71
72         &sqr_add_c2($a[0],$a[1],$c0,$c1,$c2);
73         &st($c0,&QWPw(1,$rp));
74         ($c0,$c1,$c2)=($c1,$c2,$c0);
75         &mov("zero",$c2);
76
77         &sqr_add_c($a[1],$c0,$c1,$c2);
78         &sqr_add_c2($a[2],$a[0],$c0,$c1,$c2);
79         &st($c0,&QWPw(2,$rp));
80         ($c0,$c1,$c2)=($c1,$c2,$c0);
81         &mov("zero",$c2);
82
83         &sqr_add_c2($a[3],$a[0],$c0,$c1,$c2);
84         &sqr_add_c2($a[2],$a[1],$c0,$c1,$c2);
85         &st($c0,&QWPw(3,$rp));
86         ($c0,$c1,$c2)=($c1,$c2,$c0);
87         &mov("zero",$c2);
88
89         &sqr_add_c($a[2],$c0,$c1,$c2);
90         &sqr_add_c2($a[3],$a[1],$c0,$c1,$c2);
91         &st($c0,&QWPw(4,$rp));
92         ($c0,$c1,$c2)=($c1,$c2,$c0);
93         &mov("zero",$c2);
94
95         &sqr_add_c2($a[3],$a[2],$c0,$c1,$c2);
96         &st($c0,&QWPw(5,$rp));
97         ($c0,$c1,$c2)=($c1,$c2,$c0);
98         &mov("zero",$c2);
99
100         &sqr_add_c($a[3],$c0,$c1,$c2);
101         &st($c0,&QWPw(6,$rp));
102         &st($c1,&QWPw(7,$rp));
103
104         &function_end($name);
105
106         &fin_pool;
107         }
108
109 1;