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