and added files
[bcm963xx.git] / userapps / opensource / openssl / crypto / bn / asm / alpha / add.pl
1 #!/usr/local/bin/perl
2 # alpha assember 
3
4 sub bn_add_words
5         {
6         local($name)=@_;
7         local($cc,$a,$b,$r);
8
9         &init_pool(4);
10         ($cc)=GR("r0");
11
12         $rp=&wparam(0);
13         $ap=&wparam(1);
14         $bp=&wparam(2);
15         $count=&wparam(3);
16
17         &function_begin($name,"");
18
19         &comment("");
20         &sub($count,4,$count);
21          &mov("zero",$cc);
22         &blt($count,&label("finish"));
23
24         ($a0,$b0)=&NR(2);
25
26 ##########################################################
27         &set_label("loop");
28
29         &ld(($a0)=&NR(1),&QWPw(0,$ap));
30          &ld(($b0)=&NR(1),&QWPw(0,$bp));
31         &ld(($a1)=&NR(1),&QWPw(1,$ap));
32          &ld(($b1)=&NR(1),&QWPw(1,$bp));
33
34         ($o0,$t0)=&NR(2);
35         &add($a0,$b0,$o0); 
36          &ld(($a2)=&NR(1),&QWPw(2,$ap));
37         &cmpult($o0,$b0,$t0);
38          &add($o0,$cc,$o0);
39         &cmpult($o0,$cc,$cc);
40          &ld(($b2)=&NR(1),&QWPw(2,$bp));
41         &add($cc,$t0,$cc);      &FR($t0);
42
43         ($t1,$o1)=&NR(2);
44
45          &add($a1,$b1,$o1);     &FR($a1);
46         &cmpult($o1,$b1,$t1);   &FR($b1);
47          &add($o1,$cc,$o1);
48         &cmpult($o1,$cc,$cc);
49          &ld(($a3)=&NR(1),&QWPw(3,$ap));
50         &add($cc,$t1,$cc);      &FR($t1);
51
52         ($t2,$o2)=&NR(2);
53
54          &add($a2,$b2,$o2);     &FR($a2);
55         &cmpult($o2,$b2,$t2);   &FR($b2);
56          &add($o2,$cc,$o2);
57         &cmpult($o2,$cc,$cc);
58          &ld(($b3)=&NR(1),&QWPw(3,$bp));
59         &st($o0,&QWPw(0,$rp)); &FR($o0);
60          &add($cc,$t2,$cc);     &FR($t2);
61
62         ($t3,$o3)=&NR(2);
63
64         &st($o1,&QWPw(0,$rp)); &FR($o1);
65          &add($a3,$b3,$o3);     &FR($a3);
66         &cmpult($o3,$b3,$t3);   &FR($b3);
67          &add($o3,$cc,$o3);
68         &st($o2,&QWPw(0,$rp)); &FR($o2);
69          &cmpult($o3,$cc,$cc);
70         &st($o3,&QWPw(0,$rp)); &FR($o3);
71          &add($cc,$t3,$cc);     &FR($t3);
72
73
74         &sub($count,4,$count);  # count-=4
75          &add($ap,4*$QWS,$ap);  # count+=4
76         &add($bp,4*$QWS,$bp);   # count+=4
77          &add($rp,4*$QWS,$rp);  # count+=4
78
79         ###
80          &bge($count,&label("loop"));
81         ###
82         &br(&label("finish"));
83 ##################################################
84         # Do the last 0..3 words
85
86         ($t0,$o0)=&NR(2);
87         &set_label("last_loop");
88
89         &ld($a0,&QWPw(0,$ap));  # get a
90          &ld($b0,&QWPw(0,$bp)); # get b
91         &add($ap,$QWS,$ap);
92          &add($bp,$QWS,$bp);
93         &add($a0,$b0,$o0); 
94          &sub($count,1,$count);
95         &cmpult($o0,$b0,$t0);   # will we borrow?
96          &add($o0,$cc,$o0);     # will we borrow?
97         &cmpult($o0,$cc,$cc);   # will we borrow?
98          &add($rp,$QWS,$rp);
99         &st($o0,&QWPw(-1,$rp)); # save
100          &add($cc,$t0,$cc);     # add the borrows
101
102         ###
103          &bgt($count,&label("last_loop"));
104         &function_end_A($name);
105
106 ######################################################
107         &set_label("finish");
108         &add($count,4,$count);
109          &bgt($count,&label("last_loop"));
110
111         &FR($o0,$t0,$a0,$b0);
112         &set_label("end");
113         &function_end($name);
114
115         &fin_pool;
116         }
117
118 1;